2 ===========================================================================
5 Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company.
7 This file is part of the Doom 3 GPL Source Code (?Doom 3 Source Code?).
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.
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.
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/>.
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.
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.
26 ===========================================================================
29 #ifndef _GEWORKSPACE_H_
30 #define _GEWORKSPACE_H_
32 #ifndef GESELECTIONMGR_H_
33 #include "GESelectionMgr.h"
34 #endif // GESELECTIONMGR_H_
36 #ifndef GEMODIFIERSTACK_H_
37 #include "GEModifierStack.h"
38 #endif // GEMODIFIERSTACK_H_
42 class rvGEClipboardItem
55 enum ESourceControlState
86 rvGEWorkspace ( rvGEApp* app );
89 // Attach the workspace to a win32 window
90 bool Attach ( HWND wnd );
92 // Detach the workspace from the current win32 window
95 bool NewFile ( void );
96 bool LoadFile ( const char* filename, idStr* error = NULL );
97 bool SaveFile ( const char* filename );
98 const char* GetFilename ( void );
100 // Source control methods
101 bool CheckOut ( void );
102 bool CheckIn ( void );
103 bool UndoCheckout ( void );
104 ESourceControlState GetSourceControlState ( void );
106 void Render ( HDC hDC );
108 rvGEApp* GetApplication ( void );
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 );
123 bool CanHide ( void );
124 void ShowHidden ( void );
125 void HideWindow ( idWindow* window );
126 void UnhideWindow ( idWindow* window );
128 EZoomLevel ZoomIn ( void );
129 EZoomLevel ZoomOut ( void );
130 EZoomLevel GetZoom ( void );
131 float GetZoomScale ( void );
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 );
140 void HandleMessage ( UINT msg, WPARAM wParam, LPARAM lParam );
142 idVec2& WindowToWorkspace ( idVec2& point );
143 idVec2& WorkspaceToWindow ( idVec2& point );
144 idRectangle& WindowToWorkspace ( idRectangle& rect );
145 idRectangle& WorkspaceToWindow ( idRectangle& rect );
147 bool IsModified ( void );
150 idWindow* AddWindow ( rvGEWindowWrapper::EWindowType type );
152 // void Cut ( void );
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 );
159 void SetModified ( bool mod );
176 bool SetupPixelFormat ( void );
177 void UpdateSelections ( void );
179 // Additional rendering routines
180 void RenderGrid ( void );
182 // File related methods
183 void WriteTabs ( idFile* file, int depth );
184 bool WriteWindow ( idFile* file, int depth, idWindow* window );
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 );
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 );
209 void AddModifierMoveNudge( float x, float y, bool snap );
210 void AddModifierSizeNudge( float w, float h, bool snap );
211 void AddModifierShowAll ( void );
213 void AddModifiers ( EModifierType type, ... );
214 void AddModifiers ( idWindow* window, EModifierType type, ... );
215 rvGEModifier* CreateModifier ( EModifierType type, idWindow* window, va_list args );
217 idUserInterfaceLocal* mInterface;
231 rvGEModifierStack mModifiers;
232 rvGESelectionMgr mSelections;
234 rvGESelectionMgr::EHitTest mDragType;
241 rvGEApp* mApplication;
243 static idList<rvGEClipboardItem*> mClipboard;
244 idList<idWindow*> mSelectMenu;
245 idVec2 mSelectMenuPos;
249 static bool CleanupEnumProc ( rvGEWindowWrapper* wrapper, void* data );
250 static bool ShowAllEnumProc ( rvGEWindowWrapper* wrapper, void* data );
251 static bool BuildSelectMenuEnumProc ( rvGEWindowWrapper* wrapper, void* data );
257 ESourceControlState mSourceControlState;
263 ID_INLINE rvGEWorkspace::EZoomLevel rvGEWorkspace::GetZoom ( void )
265 return (EZoomLevel)mZoom;
268 ID_INLINE rvGEWorkspace* rvGEWorkspace::GetWorkspace ( HWND wnd )
270 return (rvGEWorkspace*) GetWindowLong ( wnd, GWL_USERDATA );
273 ID_INLINE const char* rvGEWorkspace::GetFilename ( void )
278 ID_INLINE bool rvGEWorkspace::IsModified ( void )
283 ID_INLINE bool rvGEWorkspace::IsNew ( void )
288 ID_INLINE rvGEModifierStack& rvGEWorkspace::GetModifierStack ( void )
293 ID_INLINE rvGESelectionMgr& rvGEWorkspace::GetSelectionMgr ( void )
298 ID_INLINE void rvGEWorkspace::ShowHidden ( void )
300 AddModifierShowAll ( );
303 ID_INLINE void rvGEWorkspace::AddModifierMoveNudge ( float x, float y, bool snap )
305 AddModifierMove ( "Nudge Move", x, y, snap );
308 ID_INLINE void rvGEWorkspace::AddModifierSizeNudge ( float w, float h, bool snap )
310 AddModifierSize ( "Nudge Size", 0, 0, w, h, snap );
313 ID_INLINE idUserInterfaceLocal* rvGEWorkspace::GetInterface ( void )
318 ID_INLINE rvGEApp* rvGEWorkspace::GetApplication ( void )
323 ID_INLINE HWND rvGEWorkspace::GetWindow ( void )
328 ID_INLINE idList<rvGEClipboardItem*> rvGEWorkspace::GetClipboard ( void )
333 ID_INLINE rvGEWorkspace::ESourceControlState rvGEWorkspace::GetSourceControlState ( void )
335 return mSourceControlState;
338 #endif // _GEWORKSPACE_H_