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 static bool isOpWritten(UT_IStream &is);
00389
00390 virtual void clearUnreferencedInputs();
00391
00392
00393
00394
00395
00396
00397
00398 int getLoadCollisions(UT_IStream &is, OP_NodeList &node_list,
00399 UT_PtrArray<OP_NetworkBox *> &netbox_list,
00400 UT_PtrArray<OP_PostIt *> &pnote_list,
00401 const char *pattern = "*");
00402
00403
00404
00405
00406
00407 void simulateNameCollisions(UT_StringArray &names);
00408
00409
00410
00411
00412 void getTrees(UT_Pointers *rootlist);
00413
00414
00415
00416 const UT_PtrArray<OP_Node *> *getSortedList();
00417
00418
00419
00420 OP_Node *getAnyOutputOf(OP_Node *op) const;
00421
00422
00423
00424 OP_Node *getAnyOP() const;
00425
00426
00427 char *findUniqueGroupName(const char *basename=0);
00428 OP_Group * findGroup(const char *name) const;
00429 OP_Group * createGroup(const char *name=0);
00430 int destroyGroup(const char *name);
00431 int destroyGroup(OP_Group *group);
00432
00433 int getNgroups() const;
00434 OP_Group *getGroup(int index) const;
00435 int getGroups(UT_PtrArray<OP_Group *> &list, int internal=0);
00436 int getMemberships(const OP_Node *node,
00437 UT_PtrArray<OP_Group *> &list,
00438 int internal=0);
00439
00440 char *findUniqueNetworkBoxName(const char *base = NULL);
00441 char *findUniquePostItNoteName(const char *base = NULL);
00442
00443
00444
00445
00446 OP_NetworkBox *createNetworkBox(const char *name,
00447 OP_NetworkBoxItemList *items = NULL);
00448
00449 bool destroyNetworkBox(OP_NetworkBox *box);
00450
00451
00452 int destroyNetworkBoxes(
00453 UT_PtrArray<OP_NetworkBox *> &netboxes);
00454
00455
00456 virtual OP_NetworkBox *findNetworkBox(const char *const_path);
00457 virtual OP_PostIt* findPostItNote(const char *const_path);
00458
00459 int getNnetworkBoxes() const;
00460 int getNpostItNotes() const;
00461
00462
00463
00464 OP_NetworkBox *getNetworkBox(int index) const;
00465 OP_NetworkBox *getNetworkBox(const char *name) const;
00466
00467 OP_PostIt *getPostItNote(int index) const;
00468 OP_PostIt *getPostItNote(const char *name) const;
00469
00470 void getAllNetworkBoxes(UT_PtrArray<OP_NetworkBox *>
00471 &netboxes) const;
00472
00473
00474 void getPickedNetworkBoxes(UT_PtrArray<OP_NetworkBox *>
00475 &picked);
00476
00477 void getPickedPostItNotes(UT_PtrArray<OP_PostIt *> &picked);
00478
00479
00480
00481
00482
00483
00484 unsigned int nPicked(OP_ItemTypeMask item_type_mask,
00485 bool include_hidden_nodes);
00486
00487
00488
00489
00490 void getPickedItems(OP_ItemTypeMask item_type_mask,
00491 OP_NetworkBoxItemList &picked);
00492
00493
00494
00495
00496
00497 virtual OP_NetworkBoxItem *findItem(const char *const_path,
00498 OP_ItemTypeMask item_type =
00499 OP_ITEMTYPE_ALL);
00500
00501
00502
00503 bool isSubNode(const OP_Node *node) const;
00504
00505
00506
00507
00508
00509 void clearSelection(OP_TileType t=OP_TILE_ALL, int grouplist=0);
00510
00511
00512
00513 void setAllPickFlags(OP_ItemTypeMask item_type, int value = 0);
00514 void pickRequest(OP_NetworkBoxItem *item, int shift);
00515 void pickRequest(int shift)
00516 { OP_Node::pickRequest(shift); }
00517
00518
00519 void setPickedGroup(const OP_Group *group);
00520
00521 void addPicked(const OP_Group *group);
00522 void subPicked(const OP_Group *group);
00523
00524
00525
00526
00527
00528
00529
00530
00531
00532
00533
00534
00535
00536
00537
00538
00539
00540
00541
00542 static OP_OperatorTable *getOperatorTable(const char *op_type,
00543 const char *script_path=0);
00544 OP_OperatorTable *getOperatorTable() const
00545 { return myOperatorTable; }
00546 virtual const char *getScriptDirectory();
00547
00548
00549 virtual void clearUndoFlags();
00550
00551
00552
00553
00554 virtual bool wantsParentInputs() const;
00555
00556
00557 void getPickedParentInputs(
00558 UT_PtrArray<OP_InputIndirect *> &picked) const;
00559
00560 int getNparentInputs() const
00561 { return myParentInputs.entries(); }
00562 OP_InputIndirect *getParentInput(int index) const;
00563
00564
00565
00566
00567
00568 int getIndirectString(OP_InputIndirect *, UT_String &);
00569 OP_InputIndirect *resolveIndirectString(const char *);
00570
00571 virtual void inputConnectChanged(int which);
00572
00573 void getAllConnectedChildren(
00574 const OP_Node *node,
00575 OP_NodeList &nodes,
00576 bool expandSubnets = true ) const;
00577 void getAllConnectedChildren(
00578 int input_index, OP_NodeList &nodes,
00579 bool expandSubnets = true ) const;
00580
00581
00582
00583
00584 virtual void setViewSetting(const char *) {};
00585 virtual const char *getViewSetting() const { return ""; }
00586
00587 virtual void dumpDependencies();
00588
00589 virtual void changeParmTemplate(PRM_Template *new_template);
00590
00591 int getNumChildManagers(OP_OpTypeId type) const;
00592 void addChildManager(OP_OpTypeId type);
00593 void removeChildManager(OP_OpTypeId type);
00594 virtual bool getSaveWithVopnets();
00595 virtual void runDelScript();
00596 void clearDelScripts(int pickedOnly);
00597
00598
00599
00600
00601 virtual void unscopeChannels(bool recurse);
00602
00603
00604
00605
00606
00607 virtual void globNetworkBoxes(const char *pat, UT_String *expand,
00608 UT_PtrArray<OP_NetworkBox *> *list=0,
00609 OP_GlobContext *context = 0,
00610 const char *prefix = " ");
00611
00612 virtual void globPostIts(const char *pat, UT_String *expand,
00613 UT_PtrArray<OP_PostIt *> *list=0,
00614 OP_GlobContext *context = 0,
00615 const char *prefix = " ");
00616
00617
00618 OP_ERROR saveNetworkBoxes(ostream &os, const OP_SaveFlags &flags,
00619 const char *path_prefix);
00620 OP_ERROR savePostIts(ostream &os, const OP_SaveFlags &flags,
00621 const char *path_prefix);
00622
00623
00624
00625
00626
00627
00628 bool loadNetworkBox(UT_IStream &is,
00629 const char *path = "", int overwrite = 0,
00630 OP_NetworkBox **created = NULL);
00631
00632
00633
00634
00635
00636
00637 bool loadPostIt(UT_IStream &is,
00638 const char *path = "", int overwrite = 0,
00639 OP_PostIt **created = NULL);
00640
00641
00642 virtual OP_ERROR saveCommand(ostream &os, const char *name,
00643 int valuesOnly,
00644 int defaultstoo,
00645 int docreate,
00646 int doparms,
00647 int doflags,
00648 int dowires,
00649 int dowiresout,
00650 int frames,
00651 int dogeneral,
00652 int dochblock,
00653 float x,
00654 float y,
00655 const char *netboxname,
00656 int spareparms);
00657
00658
00659
00660
00661 int getRepresentativeNodeId(OP_Node *changed_child,
00662 int current_rep_id);
00663
00664
00665
00666
00667 bool changeChildNodeType(OP_Node *child,
00668 const char *newtype,
00669 bool keepname,
00670 bool keepparms,
00671 bool keepcontents,
00672 bool quiet,
00673 int *newChildId=NULL);
00674
00675
00676
00677 bool getIsSubNodeEditable(const OP_Node *subnode) const;
00678
00679
00680
00681 virtual void getActiveOperatorsDefinedByOTL(
00682 UT_HashTable &active_operators) const;
00683
00684
00685
00686 static void saveOTLBackupInformation(ostream &os,
00687 const OP_OperatorList &fallbackops,
00688 const OP_OperatorList &dummyops);
00689
00690
00691 OP_PostIt *createPostItNote(const char *name);
00692
00693 bool destroyPostItNote(OP_PostIt *pnote);
00694 int destroyPostItNotes(UT_PtrArray<OP_PostIt *> &pnotes);
00695
00696 protected:
00697
00698 OP_Network(OP_Network *parent, const char *name, OP_Operator *op);
00699 virtual ~OP_Network();
00700
00701 virtual void clearAndDestroy(void);
00702 void clearAndDestroyNodes(void);
00703
00704 virtual int propagateModification(OP_Node *by_whom,
00705 OP_EventType reason,
00706 int parm_index,
00707 OP_PropagateData &prop_data);
00708
00709
00710
00711
00712 virtual void buildOpDependencies();
00713 virtual void notifyRenameDependents( const UT_String &full_from,
00714 OP_NodeList &cook_nodes );
00715 virtual void notifyRenameReferences( const UT_String &full_from,
00716 OP_NodeList &cook_nodes );
00717 virtual void rebuildOpDependents( bool proxy_only );
00718
00719
00720
00721 virtual void cloneFromProxyRefNode( OP_Network *proxy );
00722
00723 virtual OP_Network * cloneToProxyRefNode();
00724 virtual int hasProxyRefNodes() const
00725 { return myProxyRefNodes.entries() > 0; }
00726 void removeProxyRefNode( OP_Network *proxy );
00727 virtual void moveProxyRefNodes( OP_Network *dest );
00728
00729 virtual void moveDependencies( OP_Node *from_node );
00730
00731
00732 virtual bool load(UT_IStream &is, const char *ext = "",
00733 const char *path = 0);
00734
00735
00736 virtual void finishedLoadingChildOrder();
00737
00738
00739 virtual void finishedLoadingNetwork();
00740
00741
00742
00743
00744
00745
00746
00747
00748 virtual bool syncContents(UT_IStream &is);
00749
00750 void setOperatorTable(OP_OperatorTable *table);
00751
00752
00753
00754 virtual void addNode(OP_Node *node, int notify=1, int explicitly=1);
00755
00756 OP_Node *findConnectedNode(OP_Node *op) const;
00757
00758
00759 void resetDisplayNodePtr(OP_Node *skipthisnode=0);
00760 void resetRenderNodePtr(OP_Node *skipthisnode=0);
00761
00762 void validateStatusNodePtrs(const OP_NodeList &skipnodes);
00763
00764 virtual void updateExtraFlagPtrs();
00765
00766 virtual void nodeUnlocked();
00767
00768 virtual bool canDestroyNode();
00769 virtual void destroySingleNode(OP_Node *node);
00770
00771
00772
00773
00774 void modifyAllChildNodeNames(bool renamepickableobjects,
00775 const char *prefix, int &id);
00776
00777
00778
00779
00780
00781
00782 virtual void traverseScope(const char *pattern,
00783 OP_ScopeOp scope_op,
00784 const OP_ScopeOptions &scope_opts);
00785
00786
00787 OP_Node *myRenderNodePtr;
00788 OP_Node *myDisplayNodePtr;
00789
00790
00791
00792 virtual void getAdditionalUndoNodes(const OP_NodeList& orig_list,
00793 OP_NodeList& nodes_for_input_undo) { }
00794
00795 private:
00796
00797 OP_ERROR saveNetwork(ostream &os, const OP_SaveFlags &flags,
00798 const OP_SaveFlags &childflags,
00799 const char *pathPrefix, bool vopnets);
00800 OP_ERROR saveChildNodes(ostream &os, const OP_SaveFlags &flags,
00801 const char *pathPrefix, bool vopnets,
00802 bool forceNoInit = false);
00803 OP_ERROR saveOp(ostream &os, OP_Node *node, const OP_SaveFlags &flags,
00804 const OP_SaveFlags &childflags, const char *pathPrefix,
00805 bool vopnets, bool forceNoInit = false);
00806 OP_ERROR savePostIt(ostream &os, OP_PostIt *pnote, const OP_SaveFlags &flags,
00807 const OP_SaveFlags &childflags, const char *pathPrefix,
00808 bool vopnets, bool forceNoInit = false);
00809 bool loadNodeType(UT_IStream &is, OP_Network *net,
00810 UT_String &nodeType, int &matches);
00811 bool loadOp(UT_IStream &is, int overwrite, const char *path);
00812 OP_UndoLoad *beginLoadUndo( OP_Node *save_ops[3] );
00813 void endLoadUndo( OP_UndoLoad *op_undo, OP_Node *save_ops[3] );
00814
00815
00816 bool syncContentsInit(UT_IStream &is,
00817 OP_Network *net, OP_Node *node,
00818 UT_String &nodeName, OP_Node *&newnode);
00819
00820 void setDoMergeFlag( bool flag ) { myDoMerge = flag; }
00821
00822
00823
00824 void initSpecialNodes(OP_NodeList &loaded_ops);
00825 void sendBulkNotifications(const OP_NodeList &loaded_ops,
00826 const OP_NodeList &op_roots,
00827 bool builddependencies);
00828 void fixPendingOverride();
00829
00830 int savePartialVerify(ostream &os);
00831 void clearParentInputs();
00832 void createParentInputs();
00833
00834
00835
00836
00837 bool buildItemRoots(UT_IStream &is, const char *mergePattern,
00838 UT_StringArray &item_roots);
00839
00840
00841
00842 void destroyAllNodesExcept(const OP_NodeList &nodes);
00843
00844
00845 void prepareCollisionNames(const OP_NetworkBoxItemList &items,
00846 UT_WorkBuffer &prefix);
00847
00848
00849 void fixLoadInputs();
00850 void fixLoadNames(const OP_NetworkBoxItemList &items,
00851 UT_WorkBuffer &prefix,
00852 const OP_FixNameParms *fix_name_parms);
00853 void sendCreationEvent();
00854 void sendPostItCreationEvent();
00855
00856 int groupCount() const;
00857 OP_ERROR saveGroupList(ostream &os, int binary = 0);
00858 bool loadGroupList(UT_IStream &is, const char *path="");
00859 OP_ERROR saveParentInputs(ostream &os, int binary = 0, int picked= 0);
00860 bool loadParentInputs(UT_IStream &is, const char *path = "");
00861 OP_ERROR saveNetworkData(ostream &os, int binary = 0, int picked= 0);
00862 bool loadNetworkData(UT_IStream &is, const char *path = "");
00863 OP_ERROR saveChildOrder(ostream &os);
00864 bool loadChildOrder(UT_IStream &is);
00865
00866
00867 void prepareOpSave(ostream &os, const OP_SaveFlags &flags,
00868 int &nsaved, int &writeTrailer,
00869 int &picked_indirects);
00870 void cleanupOpSave(ostream &os, const OP_SaveFlags &flags,
00871 int &nsaved, int &writeTrailer,
00872 int &picked_indirects);
00873
00874
00875
00876 char *findUniqueName(const char *base,
00877 OP_FindItemFunc find);
00878
00879
00880
00881 OP_ERROR savePickedOrInPickedNetboxNodes(ostream &os,
00882 const OP_SaveFlags &flags,
00883 OP_NetworkBoxSaveType netbox_save_type =
00884 OP_NETWORKBOX_SAVE_ALL_CONTENTS,
00885 int *nsaved = NULL);
00886
00887
00888
00889 OP_ERROR savePickedOrInPickedNetboxPostIts(ostream &os,
00890 const OP_SaveFlags &flags,
00891 OP_NetworkBoxSaveType netbox_save_type =
00892 OP_NETWORKBOX_SAVE_ALL_CONTENTS,
00893 int *nsaved = NULL);
00894
00895
00896 OP_ERROR savePickedNetworkBoxes(ostream &os, const OP_SaveFlags &flags,
00897 int *nsaved = NULL);
00898
00899 OP_NetworkBoxList &getNetworkBoxes();
00900 OP_PostItNoteList &getPostItNotes();
00901
00902 void changeNodeIdFromLoad(OP_Node &node, int new_id);
00903
00904 private:
00905 UT_SymbolTable mySymbols;
00906 UT_PtrArray<OP_Node *> myNodes;
00907 UT_PtrArray<OP_Network *> myProxyRefNodes;
00908 UT_PtrArray<OP_Node *> mySortedList;
00909 UT_PtrArray<OP_InputIndirect *> myParentInputs;
00910 OP_GroupList myGroups;
00911 OP_NetworkBoxList myNetworkBoxes;
00912 OP_PostItNoteList myPostItNotes;
00913 OP_OperatorTable *myOperatorTable;
00914 OP_Node *myLastLoadedOpPtr;
00915 OP_NetworkBox *myLastLoadedNetworkBox;
00916 OP_PostIt *myLastLoadedPostIt;
00917 OP_Node *myCreatedNode;
00918 OP_NetworkBox *myCreatedNetworkBox;
00919 OP_PostIt *myCreatedPostIt;
00920 UT_IntArray myEditableSubNodes;
00921
00922 float myChildScale;
00923 int myDandRCounter;
00924 short myDandROpsEqual;
00925 char myNameSortDirty;
00926 char myOpLoadedFlag;
00927 bool myDoMerge;
00928 bool mySkipBadNode;
00929
00930
00931
00932 bool myClipboardNetboxLoad;
00933
00934 int myLastInputChanged;
00935
00936 int myChildManagerCount[NUM_MANAGERS];
00937
00938 int myStashedCurrentNodeId;
00939
00940 friend class OP_Director;
00941 };
00942
00943 OP_API const UT_SymbolTable *OPgetGlobalOperatorTables();
00944 #endif