00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __BM_SingleOpState_H__
00022 #define __BM_SingleOpState_H__
00023
00024 #include "BM_API.h"
00025 #include <UT/UT_IntArray.h>
00026 #include <UT/UT_String.h>
00027 #include <UT/UT_SymbolTable.h>
00028 #include <PRM/PRM_Value.h>
00029 #include <PI/PI_ResourceManager.h>
00030 #include "BM_OpState.h"
00031
00032 class OP_Operator;
00033 class OP_Node;
00034 class BM_OpHandleLink;
00035 class OPUI_Dialog;
00036
00037 class BM_UndoSetNode;
00038
00039 class BM_API BM_SingleOpState : public BM_OpState
00040 {
00041 friend class BM_UndoSetNode;
00042
00043 public:
00044
00045 BM_SingleOpState(BM_OpView &view, PI_StateTemplate &templ,
00046 BM_SceneManager *scene,
00047 const char *cursor = BM_DEFAULT_CURSOR);
00048 virtual ~BM_SingleOpState(void);
00049
00050
00051 virtual int enter(BM_SimpleState::BM_EntryType how);
00052 virtual void exit (void);
00053 virtual void restart(void);
00054
00055
00056
00057
00058
00059
00060 virtual int generate(BM_SimpleState::BM_EntryType how,
00061 bool insertmode = true);
00062
00063
00064
00065 virtual void stopGenerating (void);
00066
00067
00068
00069
00070 virtual int handleNodeDeleted(OP_Node &node);
00071
00072 virtual int hasOpNode(const OP_Node &node) const;
00073
00074
00075 virtual const char *className() const;
00076
00077
00078 OP_Node *getNode(void) const;
00079
00080 virtual int getToolboxCount() const;
00081 virtual UI_Feel *getToolbox(int index) const;
00082
00083 protected:
00084
00085
00086
00087 virtual OP_Node *getChosenOp(void) const = 0;
00088
00089
00090
00091 virtual void makePIVisible(int pi_idx, int onoff);
00092
00093
00094
00095
00096 virtual void doGenerate(void);
00097
00098
00099
00100 OP_Node *createNode(const char *optype = 0,
00101 const char *nettype = 0,
00102 OP_Network *parent = 0,
00103 int explicitly = 1);
00104
00105
00106
00107
00108
00109 virtual void setNode(OP_Node *node);
00110 void setNodeId(int id);
00111
00112
00113 virtual void setNodeFlags(OP_Node &node);
00114
00115
00116 virtual void clearChosenNodeFlags();
00117
00118
00119
00120
00121 virtual void refreshBindings(int id, const char *op_type);
00122 virtual void refreshSettings(int id, const char *op_type);
00123
00124
00125
00126 OP_Node *savedNode(void) const { return mySavedOpNode; }
00127 void savedNode(OP_Node *n)
00128 {
00129 clearRestartInfo();
00130 mySavedOpNode = n;
00131 }
00132
00133
00134 virtual void initializeDialogs();
00135
00136
00137 virtual void completeDialogs();
00138
00139
00140
00141 virtual int matchesNode(OP_Node &node) const;
00142
00143
00144 virtual void removeAllDialogs();
00145
00146
00147
00148 virtual void handleDialogDeleted( OPUI_Dialog *dialog );
00149
00150
00151
00152 virtual void addAnyReselectionUndos();
00153
00154
00155
00156
00157
00158 virtual bool disconnectInputsOnRestart() const;
00159
00160 void clearOpHandleLinks();
00161
00162
00163 virtual bool allowOpMaxExportToDialog() const { return true; }
00164
00165 private:
00166
00167 void createOpHandleLinks();
00168
00169
00170
00171 void linkAllParms();
00172
00173
00174
00175 int linkSingleParm(const PI_BindingHandleInfo &bhi,
00176 const PI_BindingParmInfo &bpi,
00177 OP_Operator &op_type);
00178
00179 BM_OpHandleLink * createSingleOpHandleLink(
00180 const PI_BindingHandleInfo &bhi);
00181
00182 void clearRestartInfo();
00183 void saveRestartInfo(const OP_Node &node,
00184 const OP_NodeList &implicits);
00185 bool restoreRestartInfo(OP_Node &node);
00186
00187 protected:
00188
00189
00190 void deleteOpHandleLinks();
00191
00192
00193 int myOpNodeId;
00194 OP_Node *mySavedOpNode;
00195 OPUI_Dialog *myOpToolbox;
00196 UT_SymbolTable myHandleTable;
00197
00198
00199 UT_BitArray myHandleVisibility;
00200
00201 UT_String myRestartInfoFile;
00202 UT_IntArray myRestartOpInputs;
00203 int myRestartOpId;
00204 };
00205
00206 #endif