]> icculus.org git repositories - icculus/iodoom3.git/blob - neo/tools/guied/GEWorkspace.h
hello world
[icculus/iodoom3.git] / neo / tools / guied / GEWorkspace.h
1 /*
2 ===========================================================================
3
4 Doom 3 GPL Source Code
5 Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company. 
6
7 This file is part of the Doom 3 GPL Source Code (?Doom 3 Source Code?).  
8
9 Doom 3 Source Code is free software: you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation, either version 3 of the License, or
12 (at your option) any later version.
13
14 Doom 3 Source Code is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with Doom 3 Source Code.  If not, see <http://www.gnu.org/licenses/>.
21
22 In addition, the Doom 3 Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 Source Code.  If not, please request a copy in writing from id Software at the address below.
23
24 If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.
25
26 ===========================================================================
27 */
28
29 #ifndef _GEWORKSPACE_H_
30 #define _GEWORKSPACE_H_
31
32 #ifndef GESELECTIONMGR_H_
33 #include "GESelectionMgr.h"
34 #endif // GESELECTIONMGR_H_
35
36 #ifndef GEMODIFIERSTACK_H_
37 #include "GEModifierStack.h"
38 #endif // GEMODIFIERSTACK_H_
39
40 class rvGEApp;
41
42 class rvGEClipboardItem
43 {
44 public:
45
46         idDict  mStateDict;
47         idDict  mScriptDict;
48         idDict  mVarDict;
49 };
50
51 class rvGEWorkspace
52 {
53 public:
54
55         enum ESourceControlState
56         {
57                 SCS_NONE,
58                 SCS_CHECKEDOUT,
59                 SCS_CHECKEDIN,
60         };
61
62         enum EZoomLevel
63         {
64                 ZOOM_MIN,
65                 ZOOM_25,
66                 ZOOM_33,
67                 ZOOM_50,
68                 ZOOM_66,
69                 ZOOM_100,
70                 ZOOM_150,
71                 ZOOM_200,
72                 ZOOM_300,
73                 ZOOM_MAX
74         };
75         
76         enum EItemAlign
77         {
78                 ALIGN_LEFTS,
79                 ALIGN_CENTERS,
80                 ALIGN_RIGHTS,
81                 ALIGN_TOPS,
82                 ALIGN_MIDDLES,
83                 ALIGN_BOTTOMS,
84         };
85
86         rvGEWorkspace ( rvGEApp* app );
87         ~rvGEWorkspace ( );
88         
89         // Attach the workspace to a win32 window
90         bool                                    Attach                                  ( HWND wnd );
91         
92         // Detach the workspace from the current win32 window
93         void                                    Detach                                  ( void );
94                 
95         bool                                    NewFile                                 ( void );               
96         bool                                    LoadFile                                ( const char* filename, idStr* error = NULL );
97         bool                                    SaveFile                                ( const char* filename );
98         const char*                             GetFilename                             ( void );
99         
100         // Source control methods
101         bool                                    CheckOut                                ( void );
102         bool                                    CheckIn                                 ( void );       
103         bool                                    UndoCheckout                    ( void );
104         ESourceControlState             GetSourceControlState   ( void );       
105         
106         void                                    Render                                  ( HDC hDC );
107
108         rvGEApp*                                GetApplication                  ( void );
109
110         void                                    HideSelected                    ( void );
111         void                                    UnhideSelected                  ( void );
112         void                                    DeleteSelected                  ( void );
113         bool                                    EditSelectedProperties  ( void );
114         bool                                    EditSelectedScripts             ( void );
115         void                                    BringSelectedForward    ( void );
116         void                                    BringSelectedToFront    ( void );
117         void                                    SendSelectedBackward    ( void );
118         void                                    SendSelectedToBack              ( void );
119         void                                    AlignSelected                   ( EItemAlign align );
120         void                                    MakeSelectedSameSize    ( bool width, bool height );
121         void                                    MakeSelectedAChild              ( void );
122
123         bool                                    CanHide                                 ( void );
124         void                                    ShowHidden                              ( void );
125         void                                    HideWindow                              ( idWindow* window );
126         void                                    UnhideWindow                    ( idWindow* window );
127
128         EZoomLevel                              ZoomIn                                  ( void );       
129         EZoomLevel                              ZoomOut                                 ( void );       
130         EZoomLevel                              GetZoom                                 ( void );
131         float                                   GetZoomScale                    ( void );
132         
133         static rvGEWorkspace*           GetWorkspace                    ( HWND wnd );   
134         rvGEModifierStack&                      GetModifierStack                ( void );
135         idUserInterfaceLocal*           GetInterface                    ( void );
136         rvGESelectionMgr&                       GetSelectionMgr                 ( void );
137         idList<rvGEClipboardItem*>      GetClipboard                    ( void );
138         HWND                                            GetWindow                               ( void );
139
140         void                                    HandleMessage                   ( UINT msg, WPARAM wParam, LPARAM lParam );
141         
142         idVec2&                                 WindowToWorkspace               ( idVec2& point );
143         idVec2&                                 WorkspaceToWindow               ( idVec2& point );
144         idRectangle&                    WindowToWorkspace               ( idRectangle& rect );
145         idRectangle&                    WorkspaceToWindow               ( idRectangle& rect );
146         
147         bool                                    IsModified                              ( void );
148         bool                                    IsNew                                   ( void );
149
150         idWindow*                               AddWindow                               ( rvGEWindowWrapper::EWindowType type );
151         
152 //      void                                    Cut                                             ( void );
153         void                                    Copy                                    ( void );
154         void                                    Paste                                   ( void );
155
156         void                                    AddModifierMove                 ( const char* modName, float x, float y, bool snap );
157         void                                    AddModifierSize                 ( const char* modName, float l, float t, float r, float b, bool snap );
158
159         void                                    SetModified                             ( bool mod );
160
161 protected:
162
163         enum EModifierType
164         {
165                 MOD_UNKNOWN,
166                 MOD_DELETE,
167                 MOD_HIDE,
168                 MOD_UNHIDE,
169                 MOD_SHOWHIDDEN,
170                 MOD_SEND_BACKWARD,
171                 MOD_BRING_FORWARD,
172                 MOD_SEND_BACK,
173                 MOD_BRING_FRONT,
174         };
175
176         bool                                    SetupPixelFormat        ( void );
177         void                                    UpdateSelections        ( void );
178
179         // Additional rendering routines
180         void                                    RenderGrid                      ( void );
181
182         // File related methods
183         void                                    WriteTabs                       ( idFile* file, int depth );
184         bool                                    WriteWindow                     ( idFile* file, int depth, idWindow* window );
185
186         // Message handlers
187         int                                             HandleRButtonDown       ( WPARAM wParam, LPARAM lParam );
188         int                                             HandleLButtonDown       ( WPARAM wParam, LPARAM lParam );
189         int                                             HandleLButtonUp         ( WPARAM wParam, LPARAM lParam );
190         int                                             HandleLButtonDblClk     ( WPARAM wParam, LPARAM lParam );
191         int                                             HandleMButtonDown       ( WPARAM wParam, LPARAM lParam );
192         int                                             HandleMButtonUp         ( WPARAM wParam, LPARAM lParam );
193         int                                             HandleMouseMove         ( WPARAM wParam, LPARAM lParam );
194         int                                             HandleKeyDown           ( WPARAM wParam, LPARAM lParam );
195         int                                             HandleScroll            ( int scrollbar, WPARAM wParam, LPARAM lParam );
196         int                                             HandleCommand           ( WPARAM wParam, LPARAM lParam );
197
198         // General protected functions
199         void                                    UpdateScrollbars        ( void );
200         void                                    UpdateRectangle         ( bool useScroll = true );
201         void                                    UpdateCursor            ( void );
202         void                                    UpdateCursor            ( float x, float y );
203         void                                    UpdateCursor            ( rvGESelectionMgr::EHitTest type );
204         void                                    UpdateTitle                     ( void );
205         idWindow*                               NewWindow                       ( idDict* state, rvGEWindowWrapper::EWindowType type );
206         void                                    Scroll                          ( int scrollbar, int offset );
207
208         // Modifier methods
209         void                                    AddModifierMoveNudge( float x, float y, bool snap );
210         void                                    AddModifierSizeNudge( float w, float h, bool snap );
211         void                                    AddModifierShowAll      ( void );
212         
213         void                                    AddModifiers            ( EModifierType type, ... );
214         void                                    AddModifiers            ( idWindow* window, EModifierType type, ... );
215         rvGEModifier*                   CreateModifier          ( EModifierType type, idWindow* window, va_list args );
216
217         idUserInterfaceLocal*           mInterface;
218         HWND                                            mWnd;   
219         
220         int                                                     mZoom;
221         idRectangle                                     mRect;
222         
223         bool                                            mScrollHorz;
224         bool                                            mScrollVert;
225         
226         int                                                     mWindowWidth;
227         int                                                     mWindowHeight;
228         
229         idStr                                           mFilename;
230                 
231         rvGEModifierStack                       mModifiers;
232         rvGESelectionMgr                        mSelections;
233         
234         rvGESelectionMgr::EHitTest      mDragType;
235         idVec2                                          mDragPoint;
236         int                                                     mDragTime;
237         bool                                            mDragX;
238         bool                                            mDragY;
239         bool                                            mDragScroll;
240         
241         rvGEApp*                                        mApplication;
242         
243         static idList<rvGEClipboardItem*>       mClipboard;
244         idList<idWindow*>                                       mSelectMenu;
245         idVec2                                                          mSelectMenuPos;
246
247 private:
248
249         static bool                             CleanupEnumProc                 ( rvGEWindowWrapper* wrapper, void* data );
250         static bool                             ShowAllEnumProc                 ( rvGEWindowWrapper* wrapper, void* data );
251         static bool                             BuildSelectMenuEnumProc ( rvGEWindowWrapper* wrapper, void* data );
252
253         // States
254         bool                                    mModified;
255         bool                                    mNew;
256         bool                                    mDontAdd;
257         ESourceControlState             mSourceControlState;
258         
259         // Resources
260         HCURSOR                                 mHandCursor;
261 };
262
263 ID_INLINE rvGEWorkspace::EZoomLevel rvGEWorkspace::GetZoom ( void )
264 {
265         return (EZoomLevel)mZoom;
266 }
267
268 ID_INLINE rvGEWorkspace* rvGEWorkspace::GetWorkspace ( HWND wnd )
269 {
270         return (rvGEWorkspace*) GetWindowLong ( wnd, GWL_USERDATA );
271 }
272
273 ID_INLINE const char* rvGEWorkspace::GetFilename ( void )
274 {
275         return mFilename;
276 }
277
278 ID_INLINE bool rvGEWorkspace::IsModified ( void )
279 {
280         return mModified;
281 }
282
283 ID_INLINE bool rvGEWorkspace::IsNew ( void )
284 {
285         return mNew;
286 }
287
288 ID_INLINE rvGEModifierStack& rvGEWorkspace::GetModifierStack ( void )
289 {
290         return mModifiers;
291 }
292
293 ID_INLINE rvGESelectionMgr& rvGEWorkspace::GetSelectionMgr ( void )
294 {
295         return mSelections;
296 }
297
298 ID_INLINE void rvGEWorkspace::ShowHidden ( void )
299 {
300         AddModifierShowAll ( );
301 }
302
303 ID_INLINE void rvGEWorkspace::AddModifierMoveNudge ( float x, float y, bool snap )
304 {
305         AddModifierMove ( "Nudge Move", x, y, snap );
306 }
307
308 ID_INLINE void rvGEWorkspace::AddModifierSizeNudge ( float w, float h, bool snap )
309 {
310         AddModifierSize ( "Nudge Size", 0, 0, w, h, snap );
311 }
312
313 ID_INLINE idUserInterfaceLocal* rvGEWorkspace::GetInterface ( void )
314 {
315         return mInterface;
316 }
317
318 ID_INLINE rvGEApp* rvGEWorkspace::GetApplication ( void )
319 {
320         return mApplication;
321 }
322
323 ID_INLINE HWND rvGEWorkspace::GetWindow ( void )
324 {
325         return mWnd;
326 }
327
328 ID_INLINE idList<rvGEClipboardItem*> rvGEWorkspace::GetClipboard ( void )
329 {
330         return mClipboard;
331 }
332
333 ID_INLINE rvGEWorkspace::ESourceControlState rvGEWorkspace::GetSourceControlState ( void )
334 {
335         return mSourceControlState;
336 }
337
338 #endif // _GEWORKSPACE_H_