vtkProstateNavGUI.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
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
00053
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
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,
00076 BRING_MARKERS_TO_VIEW_ALIGN_TO_NEEDLE
00077 };
00078
00079
00080
00081
00082 static const int POSITION_PRECISION_DIGITS;
00083 static const double POSITION_PRECISION_TOLERANCE;
00084
00085
00086 public:
00087
00088
00089 static vtkProstateNavGUI* New ( );
00090 vtkTypeRevisionMacro ( vtkProstateNavGUI, vtkSlicerModuleGUI );
00091 void PrintSelf (ostream& os, vtkIndent indent );
00092
00093
00094
00095
00096 vtkGetObjectMacro ( Logic, vtkProstateNavLogic );
00097
00098
00099
00100
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
00106
00107 vtkGetObjectMacro(WizardWidget, vtkKWWizardWidget);
00108
00109
00110
00111 virtual void BuildGUI ( );
00112
00113
00114
00115 virtual void TearDownGUI ( );
00116
00117
00118
00119 virtual void AddGUIObservers ( );
00120 virtual void RemoveGUIObservers ( );
00121
00122 void AddLogicObservers ( );
00123 void RemoveLogicObservers ( );
00124
00125 void AddMRMLObservers();
00126 void RemoveMRMLObservers();
00127
00128
00129
00130 const char *GetCategory() const { return "IGT"; }
00131
00132
00133
00134
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
00142
00143 virtual void Enter (vtkMRMLNode *node);
00144 virtual void Enter ();
00145 virtual void Exit ( );
00146
00147 void Init();
00148
00149
00150 static void DataCallback(vtkObject *caller,
00151 unsigned long eid, void *clientData, void *callData);
00152
00153
00154
00155 vtkMRMLProstateNavManagerNode* GetProstateNavManagerNode();
00156
00157
00158
00159
00160
00161
00162
00163 void BringMarkerToViewIn2DViews(double* P, double* N=NULL, double* T=NULL);
00164
00165
00166
00167 void BringTargetToViewIn2DViews(int mode);
00168
00169
00170
00171 void RequestRenderInViewerWidgets();
00172 void ShowSecondaryWindowCheckButtonCallback (int checked);
00173
00174 protected:
00175 vtkProstateNavGUI ( );
00176 virtual ~vtkProstateNavGUI ( );
00177
00178
00179 void SetRobot(vtkMRMLRobotNode* robot);
00180 void SetTargetPlanList(vtkMRMLFiducialListNode* targetPlanList);
00181
00182
00183 vtkProstateNavStep* GetStepPage(int i);
00184
00185
00186
00187
00188
00189 vtkSlicerSecondaryViewerWindow* SecondaryWindow;
00190
00191
00192
00193 vtkKWCheckButton *ShowSecondaryWindowCheckButton;
00194 vtkSlicerNodeSelectorWidget* ProstateNavManagerSelectorWidget;
00195 vtkSlicerNodeSelectorWidget* RobotSelectorWidget;
00196
00197
00198
00199
00200 vtkKWFrame *StatusButtonFrame;
00201 vtkKWPushButtonSet *StatusButtonSet;
00202
00203 vtkKWFrame *WorkphaseButtonFrame;
00204 vtkKWPushButtonSet *WorkphaseButtonSet;
00205
00206
00207
00208
00209 vtkSlicerModuleCollapsibleFrame *WizardFrame;
00210 vtkKWWizardWidget *WizardWidget;
00211
00212
00213
00214
00215
00216 vtkProstateNavLogic *Logic;
00217
00218 vtkCallbackCommand *DataCallbackCommand;
00219
00220
00221
00222
00223
00224 void UpdateGUI();
00225
00226
00227 private:
00228
00229 vtkProstateNavGUI ( const vtkProstateNavGUI& );
00230 void operator = ( const vtkProstateNavGUI& );
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
00244
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
00260
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