PresetsLibForm.h 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. /*
  2. ** Command & Conquer Renegade(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. #if !defined(AFX_PRESETSFORM_H__89F1AFD8_6F98_11D3_A05A_00104B791122__INCLUDED_)
  19. #define AFX_PRESETSFORM_H__89F1AFD8_6F98_11D3_A05A_00104B791122__INCLUDED_
  20. #if _MSC_VER > 1000
  21. #pragma once
  22. #endif // _MSC_VER > 1000
  23. // PresetsForm.h : header file
  24. //
  25. #ifndef __AFXEXT_H__
  26. #include <afxext.h>
  27. #endif
  28. #include "dialogtoolbar.h"
  29. #include "bittype.h"
  30. #include "vector.h"
  31. #include "wwstring.h"
  32. /////////////////////////////////////////////////////////////////////////////
  33. // Forward declarations
  34. /////////////////////////////////////////////////////////////////////////////
  35. class DefinitionFactoryClass;
  36. class DefinitionClass;
  37. class PresetClass;
  38. class ParameterClass;
  39. /////////////////////////////////////////////////////////////////////////////
  40. // Typedefs
  41. /////////////////////////////////////////////////////////////////////////////
  42. typedef struct _DERIVED_PARAM_INFO
  43. {
  44. PresetClass * preset;
  45. DynamicVectorClass<ParameterClass *> base_param_list;
  46. DynamicVectorClass<ParameterClass *> derived_param_list;
  47. // For DyanmicVectorClass
  48. bool operator== (const _DERIVED_PARAM_INFO &) { return false; }
  49. bool operator!= (const _DERIVED_PARAM_INFO &) { return true; }
  50. } DERIVED_PARAM_INFO;
  51. typedef DynamicVectorClass<DERIVED_PARAM_INFO> DERIVED_PARAM_LIST;
  52. /////////////////////////////////////////////////////////////////////////////
  53. //
  54. // PresetsFormClass form view
  55. //
  56. /////////////////////////////////////////////////////////////////////////////
  57. class PresetsFormClass : public CDialog
  58. {
  59. public:
  60. PresetsFormClass (CWnd *parent_wnd);
  61. // Form Data
  62. public:
  63. //{{AFX_DATA(PresetsFormClass)
  64. enum { IDD = IDD_PRESETS_FORM };
  65. CTreeCtrl m_TreeCtrl;
  66. //}}AFX_DATA
  67. // Attributes
  68. public:
  69. // Operations
  70. public:
  71. // Overrides
  72. // ClassWizard generated virtual function overrides
  73. //{{AFX_VIRTUAL(PresetsFormClass)
  74. protected:
  75. virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
  76. virtual BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult);
  77. //}}AFX_VIRTUAL
  78. // Implementation
  79. protected:
  80. virtual ~PresetsFormClass();
  81. #ifdef _DEBUG
  82. virtual void AssertValid() const;
  83. virtual void Dump(CDumpContext& dc) const;
  84. #endif
  85. // Generated message map functions
  86. //{{AFX_MSG(PresetsFormClass)
  87. afx_msg void OnSize(UINT nType, int cx, int cy);
  88. virtual BOOL OnInitDialog();
  89. afx_msg void OnAdd();
  90. afx_msg void OnDeleteitemPresetsTree(NMHDR* pNMHDR, LRESULT* pResult);
  91. afx_msg void OnModify();
  92. afx_msg void OnMake();
  93. afx_msg void OnAddTemp();
  94. afx_msg void OnDelete();
  95. afx_msg void OnSelchangedPresetsTree(NMHDR* pNMHDR, LRESULT* pResult);
  96. afx_msg void OnPlay();
  97. afx_msg void OnInfo();
  98. afx_msg void OnExtra();
  99. afx_msg void OnUpdateConvert(CCmdUI* pCmdUI);
  100. afx_msg void OnUpdateInfo(CCmdUI* pCmdUI);
  101. afx_msg void OnUpdatePlay(CCmdUI* pCmdUI);
  102. afx_msg void OnUpdateUpdateVss(CCmdUI* pCmdUI);
  103. afx_msg void OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct);
  104. afx_msg void OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct);
  105. afx_msg void OnConvert();
  106. afx_msg void OnUpdateVss();
  107. afx_msg void OnBatchImportTerrain();
  108. afx_msg void OnUpdateBatchImportTerrain(CCmdUI* pCmdUI);
  109. afx_msg void OnBegindragPresetsTree(NMHDR* pNMHDR, LRESULT* pResult);
  110. afx_msg void OnBuildEmbedNodeList();
  111. afx_msg void OnUpdateEmbeddedNodeList(CCmdUI* pCmdUI);
  112. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  113. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  114. afx_msg void OnDestroy();
  115. afx_msg void OnClearEmbeddedNodeList();
  116. afx_msg void OnUpdateClearEmbeddedNodeList(CCmdUI* pCmdUI);
  117. //}}AFX_MSG
  118. DECLARE_MESSAGE_MAP()
  119. public:
  120. /////////////////////////////////////////////////////////
  121. // Public methods
  122. /////////////////////////////////////////////////////////
  123. void Reload_Presets (void);
  124. bool Save_Temp_Presets (void);
  125. bool Save_Global_Presets (uint32 class_id);
  126. bool Save_Presets (LPCTSTR path, uint32 class_id, bool temps_only = false, bool class_id_matters = true);
  127. static bool Old_Load_Presets (void);
  128. static bool Load_Temp_Presets (void);
  129. static bool Load_Databases (void);
  130. void Build_DDB_File_List (DynamicVectorClass<CString> &file_list, HTREEITEM parent_item = TVI_ROOT);
  131. //
  132. // File dependency support
  133. //
  134. void Export_File_Dependencies (const char *filename);
  135. void Build_File_Dependencies_For_Definition (DynamicVectorClass<StringClass> &file_list, DefinitionClass *definition);
  136. //
  137. // Library support
  138. //
  139. void Save_Preset_Libraries (HTREEITEM parent_item = TVI_ROOT);
  140. static bool Load_Preset_Libraries (void);
  141. //
  142. // Preset addition support
  143. //
  144. void Add_Preset (PresetClass *preset);
  145. void Sort_Items (uint32 class_id);
  146. protected:
  147. /////////////////////////////////////////////////////////
  148. // Protected methods
  149. /////////////////////////////////////////////////////////
  150. void Fill_In_Presets (HTREEITEM root_item);
  151. void Fill_In_Preset_Children (HTREEITEM root_item, uint32 parent_id);
  152. bool Save_Presets (uint32 class_id, bool temps_only = false);
  153. void Save_Presets (HANDLE file, uint32 class_id, bool temps_only = false, bool class_id_matters = true);
  154. static bool Load_Presets (uint32 class_id);
  155. HTREEITEM Find_Preset (HTREEITEM root_item, uint32 id);
  156. HTREEITEM Find_Factory (HTREEITEM root_item, uint32 id);
  157. void Set_Item_Data (HTREEITEM item, DefinitionFactoryClass *factory);
  158. void Set_Item_Data (HTREEITEM item, PresetClass *preset);
  159. DefinitionFactoryClass * Get_Item_Factory (HTREEITEM item);
  160. DefinitionClass * Get_Item_Definition (HTREEITEM item);
  161. PresetClass * Get_Item_Preset (HTREEITEM item);
  162. DefinitionFactoryClass * Get_Selected_Factory (void);
  163. HTREEITEM Insert_Preset (HTREEITEM root_item, PresetClass *preset);
  164. int Get_Icon (PresetClass *preset);
  165. void Reselect_Item (int id, bool is_factory = false);
  166. void Sort_Nodes (HTREEITEM root_item, bool recursive = true);
  167. PresetClass * Add_New_Preset (LPCTSTR name, bool is_temp = false, bool sel_new = true);
  168. bool Modify_Preset (void);
  169. PresetClass * Create_Preset (DefinitionFactoryClass *factory, bool is_temp);
  170. void Add_Terrain_Preset (LPCTSTR filename);
  171. void Build_Child_List (HTREEITEM parent_item, DynamicVectorClass<HTREEITEM> &list);
  172. void Build_Inherited_Param_List (HTREEITEM parent_item, DERIVED_PARAM_LIST &list);
  173. void Propagate_Changes (HTREEITEM modified_item, DERIVED_PARAM_LIST &list);
  174. void Compare_Derived_Parameters (PresetClass *curr_preset, DefinitionClass *base_def, DefinitionClass *derived_def, DERIVED_PARAM_LIST &list);
  175. bool Enable_Button (int cmd_id);
  176. void Get_Menu_Text (int menu_id, CString &text);
  177. //
  178. // Embedded node stuff
  179. //
  180. void Update_Embedded_Nodes (PresetClass *preset);
  181. void Reset_Embedded_Node_Instances (PresetClass *preset);
  182. //
  183. // Drag/drop stuff
  184. //
  185. bool Is_Drag_OK (HTREEITEM drag_item);
  186. bool Is_Drop_OK (HTREEITEM drop_item);
  187. void Do_Drop (HTREEITEM drag_item, HTREEITEM drop_item);
  188. //
  189. // Copy/Move stuff
  190. //
  191. void Copy_Preset_Items (HTREEITEM preset_item, HTREEITEM parent_item);
  192. void Move_Preset (HTREEITEM preset_item, HTREEITEM parent_item);
  193. private:
  194. /////////////////////////////////////////////////////////
  195. // Private member data
  196. /////////////////////////////////////////////////////////
  197. DialogToolbarClass m_Toolbar;
  198. bool m_IsDragging;
  199. HTREEITEM m_DragItem;
  200. CImageList * m_DragImageList;
  201. /////////////////////////////////////////////////////////
  202. // Friends
  203. /////////////////////////////////////////////////////////
  204. friend class SelectionCaptureClass;
  205. };
  206. /////////////////////////////////////////////////////////////////////////////
  207. //{{AFX_INSERT_LOCATION}}
  208. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  209. #endif // !defined(AFX_PRESETSFORM_H__89F1AFD8_6F98_11D3_A05A_00104B791122__INCLUDED_)