00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef __TAKE_Manager__
00019 #define __TAKE_Manager__
00020
00021 #include "TAKE_API.h"
00022 #include <iostream.h>
00023 #include <UT/UT_PtrArray.h>
00024 #include <UT/UT_String.h>
00025 #include <UT/UT_SymbolTable.h>
00026 #include "TAKE_Event.h"
00027
00028 class UT_String;
00029 class UT_StringArray;
00030 class TAKE_Data;
00031 class TAKE_Take;
00032 class TAKE_Hash;
00033 class TAKE_StringSaver;
00034
00035 #define TAKE_MASTER_NAME "Main"
00036
00037 class TAKE_API TAKE_Manager {
00038 public:
00039 TAKE_Manager();
00040 virtual ~TAKE_Manager();
00041
00042 static TAKE_Manager *getCurrentManager();
00043 static void setCurrentManager(TAKE_Manager *mgr);
00044
00045 static bool getAutoIncludeModeFlag()
00046 { return ourAutoIncludeModeFlag; }
00047 static void setAutoIncludeModeFlag(bool state)
00048 { ourAutoIncludeModeFlag = state; }
00049
00050 static bool getAutoIncludeLockedAssetsFlag()
00051 { return ourAutoIncludeLockedAssetsFlag; }
00052 static void setAutoIncludeLockedAssetsFlag(bool state)
00053 { ourAutoIncludeLockedAssetsFlag = state; }
00054
00055 TAKE_Take *getMasterTake() { return myMasterTake; }
00056 void destroyTake(TAKE_Take *take);
00057
00058 void clear();
00059
00060 TAKE_Take *findTake(const char *name);
00061
00062 virtual void switchToTake(TAKE_Take *take,
00063 bool force_even_if_current=false);
00064
00065 bool isSwitching() const { return mySwitching; }
00066
00067
00068 void reApplyTake(TAKE_Hash &id);
00069
00070
00071
00072
00073
00074 TAKE_Take *insertTake(const char *name, const char *parent = 0);
00075
00076 TAKE_Take *getCurrentTake() { return myCurrentTake; }
00077 bool isMasterTake() { return myCurrentTake==myMasterTake; }
00078
00079 int globTakes(UT_PtrArray<TAKE_Take *> &list, const char *pattern);
00080
00081 virtual void renameTake(TAKE_Take *take, const char *newname);
00082 bool reparentTake(TAKE_Take *take, TAKE_Take *parent);
00083
00084
00085
00086
00087
00088 TAKE_Take *findDefinition(TAKE_Hash &id, TAKE_Take *from_which=0);
00089
00090 int getListSerial() const { return myListSerial; }
00091
00092 const char *getDefaultTakeName() { return myTakeName; }
00093 void setDefaultTakeName(const char *s);
00094
00095
00096
00097
00098
00099 bool mergeTake(TAKE_Take *dest, TAKE_Take *src,
00100 bool overwrite_dest=false);
00101
00102 virtual int save(ostream &os, int binary) const;
00103 virtual bool load(UT_IStream &is);
00104
00105 int copyTake(ostream &os, TAKE_Take *take,
00106 bool binary, bool recurse) const;
00107 bool pasteTake(UT_IStream &is,
00108 UT_PtrArray<TAKE_Take *> &createdTakes,
00109 TAKE_Take *under = 0);
00110
00111
00112 int stashTakeForUndo(TAKE_Take *layer,
00113 ostream &os, int binary) const;
00114
00115 bool restoreTakeForUndo(UT_IStream &is);
00116
00117
00118
00119
00120 virtual TAKE_Data *dataFactory(const char *oppath, const char *label) = 0;
00121
00122 virtual void notifyObservers(TAKE_Event::TAKE_EventType type,
00123 const char *name,
00124 const TAKE_Take *take=0);
00125
00126 UT_NotifierImpl<TAKE_Event &> &getEventNotifier(){return myEventNotifier;}
00127
00128 protected:
00129
00130
00131 int buildTakeTree(TAKE_Take *take,
00132 UT_PtrArray<TAKE_Take *> &list);
00133 int generateName(const char *name, UT_String &result);
00134
00135 UT_SymbolTable myNameSpace;
00136 TAKE_Take *myMasterTake;
00137 TAKE_Take *myCurrentTake;
00138
00139 int saveTake(TAKE_StringSaver &strings, TAKE_Take *take,
00140 ostream &os, int bin, bool recurse) const;
00141 bool loadTake(UT_StringArray &strings, TAKE_Take *parent,
00142 UT_IStream &is,
00143 UT_PtrArray<TAKE_Take *> *createdTakes);
00144
00145
00146
00147 bool isCurrentTakeActivationPending() const
00148 { return myCurrentActivationPendingFlag; }
00149
00150
00151
00152 void handlePendingTakeActivation();
00153
00154 private:
00155 TAKE_Take *createTake(TAKE_Take *parent, const char *name);
00156 void createMasterTake();
00157 void destroyMasterTake();
00158 bool saveMagic(ostream &os) const;
00159 bool loadMagic(UT_IStream &is,
00160 int &vmajor, int &vminor) const;
00161
00162 int myListSerial;
00163 UT_NotifierImpl<TAKE_Event &> myEventNotifier;
00164 UT_String myTakeName;
00165 bool mySwitching;
00166
00167
00168
00169 bool myCurrentActivationPendingFlag;
00170
00171 static bool ourAutoIncludeModeFlag;
00172 static bool ourAutoIncludeLockedAssetsFlag;
00173 };
00174
00175 #endif