vtkSlicerNodeSelectorWidget.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00021
00022
00023
00024 #ifndef __vtkSlicerNodeSelectorWidget_h
00025 #define __vtkSlicerNodeSelectorWidget_h
00026
00027 #include "vtkCallbackCommand.h"
00028
00029 #include "vtkKWMenuButtonWithSpinButtonsWithLabel.h"
00030 #include "vtkKWMenuButtonWithSpinButtons.h"
00031 #include "vtkKWMenuButton.h"
00032
00033 #include "vtkMRMLScene.h"
00034 #include "vtkMRMLNode.h"
00035
00036 #include "vtkSlicerBaseGUI.h"
00037 #include "vtkSlicerContextMenuHelper.h"
00038
00039 class vtkSlicerColorLUTIcons;
00040 class VTK_SLICER_BASE_GUI_EXPORT vtkSlicerNodeSelectorWidget : public vtkKWMenuButtonWithSpinButtonsWithLabel
00041 {
00042 public:
00043 static vtkSlicerNodeSelectorWidget* New();
00044 vtkTypeRevisionMacro(vtkSlicerNodeSelectorWidget,vtkKWMenuButtonWithSpinButtonsWithLabel);
00045 void PrintSelf(ostream& os, vtkIndent indent);
00046
00049 vtkGetObjectMacro(MRMLScene, vtkMRMLScene);
00050 void SetMRMLScene(vtkMRMLScene *MRMLScene);
00051
00057 void SetNodeClass(const char *className, const char *attName, const char* attValue, const char *nodeName);
00058
00064 void AddNodeClass(const char *className, const char *attName, const char* attValue, const char *nodeName);
00065
00068 const char* GetNodeClass(int ind) {
00069 return NodeClasses[ind].c_str();
00070 };
00071
00074 const char* GetNodeName(int ind) {
00075 return NodeNames[ind].c_str();
00076 };
00077
00080 const char* GetNodeAttributeName(int ind) {
00081 return AttributeNames[ind]==std::string("") ? NULL : AttributeNames[ind].c_str();
00082 };
00083
00086 const char* GetNodeAttributeValue(int ind) {
00087 return AttributeValues[ind]==std::string("") ? NULL : AttributeValues[ind].c_str();
00088 };
00089
00092 int GetNumberOfNodeClasses() {
00093 return (int)NodeClasses.size();
00094 };
00095
00098 vtkBooleanMacro(NewNodeEnabled, int);
00099 vtkGetMacro(NewNodeEnabled, int);
00100 vtkSetMacro(NewNodeEnabled, int);
00101
00104 vtkBooleanMacro(NoneEnabled, int);
00105 vtkGetMacro(NoneEnabled, int);
00106 vtkSetMacro(NoneEnabled, int);
00107
00111 vtkBooleanMacro(DefaultEnabled, int);
00112 vtkGetMacro(DefaultEnabled, int);
00113 vtkSetMacro(DefaultEnabled, int);
00114
00117 vtkBooleanMacro(ShowHidden, int);
00118 vtkGetMacro(ShowHidden, int);
00119 vtkSetMacro(ShowHidden, int);
00120
00124 vtkBooleanMacro(ChildClassesEnabled, int);
00125 vtkGetMacro(ChildClassesEnabled, int);
00126 vtkSetMacro(ChildClassesEnabled, int);
00127
00130 void AddExcludedChildClass(const char *className)
00131 {
00132 this->ExcludedChildClasses.push_back(className);
00133 };
00134
00137 int GetNumberOfExcludedChildClasses()
00138 {
00139 return (int)this->ExcludedChildClasses.size();
00140 };
00141
00144 const char* GetExcludedChildClass(int index)
00145 {
00146 return this->ExcludedChildClasses[index].c_str();
00147 };
00148
00149
00152 vtkMRMLNode *GetSelected();
00153
00156 void SetSelected(vtkMRMLNode *node);
00157
00160 void SetSelectedNew(const char *className);
00161
00162
00163 enum
00164 {
00165 NodeSelectedEvent = 11000,
00166 NewNodeEvent = 11001,
00167 NodeRenameEvent = 11002,
00168 NodeAddedEvent = 11003
00169 };
00170
00171
00176 void UpdateMenu();
00177 void UnconditionalUpdateMenu();
00178
00181 vtkSetObjectMacro(ContextMenuHelper, vtkSlicerContextMenuHelper);
00182 vtkGetObjectMacro(ContextMenuHelper, vtkSlicerContextMenuHelper);
00183
00186 void ClearMenu();
00187
00188 void ProcessNewNodeCommand(const char *className, const char *nodeName);
00189 void ProcessCommand(char *selectedID);
00190
00191 bool CheckNodeClass(vtkMRMLNode *node);
00193 bool HasNodeClass(const char *className);
00194
00196 void AddColorIcons();
00197
00201 vtkGetMacro(InMRMLCallbackFlag, int);
00202 void SetInMRMLCallbackFlag (int flag) {
00203 this->InMRMLCallbackFlag = flag;
00204 }
00205
00206 protected:
00207 vtkSlicerNodeSelectorWidget();
00208 virtual ~vtkSlicerNodeSelectorWidget();
00209
00210
00211
00214 virtual void CreateWidget();
00215
00216
00217 std::vector<std::string> NodeClasses;
00218 std::vector<std::string> AttributeNames;
00219 std::vector<std::string> AttributeValues;
00220 std::vector<std::string> NodeNames;
00221 std::vector<std::string> ExcludedChildClasses;
00222
00223 std::map<std::string, std::string> NodeID_to_EntryName;
00224 std::string MakeEntryName(vtkMRMLNode *node);
00225 std::string FindEntryName(vtkMRMLNode *node);
00226
00227 std::string SelectedID;
00228
00229
00230 int NewNodeEnabled;
00231
00232 int NoneEnabled;
00233
00234 int DefaultEnabled;
00235
00236 int ShowHidden;
00237
00238 int ChildClassesEnabled;
00239
00240 vtkMRMLScene *MRMLScene;
00241 vtkSlicerContextMenuHelper *ContextMenuHelper;
00242
00243 private:
00244
00245 int NewNodeCount;
00246
00247 vtkCallbackCommand *MRMLCallbackCommand;
00248
00251 int InMRMLCallbackFlag;
00252
00257 virtual bool CheckAdditionalConditions(vtkMRMLNode* vtkNotUsed(node) ){return true;}
00258
00263 virtual int AddAditionalNodes(){return 0;}
00264
00269 virtual vtkMRMLNode* GetSelectedInAdditional(){return NULL;}
00270
00272 vtkSlicerColorLUTIcons *ColorIcons;
00273
00274 vtkSlicerNodeSelectorWidget(const vtkSlicerNodeSelectorWidget&);
00275 void operator=(const vtkSlicerNodeSelectorWidget&);
00276 };
00277
00278 #endif
00279