00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #define SMW_INFO MITK_INFO("widget.stdmulti")
00019
00020 #include "QmitkStdMultiWidget.h"
00021
00022 #include <QHBoxLayout>
00023 #include <QVBoxLayout>
00024 #include <QGridLayout>
00025 #include <qsplitter.h>
00026 #include <QMotifStyle>
00027 #include <QList>
00028 #include <QMouseEvent>
00029
00030 #include "mitkProperties.h"
00031 #include "mitkGeometry2DDataMapper2D.h"
00032 #include "mitkGlobalInteraction.h"
00033 #include "mitkDisplayInteractor.h"
00034 #include "mitkPointSet.h"
00035 #include "mitkPositionEvent.h"
00036 #include "mitkStateEvent.h"
00037 #include "mitkLine.h"
00038 #include "mitkInteractionConst.h"
00039 #include "mitkDataStorage.h"
00040
00041
00042
00043 #include "mitkVtkLayerController.h"
00044
00045 QmitkStdMultiWidget::QmitkStdMultiWidget(QWidget* parent, Qt::WindowFlags f)
00046 : QWidget(parent, f),
00047 mitkWidget1(NULL),
00048 mitkWidget2(NULL),
00049 mitkWidget3(NULL),
00050 mitkWidget4(NULL),
00051 m_PlaneNode1(NULL),
00052 m_PlaneNode2(NULL),
00053 m_PlaneNode3(NULL),
00054 m_Node(NULL)
00055 {
00056
00057
00058
00059
00060
00061 QmitkStdMultiWidgetLayout = new QHBoxLayout( this );
00062
00063
00064 this->setLayout(QmitkStdMultiWidgetLayout);
00065
00066
00067
00068
00069
00070 m_MainSplit = new QSplitter( this );
00071 QmitkStdMultiWidgetLayout->addWidget( m_MainSplit );
00072
00073
00074 m_LayoutSplit = new QSplitter( Qt::Vertical, m_MainSplit );
00075 m_MainSplit->addWidget( m_LayoutSplit );
00076
00077
00078 m_SubSplit1 = new QSplitter( m_LayoutSplit );
00079 m_SubSplit2 = new QSplitter( m_LayoutSplit );
00080
00081
00082 mitkWidget1Container = new QWidget(m_SubSplit1);
00083 mitkWidget2Container = new QWidget(m_SubSplit1);
00084 mitkWidget3Container = new QWidget(m_SubSplit2);
00085 mitkWidget4Container = new QWidget(m_SubSplit2);
00086
00087 mitkWidget1Container->setContentsMargins(0,0,0,0);
00088 mitkWidget2Container->setContentsMargins(0,0,0,0);
00089 mitkWidget3Container->setContentsMargins(0,0,0,0);
00090 mitkWidget4Container->setContentsMargins(0,0,0,0);
00091
00092
00093 QHBoxLayout *mitkWidgetLayout1 = new QHBoxLayout(mitkWidget1Container);
00094 QHBoxLayout *mitkWidgetLayout2 = new QHBoxLayout(mitkWidget2Container);
00095 QHBoxLayout *mitkWidgetLayout3 = new QHBoxLayout(mitkWidget3Container);
00096 QHBoxLayout *mitkWidgetLayout4 = new QHBoxLayout(mitkWidget4Container);
00097
00098 mitkWidgetLayout1->setMargin(0);
00099 mitkWidgetLayout2->setMargin(0);
00100 mitkWidgetLayout3->setMargin(0);
00101 mitkWidgetLayout4->setMargin(0);
00102
00103
00104 mitkWidget1Container->setLayout(mitkWidgetLayout1);
00105 mitkWidget2Container->setLayout(mitkWidgetLayout2);
00106 mitkWidget3Container->setLayout(mitkWidgetLayout3);
00107 mitkWidget4Container->setLayout(mitkWidgetLayout4);
00108
00109
00110 mitkWidget1Container->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
00111 mitkWidget2Container->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
00112 mitkWidget3Container->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
00113 mitkWidget4Container->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
00114
00115
00116
00117 m_SubSplit1->addWidget( mitkWidget1Container );
00118 m_SubSplit1->addWidget( mitkWidget2Container );
00119
00120 m_SubSplit2->addWidget( mitkWidget3Container );
00121 m_SubSplit2->addWidget( mitkWidget4Container );
00122
00123
00124
00125
00126 mitkWidget1 = new QmitkRenderWindow(mitkWidget1Container, "stdmulti.widget1");
00127 mitkWidget1->setMaximumSize(2000,2000);
00128 mitkWidget1->SetLayoutIndex( TRANSVERSAL );
00129 mitkWidgetLayout1->addWidget(mitkWidget1);
00130
00131
00132 mitkWidget2 = new QmitkRenderWindow(mitkWidget2Container, "stdmulti.widget2");
00133 mitkWidget2->setMaximumSize(2000,2000);
00134 mitkWidget2->setEnabled( TRUE );
00135 mitkWidget2->SetLayoutIndex( SAGITTAL );
00136 mitkWidgetLayout2->addWidget(mitkWidget2);
00137
00138
00139 mitkWidget3 = new QmitkRenderWindow(mitkWidget3Container, "stdmulti.widget3");
00140 mitkWidget3->setMaximumSize(2000,2000);
00141 mitkWidget3->SetLayoutIndex( CORONAL );
00142 mitkWidgetLayout3->addWidget(mitkWidget3);
00143
00144
00145 mitkWidget4 = new QmitkRenderWindow(mitkWidget4Container, "stdmulti.widget4");
00146 mitkWidget4->setMaximumSize(2000,2000);
00147 mitkWidget4->SetLayoutIndex( THREE_D );
00148 mitkWidgetLayout4->addWidget(mitkWidget4);
00149
00150
00151 connect( mitkWidget1, SIGNAL( SignalLayoutDesignChanged(int) ), this, SLOT( OnLayoutDesignChanged(int) ) );
00152 connect( mitkWidget1, SIGNAL( ResetView() ), this, SLOT( ResetCrosshair() ) );
00153 connect( mitkWidget1, SIGNAL( ChangeCrosshairRotationMode(int) ), this, SLOT( SetWidgetPlaneMode(int) ) );
00154 connect( this, SIGNAL(WidgetNotifyNewCrossHairMode(int)), mitkWidget1, SLOT(OnWidgetPlaneModeChanged(int)) );
00155
00156 connect( mitkWidget2, SIGNAL( SignalLayoutDesignChanged(int) ), this, SLOT( OnLayoutDesignChanged(int) ) );
00157 connect( mitkWidget2, SIGNAL( ResetView() ), this, SLOT( ResetCrosshair() ) );
00158 connect( mitkWidget2, SIGNAL( ChangeCrosshairRotationMode(int) ), this, SLOT( SetWidgetPlaneMode(int) ) );
00159 connect( this, SIGNAL(WidgetNotifyNewCrossHairMode(int)), mitkWidget2, SLOT(OnWidgetPlaneModeChanged(int)) );
00160
00161 connect( mitkWidget3, SIGNAL( SignalLayoutDesignChanged(int) ), this, SLOT( OnLayoutDesignChanged(int) ) );
00162 connect( mitkWidget3, SIGNAL( ResetView() ), this, SLOT( ResetCrosshair() ) );
00163 connect( mitkWidget3, SIGNAL( ChangeCrosshairRotationMode(int) ), this, SLOT( SetWidgetPlaneMode(int) ) );
00164 connect( this, SIGNAL(WidgetNotifyNewCrossHairMode(int)), mitkWidget3, SLOT(OnWidgetPlaneModeChanged(int)) );
00165
00166 connect( mitkWidget4, SIGNAL( SignalLayoutDesignChanged(int) ), this, SLOT( OnLayoutDesignChanged(int) ) );
00167 connect( mitkWidget4, SIGNAL( ResetView() ), this, SLOT( ResetCrosshair() ) );
00168 connect( mitkWidget4, SIGNAL( ChangeCrosshairRotationMode(int) ), this, SLOT( SetWidgetPlaneMode(int) ) );
00169 connect( this, SIGNAL(WidgetNotifyNewCrossHairMode(int)), mitkWidget4, SLOT(OnWidgetPlaneModeChanged(int)) );
00170
00171
00172 levelWindowWidget = new QmitkLevelWindowWidget( m_MainSplit );
00173 levelWindowWidget->setObjectName(QString::fromUtf8("levelWindowWidget"));
00174 QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
00175 sizePolicy.setHorizontalStretch(0);
00176 sizePolicy.setVerticalStretch(0);
00177 sizePolicy.setHeightForWidth(levelWindowWidget->sizePolicy().hasHeightForWidth());
00178 levelWindowWidget->setSizePolicy(sizePolicy);
00179 levelWindowWidget->setMaximumSize(QSize(50, 2000));
00180
00181
00182 m_MainSplit->addWidget( levelWindowWidget );
00183
00184
00185 m_MainSplit->show();
00186
00187
00188 this->resize( QSize(364, 477).expandedTo(minimumSizeHint()) );
00189
00190
00191 this->InitializeWidget();
00192
00193
00194 this->ActivateMenuWidget( true );
00195 }
00196
00197 void QmitkStdMultiWidget::InitializeWidget()
00198 {
00199 m_PositionTracker = NULL;
00200
00201
00202 QColor qcolor;
00203
00204 mitk::DataNode::Pointer planeNode;
00205 mitk::IntProperty::Pointer layer;
00206
00207
00208 planeNode = mitk::BaseRenderer::GetInstance(mitkWidget1->GetRenderWindow())->GetCurrentWorldGeometry2DNode();
00209 planeNode->SetColor(1.0,0.0,0.0);
00210 layer = mitk::IntProperty::New(1000);
00211 planeNode->SetProperty("layer",layer);
00212
00213
00214 planeNode = mitk::BaseRenderer::GetInstance(mitkWidget2->GetRenderWindow())->GetCurrentWorldGeometry2DNode();
00215 planeNode->SetColor(0.0,1.0,0.0);
00216 layer = mitk::IntProperty::New(1000);
00217 planeNode->SetProperty("layer",layer);
00218
00219
00220 planeNode = mitk::BaseRenderer::GetInstance(mitkWidget3->GetRenderWindow())->GetCurrentWorldGeometry2DNode();
00221 planeNode->SetColor(0.0,0.0,1.0);
00222 layer = mitk::IntProperty::New(1000);
00223 planeNode->SetProperty("layer",layer);
00224
00225
00226 planeNode = mitk::BaseRenderer::GetInstance(mitkWidget4->GetRenderWindow())->GetCurrentWorldGeometry2DNode();
00227 planeNode->SetColor(1.0,1.0,0.0);
00228 layer = mitk::IntProperty::New(1000);
00229 planeNode->SetProperty("layer",layer);
00230
00231 mitk::BaseRenderer::GetInstance(mitkWidget4->GetRenderWindow())->SetMapperID(mitk::BaseRenderer::Standard3D);
00232
00233 m_PlaneMode = PLANE_MODE_SLICING;
00234
00235
00236 mitkWidget1->GetSliceNavigationController()->SetDefaultViewDirection(
00237 mitk::SliceNavigationController::Transversal );
00238 mitkWidget2->GetSliceNavigationController()->SetDefaultViewDirection(
00239 mitk::SliceNavigationController::Sagittal );
00240 mitkWidget3->GetSliceNavigationController()->SetDefaultViewDirection(
00241 mitk::SliceNavigationController::Frontal );
00242 mitkWidget4->GetSliceNavigationController()->SetDefaultViewDirection(
00243 mitk::SliceNavigationController::Original );
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263 m_CornerAnnotaions[0].cornerText = vtkCornerAnnotation::New();
00264 m_CornerAnnotaions[0].cornerText->SetText(0, "Transversal");
00265 m_CornerAnnotaions[0].cornerText->SetMaximumFontSize(12);
00266 m_CornerAnnotaions[0].textProp = vtkTextProperty::New();
00267 m_CornerAnnotaions[0].textProp->SetColor( 1.0, 0.0, 0.0 );
00268 m_CornerAnnotaions[0].cornerText->SetTextProperty( m_CornerAnnotaions[0].textProp );
00269 m_CornerAnnotaions[0].ren = vtkRenderer::New();
00270 m_CornerAnnotaions[0].ren->AddActor(m_CornerAnnotaions[0].cornerText);
00271 mitk::VtkLayerController::GetInstance(this->GetRenderWindow1()->GetRenderWindow())->InsertForegroundRenderer(m_CornerAnnotaions[0].ren,true);
00272
00273
00274 m_CornerAnnotaions[1].cornerText = vtkCornerAnnotation::New();
00275 m_CornerAnnotaions[1].cornerText->SetText(0, "Sagittal");
00276 m_CornerAnnotaions[1].cornerText->SetMaximumFontSize(12);
00277 m_CornerAnnotaions[1].textProp = vtkTextProperty::New();
00278 m_CornerAnnotaions[1].textProp->SetColor( 0.0, 1.0, 0.0 );
00279 m_CornerAnnotaions[1].cornerText->SetTextProperty( m_CornerAnnotaions[1].textProp );
00280 m_CornerAnnotaions[1].ren = vtkRenderer::New();
00281 m_CornerAnnotaions[1].ren->AddActor(m_CornerAnnotaions[1].cornerText);
00282 mitk::VtkLayerController::GetInstance(this->GetRenderWindow2()->GetRenderWindow())->InsertForegroundRenderer(m_CornerAnnotaions[1].ren,true);
00283
00284
00285 m_CornerAnnotaions[2].cornerText = vtkCornerAnnotation::New();
00286 m_CornerAnnotaions[2].cornerText->SetText(0, "Coronal");
00287 m_CornerAnnotaions[2].cornerText->SetMaximumFontSize(12);
00288 m_CornerAnnotaions[2].textProp = vtkTextProperty::New();
00289 m_CornerAnnotaions[2].textProp->SetColor( 0.295, 0.295, 1.0 );
00290 m_CornerAnnotaions[2].cornerText->SetTextProperty( m_CornerAnnotaions[2].textProp );
00291 m_CornerAnnotaions[2].ren = vtkRenderer::New();
00292 m_CornerAnnotaions[2].ren->AddActor(m_CornerAnnotaions[2].cornerText);
00293 mitk::VtkLayerController::GetInstance(this->GetRenderWindow3()->GetRenderWindow())->InsertForegroundRenderer(m_CornerAnnotaions[2].ren,true);
00294
00295
00296
00297
00298
00299
00300
00301
00302 m_SlicesRotator = mitk::SlicesRotator::New("slices-rotator");
00303 m_SlicesRotator->AddSliceController(
00304 mitkWidget1->GetSliceNavigationController() );
00305 m_SlicesRotator->AddSliceController(
00306 mitkWidget2->GetSliceNavigationController() );
00307 m_SlicesRotator->AddSliceController(
00308 mitkWidget3->GetSliceNavigationController() );
00309
00310
00311 m_SlicesSwiveller = mitk::SlicesSwiveller::New("slices-rotator");
00312 m_SlicesSwiveller->AddSliceController(
00313 mitkWidget1->GetSliceNavigationController() );
00314 m_SlicesSwiveller->AddSliceController(
00315 mitkWidget2->GetSliceNavigationController() );
00316 m_SlicesSwiveller->AddSliceController(
00317 mitkWidget3->GetSliceNavigationController() );
00318
00319
00320 m_TimeNavigationController = mitk::SliceNavigationController::New("dummy");
00321 m_TimeNavigationController->ConnectGeometryTimeEvent(
00322 mitkWidget1->GetSliceNavigationController() , false);
00323 m_TimeNavigationController->ConnectGeometryTimeEvent(
00324 mitkWidget2->GetSliceNavigationController() , false);
00325 m_TimeNavigationController->ConnectGeometryTimeEvent(
00326 mitkWidget3->GetSliceNavigationController() , false);
00327 m_TimeNavigationController->ConnectGeometryTimeEvent(
00328 mitkWidget4->GetSliceNavigationController() , false);
00329 mitkWidget1->GetSliceNavigationController()
00330 ->ConnectGeometrySendEvent(mitk::BaseRenderer::GetInstance(mitkWidget4->GetRenderWindow()));
00331
00332
00333
00334 mitk::RenderingManager::GetInstance()->SetTimeNavigationController(
00335 m_TimeNavigationController );
00336
00337
00338 mitkWidget1->GetSliceNavigationController()
00339 ->ConnectGeometryTimeEvent(m_TimeNavigationController.GetPointer(), false);
00340 mitkWidget2->GetSliceNavigationController()
00341 ->ConnectGeometryTimeEvent(m_TimeNavigationController.GetPointer(), false);
00342 mitkWidget3->GetSliceNavigationController()
00343 ->ConnectGeometryTimeEvent(m_TimeNavigationController.GetPointer(), false);
00344 mitkWidget4->GetSliceNavigationController()
00345 ->ConnectGeometryTimeEvent(m_TimeNavigationController.GetPointer(), false);
00346
00347
00348 m_MoveAndZoomInteractor = mitk::DisplayVectorInteractor::New(
00349 "moveNzoom", new mitk::DisplayInteractor() );
00350
00351 m_LastLeftClickPositionSupplier =
00352 mitk::CoordinateSupplier::New("navigation", NULL);
00353 mitk::GlobalInteraction::GetInstance()->AddListener(
00354 m_LastLeftClickPositionSupplier
00355 );
00356
00357 m_GradientBackground1 = mitk::GradientBackground::New();
00358 m_GradientBackground1->SetRenderWindow(
00359 mitkWidget1->GetRenderWindow() );
00360 m_GradientBackground1->Disable();
00361
00362 m_GradientBackground2 = mitk::GradientBackground::New();
00363 m_GradientBackground2->SetRenderWindow(
00364 mitkWidget2->GetRenderWindow() );
00365 m_GradientBackground2->Disable();
00366
00367 m_GradientBackground3 = mitk::GradientBackground::New();
00368 m_GradientBackground3->SetRenderWindow(
00369 mitkWidget3->GetRenderWindow() );
00370 m_GradientBackground3->Disable();
00371
00372 m_GradientBackground4 = mitk::GradientBackground::New();
00373 m_GradientBackground4->SetRenderWindow(
00374 mitkWidget4->GetRenderWindow() );
00375 m_GradientBackground4->SetGradientColors(0.1,0.1,0.1,0.5,0.5,0.5);
00376 m_GradientBackground4->Enable();
00377
00378
00379 m_LogoRendering1 = mitk::ManufacturerLogo::New();
00380 m_LogoRendering1->SetRenderWindow(
00381 mitkWidget1->GetRenderWindow() );
00382 m_LogoRendering1->Disable();
00383
00384 m_LogoRendering2 = mitk::ManufacturerLogo::New();
00385 m_LogoRendering2->SetRenderWindow(
00386 mitkWidget2->GetRenderWindow() );
00387 m_LogoRendering2->Disable();
00388
00389 m_LogoRendering3 = mitk::ManufacturerLogo::New();
00390 m_LogoRendering3->SetRenderWindow(
00391 mitkWidget3->GetRenderWindow() );
00392 m_LogoRendering3->Disable();
00393
00394 m_LogoRendering4 = mitk::ManufacturerLogo::New();
00395 m_LogoRendering4->SetRenderWindow(
00396 mitkWidget4->GetRenderWindow() );
00397 m_LogoRendering4->Enable();
00398
00399 m_RectangleRendering1 = mitk::RenderWindowFrame::New();
00400 m_RectangleRendering1->SetRenderWindow(
00401 mitkWidget1->GetRenderWindow() );
00402 m_RectangleRendering1->Enable(1.0,0.0,0.0);
00403
00404 m_RectangleRendering2 = mitk::RenderWindowFrame::New();
00405 m_RectangleRendering2->SetRenderWindow(
00406 mitkWidget2->GetRenderWindow() );
00407 m_RectangleRendering2->Enable(0.0,1.0,0.0);
00408
00409 m_RectangleRendering3 = mitk::RenderWindowFrame::New();
00410 m_RectangleRendering3->SetRenderWindow(
00411 mitkWidget3->GetRenderWindow() );
00412 m_RectangleRendering3->Enable(0.0,0.0,1.0);
00413
00414 m_RectangleRendering4 = mitk::RenderWindowFrame::New();
00415 m_RectangleRendering4->SetRenderWindow(
00416 mitkWidget4->GetRenderWindow() );
00417 m_RectangleRendering4->Enable(1.0,1.0,0.0);
00418 }
00419
00420 QmitkStdMultiWidget::~QmitkStdMultiWidget()
00421 {
00422 DisablePositionTracking();
00423 DisableNavigationControllerEventListening();
00424
00425 mitk::VtkLayerController::GetInstance(this->GetRenderWindow1()->GetRenderWindow())->RemoveRenderer( m_CornerAnnotaions[0].ren );
00426 mitk::VtkLayerController::GetInstance(this->GetRenderWindow2()->GetRenderWindow())->RemoveRenderer( m_CornerAnnotaions[1].ren );
00427 mitk::VtkLayerController::GetInstance(this->GetRenderWindow3()->GetRenderWindow())->RemoveRenderer( m_CornerAnnotaions[2].ren );
00428
00429
00430 m_CornerAnnotaions[0].cornerText->Delete();
00431 m_CornerAnnotaions[0].textProp->Delete();
00432 m_CornerAnnotaions[0].ren->Delete();
00433
00434 m_CornerAnnotaions[1].cornerText->Delete();
00435 m_CornerAnnotaions[1].textProp->Delete();
00436 m_CornerAnnotaions[1].ren->Delete();
00437
00438 m_CornerAnnotaions[2].cornerText->Delete();
00439 m_CornerAnnotaions[2].textProp->Delete();
00440 m_CornerAnnotaions[2].ren->Delete();
00441 }
00442
00443 void QmitkStdMultiWidget::RemovePlanesFromDataStorage()
00444 {
00445 if (m_PlaneNode1.IsNotNull() && m_PlaneNode2.IsNotNull() && m_PlaneNode3.IsNotNull() && m_Node.IsNotNull())
00446 {
00447 if(m_DataStorage.IsNotNull())
00448 {
00449 m_DataStorage->Remove(m_PlaneNode1);
00450 m_DataStorage->Remove(m_PlaneNode2);
00451 m_DataStorage->Remove(m_PlaneNode3);
00452 m_DataStorage->Remove(m_Node);
00453 }
00454 }
00455 }
00456
00457 void QmitkStdMultiWidget::AddPlanesToDataStorage()
00458 {
00459 if (m_PlaneNode1.IsNotNull() && m_PlaneNode2.IsNotNull() && m_PlaneNode3.IsNotNull() && m_Node.IsNotNull())
00460 {
00461 if (m_DataStorage.IsNotNull())
00462 {
00463 m_DataStorage->Add(m_Node);
00464 m_DataStorage->Add(m_PlaneNode1, m_Node);
00465 m_DataStorage->Add(m_PlaneNode2, m_Node);
00466 m_DataStorage->Add(m_PlaneNode3, m_Node);
00467 static_cast<mitk::Geometry2DDataMapper2D*>(m_PlaneNode1->GetMapper(mitk::BaseRenderer::Standard2D))->SetDatastorageAndGeometryBaseNode(m_DataStorage, m_Node);
00468 static_cast<mitk::Geometry2DDataMapper2D*>(m_PlaneNode2->GetMapper(mitk::BaseRenderer::Standard2D))->SetDatastorageAndGeometryBaseNode(m_DataStorage, m_Node);
00469 static_cast<mitk::Geometry2DDataMapper2D*>(m_PlaneNode3->GetMapper(mitk::BaseRenderer::Standard2D))->SetDatastorageAndGeometryBaseNode(m_DataStorage, m_Node);
00470 }
00471 }
00472 }
00473
00474 void QmitkStdMultiWidget::changeLayoutTo2DImagesUp()
00475 {
00476 SMW_INFO << "changing layout to 2D images up... " << std::endl;
00477
00478
00479 this->HideAllWidgetToolbars();
00480
00481 delete QmitkStdMultiWidgetLayout ;
00482
00483
00484 QmitkStdMultiWidgetLayout = new QHBoxLayout( this );
00485
00486
00487 this->setLayout(QmitkStdMultiWidgetLayout);
00488
00489
00490 m_MainSplit = new QSplitter( this );
00491 QmitkStdMultiWidgetLayout->addWidget( m_MainSplit );
00492
00493
00494 m_LayoutSplit = new QSplitter( Qt::Vertical, m_MainSplit );
00495 m_MainSplit->addWidget( m_LayoutSplit );
00496
00497
00498 m_MainSplit->addWidget( levelWindowWidget );
00499
00500
00501 m_SubSplit1 = new QSplitter( m_LayoutSplit );
00502 m_SubSplit2 = new QSplitter( m_LayoutSplit );
00503
00504
00505 m_SubSplit1->addWidget( mitkWidget1Container );
00506 m_SubSplit1->addWidget( mitkWidget2Container );
00507 m_SubSplit1->addWidget( mitkWidget3Container );
00508
00509
00510 QList<int> splitterSize;
00511 splitterSize.push_back(1000);
00512 splitterSize.push_back(1000);
00513 splitterSize.push_back(1000);
00514 m_SubSplit1->setSizes( splitterSize );
00515
00516
00517 m_SubSplit2->addWidget( mitkWidget4Container );
00518
00519
00520 splitterSize.clear();
00521 splitterSize.push_back(400);
00522 splitterSize.push_back(1000);
00523 m_LayoutSplit->setSizes( splitterSize );
00524
00525
00526 m_MainSplit->show();
00527
00528
00529 if ( mitkWidget1->isHidden() ) mitkWidget1->show();
00530 if ( mitkWidget2->isHidden() ) mitkWidget2->show();
00531 if ( mitkWidget3->isHidden() ) mitkWidget3->show();
00532 if ( mitkWidget4->isHidden() ) mitkWidget4->show();
00533
00534
00535 m_Layout = LAYOUT_2D_IMAGES_UP;
00536
00537
00538 mitkWidget1->LayoutDesignListChanged( LAYOUT_2D_IMAGES_UP );
00539 mitkWidget2->LayoutDesignListChanged( LAYOUT_2D_IMAGES_UP );
00540 mitkWidget3->LayoutDesignListChanged( LAYOUT_2D_IMAGES_UP );
00541 mitkWidget4->LayoutDesignListChanged( LAYOUT_2D_IMAGES_UP );
00542
00543
00544 this->UpdateAllWidgets();
00545 }
00546
00547 void QmitkStdMultiWidget::changeLayoutTo2DImagesLeft()
00548 {
00549 SMW_INFO << "changing layout to 2D images left... " << std::endl;
00550
00551
00552 this->HideAllWidgetToolbars();
00553
00554 delete QmitkStdMultiWidgetLayout ;
00555
00556
00557 QmitkStdMultiWidgetLayout = new QHBoxLayout( this );
00558
00559
00560 m_MainSplit = new QSplitter( this );
00561 QmitkStdMultiWidgetLayout->addWidget( m_MainSplit );
00562
00563
00564 m_LayoutSplit = new QSplitter( m_MainSplit );
00565 m_MainSplit->addWidget( m_LayoutSplit );
00566
00567
00568 m_MainSplit->addWidget( levelWindowWidget );
00569
00570
00571 m_SubSplit1 = new QSplitter( Qt::Vertical, m_LayoutSplit );
00572 m_SubSplit2 = new QSplitter( m_LayoutSplit );
00573
00574
00575 m_SubSplit1->addWidget( mitkWidget1Container );
00576 m_SubSplit1->addWidget( mitkWidget2Container );
00577 m_SubSplit1->addWidget( mitkWidget3Container );
00578
00579
00580 QList<int> splitterSize;
00581 splitterSize.push_back(1000);
00582 splitterSize.push_back(1000);
00583 splitterSize.push_back(1000);
00584 m_SubSplit1->setSizes( splitterSize );
00585
00586 m_SubSplit2->addWidget( mitkWidget4Container );
00587
00588
00589 splitterSize.clear();
00590 splitterSize.push_back(400);
00591 splitterSize.push_back(1000);
00592 m_LayoutSplit->setSizes( splitterSize );
00593
00594
00595 m_MainSplit->show();
00596
00597
00598 if ( mitkWidget1->isHidden() ) mitkWidget1->show();
00599 if ( mitkWidget2->isHidden() ) mitkWidget2->show();
00600 if ( mitkWidget3->isHidden() ) mitkWidget3->show();
00601 if ( mitkWidget4->isHidden() ) mitkWidget4->show();
00602
00603
00604 m_Layout = LAYOUT_2D_IMAGES_LEFT;
00605
00606
00607 mitkWidget1->LayoutDesignListChanged( LAYOUT_2D_IMAGES_LEFT );
00608 mitkWidget2->LayoutDesignListChanged( LAYOUT_2D_IMAGES_LEFT );
00609 mitkWidget3->LayoutDesignListChanged( LAYOUT_2D_IMAGES_LEFT );
00610 mitkWidget4->LayoutDesignListChanged( LAYOUT_2D_IMAGES_LEFT );
00611
00612
00613 this->UpdateAllWidgets();
00614 }
00615
00616 void QmitkStdMultiWidget::changeLayoutToDefault()
00617 {
00618 SMW_INFO << "changing layout to default... " << std::endl;
00619
00620
00621 this->HideAllWidgetToolbars();
00622
00623 delete QmitkStdMultiWidgetLayout ;
00624
00625
00626 QmitkStdMultiWidgetLayout = new QHBoxLayout( this );
00627
00628
00629 m_MainSplit = new QSplitter( this );
00630 QmitkStdMultiWidgetLayout->addWidget( m_MainSplit );
00631
00632
00633 m_LayoutSplit = new QSplitter( Qt::Vertical, m_MainSplit );
00634 m_MainSplit->addWidget( m_LayoutSplit );
00635
00636
00637 m_MainSplit->addWidget( levelWindowWidget );
00638
00639
00640 m_SubSplit1 = new QSplitter( m_LayoutSplit );
00641 m_SubSplit2 = new QSplitter( m_LayoutSplit );
00642
00643
00644 m_SubSplit1->addWidget( mitkWidget1Container );
00645 m_SubSplit1->addWidget( mitkWidget2Container );
00646
00647 m_SubSplit2->addWidget( mitkWidget3Container );
00648 m_SubSplit2->addWidget( mitkWidget4Container );
00649
00650
00651 QList<int> splitterSize;
00652 splitterSize.push_back(1000);
00653 splitterSize.push_back(1000);
00654 m_SubSplit1->setSizes( splitterSize );
00655 m_SubSplit2->setSizes( splitterSize );
00656 m_LayoutSplit->setSizes( splitterSize );
00657
00658
00659 m_MainSplit->show();
00660
00661
00662 if ( mitkWidget1->isHidden() ) mitkWidget1->show();
00663 if ( mitkWidget2->isHidden() ) mitkWidget2->show();
00664 if ( mitkWidget3->isHidden() ) mitkWidget3->show();
00665 if ( mitkWidget4->isHidden() ) mitkWidget4->show();
00666
00667 m_Layout = LAYOUT_DEFAULT;
00668
00669
00670 mitkWidget1->LayoutDesignListChanged( LAYOUT_DEFAULT );
00671 mitkWidget2->LayoutDesignListChanged( LAYOUT_DEFAULT );
00672 mitkWidget3->LayoutDesignListChanged( LAYOUT_DEFAULT );
00673 mitkWidget4->LayoutDesignListChanged( LAYOUT_DEFAULT );
00674
00675
00676 this->UpdateAllWidgets();
00677 }
00678
00679 void QmitkStdMultiWidget::changeLayoutToBig3D()
00680 {
00681 SMW_INFO << "changing layout to big 3D ..." << std::endl;
00682
00683
00684 this->HideAllWidgetToolbars();
00685
00686 delete QmitkStdMultiWidgetLayout ;
00687
00688
00689 QmitkStdMultiWidgetLayout = new QHBoxLayout( this );
00690
00691
00692 m_MainSplit = new QSplitter( this );
00693 QmitkStdMultiWidgetLayout->addWidget( m_MainSplit );
00694
00695
00696 m_MainSplit->addWidget( mitkWidget4Container );
00697
00698
00699 m_MainSplit->addWidget( levelWindowWidget );
00700
00701
00702 m_MainSplit->show();
00703
00704
00705 mitkWidget1->hide();
00706 mitkWidget2->hide();
00707 mitkWidget3->hide();
00708 if ( mitkWidget4->isHidden() ) mitkWidget4->show();
00709
00710 m_Layout = LAYOUT_BIG_3D;
00711
00712
00713 mitkWidget1->LayoutDesignListChanged( LAYOUT_BIG_3D );
00714 mitkWidget2->LayoutDesignListChanged( LAYOUT_BIG_3D );
00715 mitkWidget3->LayoutDesignListChanged( LAYOUT_BIG_3D );
00716 mitkWidget4->LayoutDesignListChanged( LAYOUT_BIG_3D );
00717
00718
00719 this->UpdateAllWidgets();
00720 }
00721
00722 void QmitkStdMultiWidget::changeLayoutToWidget1()
00723 {
00724 SMW_INFO << "changing layout to big Widget1 ..." << std::endl;
00725
00726
00727 this->HideAllWidgetToolbars();
00728
00729 delete QmitkStdMultiWidgetLayout ;
00730
00731
00732 QmitkStdMultiWidgetLayout = new QHBoxLayout( this );
00733
00734
00735 m_MainSplit = new QSplitter( this );
00736 QmitkStdMultiWidgetLayout->addWidget( m_MainSplit );
00737
00738
00739 m_MainSplit->addWidget( mitkWidget1Container );
00740
00741
00742 m_MainSplit->addWidget( levelWindowWidget );
00743
00744
00745 m_MainSplit->show();
00746
00747
00748 if ( mitkWidget1->isHidden() ) mitkWidget1->show();
00749 mitkWidget2->hide();
00750 mitkWidget3->hide();
00751 mitkWidget4->hide();
00752
00753 m_Layout = LAYOUT_WIDGET1;
00754
00755
00756 mitkWidget1->LayoutDesignListChanged( LAYOUT_WIDGET1 );
00757 mitkWidget2->LayoutDesignListChanged( LAYOUT_WIDGET1 );
00758 mitkWidget3->LayoutDesignListChanged( LAYOUT_WIDGET1 );
00759 mitkWidget4->LayoutDesignListChanged( LAYOUT_WIDGET1 );
00760
00761
00762 this->UpdateAllWidgets();
00763 }
00764
00765 void QmitkStdMultiWidget::changeLayoutToWidget2()
00766 {
00767 SMW_INFO << "changing layout to big Widget2 ..." << std::endl;
00768
00769
00770 this->HideAllWidgetToolbars();
00771
00772 delete QmitkStdMultiWidgetLayout ;
00773
00774
00775 QmitkStdMultiWidgetLayout = new QHBoxLayout( this );
00776
00777
00778 m_MainSplit = new QSplitter( this );
00779 QmitkStdMultiWidgetLayout->addWidget( m_MainSplit );
00780
00781
00782 m_MainSplit->addWidget( mitkWidget2Container );
00783
00784
00785 m_MainSplit->addWidget( levelWindowWidget );
00786
00787
00788 m_MainSplit->show();
00789
00790
00791 mitkWidget1->hide();
00792 if ( mitkWidget2->isHidden() ) mitkWidget2->show();
00793 mitkWidget3->hide();
00794 mitkWidget4->hide();
00795
00796 m_Layout = LAYOUT_WIDGET2;
00797
00798
00799 mitkWidget1->LayoutDesignListChanged( LAYOUT_WIDGET2 );
00800 mitkWidget2->LayoutDesignListChanged( LAYOUT_WIDGET2 );
00801 mitkWidget3->LayoutDesignListChanged( LAYOUT_WIDGET2 );
00802 mitkWidget4->LayoutDesignListChanged( LAYOUT_WIDGET2 );
00803
00804
00805 this->UpdateAllWidgets();
00806 }
00807
00808 void QmitkStdMultiWidget::changeLayoutToWidget3()
00809 {
00810 SMW_INFO << "changing layout to big Widget3 ..." << std::endl;
00811
00812
00813 this->HideAllWidgetToolbars();
00814
00815 delete QmitkStdMultiWidgetLayout ;
00816
00817
00818 QmitkStdMultiWidgetLayout = new QHBoxLayout( this );
00819
00820
00821 m_MainSplit = new QSplitter( this );
00822 QmitkStdMultiWidgetLayout->addWidget( m_MainSplit );
00823
00824
00825 m_MainSplit->addWidget( mitkWidget3Container );
00826
00827
00828 m_MainSplit->addWidget( levelWindowWidget );
00829
00830
00831 m_MainSplit->show();
00832
00833
00834 mitkWidget1->hide();
00835 mitkWidget2->hide();
00836 if ( mitkWidget3->isHidden() ) mitkWidget3->show();
00837 mitkWidget4->hide();
00838
00839 m_Layout = LAYOUT_WIDGET3;
00840
00841
00842 mitkWidget1->LayoutDesignListChanged( LAYOUT_WIDGET3 );
00843 mitkWidget2->LayoutDesignListChanged( LAYOUT_WIDGET3 );
00844 mitkWidget3->LayoutDesignListChanged( LAYOUT_WIDGET3 );
00845 mitkWidget4->LayoutDesignListChanged( LAYOUT_WIDGET3 );
00846
00847
00848 this->UpdateAllWidgets();
00849 }
00850
00851 void QmitkStdMultiWidget::changeLayoutToRowWidget3And4()
00852 {
00853 SMW_INFO << "changing layout to Widget3 and 4 in a Row..." << std::endl;
00854
00855
00856 this->HideAllWidgetToolbars();
00857
00858 delete QmitkStdMultiWidgetLayout ;
00859
00860
00861 QmitkStdMultiWidgetLayout = new QHBoxLayout( this );
00862
00863
00864 m_MainSplit = new QSplitter( this );
00865 QmitkStdMultiWidgetLayout->addWidget( m_MainSplit );
00866
00867
00868 m_LayoutSplit = new QSplitter( Qt::Vertical, m_MainSplit );
00869 m_MainSplit->addWidget( m_LayoutSplit );
00870
00871
00872 m_MainSplit->addWidget( levelWindowWidget );
00873
00874
00875 m_LayoutSplit->addWidget( mitkWidget3Container );
00876 m_LayoutSplit->addWidget( mitkWidget4Container );
00877
00878
00879 QList<int> splitterSize;
00880 splitterSize.push_back(1000);
00881 splitterSize.push_back(1000);
00882 m_LayoutSplit->setSizes( splitterSize );
00883
00884
00885 m_MainSplit->show();
00886
00887
00888 mitkWidget1->hide();
00889 mitkWidget2->hide();
00890 if ( mitkWidget3->isHidden() ) mitkWidget3->show();
00891 if ( mitkWidget4->isHidden() ) mitkWidget4->show();
00892
00893 m_Layout = LAYOUT_ROW_WIDGET_3_AND_4;
00894
00895
00896 mitkWidget1->LayoutDesignListChanged( LAYOUT_ROW_WIDGET_3_AND_4 );
00897 mitkWidget2->LayoutDesignListChanged( LAYOUT_ROW_WIDGET_3_AND_4 );
00898 mitkWidget3->LayoutDesignListChanged( LAYOUT_ROW_WIDGET_3_AND_4 );
00899 mitkWidget4->LayoutDesignListChanged( LAYOUT_ROW_WIDGET_3_AND_4 );
00900
00901
00902 this->UpdateAllWidgets();
00903 }
00904
00905 void QmitkStdMultiWidget::changeLayoutToColumnWidget3And4()
00906 {
00907 SMW_INFO << "changing layout to Widget3 and 4 in one Column..." << std::endl;
00908
00909
00910 this->HideAllWidgetToolbars();
00911
00912 delete QmitkStdMultiWidgetLayout ;
00913
00914
00915 QmitkStdMultiWidgetLayout = new QHBoxLayout( this );
00916
00917
00918 m_MainSplit = new QSplitter( this );
00919 QmitkStdMultiWidgetLayout->addWidget( m_MainSplit );
00920
00921
00922 m_LayoutSplit = new QSplitter( m_MainSplit );
00923 m_MainSplit->addWidget( m_LayoutSplit );
00924
00925
00926 m_MainSplit->addWidget( levelWindowWidget );
00927
00928
00929 m_LayoutSplit->addWidget( mitkWidget3Container );
00930 m_LayoutSplit->addWidget( mitkWidget4Container );
00931
00932
00933 QList<int> splitterSize;
00934 splitterSize.push_back(1000);
00935 splitterSize.push_back(1000);
00936 m_LayoutSplit->setSizes( splitterSize );
00937
00938
00939 m_MainSplit->show();
00940
00941
00942 mitkWidget1->hide();
00943 mitkWidget2->hide();
00944 if ( mitkWidget3->isHidden() ) mitkWidget3->show();
00945 if ( mitkWidget4->isHidden() ) mitkWidget4->show();
00946
00947 m_Layout = LAYOUT_COLUMN_WIDGET_3_AND_4;
00948
00949
00950 mitkWidget1->LayoutDesignListChanged( LAYOUT_COLUMN_WIDGET_3_AND_4 );
00951 mitkWidget2->LayoutDesignListChanged( LAYOUT_COLUMN_WIDGET_3_AND_4 );
00952 mitkWidget3->LayoutDesignListChanged( LAYOUT_COLUMN_WIDGET_3_AND_4 );
00953 mitkWidget4->LayoutDesignListChanged( LAYOUT_COLUMN_WIDGET_3_AND_4 );
00954
00955
00956 this->UpdateAllWidgets();
00957 }
00958
00959 void QmitkStdMultiWidget::changeLayoutToRowWidgetSmall3andBig4()
00960 {
00961 SMW_INFO << "changing layout to Widget3 and 4 in a Row..." << std::endl;
00962
00963 this->changeLayoutToRowWidget3And4();
00964
00965 m_Layout = LAYOUT_ROW_WIDGET_SMALL3_AND_BIG4;
00966 }
00967
00968
00969 void QmitkStdMultiWidget::changeLayoutToSmallUpperWidget2Big3and4()
00970 {
00971 SMW_INFO << "changing layout to Widget3 and 4 in a Row..." << std::endl;
00972
00973
00974 this->HideAllWidgetToolbars();
00975
00976 delete QmitkStdMultiWidgetLayout ;
00977
00978
00979 QmitkStdMultiWidgetLayout = new QHBoxLayout( this );
00980
00981
00982 m_MainSplit = new QSplitter( this );
00983 QmitkStdMultiWidgetLayout->addWidget( m_MainSplit );
00984
00985
00986 m_LayoutSplit = new QSplitter( Qt::Vertical, m_MainSplit );
00987 m_MainSplit->addWidget( m_LayoutSplit );
00988
00989
00990 m_MainSplit->addWidget( levelWindowWidget );
00991
00992
00993 m_SubSplit1 = new QSplitter( Qt::Vertical, m_LayoutSplit );
00994 m_SubSplit2 = new QSplitter( m_LayoutSplit );
00995
00996
00997 m_SubSplit1->addWidget( mitkWidget2Container );
00998
00999 m_SubSplit2->addWidget( mitkWidget3Container );
01000 m_SubSplit2->addWidget( mitkWidget4Container );
01001
01002
01003 QList<int> splitterSize;
01004 splitterSize.push_back(1000);
01005 splitterSize.push_back(1000);
01006 m_SubSplit2->setSizes( splitterSize );
01007 splitterSize.clear();
01008 splitterSize.push_back(500);
01009 splitterSize.push_back(1000);
01010 m_LayoutSplit->setSizes( splitterSize );
01011
01012
01013 m_MainSplit->show();
01014
01015
01016 mitkWidget1->hide();
01017 if ( mitkWidget2->isHidden() ) mitkWidget2->show();
01018 if ( mitkWidget3->isHidden() ) mitkWidget3->show();
01019 if ( mitkWidget4->isHidden() ) mitkWidget4->show();
01020
01021 m_Layout = LAYOUT_SMALL_UPPER_WIDGET2_BIG3_AND4;
01022
01023
01024 mitkWidget1->LayoutDesignListChanged( LAYOUT_SMALL_UPPER_WIDGET2_BIG3_AND4 );
01025 mitkWidget2->LayoutDesignListChanged( LAYOUT_SMALL_UPPER_WIDGET2_BIG3_AND4 );
01026 mitkWidget3->LayoutDesignListChanged( LAYOUT_SMALL_UPPER_WIDGET2_BIG3_AND4 );
01027 mitkWidget4->LayoutDesignListChanged( LAYOUT_SMALL_UPPER_WIDGET2_BIG3_AND4 );
01028
01029
01030 this->UpdateAllWidgets();
01031 }
01032
01033
01034 void QmitkStdMultiWidget::changeLayoutTo2x2Dand3DWidget()
01035 {
01036 SMW_INFO << "changing layout to 2 x 2D and 3D Widget" << std::endl;
01037
01038
01039 this->HideAllWidgetToolbars();
01040
01041 delete QmitkStdMultiWidgetLayout ;
01042
01043
01044 QmitkStdMultiWidgetLayout = new QHBoxLayout( this );
01045
01046
01047 m_MainSplit = new QSplitter( this );
01048 QmitkStdMultiWidgetLayout->addWidget( m_MainSplit );
01049
01050
01051 m_LayoutSplit = new QSplitter( m_MainSplit );
01052 m_MainSplit->addWidget( m_LayoutSplit );
01053
01054
01055 m_MainSplit->addWidget( levelWindowWidget );
01056
01057
01058 m_SubSplit1 = new QSplitter( Qt::Vertical, m_LayoutSplit );
01059 m_SubSplit2 = new QSplitter( m_LayoutSplit );
01060
01061
01062 m_SubSplit1->addWidget( mitkWidget1Container );
01063 m_SubSplit1->addWidget( mitkWidget2Container );
01064 m_SubSplit2->addWidget( mitkWidget4Container );
01065
01066
01067 QList<int> splitterSize;
01068 splitterSize.push_back(1000);
01069 splitterSize.push_back(1000);
01070 m_SubSplit1->setSizes( splitterSize );
01071 m_LayoutSplit->setSizes( splitterSize );
01072
01073
01074 m_MainSplit->show();
01075
01076
01077 if ( mitkWidget1->isHidden() ) mitkWidget1->show();
01078 if ( mitkWidget2->isHidden() ) mitkWidget2->show();
01079 mitkWidget3->hide();
01080 if ( mitkWidget4->isHidden() ) mitkWidget4->show();
01081
01082 m_Layout = LAYOUT_2X_2D_AND_3D_WIDGET;
01083
01084
01085 mitkWidget1->LayoutDesignListChanged( LAYOUT_2X_2D_AND_3D_WIDGET );
01086 mitkWidget2->LayoutDesignListChanged( LAYOUT_2X_2D_AND_3D_WIDGET );
01087 mitkWidget3->LayoutDesignListChanged( LAYOUT_2X_2D_AND_3D_WIDGET );
01088 mitkWidget4->LayoutDesignListChanged( LAYOUT_2X_2D_AND_3D_WIDGET );
01089
01090
01091 this->UpdateAllWidgets();
01092 }
01093
01094
01095 void QmitkStdMultiWidget::changeLayoutToLeft2Dand3DRight2D()
01096 {
01097 SMW_INFO << "changing layout to 2D and 3D left, 2D right Widget" << std::endl;
01098
01099
01100 this->HideAllWidgetToolbars();
01101
01102 delete QmitkStdMultiWidgetLayout ;
01103
01104
01105 QmitkStdMultiWidgetLayout = new QHBoxLayout( this );
01106
01107
01108 m_MainSplit = new QSplitter( this );
01109 QmitkStdMultiWidgetLayout->addWidget( m_MainSplit );
01110
01111
01112 m_LayoutSplit = new QSplitter( m_MainSplit );
01113 m_MainSplit->addWidget( m_LayoutSplit );
01114
01115
01116 m_MainSplit->addWidget( levelWindowWidget );
01117
01118
01119 m_SubSplit1 = new QSplitter( Qt::Vertical, m_LayoutSplit );
01120 m_SubSplit2 = new QSplitter( m_LayoutSplit );
01121
01122
01123
01124 m_SubSplit1->addWidget( mitkWidget1Container );
01125 m_SubSplit1->addWidget( mitkWidget4Container );
01126 m_SubSplit2->addWidget( mitkWidget2Container );
01127
01128
01129 QList<int> splitterSize;
01130 splitterSize.push_back(1000);
01131 splitterSize.push_back(1000);
01132 m_SubSplit1->setSizes( splitterSize );
01133 m_LayoutSplit->setSizes( splitterSize );
01134
01135
01136 m_MainSplit->show();
01137
01138
01139 if ( mitkWidget1->isHidden() ) mitkWidget1->show();
01140 if ( mitkWidget2->isHidden() ) mitkWidget2->show();
01141 mitkWidget3->hide();
01142 if ( mitkWidget4->isHidden() ) mitkWidget4->show();
01143
01144 m_Layout = LAYOUT_2D_AND_3D_LEFT_2D_RIGHT_WIDGET;
01145
01146
01147 mitkWidget1->LayoutDesignListChanged( LAYOUT_2D_AND_3D_LEFT_2D_RIGHT_WIDGET );
01148 mitkWidget2->LayoutDesignListChanged( LAYOUT_2D_AND_3D_LEFT_2D_RIGHT_WIDGET );
01149 mitkWidget3->LayoutDesignListChanged( LAYOUT_2D_AND_3D_LEFT_2D_RIGHT_WIDGET );
01150 mitkWidget4->LayoutDesignListChanged( LAYOUT_2D_AND_3D_LEFT_2D_RIGHT_WIDGET );
01151
01152
01153 this->UpdateAllWidgets();
01154 }
01155
01156 void QmitkStdMultiWidget::changeLayoutTo2DUpAnd3DDown()
01157 {
01158 SMW_INFO << "changing layout to 2D up and 3D down" << std::endl;
01159
01160
01161 this->HideAllWidgetToolbars();
01162
01163 delete QmitkStdMultiWidgetLayout ;
01164
01165
01166 QmitkStdMultiWidgetLayout = new QHBoxLayout( this );
01167
01168
01169 this->setLayout(QmitkStdMultiWidgetLayout);
01170
01171
01172 m_MainSplit = new QSplitter( this );
01173 QmitkStdMultiWidgetLayout->addWidget( m_MainSplit );
01174
01175
01176 m_LayoutSplit = new QSplitter( Qt::Vertical, m_MainSplit );
01177 m_MainSplit->addWidget( m_LayoutSplit );
01178
01179
01180 m_MainSplit->addWidget( levelWindowWidget );
01181
01182
01183 m_SubSplit1 = new QSplitter( m_LayoutSplit );
01184 m_SubSplit2 = new QSplitter( m_LayoutSplit );
01185
01186
01187 m_SubSplit1->addWidget( mitkWidget1Container );
01188
01189
01190 QList<int> splitterSize;
01191
01192
01193
01194
01195
01196
01197 m_SubSplit2->addWidget( mitkWidget4Container );
01198
01199
01200 splitterSize.clear();
01201 splitterSize.push_back(700);
01202 splitterSize.push_back(700);
01203 m_LayoutSplit->setSizes( splitterSize );
01204
01205
01206 m_MainSplit->show();
01207
01208
01209 if ( mitkWidget1->isHidden() ) mitkWidget1->show();
01210 mitkWidget2->hide();
01211 mitkWidget3->hide();
01212 if ( mitkWidget4->isHidden() ) mitkWidget4->show();
01213
01214 m_Layout = LAYOUT_2D_UP_AND_3D_DOWN;
01215
01216
01217 mitkWidget1->LayoutDesignListChanged( LAYOUT_2D_UP_AND_3D_DOWN );
01218 mitkWidget2->LayoutDesignListChanged( LAYOUT_2D_UP_AND_3D_DOWN );
01219 mitkWidget3->LayoutDesignListChanged( LAYOUT_2D_UP_AND_3D_DOWN );
01220 mitkWidget4->LayoutDesignListChanged( LAYOUT_2D_UP_AND_3D_DOWN );
01221
01222
01223 this->UpdateAllWidgets();
01224 }
01225
01226
01227
01228 void QmitkStdMultiWidget::SetDataStorage( mitk::DataStorage* ds )
01229 {
01230 mitk::BaseRenderer::GetInstance(mitkWidget1->GetRenderWindow())->SetDataStorage(ds);
01231 mitk::BaseRenderer::GetInstance(mitkWidget2->GetRenderWindow())->SetDataStorage(ds);
01232 mitk::BaseRenderer::GetInstance(mitkWidget3->GetRenderWindow())->SetDataStorage(ds);
01233 mitk::BaseRenderer::GetInstance(mitkWidget4->GetRenderWindow())->SetDataStorage(ds);
01234 m_DataStorage = ds;
01235 }
01236
01237
01238 void QmitkStdMultiWidget::Fit()
01239 {
01240 vtkRenderer * vtkrenderer;
01241 mitk::BaseRenderer::GetInstance(mitkWidget1->GetRenderWindow())->GetDisplayGeometry()->Fit();
01242 mitk::BaseRenderer::GetInstance(mitkWidget2->GetRenderWindow())->GetDisplayGeometry()->Fit();
01243 mitk::BaseRenderer::GetInstance(mitkWidget3->GetRenderWindow())->GetDisplayGeometry()->Fit();
01244 mitk::BaseRenderer::GetInstance(mitkWidget4->GetRenderWindow())->GetDisplayGeometry()->Fit();
01245
01246 int w = vtkObject::GetGlobalWarningDisplay();
01247 vtkObject::GlobalWarningDisplayOff();
01248
01249 vtkrenderer = mitk::BaseRenderer::GetInstance(mitkWidget1->GetRenderWindow())->GetVtkRenderer();
01250 if ( vtkrenderer!= NULL )
01251 vtkrenderer->ResetCamera();
01252
01253 vtkrenderer = mitk::BaseRenderer::GetInstance(mitkWidget2->GetRenderWindow())->GetVtkRenderer();
01254 if ( vtkrenderer!= NULL )
01255 vtkrenderer->ResetCamera();
01256
01257 vtkrenderer = mitk::BaseRenderer::GetInstance(mitkWidget3->GetRenderWindow())->GetVtkRenderer();
01258 if ( vtkrenderer!= NULL )
01259 vtkrenderer->ResetCamera();
01260
01261 vtkrenderer = mitk::BaseRenderer::GetInstance(mitkWidget4->GetRenderWindow())->GetVtkRenderer();
01262 if ( vtkrenderer!= NULL )
01263 vtkrenderer->ResetCamera();
01264
01265 vtkObject::SetGlobalWarningDisplay(w);
01266 }
01267
01268
01269 void QmitkStdMultiWidget::InitPositionTracking()
01270 {
01271
01272 m_PositionTrackerNode = mitk::DataNode::New();
01273 m_PositionTrackerNode->SetProperty("name", mitk::StringProperty::New("Mouse Position"));
01274 m_PositionTrackerNode->SetData( mitk::PointSet::New() );
01275 m_PositionTrackerNode->SetColor(1.0,0.33,0.0);
01276 m_PositionTrackerNode->SetProperty("layer", mitk::IntProperty::New(1001));
01277 m_PositionTrackerNode->SetVisibility(true);
01278 m_PositionTrackerNode->SetProperty("inputdevice", mitk::BoolProperty::New(true) );
01279 m_PositionTrackerNode->SetProperty("BaseRendererMapperID", mitk::IntProperty::New(0) );
01280 m_PositionTrackerNode->SetProperty("baserenderer", mitk::StringProperty::New("N/A"));
01281 }
01282
01283
01284 void QmitkStdMultiWidget::AddDisplayPlaneSubTree()
01285 {
01286
01287
01288
01289 float white[3] = {1.0f,1.0f,1.0f};
01290 mitk::Geometry2DDataMapper2D::Pointer mapper;
01291
01292
01293 m_PlaneNode1 = (mitk::BaseRenderer::GetInstance(mitkWidget1->GetRenderWindow()))->GetCurrentWorldGeometry2DNode();
01294 m_PlaneNode1->SetColor(white, mitk::BaseRenderer::GetInstance(mitkWidget4->GetRenderWindow()));
01295 m_PlaneNode1->SetProperty("visible", mitk::BoolProperty::New(true));
01296 m_PlaneNode1->SetProperty("name", mitk::StringProperty::New("widget1Plane"));
01297 m_PlaneNode1->SetProperty("includeInBoundingBox", mitk::BoolProperty::New(false));
01298 m_PlaneNode1->SetProperty("helper object", mitk::BoolProperty::New(true));
01299 mapper = mitk::Geometry2DDataMapper2D::New();
01300 m_PlaneNode1->SetMapper(mitk::BaseRenderer::Standard2D, mapper);
01301
01302
01303 m_PlaneNode2 =( mitk::BaseRenderer::GetInstance(mitkWidget2->GetRenderWindow()))->GetCurrentWorldGeometry2DNode();
01304 m_PlaneNode2->SetColor(white, mitk::BaseRenderer::GetInstance(mitkWidget4->GetRenderWindow()));
01305 m_PlaneNode2->SetProperty("visible", mitk::BoolProperty::New(true));
01306 m_PlaneNode2->SetProperty("name", mitk::StringProperty::New("widget2Plane"));
01307 m_PlaneNode2->SetProperty("includeInBoundingBox", mitk::BoolProperty::New(false));
01308 m_PlaneNode2->SetProperty("helper object", mitk::BoolProperty::New(true));
01309 mapper = mitk::Geometry2DDataMapper2D::New();
01310 m_PlaneNode2->SetMapper(mitk::BaseRenderer::Standard2D, mapper);
01311
01312
01313 m_PlaneNode3 = (mitk::BaseRenderer::GetInstance(mitkWidget3->GetRenderWindow()))->GetCurrentWorldGeometry2DNode();
01314 m_PlaneNode3->SetColor(white, mitk::BaseRenderer::GetInstance(mitkWidget4->GetRenderWindow()));
01315 m_PlaneNode3->SetProperty("visible", mitk::BoolProperty::New(true));
01316 m_PlaneNode3->SetProperty("name", mitk::StringProperty::New("widget3Plane"));
01317 m_PlaneNode3->SetProperty("includeInBoundingBox", mitk::BoolProperty::New(false));
01318 m_PlaneNode3->SetProperty("helper object", mitk::BoolProperty::New(true));
01319 mapper = mitk::Geometry2DDataMapper2D::New();
01320 m_PlaneNode3->SetMapper(mitk::BaseRenderer::Standard2D, mapper);
01321
01322 m_Node = mitk::DataNode::New();
01323 m_Node->SetProperty("name", mitk::StringProperty::New("Widgets"));
01324 m_Node->SetProperty("helper object", mitk::BoolProperty::New(true));
01325 }
01326
01327
01328 mitk::SliceNavigationController* QmitkStdMultiWidget::GetTimeNavigationController()
01329 {
01330 return m_TimeNavigationController.GetPointer();
01331 }
01332
01333
01334 void QmitkStdMultiWidget::EnableStandardLevelWindow()
01335 {
01336 levelWindowWidget->disconnect(this);
01337 levelWindowWidget->SetDataStorage(mitk::BaseRenderer::GetInstance(mitkWidget1->GetRenderWindow())->GetDataStorage());
01338 levelWindowWidget->show();
01339 }
01340
01341
01342 void QmitkStdMultiWidget::DisableStandardLevelWindow()
01343 {
01344 levelWindowWidget->disconnect(this);
01345 levelWindowWidget->hide();
01346 }
01347
01348
01349
01350
01351 bool QmitkStdMultiWidget::InitializeStandardViews( const mitk::Geometry3D * geometry )
01352 {
01353 return mitk::RenderingManager::GetInstance()->InitializeViews( geometry );
01354 }
01355
01356
01357 void QmitkStdMultiWidget::RequestUpdate()
01358 {
01359 mitk::RenderingManager::GetInstance()->RequestUpdate(mitkWidget1->GetRenderWindow());
01360 mitk::RenderingManager::GetInstance()->RequestUpdate(mitkWidget2->GetRenderWindow());
01361 mitk::RenderingManager::GetInstance()->RequestUpdate(mitkWidget3->GetRenderWindow());
01362 mitk::RenderingManager::GetInstance()->RequestUpdate(mitkWidget4->GetRenderWindow());
01363 }
01364
01365
01366 void QmitkStdMultiWidget::ForceImmediateUpdate()
01367 {
01368 mitk::RenderingManager::GetInstance()->ForceImmediateUpdate(mitkWidget1->GetRenderWindow());
01369 mitk::RenderingManager::GetInstance()->ForceImmediateUpdate(mitkWidget2->GetRenderWindow());
01370 mitk::RenderingManager::GetInstance()->ForceImmediateUpdate(mitkWidget3->GetRenderWindow());
01371 mitk::RenderingManager::GetInstance()->ForceImmediateUpdate(mitkWidget4->GetRenderWindow());
01372 }
01373
01374
01375 void QmitkStdMultiWidget::wheelEvent( QWheelEvent * e )
01376 {
01377 emit WheelMoved( e );
01378 }
01379
01380 void QmitkStdMultiWidget::mousePressEvent(QMouseEvent * e)
01381 {
01382 if (e->button() == Qt::LeftButton) {
01383 mitk::Point3D pointValue = this->GetLastLeftClickPosition();
01384 emit LeftMouseClicked(pointValue);
01385 }
01386 }
01387
01388 void QmitkStdMultiWidget::moveEvent( QMoveEvent* e )
01389 {
01390 QWidget::moveEvent( e );
01391
01392
01393
01394 emit Moved();
01395 }
01396
01397 void QmitkStdMultiWidget::leaveEvent ( QEvent * )
01398 {
01399
01400 m_SlicesRotator->ResetMouseCursor();
01401 }
01402
01403 mitk::DisplayVectorInteractor* QmitkStdMultiWidget::GetMoveAndZoomInteractor()
01404 {
01405 return m_MoveAndZoomInteractor.GetPointer();
01406 }
01407
01408
01409 QmitkRenderWindow* QmitkStdMultiWidget::GetRenderWindow1() const
01410 {
01411 return mitkWidget1;
01412 }
01413
01414
01415 QmitkRenderWindow* QmitkStdMultiWidget::GetRenderWindow2() const
01416 {
01417 return mitkWidget2;
01418 }
01419
01420
01421 QmitkRenderWindow* QmitkStdMultiWidget::GetRenderWindow3() const
01422 {
01423 return mitkWidget3;
01424 }
01425
01426
01427 QmitkRenderWindow* QmitkStdMultiWidget::GetRenderWindow4() const
01428 {
01429 return mitkWidget4;
01430 }
01431
01432
01433 const mitk::Point3D& QmitkStdMultiWidget::GetLastLeftClickPosition() const
01434 {
01435 return m_LastLeftClickPositionSupplier->GetCurrentPoint();
01436 }
01437
01438
01439 const mitk::Point3D QmitkStdMultiWidget::GetCrossPosition() const
01440 {
01441 const mitk::PlaneGeometry *plane1 =
01442 mitkWidget1->GetSliceNavigationController()->GetCurrentPlaneGeometry();
01443 const mitk::PlaneGeometry *plane2 =
01444 mitkWidget2->GetSliceNavigationController()->GetCurrentPlaneGeometry();
01445 const mitk::PlaneGeometry *plane3 =
01446 mitkWidget3->GetSliceNavigationController()->GetCurrentPlaneGeometry();
01447
01448 mitk::Line3D line;
01449 if ( (plane1 != NULL) && (plane2 != NULL)
01450 && (plane1->IntersectionLine( plane2, line )) )
01451 {
01452 mitk::Point3D point;
01453 if ( (plane3 != NULL)
01454 && (plane3->IntersectionPoint( line, point )) )
01455 {
01456 return point;
01457 }
01458 }
01459 return m_LastLeftClickPositionSupplier->GetCurrentPoint();
01460 }
01461
01462
01463 void QmitkStdMultiWidget::EnablePositionTracking()
01464 {
01465 if (!m_PositionTracker)
01466 {
01467 m_PositionTracker = mitk::PositionTracker::New("PositionTracker", NULL);
01468 }
01469 mitk::GlobalInteraction* globalInteraction = mitk::GlobalInteraction::GetInstance();
01470 if (globalInteraction)
01471 {
01472 if(m_DataStorage.IsNotNull())
01473 m_DataStorage->Add(m_PositionTrackerNode);
01474 globalInteraction->AddListener(m_PositionTracker);
01475 }
01476 }
01477
01478
01479 void QmitkStdMultiWidget::DisablePositionTracking()
01480 {
01481 mitk::GlobalInteraction* globalInteraction =
01482 mitk::GlobalInteraction::GetInstance();
01483
01484 if(globalInteraction)
01485 {
01486 if (m_DataStorage.IsNotNull())
01487 m_DataStorage->Remove(m_PositionTrackerNode);
01488 globalInteraction->RemoveListener(m_PositionTracker);
01489 }
01490 }
01491
01492
01493 void QmitkStdMultiWidget::EnsureDisplayContainsPoint(
01494 mitk::DisplayGeometry* displayGeometry, const mitk::Point3D& p)
01495 {
01496 mitk::Point2D pointOnPlane;
01497 displayGeometry->Map( p, pointOnPlane );
01498
01499
01500 mitk::Vector2D pointOnRenderWindow_MM;
01501 pointOnRenderWindow_MM = pointOnPlane.GetVectorFromOrigin()
01502 - displayGeometry->GetOriginInMM();
01503
01504 mitk::Vector2D sizeOfDisplay( displayGeometry->GetSizeInMM() );
01505
01506 if ( sizeOfDisplay[0] < pointOnRenderWindow_MM[0]
01507 || 0 > pointOnRenderWindow_MM[0]
01508 || sizeOfDisplay[1] < pointOnRenderWindow_MM[1]
01509 || 0 > pointOnRenderWindow_MM[1] )
01510 {
01511
01512 mitk::Vector2D offset( (pointOnRenderWindow_MM - sizeOfDisplay / 2.0)
01513 / displayGeometry->GetScaleFactorMMPerDisplayUnit() );
01514
01515 displayGeometry->MoveBy( offset );
01516 }
01517 }
01518
01519
01520 void QmitkStdMultiWidget::MoveCrossToPosition(const mitk::Point3D& newPosition)
01521 {
01522
01523
01524
01525 mitk::Point2D p2d;
01526 mitk::PositionEvent event( mitk::BaseRenderer::GetInstance(mitkWidget1->GetRenderWindow()), 0, 0, 0,
01527 mitk::Key_unknown, p2d, newPosition );
01528 mitk::StateEvent stateEvent(mitk::EIDLEFTMOUSEBTN, &event);
01529 mitk::StateEvent stateEvent2(mitk::EIDLEFTMOUSERELEASE, &event);
01530
01531 switch ( m_PlaneMode )
01532 {
01533 default:
01534 case PLANE_MODE_SLICING:
01535 mitkWidget1->GetSliceNavigationController()->HandleEvent( &stateEvent );
01536 mitkWidget2->GetSliceNavigationController()->HandleEvent( &stateEvent );
01537 mitkWidget3->GetSliceNavigationController()->HandleEvent( &stateEvent );
01538
01539
01540
01541 mitkWidget1->GetSliceNavigationController()->HandleEvent( &stateEvent2 );
01542 mitkWidget2->GetSliceNavigationController()->HandleEvent( &stateEvent2 );
01543 mitkWidget3->GetSliceNavigationController()->HandleEvent( &stateEvent2 );
01544 break;
01545
01546 case PLANE_MODE_ROTATION:
01547 m_SlicesRotator->HandleEvent( &stateEvent );
01548
01549
01550
01551 m_SlicesRotator->HandleEvent( &stateEvent2 );
01552 break;
01553
01554 case PLANE_MODE_SWIVEL:
01555 m_SlicesSwiveller->HandleEvent( &stateEvent );
01556
01557
01558
01559 m_SlicesSwiveller->HandleEvent( &stateEvent2 );
01560 break;
01561 }
01562
01563
01564
01565 EnsureDisplayContainsPoint( mitk::BaseRenderer::GetInstance(mitkWidget1->GetRenderWindow())
01566 ->GetDisplayGeometry(), newPosition );
01567 EnsureDisplayContainsPoint( mitk::BaseRenderer::GetInstance(mitkWidget2->GetRenderWindow())
01568 ->GetDisplayGeometry(), newPosition );
01569 EnsureDisplayContainsPoint( mitk::BaseRenderer::GetInstance(mitkWidget3->GetRenderWindow())
01570 ->GetDisplayGeometry(), newPosition );
01571
01572
01573 mitk::RenderingManager::GetInstance()->RequestUpdateAll();
01574 }
01575
01576
01577 void QmitkStdMultiWidget::EnableNavigationControllerEventListening()
01578 {
01579
01580 mitk::GlobalInteraction *gi = mitk::GlobalInteraction::GetInstance();
01581
01582 switch ( m_PlaneMode )
01583 {
01584 default:
01585 case PLANE_MODE_SLICING:
01586 gi->AddListener( mitkWidget1->GetSliceNavigationController() );
01587 gi->AddListener( mitkWidget2->GetSliceNavigationController() );
01588 gi->AddListener( mitkWidget3->GetSliceNavigationController() );
01589 gi->AddListener( mitkWidget4->GetSliceNavigationController() );
01590 break;
01591
01592 case PLANE_MODE_ROTATION:
01593 gi->AddListener( m_SlicesRotator );
01594 break;
01595
01596 case PLANE_MODE_SWIVEL:
01597 gi->AddListener( m_SlicesSwiveller );
01598 break;
01599 }
01600
01601 gi->AddListener( m_TimeNavigationController );
01602 }
01603
01604 void QmitkStdMultiWidget::DisableNavigationControllerEventListening()
01605 {
01606
01607 mitk::GlobalInteraction *gi = mitk::GlobalInteraction::GetInstance();
01608
01609 switch ( m_PlaneMode )
01610 {
01611 default:
01612 case PLANE_MODE_SLICING:
01613 gi->RemoveListener( mitkWidget1->GetSliceNavigationController() );
01614 gi->RemoveListener( mitkWidget2->GetSliceNavigationController() );
01615 gi->RemoveListener( mitkWidget3->GetSliceNavigationController() );
01616 gi->RemoveListener( mitkWidget4->GetSliceNavigationController() );
01617 break;
01618
01619 case PLANE_MODE_ROTATION:
01620 m_SlicesRotator->ResetMouseCursor();
01621 gi->RemoveListener( m_SlicesRotator );
01622 break;
01623
01624 case PLANE_MODE_SWIVEL:
01625 m_SlicesSwiveller->ResetMouseCursor();
01626 gi->RemoveListener( m_SlicesSwiveller );
01627 break;
01628 }
01629
01630 gi->RemoveListener( m_TimeNavigationController );
01631 }
01632
01633
01634 int QmitkStdMultiWidget::GetLayout() const
01635 {
01636 return m_Layout;
01637 }
01638
01639
01640 void QmitkStdMultiWidget::EnableGradientBackground()
01641 {
01642
01643
01644
01645
01646
01647 m_GradientBackground4->Enable();
01648 }
01649
01650
01651 void QmitkStdMultiWidget::DisableGradientBackground()
01652 {
01653
01654
01655
01656 m_GradientBackground4->Disable();
01657 }
01658
01659
01660 void QmitkStdMultiWidget::EnableDepartmentLogo()
01661 {
01662 m_LogoRendering4->Enable();
01663 }
01664
01665
01666 void QmitkStdMultiWidget::DisableDepartmentLogo()
01667 {
01668 m_LogoRendering4->Disable();
01669 }
01670
01671
01672 mitk::SlicesRotator * QmitkStdMultiWidget::GetSlicesRotator() const
01673 {
01674 return m_SlicesRotator;
01675 }
01676
01677
01678 mitk::SlicesSwiveller * QmitkStdMultiWidget::GetSlicesSwiveller() const
01679 {
01680 return m_SlicesSwiveller;
01681 }
01682
01683
01684 void QmitkStdMultiWidget::SetWidgetPlaneVisibility(const char* widgetName, bool visible, mitk::BaseRenderer *renderer)
01685 {
01686 if (m_DataStorage.IsNotNull())
01687 {
01688 mitk::DataNode* n = m_DataStorage->GetNamedNode(widgetName);
01689 if (n != NULL)
01690 n->SetVisibility(visible, renderer);
01691 }
01692 }
01693
01694
01695 void QmitkStdMultiWidget::SetWidgetPlanesVisibility(bool visible, mitk::BaseRenderer *renderer)
01696 {
01697 SetWidgetPlaneVisibility("widget1Plane", visible, renderer);
01698 SetWidgetPlaneVisibility("widget2Plane", visible, renderer);
01699 SetWidgetPlaneVisibility("widget3Plane", visible, renderer);
01700 mitk::RenderingManager::GetInstance()->RequestUpdateAll();
01701 }
01702
01703
01704 void QmitkStdMultiWidget::SetWidgetPlanesLocked(bool locked)
01705 {
01706
01707 GetRenderWindow1()->GetSliceNavigationController()->SetSliceLocked(locked);
01708 GetRenderWindow2()->GetSliceNavigationController()->SetSliceLocked(locked);
01709 GetRenderWindow3()->GetSliceNavigationController()->SetSliceLocked(locked);
01710 }
01711
01712
01713 void QmitkStdMultiWidget::SetWidgetPlanesRotationLocked(bool locked)
01714 {
01715
01716 GetRenderWindow1()->GetSliceNavigationController()->SetSliceRotationLocked(locked);
01717 GetRenderWindow2()->GetSliceNavigationController()->SetSliceRotationLocked(locked);
01718 GetRenderWindow3()->GetSliceNavigationController()->SetSliceRotationLocked(locked);
01719 }
01720
01721
01722 void QmitkStdMultiWidget::SetWidgetPlanesRotationLinked( bool link )
01723 {
01724 m_SlicesRotator->SetLinkPlanes( link );
01725 m_SlicesSwiveller->SetLinkPlanes( link );
01726 emit WidgetPlanesRotationLinked( link );
01727 }
01728
01729
01730 void QmitkStdMultiWidget::SetWidgetPlaneMode( int userMode )
01731 {
01732 MITK_DEBUG << "Changing crosshair mode to " << userMode;
01733
01734 emit WidgetNotifyNewCrossHairMode( userMode );
01735
01736 int mode = m_PlaneMode;
01737 bool link = false;
01738
01739
01740 {
01741 switch(userMode)
01742 {
01743 case 0:
01744 mode = PLANE_MODE_SLICING;
01745 link = false;
01746 break;
01747
01748 case 1:
01749 mode = PLANE_MODE_ROTATION;
01750 link = false;
01751 break;
01752
01753 case 2:
01754 mode = PLANE_MODE_ROTATION;
01755 link = true;
01756 break;
01757
01758 case 3:
01759 mode = PLANE_MODE_SWIVEL;
01760 link = false;
01761 break;
01762 }
01763 }
01764
01765
01766 m_SlicesRotator->SetLinkPlanes( link );
01767 m_SlicesSwiveller->SetLinkPlanes( link );
01768
01769
01770 if ( m_PlaneMode == mode )
01771 {
01772 return;
01773 }
01774
01775 mitk::GlobalInteraction *gi = mitk::GlobalInteraction::GetInstance();
01776
01777
01778 switch ( m_PlaneMode )
01779 {
01780 default:
01781 case PLANE_MODE_SLICING:
01782
01783 emit WidgetPlaneModeSlicing( false );
01784
01785 gi->RemoveListener( mitkWidget1->GetSliceNavigationController() );
01786 gi->RemoveListener( mitkWidget2->GetSliceNavigationController() );
01787 gi->RemoveListener( mitkWidget3->GetSliceNavigationController() );
01788 gi->RemoveListener( mitkWidget4->GetSliceNavigationController() );
01789 break;
01790
01791 case PLANE_MODE_ROTATION:
01792
01793 emit WidgetPlaneModeRotation( false );
01794
01795 m_SlicesRotator->ResetMouseCursor();
01796 gi->RemoveListener( m_SlicesRotator );
01797 break;
01798
01799 case PLANE_MODE_SWIVEL:
01800
01801 emit WidgetPlaneModeSwivel( false );
01802
01803 m_SlicesSwiveller->ResetMouseCursor();
01804 gi->RemoveListener( m_SlicesSwiveller );
01805 break;
01806 }
01807
01808
01809 m_PlaneMode = mode;
01810 switch ( m_PlaneMode )
01811 {
01812 default:
01813 case PLANE_MODE_SLICING:
01814
01815 emit WidgetPlaneModeSlicing( true );
01816
01817
01818 gi->AddListener( mitkWidget1->GetSliceNavigationController() );
01819 gi->AddListener( mitkWidget2->GetSliceNavigationController() );
01820 gi->AddListener( mitkWidget3->GetSliceNavigationController() );
01821 gi->AddListener( mitkWidget4->GetSliceNavigationController() );
01822
01823 mitk::RenderingManager::GetInstance()->InitializeViews();
01824 break;
01825
01826 case PLANE_MODE_ROTATION:
01827
01828 emit WidgetPlaneModeRotation( true );
01829
01830
01831 gi->AddListener( m_SlicesRotator );
01832 break;
01833
01834 case PLANE_MODE_SWIVEL:
01835
01836 emit WidgetPlaneModeSwivel( true );
01837
01838
01839 gi->AddListener( m_SlicesSwiveller );
01840 break;
01841 }
01842 }
01843
01844
01845 void QmitkStdMultiWidget::SetGradientBackgroundColors( const mitk::Color & upper, const mitk::Color & lower )
01846 {
01847 m_GradientBackground1->SetGradientColors(upper[0], upper[1], upper[2], lower[0], lower[1], lower[2]);
01848 m_GradientBackground2->SetGradientColors(upper[0], upper[1], upper[2], lower[0], lower[1], lower[2]);
01849 m_GradientBackground3->SetGradientColors(upper[0], upper[1], upper[2], lower[0], lower[1], lower[2]);
01850 m_GradientBackground4->SetGradientColors(upper[0], upper[1], upper[2], lower[0], lower[1], lower[2]);
01851 }
01852
01853
01854 void QmitkStdMultiWidget::SetDepartmentLogoPath( const char * path )
01855 {
01856 m_LogoRendering1->SetLogoSource(path);
01857 m_LogoRendering2->SetLogoSource(path);
01858 m_LogoRendering3->SetLogoSource(path);
01859 m_LogoRendering4->SetLogoSource(path);
01860 }
01861
01862
01863 void QmitkStdMultiWidget::SetWidgetPlaneModeToSlicing( bool activate )
01864 {
01865 if ( activate )
01866 {
01867 this->SetWidgetPlaneMode( PLANE_MODE_SLICING );
01868 }
01869 }
01870
01871
01872 void QmitkStdMultiWidget::SetWidgetPlaneModeToRotation( bool activate )
01873 {
01874 if ( activate )
01875 {
01876 this->SetWidgetPlaneMode( PLANE_MODE_ROTATION );
01877 }
01878 }
01879
01880
01881 void QmitkStdMultiWidget::SetWidgetPlaneModeToSwivel( bool activate )
01882 {
01883 if ( activate )
01884 {
01885 this->SetWidgetPlaneMode( PLANE_MODE_SWIVEL );
01886 }
01887 }
01888
01889 void QmitkStdMultiWidget::OnLayoutDesignChanged( int layoutDesignIndex )
01890 {
01891 switch( layoutDesignIndex )
01892 {
01893 case LAYOUT_DEFAULT:
01894 {
01895 this->changeLayoutToDefault();
01896 break;
01897 }
01898 case LAYOUT_2D_IMAGES_UP:
01899 {
01900 this->changeLayoutTo2DImagesUp();
01901 break;
01902 }
01903 case LAYOUT_2D_IMAGES_LEFT:
01904 {
01905 this->changeLayoutTo2DImagesLeft();
01906 break;
01907 }
01908 case LAYOUT_BIG_3D:
01909 {
01910 this->changeLayoutToBig3D();
01911 break;
01912 }
01913 case LAYOUT_WIDGET1:
01914 {
01915 this->changeLayoutToWidget1();
01916 break;
01917 }
01918 case LAYOUT_WIDGET2:
01919 {
01920 this->changeLayoutToWidget2();
01921 break;
01922 }
01923 case LAYOUT_WIDGET3:
01924 {
01925 this->changeLayoutToWidget3();
01926 break;
01927 }
01928 case LAYOUT_2X_2D_AND_3D_WIDGET:
01929 {
01930 this->changeLayoutTo2x2Dand3DWidget();
01931 break;
01932 }
01933 case LAYOUT_ROW_WIDGET_3_AND_4:
01934 {
01935 this->changeLayoutToRowWidget3And4();
01936 break;
01937 }
01938 case LAYOUT_COLUMN_WIDGET_3_AND_4:
01939 {
01940 this->changeLayoutToColumnWidget3And4();
01941 break;
01942 }
01943 case LAYOUT_ROW_WIDGET_SMALL3_AND_BIG4:
01944 {
01945 this->changeLayoutToRowWidgetSmall3andBig4();
01946 break;
01947 }
01948 case LAYOUT_SMALL_UPPER_WIDGET2_BIG3_AND4:
01949 {
01950 this->changeLayoutToSmallUpperWidget2Big3and4();
01951 break;
01952 }
01953 case LAYOUT_2D_AND_3D_LEFT_2D_RIGHT_WIDGET:
01954 {
01955 this->changeLayoutToLeft2Dand3DRight2D();
01956 break;
01957 }
01958
01959 };
01960
01961
01962 }
01963
01964 void QmitkStdMultiWidget::UpdateAllWidgets()
01965 {
01966 mitkWidget1->resize( mitkWidget1Container->frameSize().width()-1, mitkWidget1Container->frameSize().height() );
01967 mitkWidget1->resize( mitkWidget1Container->frameSize().width(), mitkWidget1Container->frameSize().height() );
01968
01969 mitkWidget2->resize( mitkWidget2Container->frameSize().width()-1, mitkWidget2Container->frameSize().height() );
01970 mitkWidget2->resize( mitkWidget2Container->frameSize().width(), mitkWidget2Container->frameSize().height() );
01971
01972 mitkWidget3->resize( mitkWidget3Container->frameSize().width()-1, mitkWidget3Container->frameSize().height() );
01973 mitkWidget3->resize( mitkWidget3Container->frameSize().width(), mitkWidget3Container->frameSize().height() );
01974
01975 mitkWidget4->resize( mitkWidget4Container->frameSize().width()-1, mitkWidget4Container->frameSize().height() );
01976 mitkWidget4->resize( mitkWidget4Container->frameSize().width(), mitkWidget4Container->frameSize().height() );
01977
01978 }
01979
01980
01981 void QmitkStdMultiWidget::HideAllWidgetToolbars()
01982 {
01983 mitkWidget1->HideRenderWindowMenu();
01984 mitkWidget2->HideRenderWindowMenu();
01985 mitkWidget3->HideRenderWindowMenu();
01986 mitkWidget4->HideRenderWindowMenu();
01987 }
01988
01989 void QmitkStdMultiWidget::ActivateMenuWidget( bool state )
01990 {
01991 mitkWidget1->ActivateMenuWidget( state );
01992 mitkWidget2->ActivateMenuWidget( state );
01993 mitkWidget3->ActivateMenuWidget( state );
01994 mitkWidget4->ActivateMenuWidget( state );
01995 }
01996
01997 void QmitkStdMultiWidget::ResetCrosshair()
01998 {
01999 if (m_DataStorage.IsNotNull())
02000 {
02001 mitk::RenderingManager::GetInstance()->InitializeViews( m_DataStorage->ComputeVisibleBoundingGeometry3D() );
02002
02003 this->SetWidgetPlaneMode(PLANE_MODE_SLICING);
02004 }
02005 }
02006
02007 void QmitkStdMultiWidget::EnableColoredRectangles()
02008 {
02009 m_RectangleRendering1->Enable(1.0, 0.0, 0.0);
02010 m_RectangleRendering2->Enable(0.0, 1.0, 0.0);
02011 m_RectangleRendering3->Enable(0.0, 0.0, 1.0);
02012 m_RectangleRendering4->Enable(1.0, 1.0, 0.0);
02013 }
02014
02015 void QmitkStdMultiWidget::DisableColoredRectangles()
02016 {
02017 m_RectangleRendering1->Disable();
02018 m_RectangleRendering2->Disable();
02019 m_RectangleRendering3->Disable();
02020 m_RectangleRendering4->Disable();
02021 }