LayersList.h 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. /*
  2. ** Command & Conquer Generals Zero Hour(tm)
  3. ** Copyright 2025 Electronic Arts Inc.
  4. **
  5. ** This program is free software: you can redistribute it and/or modify
  6. ** it under the terms of the GNU General Public License as published by
  7. ** the Free Software Foundation, either version 3 of the License, or
  8. ** (at your option) any later version.
  9. **
  10. ** This program is distributed in the hope that it will be useful,
  11. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. ** GNU General Public License for more details.
  14. **
  15. ** You should have received a copy of the GNU General Public License
  16. ** along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. */
  18. // FILE: LayersList.h
  19. /*---------------------------------------------------------------------------*/
  20. /* EA Pacific */
  21. /* Confidential Information */
  22. /* Copyright (C) 2001 - All Rights Reserved */
  23. /* DO NOT DISTRIBUTE */
  24. /*---------------------------------------------------------------------------*/
  25. /* Project: RTS3 */
  26. /* File name: LayersList.h */
  27. /* Created: John K. McDonald, Jr., 5/10/2002 */
  28. /* Desc: Layers List Declarations */
  29. /* Revision History: */
  30. /* 5/10/2002 : Initial creation */
  31. /*---------------------------------------------------------------------------*/
  32. #pragma once
  33. #ifndef _H_LAYERSLIST_
  34. #define _H_LAYERSLIST_
  35. // INCLUDES ///////////////////////////////////////////////////////////////////
  36. #include "Common/AsciiString.h"
  37. #include <list>
  38. #include <string>
  39. // DEFINES ////////////////////////////////////////////////////////////////////
  40. // FORWARD DECLARATIONS ///////////////////////////////////////////////////////
  41. class MapObject;
  42. class PolygonTrigger;
  43. // TYPE DEFINES ///////////////////////////////////////////////////////////////
  44. typedef std::list<MapObject*> ListMapObjectPtr;
  45. typedef ListMapObjectPtr::iterator ListMapObjectPtrIt;
  46. typedef std::list<PolygonTrigger*> ListPolygonTriggerPtr;
  47. typedef ListPolygonTriggerPtr::iterator ListPolygonTriggerPtrIt;
  48. struct Layer
  49. {
  50. AsciiString layerName;
  51. ListMapObjectPtr objectsInLayer;
  52. ListPolygonTriggerPtr polygonTriggersInLayer;
  53. Bool show;
  54. };
  55. typedef std::list<Layer> ListLayer;
  56. typedef ListLayer::iterator ListLayerIt;
  57. // Class Definition for overridden Tree control that supports Right-click context sensitive menu.
  58. class CLLTreeCtrl : public CTreeCtrl
  59. {
  60. public:
  61. AsciiString getLastClickedLayer(void) { return mLastClickedLayer; }
  62. AsciiString getLastClickedObject(void) { return mLastClickedObject; }
  63. protected:
  64. AsciiString mLastClickedLayer;
  65. AsciiString mLastClickedObject;
  66. void buildMoveMenu(CMenu* pPopup, UINT firstID);
  67. virtual void OnRButtonDown(UINT nFlags, CPoint point);
  68. DECLARE_MESSAGE_MAP()
  69. };
  70. // Class Definition
  71. class LayersList : public CDialog
  72. {
  73. public:
  74. enum { IDD = IDD_LAYERSLIST };
  75. LayersList(UINT nIDTemplate = LayersList::IDD, CWnd *parentWnd = NULL);
  76. virtual ~LayersList();
  77. void resetLayers();
  78. void addMapObjectToLayersList(IN MapObject *objToAdd, AsciiString layerToAddTo = AsciiString(TheDefaultLayerName.c_str()));
  79. void addPolygonTriggerToLayersList(IN PolygonTrigger *triggerToAdd, AsciiString layerToAddTo = AsciiString(TheDefaultLayerName.c_str()));
  80. AsciiString removeMapObjectFromLayersList(IN MapObject *objToRemove);
  81. AsciiString removePolygonTriggerFromLayersList(IN PolygonTrigger *triggerToRemove);
  82. void changeMapObjectLayer(IN MapObject *objToChange, AsciiString layerToPlaceOn);
  83. void changePolygonTriggerLayer(IN PolygonTrigger *triggerToChange, AsciiString layerToPlaceOn);
  84. void addLayerNamed(IN AsciiString layerToAdd);
  85. void removeLayerNamed(IN AsciiString layerToRemove);
  86. void changeLayerName(IN AsciiString oldLayerName, IN AsciiString newLayerName);
  87. void mergeLayerInto(IN ListLayerIt src, IN ListLayerIt dst);
  88. Bool isLayerHidden(IN AsciiString layerToTest);
  89. void updateUIFromList(void);
  90. void disableUpdates() { m_performUpdates = false; }
  91. void enableUpdates() { m_performUpdates = true; updateUIFromList(); }
  92. const ListLayer& GetAllLayers(void) const { return mLayers; }
  93. static MapObject *findObjectByUID(AsciiString objectIDToFind);
  94. static PolygonTrigger *findPolygonTriggerByUID(AsciiString objectIDToFind);
  95. static Bool findAndSelectMapObject(AsciiString selectedItemAsciiString);
  96. static Bool findAndSelectPolygonTrigger(AsciiString selectedItemAsciiString);
  97. static void unselectAllMapObjects(void);
  98. static void unselectAllPolygonTriggers(void);
  99. public:
  100. // This is a string because making it an AsciiString makes us barf on construction. :-(
  101. static std::string TheDefaultLayerName;
  102. static std::string ThePolygonTriggerLayerName;
  103. static std::string TheDefaultNewLayerName;
  104. static std::string TheActiveLayerName;
  105. static const std::string TheUnmutableDefaultLayerName;
  106. protected:
  107. AsciiString mCurrentlyEditingLabel;
  108. ListLayer mLayers;
  109. CLLTreeCtrl *mTree;
  110. CImageList mImageList;
  111. Bool m_performUpdates;
  112. Bool m_activatedLayer;
  113. HTREEITEM findTreeLayerNamed(const AsciiString& nameToFind);
  114. HTREEITEM findTreeObjectNamed(const AsciiString& objectToFind, HTREEITEM layerItem);
  115. // This function takes an MapObject, and does one of the following:
  116. // 1) Return true if the MapObject can be found, and
  117. // layerIt points to a valid layer iterator in which the MapObject was found
  118. // MapObjectIt points to a valid MapObject iterator on the layerIts MapObjectsInLayer member
  119. // 2) Returns false if the MapObject cannot be found.
  120. Bool findMapObjectAndList(IN MapObject *MapObjectToFind, OUT ListLayerIt *layerIt = NULL, OUT ListMapObjectPtrIt *MapObjectIt = NULL);
  121. Bool findPolygonTriggerAndList(IN PolygonTrigger *PolygonTriggerToFind, OUT ListLayerIt *layerIt = NULL, OUT ListPolygonTriggerPtrIt *PolygonTriggerIt = NULL);
  122. // This function takes a layer name, and does one of the following:
  123. // 1) Return true if the layer can be found, and
  124. // layerIt points to a valid layer iterator named layerName
  125. // 2) Returns false if the layer cannot be found.
  126. Bool findLayerNamed(IN AsciiString layerName, OUT ListLayerIt *layerIt = NULL);
  127. void addMapObjectToLayer(IN MapObject *objToAdd, IN ListLayerIt *layerIt);
  128. void addPolygonTriggerToLayer(IN PolygonTrigger *objToAdd, IN ListLayerIt *layerIt);
  129. void removeMapObjectFromLayer(IN MapObject *objToRemove, IN ListLayerIt *layerIt = NULL, IN ListMapObjectPtrIt *MapObjectIt = NULL);
  130. void removePolygonTriggerFromLayer(IN PolygonTrigger *triggerToRemove, IN ListLayerIt *layerIt = NULL, IN ListPolygonTriggerPtrIt *PolygonTriggerIt = NULL);
  131. void updateObjectRenderFlags(IN ListLayerIt *layerIt);
  132. void updateTreeImages();
  133. protected:
  134. virtual void OnOK();
  135. virtual void OnCancel();
  136. virtual BOOL OnInitDialog();
  137. afx_msg void OnBeginEditLabel(NMHDR *pNotifyStruct, LRESULT* pResult);
  138. afx_msg void OnEndEditLabel(NMHDR *pNotifyStruct, LRESULT* pResult);
  139. afx_msg void OnMergeLayer(UINT commandID);
  140. afx_msg void OnMergeObject(UINT commandID);
  141. afx_msg void OnMergeViewSelection(UINT commandID);
  142. afx_msg void OnSelectActiveLayer();
  143. afx_msg void OnSelectLayerObject();
  144. afx_msg void OnNewLayer();
  145. afx_msg void OnDeleteLayer();
  146. afx_msg void OnHideShowLayer();
  147. DECLARE_MESSAGE_MAP()
  148. };
  149. extern LayersList *TheLayersList;
  150. #endif /* _H_LAYERSLIST_ */