00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __BM_OpState_H__
00022 #define __BM_OpState_H__
00023
00024 #include "BM_API.h"
00025 #include <UT/UT_SymbolTable.h>
00026 #include <UI/UI_LookType.h>
00027 #include <PRM/PRM_Template.h>
00028 #include "BM_State.h"
00029
00030 class OP_Node;
00031 class BM_OpView;
00032 class UI_Feel;
00033 class SI_Folders;
00034 class BM_SceneManager;
00035 class OPUI_Dialog;
00036
00037 class opbm_DialogInfo;
00038 class opbm_PIContext;
00039
00040
00041
00042 #define BM_DEFAULT_CURSOR "iris"
00043
00044 class BM_API BM_OpState : public BM_State
00045 {
00046 public:
00047
00048 BM_OpState(BM_OpView &view, PI_StateTemplate &templ,
00049 BM_SceneManager *sceneManager,
00050 const char *cursor = BM_DEFAULT_CURSOR);
00051 virtual ~BM_OpState(void);
00052
00053
00054 virtual int handleMouseEvent (UI_Event *event);
00055
00056
00057 virtual const char *className() const;
00058
00059 virtual void prepareDialogForDisplay() const;
00060 virtual int hasDialog() const;
00061 virtual UI_Feel *dialogFeel() const;
00062
00063 virtual int findPI(BM_OpHandleLink *pi) const;
00064
00065
00066
00067 static int getAutoHighlightFlag() { return theAutoHighlightFlag;}
00068 static void setAutoHighlightFlag(int o)
00069 { theAutoHighlightFlag = o; }
00070
00071 float getTime() const;
00072
00073 protected:
00074 BM_OpView &baseViewer() { return myViewer; }
00075 const BM_OpView &baseViewer() const { return myViewer; }
00076
00077
00078
00079 virtual void interrupt(BM_SimpleState * = 0);
00080 virtual void resume (BM_SimpleState * = 0);
00081
00082
00083 virtual int handleKeyTypeEvent(UI_Event *event,
00084 BM_Viewport &viewport);
00085
00086
00087
00088
00089
00090
00091 int createPI(const char *pi_name, int opnum = -1,
00092 const char *description = 0);
00093
00094 int appendPI(BM_OpHandleLink *pi, int opnum = -1);
00095 virtual void removePI(int pi_idx);
00096 void removeAllLinkedPIs();
00097 BM_OpHandleLink *pi(int index);
00098 const BM_OpHandleLink *pi(int index) const;
00099 BM_OpHandleLink *pi(const char *name);
00100 const BM_OpHandleLink *pi(const char *name) const;
00101
00102 const char *piDescription(int index) const;
00103 int piOpnum(int index) const;
00104 int numPIs() const { return myPIs.entries(); }
00105
00106
00107
00108
00109 virtual void makePIVisible(int pi_idx, int onoff);
00110
00111
00112 int appendFolder(const char *folder_name);
00113 void appendFeelToFolder(const char *folder_name,
00114 UI_Feel *child_feel);
00115 int appendDialogToFolder(const char *folder_name,
00116 BM_ParmState &state_or_handle);
00117 int appendDialogToFolder(const char *folder_name,
00118 OP_Node &op_node,
00119 PRM_Template::PRM_Export export_level);
00120 int appendThisStateDialogToFolder(const char *folder_name);
00121 int appendDividerToFolder(const char *folder_name);
00122 int appendTextToFolder(
00123 const char *folder_name, const char *text,
00124 UI_LookType look_type = UI_LOOK_HEADING_TEXT);
00125 int removeDialog(BM_ParmState &state);
00126 int removeDialog(OP_Node &op_node,
00127 PRM_Template::PRM_Export export_level);
00128 int removeFolder(const char *name);
00129
00130
00131 void switchToFolder(const char *name);
00132
00133
00134
00135 virtual void handleDialogDeleted( OPUI_Dialog *deleted_dialog );
00136
00137
00138
00139 virtual void removeAllDialogs();
00140 void handlePIButtonChange(UI_Event *event);
00141
00142
00143
00144
00145 void connectNode(OP_Node &newnode, OP_Node &inputnode,
00146 int input_idx = 0, int branch_off = 0);
00147
00148
00149 void stampNode(OP_Node &newnode);
00150
00151
00152
00153 virtual int matchesNode(OP_Node &node) const = 0;
00154
00155 BM_OpView &myViewer;
00156
00157 UT_PtrArray<opbm_DialogInfo *> myDialogs;
00158 UT_PtrArray<opbm_PIContext *> myPIs;
00159 UT_PtrArray<UI_Feel *> myMiscFeels;
00160 SI_Folders *myFolders;
00161
00162 static const char *STATE_DIALOG_FOLDER;
00163 static const char *HANDLES_FOLDER;
00164 static const char *OP_DIALOG_FOLDER;
00165 static int theAutoHighlightFlag;
00166
00167 private:
00168
00169
00170 void dialogDeletedCallback( UI_Event* event );
00171
00172 };
00173
00174 #endif