00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __OP_Network_h__
00021 #define __OP_Network_h__
00022
00023 #include "OP_API.h"
00024 #include <iostream.h>
00025 #include <UT/UT_String.h>
00026 #include <UT/UT_PtrArray.h>
00027 #include <UT/UT_SymbolTable.h>
00028
00029 #include "OP_Operator.h"
00030 #include "OP_GroupList.h"
00031 #include "OP_NetworkBox.h"
00032 #include "OP_NetworkBoxList.h"
00033 #include "OP_PostIt.h"
00034 #include "OP_PostItNoteList.h"
00035 #include "OP_Node.h"
00036
00037 class UT_CPIO;
00038 class UT_Pointers;
00039 class UT_WorkBuffer;
00040 class UT_StringArray;
00041 class UT_HashTable;
00042 class OP_InputIndirect;
00043 class OP_OperatorTable;
00044 class OP_Director;
00045 class OP_Group;
00046 class OP_UndoLoad;
00047 class OP_ProxyRefNode;
00048 class OP_NetworkBoxItem;
00049 class OP_PostIt;
00050
00051
00052
00053 enum OP_TileType
00054 {
00055 OP_TILE_ALL = 0xFF,
00056 OP_TILE_NODE = 0x01,
00057 OP_TILE_PARENT = 0x02,
00058 OP_TILE_GROUP = 0x04,
00059
00060
00061 OP_TILE_NOT_NODE = (OP_TILE_ALL & ~OP_TILE_NODE),
00062 OP_TILE_NOT_PARENT = (OP_TILE_ALL & ~OP_TILE_PARENT),
00063 OP_TILE_NOT_GROUP = (OP_TILE_ALL & ~OP_TILE_GROUP)
00064 };
00065
00066
00067
00068
00069
00070 enum OP_RenameAction
00071 {
00072 OP_RENAME_NO_PROPAGATE = 0x00,
00073 OP_RENAME_NORMAL = 0x01,
00074 OP_RENAME_NO_EVENTS = 0x02,
00075
00076 OP_RENAME_NO_DEPENDENCIES = 0x04,
00077
00078 OP_RENAME_NUM_ACTIONS
00079 };
00080
00081 struct OP_FixNameParms
00082 {
00083 OP_FixNameParms()
00084 {
00085 replacePrefix = 0;
00086 replaceSuffix = 0;
00087 removeTrailingDigits = 0;
00088 }
00089
00090 int replacePrefix;
00091 UT_String prefixReplaceStr;
00092 UT_String prefixStr;
00093 int replaceSuffix;
00094 UT_String suffixReplaceStr;
00095 UT_String suffixStr;
00096 int removeTrailingDigits;
00097 private:
00098
00099 OP_FixNameParms( const OP_FixNameParms © );
00100 OP_FixNameParms &operator =( const OP_FixNameParms © );
00101 };
00102
00103
00104
00105
00106 class OP_API OP_OperatorFilter
00107 {
00108 public:
00109 OP_OperatorFilter() { }
00110 virtual ~OP_OperatorFilter() { }
00111
00112 virtual bool allowOperatorAsChild(OP_Operator *) { return true; }
00113 };
00114
00115 typedef void *(OP_Network::*OP_FindItemFunc) (const char *);
00116
00117 class OP_API OP_Network : public OP_Node
00118 {
00119 public:
00120 static const char *getScriptFromTable(const char *table);
00121 static const char *getOpTypeFromTable(const char *table);
00122
00123
00124 virtual int getNchildren() const;
00125 virtual OP_Node *getChild(const char *name=0, int *hint=0) const;
00126 virtual OP_Node *getChild(int index) const;
00127 virtual int getChildIndex(const OP_Node *) const;
00128
00129
00130
00131 void getPickedOrInPickedNetboxChildren(OP_NodeList &list);
00132 void getPickedOrInPicketNetboxPostIts(UT_PtrArray<OP_PostIt*> &list);
00133
00134 int getNitems() const;
00135 OP_NetworkBoxItem *getItem(int index) const;
00136 int getItemIndex(const OP_NetworkBoxItem *item) const;
00137
00138
00139
00140
00141 virtual int isNetwork() const;
00142
00143 virtual int getDandROpsEqual();
00144 virtual int updateDandROpsEqual(int check_inputs = 1);
00145
00146
00147
00148
00149
00150
00151 virtual void moveChildIndex(int srcindex, int dstindex);
00152
00153
00154
00155
00156
00157 virtual const char *getChildType() const;
00158 virtual OP_OpTypeId getChildTypeID() const = 0;
00159
00160 int getTemplateOps(UT_PtrArray<OP_Node *> &list);
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170 int getOpsByName(const char *op_name,
00171 UT_PtrArray<OP_Node *> &list);
00172
00173 OP_Node *peekCurrentNodePtr();
00174 OP_Node *getCurrentNodePtr();
00175
00176 void stashCurrentNodePtr(const OP_Node *child);
00177 OP_Node * getStashedCurrentNodePtr() const;
00178
00179 virtual OP_Node *getDisplayNodePtr();
00180 virtual OP_Node *getRenderNodePtr();
00181 virtual CHOP_Node *getAudioNodePtr();
00182
00183 virtual void childDeleted(OP_Node *);
00184 virtual void childUIChange(OP_Node *);
00185 virtual void childFlagChange(OP_Node *);
00186
00187 float getChildrenScale() const { return myChildScale; }
00188 void setChildrenScale(float scale);
00189
00190
00191
00192 virtual OP_OperatorFilter *getOperatorFilter();
00193
00194
00195
00196
00197
00198
00199 OP_Node *createNode(const char *type, const char *name = 0,
00200 int notify = 1, int explicitly = 1,
00201 int loadcontents = 1,
00202 int *aliasedScriptedOp = 0,
00203 char *matIconFilename = 0);
00204
00205
00206
00207 virtual OP_Network *createProxyRefNode( const char *path );
00208
00209 OP_Node *copyNode(const OP_Node *srcnode,
00210 const char *toname = 0,
00211 int reference_parameters = 0);
00212
00213
00214
00215
00216
00217
00218
00219 OP_NetworkBox *copyNetworkBox(OP_NetworkBox *srcnetbox,
00220 OP_NetworkBoxSaveType save_type,
00221 OP_NodeList *nodes = NULL,
00222 const char *toname = 0,
00223 int reference_parameters = 0);
00224
00225 OP_PostIt *copyPostItNote(OP_PostIt *src_note,
00226 const char *toname = 0);
00227
00228 void copyPickedNodes(const OP_Network *srcnet,
00229 OP_Group *newnodes=0,
00230 const OP_FixNameParms *fix_name_parms=0);
00231
00232
00233
00234
00235
00236 virtual bool movePickedNodes(OP_Network *src_net,
00237 OP_NodeList *src_nodes_ptr=NULL,
00238 OP_NodeList *dest_nodes_ptr=NULL);
00239
00240 int destroyNode(OP_Node *node);
00241 int destroyNodes(const OP_NodeList &nodes);
00242
00243 virtual int renameNode(OP_Node *node, const char *name,
00244 OP_RenameAction action = OP_RENAME_NORMAL);
00245
00246
00247
00248 OP_Network * findOrCreateMotionEffectsNetwork(bool create=true);
00249
00250
00251
00252
00253
00254
00255
00256
00257 OP_Node *deleteImplicitAncestors(OP_Node &node,
00258 const char *state = 0, OP_Node *keep_node = 0,
00259 bool included = true);
00260
00261
00262 OP_Node *getImplicitAncestors(
00263 OP_NodeList &implicit_nodes,
00264 OP_NodeList &border_nodes,
00265 OP_Node &node,
00266 const char *state = 0, OP_Node *keep_node = 0,
00267 bool included = true);
00268
00269
00270 int getAllCollections(UT_PtrArray<CH_Collection *> &list,
00271 int hide=0);
00272
00273
00274
00275
00276
00277 void uniqueNodeName(UT_String &name,
00278 UT_SymbolTable *fakeChildren = 0);
00279
00280
00281
00282
00283 virtual int isInvalidName(const char *name);
00284
00285 static void fixName( const char *name,
00286 const OP_FixNameParms &fix_name_parms,
00287 UT_String &fixed_name );
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298 OP_ERROR savePickedItems(ostream &os, const OP_SaveFlags &flags,
00299 OP_ItemTypeMask item_type,
00300 OP_NetworkBoxSaveType netbox_save_type =
00301 OP_NETWORKBOX_SAVE_ALL_CONTENTS);
00302
00303
00304
00305
00306 OP_ERROR saveAllItems(ostream &os, const OP_SaveFlags &flags,
00307 OP_ItemTypeMask item_type);
00308
00309
00310
00311
00312
00313
00314 OP_ERROR saveItemsInNetworkBox(ostream &os, const OP_SaveFlags &flags,
00315 OP_NetworkBox &netbox,
00316 OP_NetworkBoxSaveType save_type,
00317 OP_NodeList *nodes = NULL,
00318 int *nsaved = NULL);
00319
00320
00321
00322
00323 OP_ERROR saveSingle(ostream &os, OP_Node *op,
00324 const OP_SaveFlags &flags);
00325
00326
00327 OP_ERROR saveSingle(ostream &os, OP_Node *op,
00328 const OP_SaveFlags &flags,
00329 const OP_SaveFlags &childflags);
00330
00331
00332
00333
00334
00335
00336 OP_ERROR saveSingleNetworkBox(ostream &os, OP_NetworkBox &netbox,
00337 const OP_SaveFlags &flags,
00338 OP_NetworkBoxSaveType save_type,
00339 OP_NodeList *nodes = NULL);
00340
00341
00342 OP_ERROR saveSinglePostIt(ostream &os, OP_PostIt &pnote, const OP_SaveFlags &flags);
00343
00344
00345
00346
00347 OP_ERROR saveOpList(ostream &os, const UT_PtrArray<OP_Node *> &op_list,
00348 const OP_SaveFlags &save_flags,
00349 bool skip_nodes_in_marked_netboxes = false,
00350 int *nsaved = NULL);
00351
00352
00353
00354
00355 OP_ERROR saveNetworkBoxList(ostream &os,
00356 const UT_PtrArray<OP_NetworkBox *>
00357 &netbox_list,
00358 const OP_SaveFlags &flags,
00359 OP_NetworkBoxSaveType save_type,
00360 int *nsaved = NULL);
00361
00362
00363 OP_ERROR saveItemList(ostream &os,
00364 const OP_NetworkBoxItemList &item_list,
00365 const OP_SaveFlags &save_flags,
00366 const OP_NetworkBoxSaveType save_type);
00367
00368 const char *getClipboardFile();
00369
00370
00371
00372
00373 int saveToClipboard(int all, OP_TileType type=OP_TILE_NODE,
00374 int grouplist=0,
00375 OP_ItemTypeMask item_type = OP_ITEMTYPE_NODE);
00376 int loadFromClipboard(float x = 0, float y = 0,
00377 int turn_off_display = 0);
00378
00379
00380
00381
00382 bool loadNetwork(UT_IStream &is, int merge = 0,
00383 const char *pattern = 0, int overwrite = 0,
00384 const OP_FixNameParms *fix_name_parms = 0);
00385
00386 bool pasteNetworkForMove(UT_IStream &is);
00387
00388 virtual bool opShouldHandleChange(OP_EventType reason);
00389
00390 static bool isOpWritten(UT_IStream &is);
00391
00392 virtual void clearUnreferencedInputs();
00393
00394
00395
00396
00397
00398
00399
00400 int getLoadCollisions(UT_IStream &is, OP_NodeList &node_list,
00401 UT_PtrArray<OP_NetworkBox *> &netbox_list,
00402 UT_PtrArray<OP_PostIt *> &pnote_list,
00403 const char *pattern = "*");
00404
00405
00406
00407
00408
00409 void simulateNameCollisions(UT_StringArray &names);
00410
00411
00412
00413
00414 void getTrees(UT_Pointers *rootlist);
00415
00416
00417
00418 const UT_PtrArray<OP_Node *> *getSortedList();
00419
00420
00421
00422 OP_Node *getAnyOutputOf(OP_Node *op) const;
00423
00424
00425
00426 OP_Node *getAnyOP() const;
00427
00428
00429 char *findUniqueGroupName(const char *basename=0);
00430 OP_Group * findGroup(const char *name) const;
00431 OP_Group * createGroup(const char *name=0);
00432 int destroyGroup(const char *name);
00433 int destroyGroup(OP_Group *group);
00434
00435 int getNgroups() const;
00436 OP_Group *getGroup(int index) const;
00437 int getGroups(UT_PtrArray<OP_Group *> &list, int internal=0);
00438 int getMemberships(const OP_Node *node,
00439 UT_PtrArray<OP_Group *> &list,
00440 int internal=0);
00441
00442 char *findUniqueNetworkBoxName(const char *base = NULL);
00443 char *findUniquePostItNoteName(const char *base = NULL);
00444
00445
00446
00447
00448 OP_NetworkBox *createNetworkBox(const char *name,
00449 OP_NetworkBoxItemList *items = NULL);
00450
00451 bool destroyNetworkBox(OP_NetworkBox *box);
00452
00453
00454 int destroyNetworkBoxes(
00455 UT_PtrArray<OP_NetworkBox *> &netboxes);
00456
00457
00458 virtual OP_NetworkBox *findNetworkBox(const char *const_path);
00459 virtual OP_PostIt* findPostItNote(const char *const_path);
00460
00461 int getNnetworkBoxes() const;
00462 int getNpostItNotes() const;
00463
00464
00465
00466 OP_NetworkBox *getNetworkBox(int index) const;
00467 OP_NetworkBox *getNetworkBox(const char *name) const;
00468
00469 OP_PostIt *getPostItNote(int index) const;
00470 OP_PostIt *getPostItNote(const char *name) const;
00471
00472 void getAllNetworkBoxes(UT_PtrArray<OP_NetworkBox *>
00473 &netboxes) const;
00474
00475
00476 void getPickedNetworkBoxes(UT_PtrArray<OP_NetworkBox *>
00477 &picked);
00478
00479 void getPickedPostItNotes(UT_PtrArray<OP_PostIt *> &picked);
00480
00481
00482
00483
00484
00485
00486 unsigned int nPicked(OP_ItemTypeMask item_type_mask,
00487 bool include_hidden_nodes);
00488
00489
00490
00491
00492 void getPickedItems(OP_ItemTypeMask item_type_mask,
00493 OP_NetworkBoxItemList &picked,
00494 bool include_hidden = false);
00495
00496
00497
00498
00499
00500 virtual OP_NetworkBoxItem *findItem(const char *const_path,
00501 OP_ItemTypeMask item_type =
00502 OP_ITEMTYPE_ALL);
00503
00504
00505
00506 bool isSubNode(const OP_Node *node) const;
00507
00508
00509
00510
00511
00512 void clearSelection(OP_TileType t=OP_TILE_ALL, int grouplist=0);
00513
00514
00515
00516 void setAllPickFlags(OP_ItemTypeMask item_type, int value = 0);
00517 void pickRequest(OP_NetworkBoxItem *item, int shift);
00518 void pickRequest(int shift)
00519 { OP_Node::pickRequest(shift); }
00520
00521
00522 void setPickedGroup(const OP_Group *group);
00523
00524 void addPicked(const OP_Group *group);
00525 void subPicked(const OP_Group *group);
00526
00527
00528
00529
00530
00531
00532
00533
00534
00535
00536
00537
00538
00539
00540
00541
00542
00543
00544
00545 static OP_OperatorTable *getOperatorTable(const char *op_type,
00546 const char *script_path=0);
00547 OP_OperatorTable *getOperatorTable() const
00548 { return myOperatorTable; }
00549 virtual const char *getScriptDirectory();
00550
00551
00552 virtual void clearUndoFlags();
00553
00554
00555
00556
00557 virtual bool wantsParentInputs() const;
00558
00559
00560 void getPickedParentInputs(
00561 UT_PtrArray<OP_InputIndirect *> &picked) const;
00562
00563 int getNparentInputs() const
00564 { return myParentInputs.entries(); }
00565 OP_InputIndirect *getParentInput(int index) const;
00566
00567
00568
00569
00570
00571 int getIndirectString(OP_InputIndirect *, UT_String &);
00572 OP_InputIndirect *resolveIndirectString(const char *);
00573
00574 virtual void inputConnectChanged(int which);
00575
00576 void getAllConnectedChildren(
00577 const OP_Node *node,
00578 OP_NodeList &nodes,
00579 bool expandSubnets = true ) const;
00580 void getAllConnectedChildren(
00581 int input_index, OP_NodeList &nodes,
00582 bool expandSubnets = true ) const;
00583
00584
00585
00586
00587 virtual void setViewSetting(const char *) {};
00588 virtual const char *getViewSetting() const { return ""; }
00589
00590 virtual void dumpDependencies();
00591
00592 virtual void changeParmTemplate(PRM_Template *new_template);
00593
00594 int getNumChildManagers(OP_OpTypeId type) const;
00595 void addChildManager(OP_OpTypeId type);
00596 void removeChildManager(OP_OpTypeId type);
00597 virtual bool getSaveWithVopnets();
00598 virtual void runDelScript();
00599 void clearDelScripts(int pickedOnly);
00600
00601
00602
00603
00604 virtual void unscopeChannels(bool recurse);
00605
00606
00607
00608
00609
00610 virtual void globNetworkBoxes(const char *pat, UT_String *expand,
00611 UT_PtrArray<OP_NetworkBox *> *list=0,
00612 OP_GlobContext *context = 0,
00613 const char *prefix = " ");
00614
00615 virtual void globPostIts(const char *pat, UT_String *expand,
00616 UT_PtrArray<OP_PostIt *> *list=0,
00617 OP_GlobContext *context = 0,
00618 const char *prefix = " ");
00619
00620
00621 OP_ERROR saveNetworkBoxes(ostream &os, const OP_SaveFlags &flags,
00622 const char *path_prefix);
00623 OP_ERROR savePostIts(ostream &os, const OP_SaveFlags &flags,
00624 const char *path_prefix);
00625
00626
00627
00628
00629
00630
00631 bool loadNetworkBox(UT_IStream &is,
00632 const char *path = "", int overwrite = 0,
00633 OP_NetworkBox **created = NULL);
00634
00635
00636
00637
00638
00639
00640 bool loadPostIt(UT_IStream &is,
00641 const char *path = "", int overwrite = 0,
00642 OP_PostIt **created = NULL);
00643
00644
00645 virtual OP_ERROR saveCommand(ostream &os, const char *name,
00646 int valuesOnly,
00647 int defaultstoo,
00648 int docreate,
00649 int doparms,
00650 int doflags,
00651 int dowires,
00652 int dowiresout,
00653 int frames,
00654 int dogeneral,
00655 int dochblock,
00656 float x,
00657 float y,
00658 const char *netboxname,
00659 int spareparms);
00660
00661
00662
00663
00664 int getRepresentativeNodeId(OP_Node *changed_child,
00665 int current_rep_id);
00666
00667
00668
00669
00670 bool changeChildNodeType(OP_Node *child,
00671 const char *newtype,
00672 bool keepname,
00673 bool keepparms,
00674 bool keepcontents,
00675 bool quiet,
00676 int *newChildId=NULL);
00677
00678
00679
00680 bool getIsSubNodeEditable(const OP_Node *subnode) const;
00681
00682
00683
00684 bool getMessageSubNodes(OP_NodeList &list) const;
00685
00686
00687
00688 virtual void getActiveOperatorsDefinedByOTL(
00689 UT_HashTable &active_operators) const;
00690
00691
00692
00693 static void saveOTLBackupInformation(ostream &os,
00694 const OP_OperatorList &fallbackops,
00695 const OP_OperatorList &dummyops);
00696
00697
00698 OP_PostIt *createPostItNote(const char *name);
00699
00700 void getAllPostItNotes(UT_PtrArray<OP_PostIt *>& pnotes_list) const;
00701
00702 bool destroyPostItNote(OP_PostIt *pnote);
00703 int destroyPostItNotes(UT_PtrArray<OP_PostIt *> &pnotes);
00704
00705 protected:
00706
00707 OP_Network(OP_Network *parent, const char *name, OP_Operator *op);
00708 virtual ~OP_Network();
00709
00710 virtual void clearAndDestroy(void);
00711 void clearAndDestroyNodes(void);
00712
00713 virtual int propagateModification(OP_Node *by_whom,
00714 OP_EventType reason,
00715 int parm_index,
00716 OP_PropagateData &prop_data);
00717
00718
00719
00720
00721 virtual void buildOpDependencies();
00722 virtual void notifyRenameDependents( const UT_String &full_from,
00723 OP_NodeList &cook_nodes );
00724 virtual void notifyRenameReferences( const UT_String &full_from,
00725 OP_NodeList &cook_nodes );
00726 virtual void rebuildOpDependents( bool proxy_only );
00727
00728
00729
00730 virtual void cloneFromProxyRefNode( OP_Network *proxy );
00731
00732 virtual OP_Network * cloneToProxyRefNode();
00733 virtual int hasProxyRefNodes() const
00734 { return myProxyRefNodes.entries() > 0; }
00735 void removeProxyRefNode( OP_Network *proxy );
00736 virtual void moveProxyRefNodes( OP_Network *dest );
00737
00738 virtual void moveDependencies( OP_Node *from_node );
00739
00740
00741 virtual bool load(UT_IStream &is, const char *ext = "",
00742 const char *path = 0);
00743
00744
00745 virtual void finishedLoadingChildOrder();
00746
00747
00748
00749
00750 virtual void finishedLoadingNetwork(bool is_child_call=false);
00751
00752
00753
00754
00755
00756
00757
00758
00759 virtual bool syncContents(UT_IStream &is);
00760
00761 void setOperatorTable(OP_OperatorTable *table);
00762
00763
00764
00765 virtual void addNode(OP_Node *node, int notify=1, int explicitly=1);
00766
00767 OP_Node *findConnectedNode(OP_Node *op) const;
00768
00769
00770 void resetDisplayNodePtr(OP_Node *skipthisnode=0);
00771 void resetRenderNodePtr(OP_Node *skipthisnode=0);
00772
00773 void validateStatusNodePtrs(const OP_NodeList &skipnodes);
00774
00775 virtual void updateExtraFlagPtrs();
00776
00777 virtual void nodeUnlocked();
00778
00779 virtual bool canDestroyNode();
00780 virtual void destroySingleNode(OP_Node *node);
00781
00782
00783
00784
00785 void modifyAllChildNodeNames(bool renamepickableobjects,
00786 const char *prefix, int &id);
00787
00788
00789
00790
00791
00792
00793 virtual void traverseScope(const char *pattern,
00794 OP_ScopeOp scope_op,
00795 const OP_ScopeOptions &scope_opts);
00796
00797
00798 OP_Node *myRenderNodePtr;
00799 OP_Node *myDisplayNodePtr;
00800
00801
00802
00803 virtual void getAdditionalUndoNodes(const OP_NodeList& orig_list,
00804 OP_NodeList& nodes_for_input_undo) { }
00805
00806 private:
00807
00808 OP_ERROR saveNetwork(ostream &os, const OP_SaveFlags &flags,
00809 const OP_SaveFlags &childflags,
00810 const char *pathPrefix, bool vopnets);
00811 OP_ERROR saveChildNodes(ostream &os, const OP_SaveFlags &flags,
00812 const char *pathPrefix, bool vopnets,
00813 bool forceNoInit = false);
00814 OP_ERROR saveOp(ostream &os, OP_Node *node, const OP_SaveFlags &flags,
00815 const OP_SaveFlags &childflags, const char *pathPrefix,
00816 bool vopnets, bool forceNoInit = false);
00817 OP_ERROR savePostIt(ostream &os, OP_PostIt *pnote, const OP_SaveFlags &flags,
00818 const OP_SaveFlags &childflags, const char *pathPrefix,
00819 bool vopnets, bool forceNoInit = false);
00820 bool loadNodeType(UT_IStream &is, OP_Network *net,
00821 UT_String &nodeType, int &matches);
00822 bool loadOp(UT_IStream &is, int overwrite, const char *path);
00823 OP_UndoLoad *beginLoadUndo( OP_Node *save_ops[3] );
00824 void endLoadUndo( OP_UndoLoad *op_undo, OP_Node *save_ops[3] );
00825
00826
00827 bool syncContentsInit(UT_IStream &is,
00828 OP_Network *net, OP_Node *node,
00829 UT_String &nodeName, OP_Node *&newnode);
00830
00831
00832
00833 void syncContentsClearNetboxesFromNonInitSubNodes(OP_Network *net);
00834
00835
00836 void clearContentsOfEditableSubNodes();
00837
00838 void setDoMergeFlag( bool flag ) { myDoMerge = flag; }
00839
00840
00841
00842 void initSpecialNodes(OP_NodeList &loaded_ops);
00843 void sendBulkNotifications(const OP_NodeList &loaded_ops,
00844 const OP_NodeList &op_roots,
00845 bool builddependencies);
00846 void fixPendingOverride();
00847
00848 int savePartialVerify(ostream &os);
00849 void clearParentInputs();
00850 void createParentInputs();
00851
00852
00853
00854
00855 bool buildItemRoots(UT_IStream &is, const char *mergePattern,
00856 UT_StringArray &item_roots);
00857
00858
00859
00860 void destroyAllNodesExcept(const OP_NodeList &nodes);
00861
00862
00863 void prepareCollisionNames(const OP_NetworkBoxItemList &items,
00864 UT_WorkBuffer &prefix);
00865
00866
00867 void fixLoadInputs();
00868 void fixLoadNames(const OP_NetworkBoxItemList &items,
00869 UT_WorkBuffer &prefix,
00870 const OP_FixNameParms *fix_name_parms);
00871 void sendCreationEvent();
00872 void sendPostItCreationEvent();
00873
00874 int groupCount() const;
00875 OP_ERROR saveGroupList(ostream &os, int binary = 0);
00876 bool loadGroupList(UT_IStream &is, const char *path="");
00877 OP_ERROR saveParentInputs(ostream &os, int binary = 0, int picked= 0);
00878 bool loadParentInputs(UT_IStream &is, const char *path = "");
00879 OP_ERROR saveNetworkData(ostream &os, int binary = 0, int picked= 0);
00880 bool loadNetworkData(UT_IStream &is, const char *path = "");
00881 OP_ERROR saveChildOrder(ostream &os);
00882 bool loadChildOrder(UT_IStream &is);
00883
00884
00885 void prepareOpSave(ostream &os, const OP_SaveFlags &flags,
00886 int &nsaved, int &writeTrailer,
00887 int &picked_indirects);
00888 void cleanupOpSave(ostream &os, const OP_SaveFlags &flags,
00889 int &nsaved, int &writeTrailer,
00890 int &picked_indirects);
00891
00892
00893
00894 char *findUniqueName(const char *base,
00895 OP_FindItemFunc find);
00896
00897
00898
00899 OP_ERROR savePickedOrInPickedNetboxNodes(ostream &os,
00900 const OP_SaveFlags &flags,
00901 OP_NetworkBoxSaveType netbox_save_type =
00902 OP_NETWORKBOX_SAVE_ALL_CONTENTS,
00903 int *nsaved = NULL);
00904
00905
00906
00907 OP_ERROR savePickedOrInPickedNetboxPostIts(ostream &os,
00908 const OP_SaveFlags &flags,
00909 OP_NetworkBoxSaveType netbox_save_type =
00910 OP_NETWORKBOX_SAVE_ALL_CONTENTS,
00911 int *nsaved = NULL);
00912
00913
00914 OP_ERROR savePickedNetworkBoxes(ostream &os, const OP_SaveFlags &flags,
00915 int *nsaved = NULL);
00916
00917 OP_NetworkBoxList &getNetworkBoxes();
00918 OP_PostItNoteList &getPostItNotes();
00919
00920 void changeNodeIdFromLoad(OP_Node &node, int new_id);
00921
00922 private:
00923 UT_SymbolTable mySymbols;
00924 UT_PtrArray<OP_Node *> myNodes;
00925 UT_PtrArray<OP_Network *> myProxyRefNodes;
00926 UT_PtrArray<OP_Node *> mySortedList;
00927 UT_PtrArray<OP_InputIndirect *> myParentInputs;
00928 OP_GroupList myGroups;
00929 OP_NetworkBoxList myNetworkBoxes;
00930 OP_PostItNoteList myPostItNotes;
00931 OP_OperatorTable *myOperatorTable;
00932 OP_Node *myLastLoadedOpPtr;
00933 OP_NetworkBox *myLastLoadedNetworkBox;
00934 OP_PostIt *myLastLoadedPostIt;
00935 OP_Node *myCreatedNode;
00936 OP_NetworkBox *myCreatedNetworkBox;
00937 OP_PostIt *myCreatedPostIt;
00938 UT_IntArray myEditableSubNodes;
00939
00940 float myChildScale;
00941 int myDandRCounter;
00942 short myDandROpsEqual;
00943 char myNameSortDirty;
00944 char myOpLoadedFlag;
00945 bool myDoMerge;
00946 bool mySkipBadNode;
00947
00948
00949
00950 bool myClipboardNetboxLoad;
00951
00952 int myLastInputChanged;
00953
00954 int myChildManagerCount[NUM_MANAGERS];
00955
00956 int myStashedCurrentNodeId;
00957
00958 friend class OP_Director;
00959 };
00960
00961 OP_API const UT_SymbolTable *OPgetGlobalOperatorTables();
00962 #endif