| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- /*
- ** Command & Conquer Generals Zero Hour(tm)
- ** Copyright 2025 Electronic Arts Inc.
- **
- ** This program 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.
- **
- ** This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
- */
- ////////////////////////////////////////////////////////////////////////////////
- // //
- // (c) 2001-2003 Electronic Arts Inc. //
- // //
- ////////////////////////////////////////////////////////////////////////////////
- // FILE: HierarchyView.h //////////////////////////////////////////////////////
- //-----------------------------------------------------------------------------
- //
- // Westwood Studios Pacific.
- //
- // Confidential Information
- // Copyright (C) 2001 - All Rights Reserved
- //
- //-----------------------------------------------------------------------------
- //
- // Project: GUIEdit
- //
- // File name: HierarchyView.h
- //
- // Created: Colin Day, July 2001
- //
- // Desc: Manipulation the widows heirarchy through the tree
- //
- //-----------------------------------------------------------------------------
- ///////////////////////////////////////////////////////////////////////////////
- #pragma once
- #ifndef __HIERARCHYVIEW_H_
- #define __HIERARCHYVIEW_H_
- // SYSTEM INCLUDES ////////////////////////////////////////////////////////////
- #include <windows.h>
- #include <commctrl.h>
- // USER INCLUDES //////////////////////////////////////////////////////////////
- #include "Lib/BaseType.h"
- #include "GameClient/GameWindow.h"
- // FORWARD REFERENCES /////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////
- // TYPE DEFINES ///////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////
- // Add slight improvement to load times -- was 2:30, now 0:02 for test case.
- #define USE_FAST_FIND_ITEM 1
- // HierarchyOption ------------------------------------------------------------
- //-----------------------------------------------------------------------------
- typedef enum
- {
- HIERARCHY_ADD_AT_TOP,
- HIERARCHY_ADD_AT_BOTTOM,
- } HierarchyOption;
- // HierarchyView --------------------------------------------------------------
- /** This view allows users to manipulate the windows hierarchy using
- * a tree view control */
- //-----------------------------------------------------------------------------
- class HierarchyView
- {
- public:
- HierarchyView( void );
- ~HierarchyView( void );
- void init( void );
- void reset( void );
- void shutdown( void );
- char *getWindowTreeName( GameWindow *window );
- void addWindow( GameWindow *window, HierarchyOption option ); ///< add a window to the view
- void removeWindow( GameWindow *window ); ///< remove window from tree
- void bringWindowToTop( GameWindow *window ); ///< bring window to top of parent list
- void updateWindowName( GameWindow *window ); ///< update tree entry based on name
- void selectWindow( GameWindow *window ); ///< select window
- HWND getTreeHandle( void ); ///< get the tree control handle
- HWND getHierarchyHandle( void ); ///< get window handle for the whole dialog
- void setDialogPos( ICoord2D *pos );
- void getDialogPos( ICoord2D *pos );
- void setDialogSize( ICoord2D *size );
- void getDialogSize( ICoord2D *size );
-
- void setDragWindow( GameWindow *window );
- void setDragTarget( GameWindow *window );
- GameWindow *getDragWindow( void );
- GameWindow *getDragTarget( void );
- void moveWindowAheadOf( GameWindow *window, GameWindow *aheadOf ); ///< move hierarchy representation
- void moveWindowChildOf( GameWindow *window, GameWindow *parent ); ///< move hierarchy representation
- Bool validateDragDropOperation( GameWindow *source, GameWindow *target );
- void setPopupTarget( GameWindow *window ); ///< set target for popup menu
- GameWindow *getPopupTarget( void ); ///< get the popup target window
- HTREEITEM treePointToItem( Int x, Int y ); ///< translate mouse pos to item location
- GameWindow *getWindowFromItem( HTREEITEM treeItem ); ///< get game window from user data in the tree item
-
- protected:
- static LRESULT CALLBACK dialogProc( HWND hWndDialog, UINT message,
- WPARAM wParam, LPARAM lParam );
- void addWindowToTree( GameWindow *window, HTREEITEM treeParent,
- HierarchyOption option, Bool addChildren,
- Bool addSiblings ); ///< workhorse for addWindow()
- HTREEITEM findItemEntry( HTREEITEM node, GameWindow *window ); ///< workhorse for findTreeEntry
- HTREEITEM findTreeEntry( GameWindow *window ); ///< return entry if in tree
- HWND m_dialog; ///< window handle for our control dialog
- HWND m_tree; ///< window handle for the tree control
-
- GameWindow *m_dragWindow; ///< for drag drop operations
- GameWindow *m_dragTarget; ///< target for drag and drop operations while mouse is moving
- GameWindow *m_popupTarget; ///< the target for right mouse popup menus
- #if USE_FAST_FIND_ITEM
- typedef const GameWindow* ConstGameWindowPtr;
- // use special class for hashing, since std::hash won't compile for arbitrary ptrs
- struct hashConstGameWindowPtr
- {
- size_t operator()(ConstGameWindowPtr p) const
- {
- std::hash<UnsignedInt> hasher;
- return hasher((UnsignedInt)p);
- }
- };
-
- typedef std::hash_map< ConstGameWindowPtr, HTREEITEM, hashConstGameWindowPtr, std::equal_to<ConstGameWindowPtr> > TreeHash;
-
- TreeHash m_treeHash; ///< Speed up the search with a nice hash.
- #endif
- }; // end HierarchyView
- ///////////////////////////////////////////////////////////////////////////////
- // INLINING ///////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////
- inline HWND HierarchyView::getTreeHandle( void ) { return m_tree; }
- inline HWND HierarchyView::getHierarchyHandle( void ) { return m_dialog; }
- inline void HierarchyView::setDragWindow( GameWindow *window ) { m_dragWindow = window; }
- inline void HierarchyView::setDragTarget( GameWindow *window ) { m_dragTarget = window; }
- inline GameWindow *HierarchyView::getDragWindow( void ) { return m_dragWindow; }
- inline GameWindow *HierarchyView::getDragTarget( void ) { return m_dragTarget; }
- inline void HierarchyView::setPopupTarget( GameWindow *window ) { m_popupTarget = window; }
- inline GameWindow *HierarchyView::getPopupTarget( void ) { return m_popupTarget; }
- // EXTERNALS //////////////////////////////////////////////////////////////////
- extern HierarchyView *TheHierarchyView; ///< singleton for our view
- #endif // __CONTROLPALETTE_H_
|