00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __SOP_UndoModel_h__
00021 #define __SOP_UndoModel_h__
00022
00023 #include "SOP_API.h"
00024 #include <UT/UT_Undo.h>
00025 #include <UT/UT_String.h>
00026
00027 class SOP_SoftLockData;
00028 class SOP_Node;
00029 class SOP_SoftLockData;
00030 class GU_Detail;
00031
00032 class SOP_API SOP_UndoModel : public UT_Undo
00033 {
00034 public:
00035 SOP_UndoModel();
00036 virtual ~SOP_UndoModel();
00037
00038 void init(unsigned char prev_lock,
00039 unsigned char new_lock,
00040 SOP_Node *sop,
00041 SOP_SoftLockData *prev_slockdata = 0,
00042 SOP_SoftLockData *new_slockdata = 0);
00043
00044 virtual void undo();
00045 virtual void redo();
00046
00047 void setName(const char *name) { myName.harden(name); }
00048 const char *getName() { return (const char *)myName; }
00049
00050 protected:
00051 typedef enum
00052 {
00053 SOPUNDOMODEL_UNDO,
00054 SOPUNDOMODEL_REDO
00055 } SOP_UndoModelOperation;
00056
00057 int hasSopUndo() { return myHasSopUndo; }
00058
00059 void doUndo(void *modeler);
00060 void doRedo(void *modeler);
00061
00062 private:
00063 void loadForHardLock(SOP_UndoModelOperation operation,
00064 void *modeler);
00065 void loadForSoftLock(SOP_UndoModelOperation operation,
00066 void *modeler);
00067 void unlockSop(SOP_UndoModelOperation operation,
00068 void *modeler);
00069
00070
00071 void createSopSlockData( SOP_SoftLockData &loaded_diff,
00072 SOP_Node *sop) const;
00073
00074 int myOpId;
00075
00076 UT_String myOldHardLockFileName;
00077 UT_String myNewHardLockFileName;
00078 UT_String mySoftLockFileName;
00079
00080 unsigned char myPrevLock;
00081 unsigned char myNewLock;
00082
00083 int myHasSopUndo;
00084
00085 UT_String myName;
00086 };
00087 #endif