vtkProstateNavGUI.h

Go to the documentation of this file.
00001 /*=auto=========================================================================
00002 
00003   Portions (c) Copyright 2007 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: $
00010   Date:      $Date: $
00011   Version:   $Revision: $
00012 
00013 =========================================================================auto=*/
00014 
00015 #ifndef __vtkProstateNavGUI_h
00016 #define __vtkProstateNavGUI_h
00017 
00018 #ifdef WIN32
00019 #include "vtkProstateNavWin32Header.h"
00020 #endif
00021 
00022 #include "vtkSlicerModuleGUI.h"
00023 #include "vtkProstateNavLogic.h"
00024 
00025 #include "vtkCallbackCommand.h"
00026 #include "vtkSlicerInteractorStyle.h"
00027 
00028 #include <string>
00029 #include <list>
00030 
00031 class vtkKWPushButton;
00032 class vtkKWPushButtonSet;
00033 class vtkKWEntryWithLabel;
00034 class vtkKWMenuButtonWithLabel;
00035 class vtkKWMenuButton;
00036 class vtkKWCheckButton;
00037 class vtkKWScaleWithEntry;
00038 class vtkKWEntry;
00039 class vtkKWFrame;
00040 class vtkKWEntryWithLabel;
00041 class vtkKWLoadSaveButtonWithLabel;
00042 class vtkKWMultiColumnListWithScrollbars;
00043 class vtkKWWizardWidget;
00044 class vtkSlicerNodeSelectorWidget;
00045 
00046 class vtkProstateNavStep;
00047 class vtkSlicerSecondaryViewerWindow;
00048 
00049 class vtkMRMLProstateNavManagerNode;
00050 class vtkMRMLFiducialListNode;
00051  
00052 // Description:    
00053 // This class implements Slicer's Volumes GUI
00054 //
00055 class VTK_PROSTATENAV_EXPORT vtkProstateNavGUI : public vtkSlicerModuleGUI
00056 {
00057  public:
00058   
00059   virtual void Register(vtkObject *o) { Superclass::Register(o); };
00060   virtual void UnRegister(vtkObject *o) { Superclass::UnRegister(o); };
00061 
00062   //BTX
00063   enum {
00064     SLICE_PLANE_RED    = 0,
00065     SLICE_PLANE_YELLOW = 1,
00066     SLICE_PLANE_GREEN  = 2
00067   };
00068   enum {
00069     SLICE_RTIMAGE_NONE      = 0,
00070     SLICE_RTIMAGE_PERP      = 1,
00071     SLICE_RTIMAGE_INPLANE90 = 2,
00072     SLICE_RTIMAGE_INPLANE   = 3
00073   };
00074   enum {
00075     BRING_MARKERS_TO_VIEW_KEEP_CURRENT_ORIENTATION, // show slices in their original (acquisition) directions
00076     BRING_MARKERS_TO_VIEW_ALIGN_TO_NEEDLE           // show needle aligned slices (parallel and perpendicular to the needle and robot main axis)
00077   };
00078   
00079   //ETX
00080   
00081   // Precision of the target position and orientation display
00082   static const int POSITION_PRECISION_DIGITS;
00083   static const double POSITION_PRECISION_TOLERANCE;
00084 
00085 
00086  public:
00087   // Description:    
00088   // Usual vtk class functions
00089   static vtkProstateNavGUI* New (  );
00090   vtkTypeRevisionMacro ( vtkProstateNavGUI, vtkSlicerModuleGUI );
00091   void PrintSelf (ostream& os, vtkIndent indent );
00092   
00093   //SendDATANavitrack
00094   // Description:    
00095   // Get methods on class members (no Set methods required)
00096   vtkGetObjectMacro ( Logic, vtkProstateNavLogic );
00097   
00098   // Description:
00099   // API for setting VolumeNode, VolumeLogic and
00100   // for both setting and observing them.
00101   void SetModuleLogic ( vtkSlicerLogic *logic )
00102   { this->SetLogic ( vtkObjectPointer (&this->Logic), logic ); }
00103   void SetAndObserveModuleLogic ( vtkProstateNavLogic *logic )
00104   { this->SetAndObserveLogic ( vtkObjectPointer (&this->Logic), logic ); }
00105   // Description: 
00106   // Get wizard widget
00107   vtkGetObjectMacro(WizardWidget, vtkKWWizardWidget);
00108 
00109   // Description:    
00110   // This method builds the IGTDemo module GUI
00111   virtual void BuildGUI ( );
00112 
00113   // Description:    
00114   // This method builds the IGTDemo module GUI
00115   virtual void TearDownGUI ( );
00116   
00117   // Description:
00118   // Add/Remove observers on widgets in the GUI
00119   virtual void AddGUIObservers ( );
00120   virtual void RemoveGUIObservers ( );
00121 
00122   void AddLogicObservers ( );
00123   void RemoveLogicObservers ( );
00124 
00125   void AddMRMLObservers();
00126   void RemoveMRMLObservers();
00127 
00128   // Description: 
00129   // Get the categorization of the module.
00130   const char *GetCategory() const { return "IGT"; }
00131   
00132   // Description:
00133   // Class's mediator methods for processing events invoked by
00134   // either the Logic, MRML or GUI.    
00135   virtual void ProcessLogicEvents ( vtkObject *caller, unsigned long event, void *callData );
00136   virtual void ProcessGUIEvents ( vtkObject *caller, unsigned long event, void *callData );
00137   virtual void ProcessMRMLEvents ( vtkObject *caller, unsigned long event, void *callData );
00138 
00139   void HandleMouseEvent(vtkSlicerInteractorStyle *style);
00140   
00141   // Description:
00142   // Describe behavior at module startup and exit.
00143   virtual void Enter (vtkMRMLNode *node);
00144   virtual void Enter ();
00145   virtual void Exit ( );
00146   
00147   void Init();
00148 
00149   //BTX
00150   static void DataCallback(vtkObject *caller, 
00151                            unsigned long eid, void *clientData, void *callData);
00152   
00153   //ETX
00154   
00155   vtkMRMLProstateNavManagerNode* GetProstateNavManagerNode();
00156 
00157   // Description:
00158   // Bring a marker to view in all three slice views along its principal axes
00159   // N - the direction vector of the locator,
00160   // T - the transverse direction vector of the locator (optional)
00161   // P - the tip location of the locator (optional)
00162   // All the above values are in RAS space. 
00163   void BringMarkerToViewIn2DViews(double* P, double* N=NULL, double* T=NULL);
00164 
00165   // Description:
00166   // Bring current target to view in all three slice views
00167   void BringTargetToViewIn2DViews(int mode);
00168 
00169   // Description:
00170   // Request render in all viewer widgets
00171   void RequestRenderInViewerWidgets();
00172   void ShowSecondaryWindowCheckButtonCallback (int checked);
00173 
00174  protected:
00175   vtkProstateNavGUI ( );
00176   virtual ~vtkProstateNavGUI ( );
00177   
00178   //void SetProstateNavManager(vtkMRMLProstateNavManagerNode* node);
00179   void SetRobot(vtkMRMLRobotNode* robot);
00180   void SetTargetPlanList(vtkMRMLFiducialListNode* targetPlanList);
00181 
00182   // Return i-th worfklow step page
00183   vtkProstateNavStep* GetStepPage(int i);
00184 
00185   //----------------------------------------------------------------
00186   // GUI widgets
00187   //----------------------------------------------------------------
00188 
00189   vtkSlicerSecondaryViewerWindow* SecondaryWindow;
00190 
00191   // Configuration Frame
00192 
00193   vtkKWCheckButton *ShowSecondaryWindowCheckButton;
00194   vtkSlicerNodeSelectorWidget* ProstateNavManagerSelectorWidget;
00195   vtkSlicerNodeSelectorWidget* RobotSelectorWidget;
00196 
00197   //----------------------------------------------------------------
00198   // Workphase Frame
00199   
00200   vtkKWFrame *StatusButtonFrame;
00201   vtkKWPushButtonSet *StatusButtonSet;
00202 
00203   vtkKWFrame *WorkphaseButtonFrame;
00204   vtkKWPushButtonSet *WorkphaseButtonSet;
00205   
00206   //----------------------------------------------------------------
00207   // Wizard Frame
00208 
00209   vtkSlicerModuleCollapsibleFrame *WizardFrame;
00210   vtkKWWizardWidget *WizardWidget;
00211   
00212   //----------------------------------------------------------------
00213   // Logic Values
00214   //----------------------------------------------------------------
00215 
00216   vtkProstateNavLogic *Logic;
00217 
00218   vtkCallbackCommand *DataCallbackCommand;
00219 
00220   //----------------------------------------------------------------
00221   // Target Fiducials
00222   //----------------------------------------------------------------
00223 
00224   void UpdateGUI();  
00225 
00226 
00227  private:
00228 
00229   vtkProstateNavGUI ( const vtkProstateNavGUI& ); // Not implemented.
00230   void operator = ( const vtkProstateNavGUI& ); //Not implemented.
00231 
00232   void BuildGUIForConfigurationFrame();
00233   void BuildGUIForWorkphaseFrame();
00234   void BuildGUIForWizardFrame();
00235   void BuildGUIForHelpFrame();
00236 
00237   void UpdateStatusButtons();
00238   void UpdateWorkflowSteps();
00239   
00240   int  ChangeWorkphaseInGUI(int phase);
00241   const char* AddZFrameModel(const char* nodeName);
00242 
00243   // Description:
00244   // Display current target fiducial highlighted
00245   void UpdateCurrentTargetDisplay();
00246   void UpdateCurrentTargetDisplayInSecondaryWindow();
00247 
00248   void SetAndObserveRobotNodeID(const char *nodeID);
00249   vtkMRMLRobotNode* GetRobotNode();
00250 
00251   void SetAndObserveProstateNavManagerNodeID(const char *nodeID);  
00252 
00253   void SetAndObserveTargetPlanListNodeID(const char *nodeID);
00254   vtkMRMLFiducialListNode* GetTargetPlanListNode();
00255   
00256 
00257   int Entered;
00258 
00259   // store the currently displayed workflow steps
00260   // if the same steps requested to be displayed, then nothing will happen
00261   vtkStringArray* DisplayedWorkflowSteps;
00262 
00263   vtkSetStringMacro(ProstateNavManagerNodeID);
00264   char* ProstateNavManagerNodeID;
00265   vtkMRMLProstateNavManagerNode* ProstateNavManagerNode;
00266 
00267   vtkSetStringMacro(RobotNodeID);
00268   char* RobotNodeID;
00269   vtkMRMLRobotNode* RobotNode;
00270 
00271   vtkSetStringMacro(TargetPlanListNodeID);
00272   char* TargetPlanListNodeID;
00273   vtkMRMLFiducialListNode* TargetPlanListNode;  
00274 };
00275 
00276 
00277 
00278 #endif

Generated on 6 Apr 2011 for Slicer3 by  doxygen 1.6.1