vtkChangeTrackerGUI.h

Go to the documentation of this file.
00001 #ifndef __vtkChangeTrackerGUI_h
00002 #define __vtkChangeTrackerGUI_h
00003 
00004 #include "vtkSlicerModuleGUI.h"
00005 #include "vtkChangeTracker.h"
00006 #include "vtkSlicerSliceLogic.h"
00007 #include "vtkKWScale.h"
00008 
00009 #define TUTORIAL_XNAT_SCENE "http://xnd.slicer.org:8000/data/20090803T130148Z/ChangetrackerTutorial2009.mrml"
00010 
00011 class vtkChangeTrackerLogic;
00012 class vtkMRMLChangeTrackerNode;
00013 class vtkKWWizardWidget;
00014 class vtkChangeTrackerFirstScanStep;
00015 class vtkChangeTrackerROIStep;
00016 class vtkChangeTrackerSegmentationStep;
00017 class vtkChangeTrackerTypeStep;
00018 class vtkChangeTrackerAnalysisStep;
00019 class vtkImageData;
00020 class vtkMRMLROINode;
00021 class vtkKWPushButton;
00022 
00023 class VTK_CHANGETRACKER_EXPORT vtkChangeTrackerGUI : 
00024   public vtkSlicerModuleGUI
00025 {
00026 public:
00027   static vtkChangeTrackerGUI *New();
00028   vtkTypeMacro(vtkChangeTrackerGUI,vtkSlicerModuleGUI);
00029   void PrintSelf(ostream& os, vtkIndent indent);
00030 
00031   // Description: Get the categorization of the module.
00032   const char *GetCategory() const { return "Wizards"; }
00033 
00034   // Description: 
00035   // Get/Set logic node
00036   vtkGetObjectMacro(Logic, vtkChangeTrackerLogic);
00037   virtual void SetLogic(vtkChangeTrackerLogic*);
00038   
00039 
00040   // Description:
00041   // Set the logic pointer from parent class pointer.
00042   // Overloads implementation in vtkSlicerModulesGUI
00043   // to allow loadable modules.
00044   virtual void SetModuleLogic ( vtkSlicerLogic *logic )
00045   {
00046     this->SetLogic(reinterpret_cast<vtkChangeTrackerLogic*> (logic)); 
00047   }
00048 
00049   // Description: 
00050   // Get/Set MRML node
00051   vtkGetObjectMacro(Node, vtkMRMLChangeTrackerNode);
00052   virtual void SetNode(vtkMRMLChangeTrackerNode*);
00053 
00054   // Description: 
00055   // Get wizard widget
00056   vtkGetObjectMacro(WizardWidget, vtkKWWizardWidget);
00057   // vtkGetObjectMacro(AnatomicalStructureStep, vtkChangeTrackerAnatomicalStructureStep);
00058 
00059   // Description:
00060   // Events that this module GUI will observe. CLIENT MUST DELETE!
00061   virtual vtkIntArray* NewObservableEvents();
00062 
00063   // Description:
00064   // Create widgets
00065   virtual void BuildGUI();
00066   //BTX
00067   using vtkSlicerComponentGUI::BuildGUI; 
00068   //ETX
00069 
00070   // Description:
00071   // Delete Widgets
00072   virtual void TearDownGUI();
00073 
00074   // Description:
00075   // Add observers to GUI widgets
00076   virtual void AddGUIObservers();
00077   
00078   // Description:
00079   // Remove observers to GUI widgets
00080   virtual void RemoveGUIObservers();
00081 
00082   // Description:
00083   // Remove observers to MRML node
00084   virtual void RemoveMRMLNodeObservers();
00085 
00086   // Description:
00087   // Remove observers to Logic
00088   virtual void RemoveLogicObservers();
00089   
00090   // Description:
00091   // Pprocess events generated by Logic
00092   virtual void ProcessLogicEvents( vtkObject *caller, unsigned long event,
00093                                    void *callData);
00094 
00095   // Description:
00096   // Pprocess events generated by GUI widgets
00097   virtual void ProcessGUIEvents( vtkObject *caller, unsigned long event,
00098                                  void *callData);
00099 
00100   // Description:
00101   // Process events generated by MRML
00102   // This function is automatically called 
00103   virtual void ProcessMRMLEvents( vtkObject *caller, unsigned long event, 
00104                                   void *callData);
00105   // Description:
00106   // Describe behavior at module startup and exit.
00107   virtual void Enter();
00108   //BTX
00109   using vtkSlicerComponentGUI::Enter;
00110   //ETX
00111   virtual void Exit();
00112 
00113   // Description: The name of the Module - this is used to 
00114   // construct the proc invocations
00115   vtkGetStringMacro(ModuleName);
00116   vtkSetStringMacro(ModuleName);
00117 
00118   bool GetModuleEntered() { return ModuleEntered;};
00119 
00120   // Description: set an observer by number (work around
00121   // limitation in kwwidgets tcl wrapping)
00122   unsigned long AddObserverByNumber(vtkObject *observee, unsigned long event);
00123 
00124   // Description:
00125   // Updates parameters values in MRML node based on GUI widgets 
00126   void UpdateMRML();
00127   
00128   vtkChangeTrackerFirstScanStep* GetFirstScanStep() {return this->FirstScanStep;}
00129   void UpdateNode();
00130 
00131   vtkGetObjectMacro(SegmentationStep,vtkChangeTrackerSegmentationStep);
00132 
00133   void SliceLogicRemove();
00134   void SliceLogicDefine();
00135 
00136   // Description:
00137   // accessor
00138   vtkGetObjectMacro(SliceLogic, vtkSlicerSliceLogic);
00139   vtkGetObjectMacro(SliceController_OffsetScale, vtkKWScale); 
00140 
00141   void PropagateVolumeSelection();
00142 
00143   void ResetPipeline();
00144 
00145   void ObserveMRMLROINode(vtkMRMLROINode* roi);
00146 
00147   void LoadTutorialData();
00148 
00149   void SetRedGreenYellowAllVolumes(const char*, const char*, const char*);
00150 
00151 protected:
00152    static void SliceLogicCallback(vtkObject *caller, unsigned long event, void *clientData, void *callData );
00153 private:
00154   vtkChangeTrackerGUI();
00155   ~vtkChangeTrackerGUI();
00156   vtkChangeTrackerGUI(const vtkChangeTrackerGUI&);
00157   void operator=(const vtkChangeTrackerGUI&);
00158 
00159   // Description:
00160   // Updates GUI widgets based on parameters values in MRML node
00161   void UpdateGUI();
00162 
00163   // Description:
00164   // Updates registration progress on the status bar of the main application. 
00165   virtual void UpdateRegistrationProgress();
00166 
00167   void SliceLogicRemoveGUIObserver();
00168 
00169   vtkChangeTrackerLogic       *Logic;
00170   vtkMRMLChangeTrackerNode    *Node;
00171   
00172   char *ModuleName;
00173 
00174   // Description:
00175   // The wizard widget and steps
00176   vtkKWWizardWidget                      *WizardWidget;
00177   vtkChangeTrackerFirstScanStep        *FirstScanStep;
00178   vtkChangeTrackerROIStep              *ROIStep;
00179   vtkChangeTrackerSegmentationStep     *SegmentationStep;
00180   vtkChangeTrackerTypeStep             *TypeStep;
00181   vtkChangeTrackerAnalysisStep         *AnalysisStep;
00182 
00183   vtkSlicerSliceLogic *SliceLogic;
00184   vtkKWScale *SliceController_OffsetScale;
00185   vtkCallbackCommand *SliceLogicCallbackCommand;
00186 
00187   vtkKWPushButton *TutorialButton;
00188 
00189   // Wizard step cannot observe MRML events
00190   vtkMRMLROINode *roiNode;
00191 
00192   bool ModuleEntered;
00193 };
00194 
00195 #endif

Generated on 6 Apr 2011 for Slicer3 by  doxygen 1.6.1