123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429 |
- /*
- ===========================================================================
- 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 <http://www.gnu.org/licenses/>.
- 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.
- ===========================================================================
- */
- #include "../../idlib/precompiled.h"
- #pragma hdrstop
- #include "MaterialModifier.h"
- #include "MaterialDocManager.h"
- #include "MaterialTreeView.h"
- //////////////////////////////////////////////////////////////////////////////
- //MaterialModifier
- //////////////////////////////////////////////////////////////////////////////
- /**
- * Constructor for MaterialModifier
- */
- MaterialModifier::MaterialModifier(MaterialDocManager* manager, const char* materialName) {
- this->manager = manager;
- this->materialName = materialName;
- }
- //////////////////////////////////////////////////////////////////////////////
- //AttributeMaterialModifier
- //////////////////////////////////////////////////////////////////////////////
- /**
- * Constructor for AttributeMaterialModifier
- */
- AttributeMaterialModifier::AttributeMaterialModifier(MaterialDocManager* manager, const char* materialName, int stage, const char* key)
- : MaterialModifier(manager, materialName) {
-
- this->stage = stage;
- this->key = key;
-
- }
- //////////////////////////////////////////////////////////////////////////////
- //AttributeMaterialModifierString
- //////////////////////////////////////////////////////////////////////////////
- /**
- * Constructor for AttributeMaterialModifierString
- */
- AttributeMaterialModifierString::AttributeMaterialModifierString(MaterialDocManager* manager, const char* materialName, int stage, const char* key, const char* value, const char* oldValue)
- : AttributeMaterialModifier(manager, materialName, stage, key) {
- this->value = value;
- this->oldValue = oldValue;
- }
- /**
- * Performs an undo operation of a string attribute change.
- */
- void AttributeMaterialModifierString::Undo() {
- MaterialDoc* material = manager->CreateMaterialDoc(materialName);
- material->SetAttribute(stage, key, oldValue, false);
- }
- /**
- * Performs a redo operation of a string attribute change.
- */
- void AttributeMaterialModifierString::Redo() {
- MaterialDoc* material = manager->CreateMaterialDoc(materialName);
- material->SetAttribute(stage, key, value, false);
- }
- //////////////////////////////////////////////////////////////////////////////
- //AttributeMaterialModifierBool
- //////////////////////////////////////////////////////////////////////////////
- /**
- * Constructor for AttributeMaterialModifierBool
- */
- AttributeMaterialModifierBool::AttributeMaterialModifierBool(MaterialDocManager* manager, const char* materialName, int stage, const char* key, bool value, bool oldValue)
- : AttributeMaterialModifier(manager, materialName, stage, key) {
- this->value = value;
- this->oldValue = oldValue;
- }
- /**
- * Performs an undo operation of a boolean attribute change.
- */
- void AttributeMaterialModifierBool::Undo() {
- MaterialDoc* material = manager->CreateMaterialDoc(materialName);
- material->SetAttributeBool(stage, key, oldValue, false);
- }
- /**
- * Performs a redo operation of a boolean attribute change.
- */
- void AttributeMaterialModifierBool::Redo() {
- MaterialDoc* material = manager->CreateMaterialDoc(materialName);
- material->SetAttributeBool(stage, key, value, false);
- }
- //////////////////////////////////////////////////////////////////////////////
- //StageMoveModifier
- //////////////////////////////////////////////////////////////////////////////
- /**
- * Constructor for StageMoveModifier
- */
- StageMoveModifier::StageMoveModifier(MaterialDocManager* manager, const char* materialName, int from, int to)
- : MaterialModifier(manager, materialName) {
- this->from = from;
- this->to = to;
- }
- /**
- * Performs an undo operation of a stage move.
- */
- void StageMoveModifier::Undo() {
- MaterialDoc* material = manager->CreateMaterialDoc(materialName);
- material->MoveStage(to, from, false);
- }
- /**
- * Performs a redo operation of a moved stage.
- */
- void StageMoveModifier::Redo() {
- MaterialDoc* material = manager->CreateMaterialDoc(materialName);
- material->MoveStage(from, to, false);
- }
- //////////////////////////////////////////////////////////////////////////////
- //StageDeleteModifier
- //////////////////////////////////////////////////////////////////////////////
- /**
- * Constructor for StageDeleteModifier
- */
- StageDeleteModifier::StageDeleteModifier(MaterialDocManager* manager, const char* materialName, int stageNum, idDict stageData)
- : MaterialModifier(manager, materialName) {
- this->stageNum = stageNum;
- this->stageData = stageData;
- }
- /**
- * Performs an undo operation of a deleted stage.
- */
- void StageDeleteModifier::Undo() {
- MaterialDoc* material = manager->CreateMaterialDoc(materialName);
- material->InsertStage(stageNum, stageData.GetInt("stagetype"), stageData.GetString("name"), false);
- material->SetData(stageNum, &stageData);
- }
- /**
- * Performs a redo operation of a deleted stage.
- */
- void StageDeleteModifier::Redo() {
- MaterialDoc* material = manager->CreateMaterialDoc(materialName);
- material->RemoveStage(stageNum, false);
- }
- //////////////////////////////////////////////////////////////////////////////
- //StageInsertModifier
- //////////////////////////////////////////////////////////////////////////////
- /**
- * Constructor for StageInsertModifier
- */
- StageInsertModifier::StageInsertModifier(MaterialDocManager* manager, const char* materialName, int stageNum, int stageType, const char* stageName)
- : MaterialModifier(manager, materialName) {
- this->stageNum = stageNum;
- this->stageType = stageType;
- this->stageName = stageName;
- }
- /**
- * Performs an undo operation of an inserted stage.
- */
- void StageInsertModifier::Undo() {
- MaterialDoc* material = manager->CreateMaterialDoc(materialName);
- material->RemoveStage(stageNum, false);
- }
- /**
- * Performs a redo operation of an inserted stage.
- */
- void StageInsertModifier::Redo() {
- MaterialDoc* material = manager->CreateMaterialDoc(materialName);
- material->InsertStage(stageNum, stageType, stageName, false);
- }
- //////////////////////////////////////////////////////////////////////////////
- //AddMaterialModifier
- //////////////////////////////////////////////////////////////////////////////
- /**
- * Constructor for AddMaterialModifier
- */
- AddMaterialModifier::AddMaterialModifier(MaterialDocManager* manager, const char* materialName, const char* materialFile)
- : MaterialModifier(manager, materialName) {
- this->materialFile = materialFile;
- }
- /**
- * Performs an undo operation of an added material.
- */
- void AddMaterialModifier::Undo() {
- MaterialDoc* material = manager->CreateMaterialDoc(materialName);
- manager->DeleteMaterial(material, false);
- }
- /**
- * Performs a redo operation of an added material.
- */
- void AddMaterialModifier::Redo() {
- manager->RedoAddMaterial(materialName);
- }
- //////////////////////////////////////////////////////////////////////////////
- //DeleteMaterialModifier
- //////////////////////////////////////////////////////////////////////////////
- /**
- * Constructor for DeleteMaterialModifier
- */
- DeleteMaterialModifier::DeleteMaterialModifier(MaterialDocManager* manager, const char* materialName)
- : MaterialModifier(manager, materialName) {
- }
- /**
- * Performs an undo operation of a deleted material.
- */
- void DeleteMaterialModifier::Undo() {
-
- manager->RedoAddMaterial(materialName, false);
- }
- /**
- * Performs a redo operation of a deleted material.
- */
- void DeleteMaterialModifier::Redo() {
-
- MaterialDoc* material = manager->CreateMaterialDoc(materialName);
- manager->DeleteMaterial(material, false);
- }
- //////////////////////////////////////////////////////////////////////////////
- //MoveMaterialModifier
- //////////////////////////////////////////////////////////////////////////////
- /**
- * Constructor for MoveMaterialModifier
- */
- MoveMaterialModifier::MoveMaterialModifier(MaterialDocManager* manager, const char* materialName, const char* materialFile, const char* copyMaterial)
- : MaterialModifier(manager, materialName) {
- this->materialFile = materialFile;
- this->copyMaterial = copyMaterial;
- }
- /**
- * Performs an undo operation of a moved material
- */
- void MoveMaterialModifier::Undo() {
-
- //Delete New Material
- MaterialDoc* material = manager->CreateMaterialDoc(materialName);
- manager->DeleteMaterial(material, false);
- //RedoAdd Old Material
- manager->RedoAddMaterial(copyMaterial, false);
- }
- /**
- * Performs a redo operation of a moved material.
- */
- void MoveMaterialModifier::Redo() {
- //Delete Old Material
- MaterialDoc* material = manager->CreateMaterialDoc(copyMaterial);
- manager->DeleteMaterial(material, false);
- //Redo Add New Material
- manager->RedoAddMaterial(materialName, false);
- }
- //////////////////////////////////////////////////////////////////////////////
- //RenameMaterialModifier
- //////////////////////////////////////////////////////////////////////////////
- /**
- * Constructor for RenameMaterialModifier
- */
- RenameMaterialModifier::RenameMaterialModifier(MaterialDocManager* manager, const char* materialName, const char* oldName)
- : MaterialModifier(manager, materialName) {
- this->oldName = oldName;
- }
- /**
- * Performs an undo operation of a renamed material
- */
- void RenameMaterialModifier::Undo() {
- MaterialDoc* material = manager->CreateMaterialDoc(materialName);
- material->SetMaterialName(oldName, false);
- }
- /**
- * Performs a redo operation of a renamed material.
- */
- void RenameMaterialModifier::Redo() {
-
- MaterialDoc* material = manager->CreateMaterialDoc(oldName);
- material->SetMaterialName(materialName, false);
- }
- //////////////////////////////////////////////////////////////////////////////
- //AddMaterialFolderModifier
- //////////////////////////////////////////////////////////////////////////////
- /**
- * Constructor for AddMaterialFolderModifier
- */
- AddMaterialFolderModifier::AddMaterialFolderModifier(MaterialDocManager* manager, const char* materialName, MaterialTreeView* view, HTREEITEM item, HTREEITEM parent)
- : MaterialModifier(manager, materialName) {
- this->view = view;
- this->item = item;
- this->parent = parent;
- }
- /**
- * Performs an undo operation of an added material folder.
- */
- void AddMaterialFolderModifier::Undo() {
- view->DeleteFolder(item, false);
- }
- /**
- * Performs a redo operation of an added material folder.
- */
- void AddMaterialFolderModifier::Redo() {
- view->AddFolder(materialName, parent);
- }
- //////////////////////////////////////////////////////////////////////////////
- //RenameMaterialFolderModifier
- //////////////////////////////////////////////////////////////////////////////
- /**
- * Constructor for RenameMaterialFolderModifier
- */
- RenameMaterialFolderModifier::RenameMaterialFolderModifier(MaterialDocManager* manager, const char* materialName, MaterialTreeView* view, HTREEITEM item, const char* oldName)
- : MaterialModifier(manager, materialName) {
- this->view = view;
- this->item = item;
- this->oldName = oldName;
- }
- /**
- * Performs an undo operation of a renamed material folder.
- */
- void RenameMaterialFolderModifier::Undo() {
- view->RenameFolder(item, oldName);
- }
- /**
- * Performs a redo operation of a renamed material folder.
- */
- void RenameMaterialFolderModifier::Redo() {
- view->RenameFolder(item, materialName);
- }
- //////////////////////////////////////////////////////////////////////////////
- //DeleteMaterialFolderModifier
- //////////////////////////////////////////////////////////////////////////////
- /**
- * Constructor for DeleteMaterialFolderModifier
- */
- DeleteMaterialFolderModifier::DeleteMaterialFolderModifier(MaterialDocManager* manager, const char* materialName, MaterialTreeView* view, HTREEITEM parent, idStrList* affectedMaterials)
- : MaterialModifier(manager, materialName) {
- this->view = view;
- this->parent = parent;
- this->affectedMaterials = *affectedMaterials;
- }
- /**
- * Performs an undo operation of a deleted material folder.
- */
- void DeleteMaterialFolderModifier::Undo() {
-
- //Add the folder back and save the folder position for the redo
- item = view->AddFolder(materialName, parent);
- //Add each of the children back
- for(int i = 0; i < affectedMaterials.Num(); i++) {
- manager->RedoAddMaterial(affectedMaterials[i], false);
- }
- }
- /**
- * Performs a redo operation of a deleted material folder.
- */
- void DeleteMaterialFolderModifier::Redo() {
- view->DeleteFolder(item, false);
- }
|