00001 #ifndef __vtkSlicerSliceControllerWidget_h
00002 #define __vtkSlicerSliceControllerWidget_h
00003
00004 #include "vtkSlicerBaseGUIWin32Header.h"
00005 #include "vtkKWCompositeWidget.h"
00006 #include "vtkKWScaleWithEntry.h"
00007 #include "vtkKWSpinBoxWithLabel.h"
00008 #include "vtkKWEntryWithLabel.h"
00009 #include "vtkKWMenuButtonWithSpinButtonsWithLabel.h"
00010 #include "vtkKWMenuButton.h"
00011 #include "vtkKWPushButton.h"
00012 #include "vtkKWFrame.h"
00013 #include "vtkKWTopLevel.h"
00014 #include "vtkKWEntry.h"
00015
00016 #include "vtkSlicerModuleCollapsibleFrame.h"
00017 #include "vtkSlicerWidget.h"
00018 #include "vtkSlicerNodeSelectorWidget.h"
00019 #include "vtkSlicerSlicesControlIcons.h"
00020 #include "vtkSlicerFoundationIcons.h"
00021 #include "vtkSlicerToolbarIcons.h"
00022 #include "vtkSlicerVisibilityIcons.h"
00023
00024 #include "vtkMRMLSliceNode.h"
00025 #include "vtkMRMLSliceCompositeNode.h"
00026
00027 #include "vtkSlicerSliceLogic.h"
00028
00029 class VTK_SLICER_BASE_GUI_EXPORT vtkSlicerSliceControllerWidget : public vtkSlicerWidget
00030 {
00031
00032 public:
00033 static vtkSlicerSliceControllerWidget* New ( );
00034 vtkTypeRevisionMacro ( vtkSlicerSliceControllerWidget, vtkKWCompositeWidget );
00035 void PrintSelf (ostream& os, vtkIndent indent);
00036
00039 vtkGetObjectMacro ( OffsetScale, vtkKWScale );
00040 vtkGetMacro (OffsetScaleMin, double);
00041 vtkSetMacro (OffsetScaleMin, double);
00042 vtkGetMacro (OffsetScaleResolution, double);
00043 vtkSetMacro (OffsetScaleResolution, double);
00044 vtkGetObjectMacro ( OffsetEntry, vtkKWEntry );
00045 vtkGetObjectMacro ( SliceIndexEntry, vtkKWEntry );
00046 vtkGetObjectMacro ( OrientationSelector, vtkKWMenuButtonWithSpinButtonsWithLabel );
00047 vtkGetObjectMacro ( ForegroundSelector, vtkSlicerNodeSelectorWidget );
00048 vtkGetObjectMacro ( BackgroundSelector, vtkSlicerNodeSelectorWidget );
00049 vtkGetObjectMacro ( LabelSelector, vtkSlicerNodeSelectorWidget );
00050 vtkGetObjectMacro ( VisibilityToggle, vtkKWPushButton );
00051 vtkGetObjectMacro ( LoadDataButton, vtkKWPushButton );
00052 vtkGetObjectMacro ( LinkButton, vtkKWPushButton );
00053 vtkGetObjectMacro ( FoundationIcons, vtkSlicerFoundationIcons );
00054 vtkGetObjectMacro ( VisibilityIcons, vtkSlicerVisibilityIcons );
00055 vtkGetObjectMacro ( ViewConfigureIcons, vtkSlicerToolbarIcons );
00056 vtkGetObjectMacro ( SliceControlIcons, vtkSlicerSlicesControlIcons);
00057 vtkGetObjectMacro ( ScaleFrame, vtkKWFrame );
00058 vtkGetObjectMacro ( IconFrame, vtkKWFrame );
00059 vtkGetObjectMacro ( LabelOpacityButton, vtkKWPushButton );
00060 vtkGetObjectMacro ( LabelOpacityScale, vtkKWScaleWithEntry );
00061 vtkGetObjectMacro ( LabelOpacityToggleButton, vtkKWPushButton );
00062 vtkGetObjectMacro ( LabelOpacityTopLevel, vtkKWTopLevel );
00063 vtkGetObjectMacro ( LabelOutlineToggleButton, vtkKWPushButton );
00064 vtkGetObjectMacro ( LightboxTopLevel, vtkKWTopLevel );
00065 vtkGetObjectMacro ( FitToWindowButton, vtkKWPushButton );
00066 vtkGetObjectMacro ( VolumeDisplayMenuButton, vtkKWMenuButton );
00067 vtkGetObjectMacro ( LightboxButton, vtkKWMenuButton );
00068 vtkGetObjectMacro ( LightboxRowsEntry, vtkKWEntry );
00069 vtkGetObjectMacro ( LightboxColumnsEntry, vtkKWEntry );
00070 vtkGetObjectMacro ( LightboxApplyButton, vtkKWPushButton);
00071 vtkGetObjectMacro ( OrientationMenuButton, vtkKWMenuButton );
00072 vtkGetObjectMacro ( ForegroundMenuButton, vtkKWMenuButton );
00073 vtkGetObjectMacro ( BackgroundMenuButton, vtkKWMenuButton );
00074 vtkGetObjectMacro ( LabelMenuButton, vtkKWMenuButton );
00075 vtkGetObjectMacro ( MoreMenuButton, vtkKWMenuButton );
00076 vtkGetObjectMacro ( ColorCodeButton, vtkKWPushButton );
00077 vtkGetMacro ( LightboxRows, int );
00078 vtkSetMacro ( LightboxRows, int );
00079 vtkGetMacro ( LightboxColumns, int );
00080 vtkSetMacro ( LightboxColumns, int );
00081
00082 void RemoveWidgetObservers ( );
00083 void AddWidgetObservers ( );
00084
00087 vtkGetObjectMacro ( SliceCompositeNode, vtkMRMLSliceCompositeNode );
00088 void SetSliceCompositeNode (vtkMRMLSliceCompositeNode *scnode)
00089 {
00090 vtkSetAndObserveMRMLNodeMacro(this->SliceCompositeNode, scnode );
00091 }
00092 vtkGetObjectMacro ( SliceNode, vtkMRMLSliceNode );
00093 void SetSliceNode (vtkMRMLSliceNode *snode)
00094 {
00095 vtkSetAndObserveMRMLNodeMacro(this->SliceNode, snode );
00096 }
00097
00100 virtual void UpdateLayerMenus();
00101
00104 vtkGetObjectMacro ( SliceLogic, vtkSlicerSliceLogic );
00105 void SetAndObserveSliceLogic (vtkSlicerSliceLogic *sLogic)
00106 {
00108 vtkSetAndObserveMRMLNodeMacro(this->SliceLogic, sLogic );
00109 }
00110
00114 vtkGetMacro ( ControllerStyle, int );
00115 vtkSetMacro ( ControllerStyle, int );
00116
00119 void ProcessWidgetEvents ( vtkObject *caller, unsigned long event, void *callData );
00120
00123 void ProcessMRMLEvents ( vtkObject *caller, unsigned long event, void *callData );
00124
00127 void ProcessLogicEvents ( vtkObject *caller, unsigned long event, void *callData );
00128
00131 virtual void ApplyColorCode ( double *c );
00132 virtual void ToggleSlicesLink ( );
00133 virtual void LinkAllSlices();
00134 virtual void UnlinkAllSlices();
00135 virtual int AllSlicesLinked ( );
00136 virtual void HideLabelOpacityScaleAndEntry ( );
00137 virtual void HideLabelOpacityScaleAndEntry ( int link );
00138 virtual void PopUpLabelOpacityScaleAndEntry ( int link );
00139 virtual void PopUpLabelOpacityScaleAndEntry ( );
00140 virtual void HideLightboxCustomLayoutFrame ( );
00141 virtual void PopUpLightboxCustomLayoutFrame ( );
00142 virtual void PopUpPrescribedSliceSpacingEntry();
00143 virtual void HidePrescribedSliceSpacingEntry();
00144
00147 virtual void Shrink();
00148 virtual void Expand();
00149
00150 virtual void UpdateOrientation ( int link );
00151 virtual void UpdateForegroundLayer ( int link );
00152 virtual void UpdateBackgroundLayer ( int link );
00153 virtual void UpdateLabelLayer ( int link );
00154
00155 virtual void FitSliceToBackground ( int link );
00156 virtual void FitSliceToBackground ( );
00157 virtual void RotateSliceToBackground ( int link );
00158 virtual void RotateSliceToBackground ( );
00159 virtual void ToggleReformatWidget ( int link );
00160 virtual void ToggleReformatWidget ( );
00161 virtual void ToggleLabelOutline ( int link );
00162 virtual void ToggleLabelOutline ( );
00163
00167 virtual void SliceViewerLayoutConfig(int nRows, int nColumns);
00168
00172 virtual int UpdateCompareView(double value);
00173
00177 virtual int UpdateLinkedView(double value);
00178
00179
00180 enum
00181 {
00182 ExpandEvent = 15000,
00183 ShrinkEvent
00184 };
00185
00186
00187 protected:
00188 vtkSlicerSliceControllerWidget ( );
00189 virtual ~vtkSlicerSliceControllerWidget ( );
00190
00193 virtual void CreateWidget( );
00194
00201 void SetSliceIndexEntryValueFromOffset(double sliceOffset);
00202
00204 int ControllerStyle;
00205
00206 vtkKWFrame *ContainerFrame;
00207
00208
00210
00214 vtkKWScale *OffsetScale;
00215 double OffsetScaleMin;
00216 double OffsetScaleResolution;
00217 vtkKWEntry *OffsetEntry;
00218 vtkKWEntry *SliceIndexEntry;
00219 vtkKWMenuButtonWithSpinButtonsWithLabel *OrientationSelector;
00220 vtkSlicerNodeSelectorWidget *ForegroundSelector;
00221 vtkSlicerNodeSelectorWidget *BackgroundSelector;
00222 vtkSlicerNodeSelectorWidget *LabelSelector;
00223 bool OffsetScaleActive;
00224
00225
00228 vtkKWMenuButton *OrientationMenuButton;
00229 vtkKWMenuButton *ForegroundMenuButton;
00230 vtkKWMenuButton *BackgroundMenuButton;
00231 vtkKWMenuButton *LabelMenuButton;
00232
00233 vtkKWPushButton *VisibilityToggle;
00234 vtkKWPushButton *LoadDataButton;
00235 vtkKWPushButton *LinkButton;
00236 vtkKWPushButton *LabelOpacityButton;
00237 vtkKWScaleWithEntry *LabelOpacityScale;
00238 vtkKWPushButton *LabelOpacityToggleButton;
00239 vtkKWTopLevel *LabelOpacityTopLevel;
00240 vtkKWPushButton *LabelOutlineToggleButton;
00241
00242 vtkKWTopLevel *LightboxTopLevel;
00243 vtkSlicerFoundationIcons *FoundationIcons;
00244 vtkSlicerVisibilityIcons *VisibilityIcons;
00245 vtkSlicerToolbarIcons *ViewConfigureIcons;
00246 vtkSlicerSlicesControlIcons *SliceControlIcons;
00247 vtkKWFrame *ScaleFrame;
00248 vtkKWFrame *IconFrame;
00249 vtkKWPushButton *ColorCodeButton;
00250 vtkKWPushButton *FitToWindowButton;
00251 vtkKWMenuButton *VolumeDisplayMenuButton;
00252 vtkKWMenuButton *LightboxButton;
00253 vtkKWEntry *LightboxRowsEntry;
00254 vtkKWEntry *LightboxColumnsEntry;
00255 vtkKWPushButton *LightboxApplyButton;
00256 vtkKWMenuButton *MoreMenuButton;
00257 vtkKWSpinBoxWithLabel *PrescribedSliceSpacingEntry;
00258 vtkKWTopLevel *PrescribedSliceSpacingTopLevel;
00259 vtkKWPushButton *PrescribedSliceSpacingApplyButton;
00260 vtkKWPushButton *PrescribedSliceSpacingCancelButton;
00261
00262 int LightboxRows;
00263 int LightboxColumns;
00264
00265 float LastLabelOpacity;
00266
00267
00269
00270 vtkMRMLSliceNode *SliceNode;
00271 vtkMRMLSliceCompositeNode *SliceCompositeNode;
00272
00273
00275
00276 vtkSlicerSliceLogic *SliceLogic;
00277
00278
00279 private:
00280 vtkSlicerSliceControllerWidget (const vtkSlicerSliceControllerWidget &);
00281 void operator=(const vtkSlicerSliceControllerWidget &);
00282
00283 };
00284
00285 #endif
00286