Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

RmUndo.h

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

Generated on Fri Feb 25 16:08:41 2005 for RenderMonkey SDK by doxygen 1.3.6