00001 //============================================================================= 00002 // filename: RmUndo.h 00003 // 00004 // ATI Research, Inc. 00005 // 3D Application Research Group 00006 // 00007 // Description: RenderMonkey's Undo Definition 00008 // 00009 //============================================================================= 00010 // (C) 2004 ATI Research, Inc. All rights reserved. 00011 //============================================================================= 00012 00013 #ifndef _RM_CORE_UNDO_H_ 00014 #define _RM_CORE_UNDO_H_ 00015 00016 #include <Core/RmTypes.h> 00017 #include <Core/RmDefines.h> 00018 #include <Core/RmEffect.h> 00019 00020 00021 //============================================================================= 00022 // 00023 // Type def's 00024 // 00025 //============================================================================= 00026 00027 class RmUndoOp; 00028 00029 typedef RmLinkedList<RmUndoOp*> RmUndoOpList; 00030 typedef RmUndoOpList::iterator RmUndoOpListIterator; 00031 typedef RmUndoOpList::const_iterator RmUndoOpListConstIterator; 00032 00033 //============================================================================= 00043 //============================================================================= 00044 class RM_API RmUndoOp 00045 { 00046 public : 00047 //-------------------------------------------------------------------------- 00051 //-------------------------------------------------------------------------- 00052 RmUndoOp( const RM_TCHAR *strOpName ); 00053 00054 //-------------------------------------------------------------------------- 00058 //-------------------------------------------------------------------------- 00059 virtual ~RmUndoOp(); 00060 00061 //-------------------------------------------------------------------------- 00067 //-------------------------------------------------------------------------- 00068 RmStringT GetOpName() const { return m_strOpName; }; 00069 00070 //-------------------------------------------------------------------------- 00076 //-------------------------------------------------------------------------- 00077 virtual void ExecuteUndo(); 00078 00079 //-------------------------------------------------------------------------- 00085 //-------------------------------------------------------------------------- 00086 virtual void ExecuteRedo(); 00087 00088 bool IsUndone() const { return m_isUndone; }; 00089 00090 //-------------------------------------------------------------------------- 00097 //-------------------------------------------------------------------------- 00098 void AddChild( RmUndoOp *pUndoOp ); 00099 00100 //-------------------------------------------------------------------------- 00107 //-------------------------------------------------------------------------- 00108 void RemoveChild( RmUndoOp *pUndoOp ); 00109 00110 //-------------------------------------------------------------------------- 00116 //-------------------------------------------------------------------------- 00117 void RemoveAllChildren(); 00118 00119 //-------------------------------------------------------------------------- 00125 //-------------------------------------------------------------------------- 00126 RmUndoOpListIterator BeginChild() { return m_childList.begin(); }; 00127 00128 //-------------------------------------------------------------------------- 00134 //-------------------------------------------------------------------------- 00135 RmUndoOpListConstIterator BeginChild() const { return m_childList.begin(); }; 00136 00137 //-------------------------------------------------------------------------- 00143 //-------------------------------------------------------------------------- 00144 RmUndoOpListIterator EndChild() { return m_childList.end(); }; 00145 00146 //-------------------------------------------------------------------------- 00152 //-------------------------------------------------------------------------- 00153 RmUndoOpListConstIterator EndChild() const { return m_childList.end(); }; 00154 00155 //-------------------------------------------------------------------------- 00161 //-------------------------------------------------------------------------- 00162 int GetNumChildren() const { return m_childList.size(); }; 00163 00164 protected : 00165 //-------------------------------------------------------------------------- 00171 //-------------------------------------------------------------------------- 00172 virtual void Undo(); 00173 00174 //-------------------------------------------------------------------------- 00180 //-------------------------------------------------------------------------- 00181 virtual void Redo(); 00182 00183 //-------------------------------------------------------------------------- 00189 //-------------------------------------------------------------------------- 00190 void UndoChildren(); 00191 00192 //-------------------------------------------------------------------------- 00198 //-------------------------------------------------------------------------- 00199 void RedoChildren(); 00200 00201 protected: 00202 RmUndoOpList m_childList; 00203 bool m_isUndone; 00204 RmStringT m_strOpName; 00205 }; // End of RmUndoOp 00206 00207 00208 00209 //============================================================================= 00215 //============================================================================= 00216 class RM_API RmDeleteNodeUndoOp : public RmUndoOp 00217 { 00218 public : 00219 //-------------------------------------------------------------------------- 00227 //-------------------------------------------------------------------------- 00228 RmDeleteNodeUndoOp( RmNode *pNode, RmNode* pNextSibling ); 00229 00230 //-------------------------------------------------------------------------- 00239 //-------------------------------------------------------------------------- 00240 RmDeleteNodeUndoOp( RmNode *pNode, RmNode* pNextSibling, const RM_TCHAR* strOpName ); 00241 00242 //-------------------------------------------------------------------------- 00246 //-------------------------------------------------------------------------- 00247 virtual ~RmDeleteNodeUndoOp(); 00248 00249 protected : 00250 //-------------------------------------------------------------------------- 00256 //-------------------------------------------------------------------------- 00257 virtual void Undo(); 00258 00259 //-------------------------------------------------------------------------- 00265 //-------------------------------------------------------------------------- 00266 virtual void Redo(); 00267 00268 private : 00269 RmNodeID m_parentID; 00270 RmNodeID m_nodeID; 00271 RmNodeID m_nextSiblingID; 00272 RmNode *m_pClonedNode; 00273 }; // End of RmDeleteNodeUndoOp 00274 00275 00276 //============================================================================= 00282 //============================================================================= 00283 class RM_API RmAddNodeUndoOp : public RmUndoOp 00284 { 00285 public : 00286 //-------------------------------------------------------------------------- 00294 //-------------------------------------------------------------------------- 00295 RmAddNodeUndoOp( RmNode *pNode, RmNode *pNextSibling = NULL ); 00296 00297 //-------------------------------------------------------------------------- 00306 //-------------------------------------------------------------------------- 00307 RmAddNodeUndoOp( RmNode *pNode, const RM_TCHAR* strOpName, RmNode *pNextSibling = NULL); 00308 00309 //-------------------------------------------------------------------------- 00313 //-------------------------------------------------------------------------- 00314 virtual ~RmAddNodeUndoOp(); 00315 00316 protected : 00317 //-------------------------------------------------------------------------- 00323 //-------------------------------------------------------------------------- 00324 virtual void Undo(); 00325 00326 //-------------------------------------------------------------------------- 00332 //-------------------------------------------------------------------------- 00333 virtual void Redo(); 00334 00335 private : 00336 RmNodeID m_parentID; 00337 RmNodeID m_nodeID; 00338 RmNodeID m_nextSiblingID; 00339 RmNodeID m_activeEffectID; 00340 RmNode *m_pClonedNode; 00341 }; // End of RmAddNodeUndoOp 00342 00343 00344 //============================================================================= 00350 //============================================================================= 00351 class RM_API RmRenameNodeUndoOp : public RmUndoOp 00352 { 00353 public : 00354 //-------------------------------------------------------------------------- 00361 //-------------------------------------------------------------------------- 00362 RmRenameNodeUndoOp( RmNode *pNode, const RM_TCHAR *strNewName ); 00363 00364 //-------------------------------------------------------------------------- 00372 //-------------------------------------------------------------------------- 00373 RmRenameNodeUndoOp( RmNode *pNode, const RM_TCHAR *strNewName, const RM_TCHAR *strOpName ); 00374 00375 //-------------------------------------------------------------------------- 00379 //-------------------------------------------------------------------------- 00380 virtual ~RmRenameNodeUndoOp(); 00381 00382 protected : 00383 //-------------------------------------------------------------------------- 00389 //-------------------------------------------------------------------------- 00390 virtual void Undo(); 00391 00392 //-------------------------------------------------------------------------- 00398 //-------------------------------------------------------------------------- 00399 virtual void Redo(); 00400 00401 private : 00402 RmNodeID m_nodeID; 00403 RmStringT m_strOldName; 00404 RmStringT m_strNewName; 00405 }; // End of RmRenameNodeUndoOp 00406 00407 00408 //============================================================================= 00414 //============================================================================= 00415 class RM_API RmSemanticChangeUndoOp : public RmUndoOp 00416 { 00417 public : 00418 //-------------------------------------------------------------------------- 00425 //-------------------------------------------------------------------------- 00426 RmSemanticChangeUndoOp( RmVariable *pRmVariable, const RM_TCHAR *strNewSemantic ); 00427 00428 //-------------------------------------------------------------------------- 00436 //-------------------------------------------------------------------------- 00437 RmSemanticChangeUndoOp( RmVariable *pRmVariable, const RM_TCHAR *strNewSemantic, const RM_TCHAR *strOpName ); 00438 00439 //-------------------------------------------------------------------------- 00443 //-------------------------------------------------------------------------- 00444 virtual ~RmSemanticChangeUndoOp(); 00445 00446 protected : 00447 //-------------------------------------------------------------------------- 00453 //-------------------------------------------------------------------------- 00454 virtual void Undo(); 00455 00456 //-------------------------------------------------------------------------- 00462 //-------------------------------------------------------------------------- 00463 virtual void Redo(); 00464 00465 private : 00466 RmNodeID m_nodeID; 00467 RmStringT m_strOldSemantic; 00468 RmStringT m_strNewSemantic; 00469 00470 }; // End of RmSemanticChangeUndoOp 00471 00472 //============================================================================= 00478 //============================================================================= 00479 class RM_API RmModelOrientationChangeUndoOp : public RmUndoOp 00480 { 00481 public : 00482 //-------------------------------------------------------------------------- 00489 //-------------------------------------------------------------------------- 00490 RmModelOrientationChangeUndoOp( RmModelData *pRmModelData, 00491 const RmModelOrientation newModelOrientation ); 00492 00493 //-------------------------------------------------------------------------- 00501 //-------------------------------------------------------------------------- 00502 RmModelOrientationChangeUndoOp( RmModelData *pRmModelData, 00503 const RmModelOrientation newModelOrientation, 00504 const RM_TCHAR *strOpName ); 00505 00506 //-------------------------------------------------------------------------- 00510 //-------------------------------------------------------------------------- 00511 virtual ~RmModelOrientationChangeUndoOp(); 00512 00513 protected : 00514 //-------------------------------------------------------------------------- 00520 //-------------------------------------------------------------------------- 00521 virtual void Undo(); 00522 00523 //-------------------------------------------------------------------------- 00529 //-------------------------------------------------------------------------- 00530 virtual void Redo(); 00531 00532 private : 00533 RmNodeID m_nodeID; 00534 RmModelOrientation m_oldModelOrientation; 00535 RmModelOrientation m_newModelOrientation; 00536 00537 }; // End of RmModelOrientationChangeUndoOp 00538 00539 00540 //============================================================================= 00546 //============================================================================= 00547 class RM_API RmTextureOriginChangeUndoOp : public RmUndoOp 00548 { 00549 public : 00550 //-------------------------------------------------------------------------- 00557 //-------------------------------------------------------------------------- 00558 RmTextureOriginChangeUndoOp( RmTextureVariable *pRmTextureVariable, 00559 const RmTextureOrigin newTextureOrigin ); 00560 00561 //-------------------------------------------------------------------------- 00569 //-------------------------------------------------------------------------- 00570 RmTextureOriginChangeUndoOp( RmTextureVariable *pRmTextureVariable, 00571 const RmTextureOrigin newTextureOrigin, 00572 const RM_TCHAR *strOpName ); 00573 00574 //-------------------------------------------------------------------------- 00578 //-------------------------------------------------------------------------- 00579 virtual ~RmTextureOriginChangeUndoOp(); 00580 00581 protected : 00582 //-------------------------------------------------------------------------- 00588 //-------------------------------------------------------------------------- 00589 virtual void Undo(); 00590 00591 //-------------------------------------------------------------------------- 00597 //-------------------------------------------------------------------------- 00598 virtual void Redo(); 00599 00600 private : 00601 RmNodeID m_nodeID; 00602 RmTextureOrigin m_oldTextureOrigin; 00603 RmTextureOrigin m_newTextureOrigin; 00604 00605 }; // End of RmTextureOriginChangeUndoOp 00606 00607 00608 //============================================================================= 00614 //============================================================================= 00615 class RM_API RmUpdateNodeUndoOp : public RmUndoOp 00616 { 00617 public : 00618 //-------------------------------------------------------------------------- 00624 //-------------------------------------------------------------------------- 00625 RmUpdateNodeUndoOp( RmNode *pNode ); 00626 00627 //-------------------------------------------------------------------------- 00634 //-------------------------------------------------------------------------- 00635 RmUpdateNodeUndoOp( RmNode *pNode, const RM_TCHAR* strOpName ); 00636 00637 //-------------------------------------------------------------------------- 00641 //-------------------------------------------------------------------------- 00642 virtual ~RmUpdateNodeUndoOp(); 00643 00644 protected : 00645 //-------------------------------------------------------------------------- 00651 //-------------------------------------------------------------------------- 00652 virtual void Undo(); 00653 00654 //-------------------------------------------------------------------------- 00660 //-------------------------------------------------------------------------- 00661 virtual void Redo(); 00662 00663 private : 00664 RmNodeID m_nodeID; 00665 00666 RmStringT m_strOpName; 00667 00668 RmNode *m_pClonedOldNode; 00669 RmNode *m_pClonedNewNode; 00670 }; // End of RmUpdateNodeUndoOp 00671 00672 //============================================================================= 00678 //============================================================================= 00679 class RM_API RmNodeValueChangeUndoOp : public RmUndoOp 00680 { 00681 public : 00682 //-------------------------------------------------------------------------- 00688 //-------------------------------------------------------------------------- 00689 RmNodeValueChangeUndoOp( RmNode *pNode ); 00690 00691 //-------------------------------------------------------------------------- 00698 //-------------------------------------------------------------------------- 00699 RmNodeValueChangeUndoOp( RmNode *pNode, const RM_TCHAR* strOpName ); 00700 00701 //-------------------------------------------------------------------------- 00705 //-------------------------------------------------------------------------- 00706 virtual ~RmNodeValueChangeUndoOp(); 00707 00708 protected : 00709 //-------------------------------------------------------------------------- 00715 //-------------------------------------------------------------------------- 00716 virtual void Undo(); 00717 00718 //-------------------------------------------------------------------------- 00724 //-------------------------------------------------------------------------- 00725 virtual void Redo(); 00726 00727 private : 00728 RmNodeID m_nodeID; 00729 00730 RmStringT m_strOpName; 00731 00732 RmNode *m_pClonedOldNode; 00733 RmNode *m_pClonedNewNode; 00734 00735 }; // End of RmNodeValueChangeUndoOp 00736 00737 00738 //============================================================================= 00744 //============================================================================= 00745 class RM_API RmChangeActiveEffectUndoOp : public RmUndoOp 00746 { 00747 public : 00748 //-------------------------------------------------------------------------- 00755 //-------------------------------------------------------------------------- 00756 RmChangeActiveEffectUndoOp( RmEffect *pOldActiveEffect, 00757 RmEffect *pNewActiveEffect ); 00758 00759 //-------------------------------------------------------------------------- 00763 //-------------------------------------------------------------------------- 00764 virtual ~RmChangeActiveEffectUndoOp(); 00765 00766 protected : 00767 //-------------------------------------------------------------------------- 00773 //-------------------------------------------------------------------------- 00774 virtual void Undo(); 00775 00776 //-------------------------------------------------------------------------- 00782 //-------------------------------------------------------------------------- 00783 virtual void Redo(); 00784 00785 private : 00786 bool m_bSetOld; 00787 bool m_bSetNew; 00788 RmNodeID m_oldActiveEffectID; 00789 RmNodeID m_newActiveEffectID; 00790 }; // End of RmChangeActiveEffectUndoOp 00791 00792 //============================================================================= 00798 //============================================================================= 00799 class RM_API RmBeginMessageBlockUndoOp : public RmUndoOp 00800 { 00801 public : 00802 //-------------------------------------------------------------------------- 00806 //-------------------------------------------------------------------------- 00807 RmBeginMessageBlockUndoOp() : RmUndoOp( _T( "Begin Message Block Undo Op" ) ) {} 00808 00809 //-------------------------------------------------------------------------- 00813 //-------------------------------------------------------------------------- 00814 virtual ~RmBeginMessageBlockUndoOp() {} 00815 00816 protected : 00817 //-------------------------------------------------------------------------- 00823 //-------------------------------------------------------------------------- 00824 virtual void Undo() { getRmApp()->EndMessageBlock(); } 00825 00826 //-------------------------------------------------------------------------- 00832 //-------------------------------------------------------------------------- 00833 virtual void Redo() { getRmApp()->BeginMessageBlock(); } 00834 00835 }; // End of RmBeginMessageBlockUndoOp 00836 00837 //============================================================================= 00843 //============================================================================= 00844 class RM_API RmEndMessageBlockUndoOp : public RmUndoOp 00845 { 00846 public : 00847 //-------------------------------------------------------------------------- 00851 //-------------------------------------------------------------------------- 00852 RmEndMessageBlockUndoOp() : RmUndoOp( _T( "End Message Block Undo Op" ) ) {} 00853 00854 //-------------------------------------------------------------------------- 00858 //-------------------------------------------------------------------------- 00859 virtual ~RmEndMessageBlockUndoOp() {} 00860 00861 protected : 00862 //-------------------------------------------------------------------------- 00868 //-------------------------------------------------------------------------- 00869 virtual void Undo() { getRmApp()->BeginMessageBlock(); } 00870 00871 //-------------------------------------------------------------------------- 00877 //-------------------------------------------------------------------------- 00878 virtual void Redo() { getRmApp()->EndMessageBlock(); } 00879 00880 }; // End of RmEndMessageBlockUndoOp 00881 00882 #endif
1.3.6