MaterialModifier.h 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. /*
  2. ===========================================================================
  3. Doom 3 GPL Source Code
  4. Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company.
  5. This file is part of the Doom 3 GPL Source Code (?Doom 3 Source Code?).
  6. Doom 3 Source Code is free software: you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as published by
  8. the Free Software Foundation, either version 3 of the License, or
  9. (at your option) any later version.
  10. Doom 3 Source Code 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. You should have received a copy of the GNU General Public License
  15. along with Doom 3 Source Code. If not, see <http://www.gnu.org/licenses/>.
  16. 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.
  17. 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.
  18. ===========================================================================
  19. */
  20. #pragma once
  21. #include "MaterialEditor.h"
  22. class MaterialDocManager;
  23. class MaterialTreeView;
  24. /**
  25. * Base class for modifications that can be made to a material that can be undone and redone.
  26. */
  27. class MaterialModifier {
  28. public:
  29. MaterialModifier(MaterialDocManager* manager, const char* materialName);
  30. virtual ~MaterialModifier() {};
  31. virtual void Undo() = 0;
  32. virtual void Redo() = 0;
  33. protected:
  34. MaterialDocManager* manager;
  35. idStr materialName;
  36. };
  37. /**
  38. * Base class for Undo/Redo operations for attribute changes
  39. */
  40. class AttributeMaterialModifier : public MaterialModifier {
  41. public:
  42. AttributeMaterialModifier(MaterialDocManager* manager, const char* materialName, int stage, const char* key);
  43. virtual ~AttributeMaterialModifier() {};
  44. virtual void Undo() = 0;
  45. virtual void Redo() = 0;
  46. protected:
  47. int stage;
  48. idStr key;
  49. };
  50. /**
  51. * Undo/Redo operation for string attribute changes
  52. */
  53. class AttributeMaterialModifierString : public AttributeMaterialModifier {
  54. public:
  55. AttributeMaterialModifierString(MaterialDocManager* manager, const char* materialName, int stage, const char* key, const char* value, const char* oldValue);
  56. virtual ~AttributeMaterialModifierString() {};
  57. virtual void Undo();
  58. virtual void Redo();
  59. protected:
  60. idStr value;
  61. idStr oldValue;
  62. };
  63. /**
  64. * Undo/Redo operation for boolean attribute changes
  65. */
  66. class AttributeMaterialModifierBool : public AttributeMaterialModifier {
  67. public:
  68. AttributeMaterialModifierBool(MaterialDocManager* manager, const char* materialName, int stage, const char* key, bool value, bool oldValue);
  69. virtual ~AttributeMaterialModifierBool() {};
  70. virtual void Undo();
  71. virtual void Redo();
  72. protected:
  73. bool value;
  74. bool oldValue;
  75. };
  76. /**
  77. * Undo/Redo operation for stage moves
  78. */
  79. class StageMoveModifier : public MaterialModifier {
  80. public:
  81. StageMoveModifier(MaterialDocManager* manager, const char* materialName, int from, int to);
  82. virtual ~StageMoveModifier() {};
  83. virtual void Undo();
  84. virtual void Redo();
  85. protected:
  86. int from;
  87. int to;
  88. };
  89. /**
  90. * Undo/Redo operation for stage deletes
  91. */
  92. class StageDeleteModifier : public MaterialModifier {
  93. public:
  94. StageDeleteModifier(MaterialDocManager* manager, const char* materialName, int stageNum, idDict stageData);
  95. virtual ~StageDeleteModifier() {};
  96. virtual void Undo();
  97. virtual void Redo();
  98. protected:
  99. int stageNum;
  100. idDict stageData;
  101. };
  102. /**
  103. * Undo/Redo operation for stage inserts
  104. */
  105. class StageInsertModifier : public MaterialModifier {
  106. public:
  107. StageInsertModifier(MaterialDocManager* manager, const char* materialName, int stageNum, int stageType, const char* stageName);
  108. virtual ~StageInsertModifier() {};
  109. virtual void Undo();
  110. virtual void Redo();
  111. protected:
  112. int stageNum;
  113. int stageType;
  114. idStr stageName;
  115. };
  116. /**
  117. * Undo/Redo operation for adding materials
  118. */
  119. class AddMaterialModifier : public MaterialModifier {
  120. public:
  121. AddMaterialModifier(MaterialDocManager* manager, const char* materialName, const char* materialFile);
  122. virtual ~AddMaterialModifier() {};
  123. virtual void Undo();
  124. virtual void Redo();
  125. protected:
  126. idStr materialFile;
  127. };
  128. /**
  129. * Undo/Redo operation for deleting materials
  130. */
  131. class DeleteMaterialModifier : public MaterialModifier {
  132. public:
  133. DeleteMaterialModifier(MaterialDocManager* manager, const char* materialName);
  134. virtual ~DeleteMaterialModifier() {};
  135. virtual void Undo();
  136. virtual void Redo();
  137. protected:
  138. };
  139. /**
  140. * Undo/Redo operation for moving materials
  141. */
  142. class MoveMaterialModifier : public MaterialModifier {
  143. public:
  144. MoveMaterialModifier(MaterialDocManager* manager, const char* materialName, const char* materialFile, const char* copyMaterial);
  145. virtual ~MoveMaterialModifier() {};
  146. virtual void Undo();
  147. virtual void Redo();
  148. protected:
  149. idStr materialFile;
  150. idStr copyMaterial;
  151. };
  152. /**
  153. * Undo/Redo operation for renaming materials
  154. */
  155. class RenameMaterialModifier : public MaterialModifier {
  156. public:
  157. RenameMaterialModifier(MaterialDocManager* manager, const char* materialName, const char* oldName);
  158. virtual ~RenameMaterialModifier() {};
  159. virtual void Undo();
  160. virtual void Redo();
  161. protected:
  162. idStr oldName;
  163. };
  164. /**
  165. * Undo/Redo operation for adding material folders
  166. */
  167. class AddMaterialFolderModifier : public MaterialModifier {
  168. public:
  169. AddMaterialFolderModifier(MaterialDocManager* manager, const char* materialName, MaterialTreeView* view, HTREEITEM item, HTREEITEM parent);
  170. virtual ~AddMaterialFolderModifier() {};
  171. virtual void Undo();
  172. virtual void Redo();
  173. protected:
  174. MaterialTreeView* view;
  175. HTREEITEM item;
  176. HTREEITEM parent;
  177. };
  178. /**
  179. * Undo/Redo operation for renaming a material folder
  180. */
  181. class RenameMaterialFolderModifier : public MaterialModifier {
  182. public:
  183. RenameMaterialFolderModifier(MaterialDocManager* manager, const char* materialName, MaterialTreeView* view, HTREEITEM item, const char* oldName);
  184. virtual ~RenameMaterialFolderModifier() {};
  185. virtual void Undo();
  186. virtual void Redo();
  187. protected:
  188. MaterialTreeView* view;
  189. HTREEITEM item;
  190. idStr oldName;
  191. };
  192. /**
  193. * Undo/Redo operation for deleting a material folder
  194. */
  195. class DeleteMaterialFolderModifier : public MaterialModifier {
  196. public:
  197. DeleteMaterialFolderModifier(MaterialDocManager* manager, const char* materialName, MaterialTreeView* view, HTREEITEM parent, idStrList* affectedMaterials);
  198. virtual ~DeleteMaterialFolderModifier() {};
  199. virtual void Undo();
  200. virtual void Redo();
  201. protected:
  202. MaterialTreeView* view;
  203. idStrList affectedMaterials;
  204. HTREEITEM item;
  205. HTREEITEM parent;
  206. };