vtkSlicerNodeSelectorWidget.h

Go to the documentation of this file.
00001 /*=auto=========================================================================
00002 
00003   Portions (c) Copyright 2005 Brigham and Women's Hospital (BWH) All Rights Reserved.
00004 
00005   See Doc/copyright/copyright.txt
00006   or http://www.slicer.org/copyright/copyright.txt for details.
00007 
00008   Program:   3D Slicer
00009   Module:    $RCSfile: vtkSlicerNodeSelectorWidget.h,v $
00010   Date:      $Date: 2010-06-11 16:45:05 -0400 (Fri, 11 Jun 2010) $
00011   Version:   $Revision: 13771 $
00012 
00013 =========================================================================auto=*/
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 //BTX
00163   enum
00164     {
00165       NodeSelectedEvent = 11000,
00166       NewNodeEvent = 11001,
00167       NodeRenameEvent = 11002,
00168       NodeAddedEvent = 11003
00169     };
00170 //ETX
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 //BTX
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 //ETX
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 

Generated on 6 Apr 2011 for Slicer3 by  doxygen 1.6.1