Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef QMITKSTDMULTIWIDGET_H_
00019 #define QMITKSTDMULTIWIDGET_H_
00020
00021 #include "mitkPositionTracker.h"
00022 #include "mitkDisplayVectorInteractor.h"
00023 #include "mitkSlicesRotator.h"
00024 #include "mitkSlicesSwiveller.h"
00025 #include "mitkRenderWindowFrame.h"
00026 #include "mitkManufacturerLogo.h"
00027 #include "mitkGradientBackground.h"
00028 #include "mitkCoordinateSupplier.h"
00029 #include "mitkDataStorage.h"
00030
00031 #include <qwidget.h>
00032 #include <qsplitter.h>
00033 #include <QFrame>
00034
00035 #include <QmitkRenderWindow.h>
00036 #include <QmitkLevelWindowWidget.h>
00037
00038 #include "vtkTextProperty.h"
00039 #include "vtkCornerAnnotation.h"
00040
00041 class QHBoxLayout;
00042 class QVBoxLayout;
00043 class QGridLayout;
00044 class QSpacerItem;
00045 class QmitkLevelWindowWidget;
00046 class QmitkRenderWindow;
00047
00048 class QMITK_EXPORT QmitkStdMultiWidget : public QWidget
00049 {
00050 Q_OBJECT
00051
00052 public:
00053
00054 QmitkStdMultiWidget(QWidget* parent = 0, Qt::WindowFlags f = 0);
00055 virtual ~QmitkStdMultiWidget();
00056
00057 mitk::SliceNavigationController*
00058 GetTimeNavigationController();
00059
00060 void RequestUpdate();
00061
00062 void ForceImmediateUpdate();
00063
00064 mitk::DisplayVectorInteractor* GetMoveAndZoomInteractor();
00065
00066 QmitkRenderWindow* GetRenderWindow1() const;
00067
00068 QmitkRenderWindow* GetRenderWindow2() const;
00069
00070 QmitkRenderWindow* GetRenderWindow3() const;
00071
00072 QmitkRenderWindow* GetRenderWindow4() const;
00073
00074 const mitk::Point3D &
00075 GetLastLeftClickPosition() const;
00076
00077 const mitk::Point3D
00078 GetCrossPosition() const;
00079
00080 void EnablePositionTracking();
00081
00082 void DisablePositionTracking();
00083
00084 int GetLayout() const;
00085
00086 mitk::SlicesRotator * GetSlicesRotator() const;
00087
00088 mitk::SlicesSwiveller * GetSlicesSwiveller() const;
00089
00090 void InitializeWidget();
00091
00093 void RemovePlanesFromDataStorage();
00094
00095 void AddPlanesToDataStorage();
00096
00097 void SetDataStorage( mitk::DataStorage* ds );
00098
00100 void ActivateMenuWidget( bool state );
00101
00102 protected:
00103
00104 void UpdateAllWidgets();
00105
00106 void HideAllWidgetToolbars();
00107
00108 public slots:
00109
00110 void changeLayoutTo2DImagesUp();
00111
00112 void changeLayoutTo2DImagesLeft();
00113
00114 void changeLayoutToDefault();
00115
00116 void changeLayoutToBig3D();
00117
00118 void changeLayoutToWidget1();
00119
00120 void changeLayoutToWidget2();
00121
00122 void changeLayoutToWidget3();
00123
00124 void changeLayoutToRowWidget3And4();
00125
00126 void changeLayoutToColumnWidget3And4();
00127
00128 void changeLayoutToRowWidgetSmall3andBig4();
00129
00130 void changeLayoutToSmallUpperWidget2Big3and4();
00131
00132 void changeLayoutTo2x2Dand3DWidget();
00133
00134 void changeLayoutToLeft2Dand3DRight2D();
00135
00136 void changeLayoutTo2DUpAnd3DDown();
00137
00138 void Fit();
00139
00140 void InitPositionTracking();
00141
00142 void AddDisplayPlaneSubTree();
00143
00144 void EnableStandardLevelWindow();
00145
00146 void DisableStandardLevelWindow();
00147
00148 bool InitializeStandardViews( const mitk::Geometry3D * geometry );
00149
00150 void wheelEvent( QWheelEvent * e );
00151
00152 void mousePressEvent(QMouseEvent * e);
00153
00154 void moveEvent( QMoveEvent* e );
00155
00156 void leaveEvent ( QEvent * e );
00157
00158 void EnsureDisplayContainsPoint(
00159 mitk::DisplayGeometry* displayGeometry, const mitk::Point3D& p);
00160
00161 void MoveCrossToPosition(const mitk::Point3D& newPosition);
00162
00163 void EnableNavigationControllerEventListening();
00164
00165 void DisableNavigationControllerEventListening();
00166
00167 void EnableGradientBackground();
00168
00169 void DisableGradientBackground();
00170
00171 void EnableDepartmentLogo();
00172
00173 void DisableDepartmentLogo();
00174
00175 void EnableColoredRectangles();
00176
00177 void DisableColoredRectangles();
00178
00179 void SetWidgetPlaneVisibility(const char* widgetName, bool visible, mitk::BaseRenderer *renderer=NULL);
00180
00181 void SetWidgetPlanesVisibility(bool visible, mitk::BaseRenderer *renderer=NULL);
00182
00183 void SetWidgetPlanesLocked(bool locked);
00184
00185 void SetWidgetPlanesRotationLocked(bool locked);
00186
00187 void SetWidgetPlanesRotationLinked( bool link );
00188
00189 void SetWidgetPlaneMode( int mode );
00190
00191 void SetGradientBackgroundColors( const mitk::Color & upper, const mitk::Color & lower );
00192
00193 void SetDepartmentLogoPath( const char * path );
00194
00195 void SetWidgetPlaneModeToSlicing( bool activate );
00196
00197 void SetWidgetPlaneModeToRotation( bool activate );
00198
00199 void SetWidgetPlaneModeToSwivel( bool activate );
00200
00201 void OnLayoutDesignChanged( int layoutDesignIndex );
00202
00203 void ResetCrosshair();
00204
00205 signals:
00206
00207 void LeftMouseClicked(mitk::Point3D pointValue);
00208 void WheelMoved(QWheelEvent*);
00209 void WidgetPlanesRotationLinked(bool);
00210 void WidgetPlanesRotationEnabled(bool);
00211 void ViewsInitialized();
00212 void WidgetPlaneModeSlicing(bool);
00213 void WidgetPlaneModeRotation(bool);
00214 void WidgetPlaneModeSwivel(bool);
00215 void WidgetPlaneModeChange(int);
00216 void WidgetNotifyNewCrossHairMode(int);
00217 void Moved();
00218
00219 public:
00220
00222 QmitkRenderWindow* mitkWidget1;
00223 QmitkRenderWindow* mitkWidget2;
00224 QmitkRenderWindow* mitkWidget3;
00225 QmitkRenderWindow* mitkWidget4;
00226 QmitkLevelWindowWidget* levelWindowWidget;
00227
00228
00229 enum { PLANE_MODE_SLICING = 0, PLANE_MODE_ROTATION, PLANE_MODE_SWIVEL };
00230 enum { LAYOUT_DEFAULT = 0, LAYOUT_2D_IMAGES_UP, LAYOUT_2D_IMAGES_LEFT,
00231 LAYOUT_BIG_3D, LAYOUT_WIDGET1, LAYOUT_WIDGET2, LAYOUT_WIDGET3,
00232 LAYOUT_2X_2D_AND_3D_WIDGET, LAYOUT_ROW_WIDGET_3_AND_4,
00233 LAYOUT_COLUMN_WIDGET_3_AND_4, LAYOUT_ROW_WIDGET_SMALL3_AND_BIG4 ,
00234 LAYOUT_SMALL_UPPER_WIDGET2_BIG3_AND4,LAYOUT_2D_AND_3D_LEFT_2D_RIGHT_WIDGET,
00235 LAYOUT_2D_UP_AND_3D_DOWN};
00236
00237 enum {
00238 TRANSVERSAL,
00239 SAGITTAL,
00240 CORONAL,
00241 THREE_D
00242 };
00243
00244
00245 protected:
00246
00247 QHBoxLayout* QmitkStdMultiWidgetLayout;
00248
00249 int m_Layout;
00250 int m_PlaneMode;
00251
00252 mitk::RenderWindowFrame::Pointer m_RectangleRendering3;
00253 mitk::RenderWindowFrame::Pointer m_RectangleRendering2;
00254 mitk::RenderWindowFrame::Pointer m_RectangleRendering1;
00255 mitk::RenderWindowFrame::Pointer m_RectangleRendering4;
00256
00257 mitk::ManufacturerLogo::Pointer m_LogoRendering1;
00258 mitk::ManufacturerLogo::Pointer m_LogoRendering2;
00259 mitk::ManufacturerLogo::Pointer m_LogoRendering3;
00260 mitk::ManufacturerLogo::Pointer m_LogoRendering4;
00261
00262 mitk::GradientBackground::Pointer m_GradientBackground1;
00263 mitk::GradientBackground::Pointer m_GradientBackground2;
00264 mitk::GradientBackground::Pointer m_GradientBackground4;
00265 mitk::GradientBackground::Pointer m_GradientBackground3;
00266
00267 mitk::DisplayVectorInteractor::Pointer m_MoveAndZoomInteractor;
00268 mitk::CoordinateSupplier::Pointer m_LastLeftClickPositionSupplier;
00269 mitk::PositionTracker::Pointer m_PositionTracker;
00270 mitk::SliceNavigationController::Pointer m_TimeNavigationController;
00271 mitk::SlicesRotator::Pointer m_SlicesRotator;
00272 mitk::SlicesSwiveller::Pointer m_SlicesSwiveller;
00273
00274 mitk::DataNode::Pointer m_PositionTrackerNode;
00275 mitk::DataStorage::Pointer m_DataStorage;
00276
00277 mitk::DataNode::Pointer m_PlaneNode1;
00278 mitk::DataNode::Pointer m_PlaneNode2;
00279 mitk::DataNode::Pointer m_PlaneNode3;
00280 mitk::DataNode::Pointer m_Node;
00281
00282 QSplitter *m_MainSplit;
00283 QSplitter *m_LayoutSplit;
00284 QSplitter *m_SubSplit1;
00285 QSplitter *m_SubSplit2;
00286
00287 QWidget *mitkWidget1Container;
00288 QWidget *mitkWidget2Container;
00289 QWidget *mitkWidget3Container;
00290 QWidget *mitkWidget4Container;
00291
00292 struct
00293 {
00294 vtkCornerAnnotation *cornerText;
00295 vtkTextProperty *textProp;
00296 vtkRenderer *ren;
00297 } m_CornerAnnotaions[3];
00298
00299
00300
00301 };
00302 #endif