/* =========================================================================== Doom 3 GPL Source Code Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company. This file is part of the Doom 3 GPL Source Code ("Doom 3 Source Code"). Doom 3 Source Code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Doom 3 Source Code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Doom 3 Source Code. If not, see . 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. 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. =========================================================================== */ #ifndef _GEWORKSPACE_H_ #define _GEWORKSPACE_H_ #ifndef GESELECTIONMGR_H_ #include "GESelectionMgr.h" #endif // GESELECTIONMGR_H_ #ifndef GEMODIFIERSTACK_H_ #include "GEModifierStack.h" #endif // GEMODIFIERSTACK_H_ class rvGEApp; class rvGEClipboardItem { public: idDict mStateDict; idDict mScriptDict; idDict mVarDict; }; class rvGEWorkspace { public: enum ESourceControlState { SCS_NONE, SCS_CHECKEDOUT, SCS_CHECKEDIN, }; enum EZoomLevel { ZOOM_MIN, ZOOM_25, ZOOM_33, ZOOM_50, ZOOM_66, ZOOM_100, ZOOM_150, ZOOM_200, ZOOM_300, ZOOM_MAX }; enum EItemAlign { ALIGN_LEFTS, ALIGN_CENTERS, ALIGN_RIGHTS, ALIGN_TOPS, ALIGN_MIDDLES, ALIGN_BOTTOMS, }; rvGEWorkspace ( rvGEApp* app ); ~rvGEWorkspace ( ); // Attach the workspace to a win32 window bool Attach ( HWND wnd ); // Detach the workspace from the current win32 window void Detach ( void ); bool NewFile ( void ); bool LoadFile ( const char* filename, idStr* error = NULL ); bool SaveFile ( const char* filename ); const char* GetFilename ( void ); // Source control methods bool CheckOut ( void ); bool CheckIn ( void ); bool UndoCheckout ( void ); ESourceControlState GetSourceControlState ( void ); void Render ( HDC hDC ); rvGEApp* GetApplication ( void ); void HideSelected ( void ); void UnhideSelected ( void ); void DeleteSelected ( void ); bool EditSelectedProperties ( void ); bool EditSelectedScripts ( void ); void BringSelectedForward ( void ); void BringSelectedToFront ( void ); void SendSelectedBackward ( void ); void SendSelectedToBack ( void ); void AlignSelected ( EItemAlign align ); void MakeSelectedSameSize ( bool width, bool height ); void MakeSelectedAChild ( void ); bool CanHide ( void ); void ShowHidden ( void ); void HideWindow ( idWindow* window ); void UnhideWindow ( idWindow* window ); EZoomLevel ZoomIn ( void ); EZoomLevel ZoomOut ( void ); EZoomLevel GetZoom ( void ); float GetZoomScale ( void ); static rvGEWorkspace* GetWorkspace ( HWND wnd ); rvGEModifierStack& GetModifierStack ( void ); idUserInterfaceLocal* GetInterface ( void ); rvGESelectionMgr& GetSelectionMgr ( void ); idList GetClipboard ( void ); HWND GetWindow ( void ); void HandleMessage ( UINT msg, WPARAM wParam, LPARAM lParam ); idVec2& WindowToWorkspace ( idVec2& point ); idVec2& WorkspaceToWindow ( idVec2& point ); idRectangle& WindowToWorkspace ( idRectangle& rect ); idRectangle& WorkspaceToWindow ( idRectangle& rect ); bool IsModified ( void ); bool IsNew ( void ); idWindow* AddWindow ( rvGEWindowWrapper::EWindowType type ); // void Cut ( void ); void Copy ( void ); void Paste ( void ); void AddModifierMove ( const char* modName, float x, float y, bool snap ); void AddModifierSize ( const char* modName, float l, float t, float r, float b, bool snap ); void SetModified ( bool mod ); protected: enum EModifierType { MOD_UNKNOWN, MOD_DELETE, MOD_HIDE, MOD_UNHIDE, MOD_SHOWHIDDEN, MOD_SEND_BACKWARD, MOD_BRING_FORWARD, MOD_SEND_BACK, MOD_BRING_FRONT, }; bool SetupPixelFormat ( void ); void UpdateSelections ( void ); // Additional rendering routines void RenderGrid ( void ); // File related methods void WriteTabs ( idFile* file, int depth ); bool WriteWindow ( idFile* file, int depth, idWindow* window ); // Message handlers int HandleRButtonDown ( WPARAM wParam, LPARAM lParam ); int HandleLButtonDown ( WPARAM wParam, LPARAM lParam ); int HandleLButtonUp ( WPARAM wParam, LPARAM lParam ); int HandleLButtonDblClk ( WPARAM wParam, LPARAM lParam ); int HandleMButtonDown ( WPARAM wParam, LPARAM lParam ); int HandleMButtonUp ( WPARAM wParam, LPARAM lParam ); int HandleMouseMove ( WPARAM wParam, LPARAM lParam ); int HandleKeyDown ( WPARAM wParam, LPARAM lParam ); int HandleScroll ( int scrollbar, WPARAM wParam, LPARAM lParam ); int HandleCommand ( WPARAM wParam, LPARAM lParam ); // General protected functions void UpdateScrollbars ( void ); void UpdateRectangle ( bool useScroll = true ); void UpdateCursor ( void ); void UpdateCursor ( float x, float y ); void UpdateCursor ( rvGESelectionMgr::EHitTest type ); void UpdateTitle ( void ); idWindow* NewWindow ( idDict* state, rvGEWindowWrapper::EWindowType type ); void Scroll ( int scrollbar, int offset ); // Modifier methods void AddModifierMoveNudge( float x, float y, bool snap ); void AddModifierSizeNudge( float w, float h, bool snap ); void AddModifierShowAll ( void ); void AddModifiers ( EModifierType type, ... ); void AddModifiers ( idWindow* window, EModifierType type, ... ); rvGEModifier* CreateModifier ( EModifierType type, idWindow* window, va_list args ); idUserInterfaceLocal* mInterface; HWND mWnd; int mZoom; idRectangle mRect; bool mScrollHorz; bool mScrollVert; int mWindowWidth; int mWindowHeight; idStr mFilename; rvGEModifierStack mModifiers; rvGESelectionMgr mSelections; rvGESelectionMgr::EHitTest mDragType; idVec2 mDragPoint; int mDragTime; bool mDragX; bool mDragY; bool mDragScroll; rvGEApp* mApplication; static idList mClipboard; idList mSelectMenu; idVec2 mSelectMenuPos; private: static bool CleanupEnumProc ( rvGEWindowWrapper* wrapper, void* data ); static bool ShowAllEnumProc ( rvGEWindowWrapper* wrapper, void* data ); static bool BuildSelectMenuEnumProc ( rvGEWindowWrapper* wrapper, void* data ); // States bool mModified; bool mNew; bool mDontAdd; ESourceControlState mSourceControlState; // Resources HCURSOR mHandCursor; }; ID_INLINE rvGEWorkspace::EZoomLevel rvGEWorkspace::GetZoom ( void ) { return (EZoomLevel)mZoom; } ID_INLINE rvGEWorkspace* rvGEWorkspace::GetWorkspace ( HWND wnd ) { return (rvGEWorkspace*) GetWindowLongPtr ( wnd, GWLP_USERDATA ); } ID_INLINE const char* rvGEWorkspace::GetFilename ( void ) { return mFilename; } ID_INLINE bool rvGEWorkspace::IsModified ( void ) { return mModified; } ID_INLINE bool rvGEWorkspace::IsNew ( void ) { return mNew; } ID_INLINE rvGEModifierStack& rvGEWorkspace::GetModifierStack ( void ) { return mModifiers; } ID_INLINE rvGESelectionMgr& rvGEWorkspace::GetSelectionMgr ( void ) { return mSelections; } ID_INLINE void rvGEWorkspace::ShowHidden ( void ) { AddModifierShowAll ( ); } ID_INLINE void rvGEWorkspace::AddModifierMoveNudge ( float x, float y, bool snap ) { AddModifierMove ( "Nudge Move", x, y, snap ); } ID_INLINE void rvGEWorkspace::AddModifierSizeNudge ( float w, float h, bool snap ) { AddModifierSize ( "Nudge Size", 0, 0, w, h, snap ); } ID_INLINE idUserInterfaceLocal* rvGEWorkspace::GetInterface ( void ) { return mInterface; } ID_INLINE rvGEApp* rvGEWorkspace::GetApplication ( void ) { return mApplication; } ID_INLINE HWND rvGEWorkspace::GetWindow ( void ) { return mWnd; } ID_INLINE idList rvGEWorkspace::GetClipboard ( void ) { return mClipboard; } ID_INLINE rvGEWorkspace::ESourceControlState rvGEWorkspace::GetSourceControlState ( void ) { return mSourceControlState; } #endif // _GEWORKSPACE_H_