00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "QmitkRenderWindowMenu.h"
00020
00021 #include "mitkResliceMethodProperty.h"
00022 #include "mitkProperties.h"
00023
00024 #include <QHBoxLayout>
00025 #include <QSpacerItem>
00026 #include <QSize>
00027 #include <QPainter>
00028
00029 #include<QGroupBox>
00030 #include<QRadioButton>
00031 #include<QAction>
00032 #include<QLine>
00033 #include<QLabel>
00034 #include<QWidgetAction>
00035
00036 #include <QTimer>
00037
00038 #include "QmitkStdMultiWidget.h"
00039
00040
00041 #include"iconFullScreen.xpm"
00042 #include"iconCrosshairMode.xpm"
00043
00044 #include"iconSettings.xpm"
00045
00046 #include"iconLeaveFullScreen.xpm"
00047
00048 #include <math.h>
00049
00050 #ifdef QMITK_USE_EXTERNAL_RENDERWINDOW_MENU
00051 QmitkRenderWindowMenu::QmitkRenderWindowMenu(QWidget *parent, Qt::WindowFlags f, mitk::BaseRenderer *b )
00052 :QWidget(parent, Qt::Tool | Qt::FramelessWindowHint ),
00053
00054 #else
00055 QmitkRenderWindowMenu::QmitkRenderWindowMenu(QWidget *parent, Qt::WindowFlags f, mitk::BaseRenderer *b )
00056 :QWidget(parent,f),
00057 #endif
00058
00059 m_Settings(NULL),
00060 m_CrosshairMenu(NULL),
00061 m_Layout(0),
00062 m_LayoutDesign(0),
00063 m_OldLayoutDesign(0),
00064 m_FullScreenMode(false)
00065 {
00066 m_Renderer = b;
00067 m_Entered = false;
00068 m_Hidden = true;
00069
00070 MITK_DEBUG << "creating renderwindow menu on baserenderer " << b;
00071
00072 this->setFocusPolicy( Qt::NoFocus );
00073
00074
00075 this->CreateMenuWidget();
00076 this->setMinimumWidth(61);
00077 this->setMaximumWidth(61);
00078 this->setAutoFillBackground( true );
00079
00080 this->hide();
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095 currentCrosshairRotationMode = 0;
00096 }
00097
00098 QmitkRenderWindowMenu::~QmitkRenderWindowMenu()
00099 {}
00100
00101
00102
00103 void QmitkRenderWindowMenu::CreateMenuWidget()
00104 {
00105 QHBoxLayout* layout = new QHBoxLayout(this);
00106 layout->setAlignment( Qt::AlignRight );
00107 layout->setContentsMargins(1,1,1,1);
00108
00109 QSize size( 13, 13 );
00110
00111 m_CrosshairMenu = new QMenu(this);
00112 connect( m_CrosshairMenu, SIGNAL( aboutToShow() ), this, SLOT(OnCrossHairMenuAboutToShow()) );
00113
00114
00115 m_CrosshairModeButton = new QPushButton(this);
00116 m_CrosshairModeButton->setMaximumSize(15, 15);
00117 m_CrosshairModeButton->setIconSize(size);
00118 m_CrosshairModeButton->setFlat( true );
00119 m_CrosshairModeButton->setMenu( m_CrosshairMenu );
00120 m_CrosshairModeButton->setIcon( QIcon( iconCrosshairMode_xpm ) );
00121 layout->addWidget( m_CrosshairModeButton );
00122
00123
00124 m_FullScreenButton = new QPushButton(this);
00125 m_FullScreenButton->setMaximumSize(15, 15);
00126 m_FullScreenButton->setIconSize(size);
00127 m_FullScreenButton->setFlat( true );
00128 m_FullScreenButton->setIcon( QIcon( iconFullScreen_xpm ));
00129 layout->addWidget( m_FullScreenButton );
00130
00131
00132 m_SettingsButton = new QPushButton(this);
00133 m_SettingsButton->setMaximumSize(15, 15);
00134 m_SettingsButton->setIconSize(size);
00135 m_SettingsButton->setFlat( true );
00136 m_SettingsButton->setIcon( QIcon( iconSettings_xpm ));
00137 layout->addWidget( m_SettingsButton );
00138
00139
00140 connect( m_FullScreenButton, SIGNAL( clicked(bool) ), this, SLOT(OnFullScreenButton(bool)) );
00141 connect( m_SettingsButton, SIGNAL( clicked(bool) ), this, SLOT(OnSettingsButton(bool)) );
00142 }
00143
00144 void QmitkRenderWindowMenu::CreateSettingsWidget()
00145 {
00146 m_Settings = new QMenu(this);
00147
00148 m_DefaultLayoutAction = new QAction( "standard layout", m_Settings );
00149 m_DefaultLayoutAction->setDisabled( true );
00150
00151 m_2DImagesUpLayoutAction = new QAction( "2D images top, 3D bottom", m_Settings );
00152 m_2DImagesUpLayoutAction->setDisabled( false );
00153
00154 m_2DImagesLeftLayoutAction = new QAction( "2D images left, 3D right", m_Settings );
00155 m_2DImagesLeftLayoutAction->setDisabled( false );
00156
00157 m_Big3DLayoutAction = new QAction( "Big 3D", m_Settings );
00158 m_Big3DLayoutAction->setDisabled( false );
00159
00160 m_Widget1LayoutAction = new QAction( "Transversal plane", m_Settings );
00161 m_Widget1LayoutAction->setDisabled( false );
00162
00163 m_Widget2LayoutAction = new QAction( "Sagittal plane", m_Settings );
00164 m_Widget2LayoutAction->setDisabled( false );
00165
00166 m_Widget3LayoutAction = new QAction( "Coronal plane", m_Settings );
00167 m_Widget3LayoutAction->setDisabled( false );
00168
00169 m_RowWidget3And4LayoutAction = new QAction( "Coronal top, 3D bottom", m_Settings );
00170 m_RowWidget3And4LayoutAction->setDisabled( false );
00171
00172 m_ColumnWidget3And4LayoutAction = new QAction( "Coronal left, 3D right", m_Settings );
00173 m_ColumnWidget3And4LayoutAction->setDisabled( false );
00174
00175 m_SmallUpperWidget2Big3and4LayoutAction = new QAction( "Sagittal top, Coronal n 3D bottom", m_Settings );
00176 m_SmallUpperWidget2Big3and4LayoutAction->setDisabled( false );
00177
00178 m_2x2Dand3DWidgetLayoutAction = new QAction( "Transversal n Sagittal left, 3D right", m_Settings );
00179 m_2x2Dand3DWidgetLayoutAction->setDisabled( false );
00180
00181 m_Left2Dand3DRight2DLayoutAction = new QAction( "Transversal n 3D left, Sagittal right", m_Settings );
00182 m_Left2Dand3DRight2DLayoutAction->setDisabled( false );
00183
00184 m_Settings->addAction(m_DefaultLayoutAction);
00185 m_Settings->addAction(m_2DImagesUpLayoutAction);
00186 m_Settings->addAction(m_2DImagesLeftLayoutAction);
00187 m_Settings->addAction(m_Big3DLayoutAction);
00188 m_Settings->addAction(m_Widget1LayoutAction);
00189 m_Settings->addAction(m_Widget2LayoutAction);
00190 m_Settings->addAction(m_Widget3LayoutAction);
00191 m_Settings->addAction(m_RowWidget3And4LayoutAction);
00192 m_Settings->addAction(m_ColumnWidget3And4LayoutAction);
00193 m_Settings->addAction(m_SmallUpperWidget2Big3and4LayoutAction);
00194 m_Settings->addAction(m_2x2Dand3DWidgetLayoutAction);
00195 m_Settings->addAction(m_Left2Dand3DRight2DLayoutAction);
00196
00197 m_Settings->setVisible( false );
00198
00199 connect( m_DefaultLayoutAction, SIGNAL( triggered(bool) ), this, SLOT(OnChangeLayoutToDefault(bool)) );
00200 connect( m_2DImagesUpLayoutAction, SIGNAL( triggered(bool) ), this, SLOT(OnChangeLayoutTo2DImagesUp(bool)) );
00201 connect( m_2DImagesLeftLayoutAction, SIGNAL( triggered(bool) ), this, SLOT(OnChangeLayoutTo2DImagesLeft(bool)) );
00202 connect( m_Big3DLayoutAction, SIGNAL( triggered(bool) ), this, SLOT(OnChangeLayoutToBig3D(bool)) );
00203 connect( m_Widget1LayoutAction, SIGNAL( triggered(bool) ), this, SLOT(OnChangeLayoutToWidget1(bool)) );
00204 connect( m_Widget2LayoutAction, SIGNAL( triggered(bool) ), this, SLOT(OnChangeLayoutToWidget2(bool)) );
00205 connect( m_Widget3LayoutAction, SIGNAL( triggered(bool) ), this, SLOT(OnChangeLayoutToWidget3(bool)) );
00206 connect( m_RowWidget3And4LayoutAction, SIGNAL( triggered(bool) ), this, SLOT(OnChangeLayoutToRowWidget3And4(bool)) );
00207 connect( m_ColumnWidget3And4LayoutAction, SIGNAL( triggered(bool) ), this, SLOT(OnChangeLayoutToColumnWidget3And4(bool)) );
00208 connect( m_SmallUpperWidget2Big3and4LayoutAction, SIGNAL( triggered(bool) ), this, SLOT(OnChangeLayoutToSmallUpperWidget2Big3and4(bool)) );
00209 connect( m_2x2Dand3DWidgetLayoutAction, SIGNAL( triggered(bool) ), this, SLOT(OnChangeLayoutTo2x2Dand3DWidget(bool)) );
00210 connect( m_Left2Dand3DRight2DLayoutAction, SIGNAL( triggered(bool) ), this, SLOT(OnChangeLayoutToLeft2Dand3DRight2D(bool)) );
00211
00212 }
00213
00214 void QmitkRenderWindowMenu::paintEvent( QPaintEvent* )
00215 {
00216 QPainter painter(this);
00217 QColor semiTransparentColor = Qt::black;
00218 semiTransparentColor.setAlpha(255);
00219 painter.fillRect(rect(), semiTransparentColor);
00220 }
00221
00222 void QmitkRenderWindowMenu::SetLayoutIndex( unsigned int layoutIndex )
00223 {
00224 m_Layout = layoutIndex;
00225 }
00226
00227 void QmitkRenderWindowMenu::HideMenu( )
00228 {
00229 m_Hidden = true;
00230
00231 if( ! m_Entered )
00232 hide();
00233
00234 }
00235
00236 void QmitkRenderWindowMenu::ShowMenu( )
00237 {
00238 m_Hidden = false;
00239 show();
00240 }
00241
00242
00243 void QmitkRenderWindowMenu::enterEvent( QEvent * )
00244 {
00245 m_Entered=true;
00246 setWindowOpacity(1.0f);
00247 }
00248
00249 void QmitkRenderWindowMenu::DeferredHideMenu( )
00250 {
00251 if(m_Hidden)
00252 hide();
00253 }
00254
00255 void QmitkRenderWindowMenu::leaveEvent( QEvent * )
00256 {
00257 m_Entered=false;
00258
00259 QTimer::singleShot(0,this,SLOT( DeferredHideMenu( ) ) );
00260
00261
00262 }
00263
00264
00265 void QmitkRenderWindowMenu::ChangeFullScreenMode( bool state )
00266 {
00267 this->OnFullScreenButton( state );
00268 }
00270 void QmitkRenderWindowMenu::OnFullScreenButton( bool )
00271 {
00272 if( !m_FullScreenMode )
00273 {
00274 m_FullScreenMode = true;
00275 m_OldLayoutDesign = m_LayoutDesign;
00276
00277 switch( m_Layout )
00278 {
00279 case TRANSVERSAL:
00280 {
00281 emit SignalChangeLayoutDesign( LAYOUT_TRANSVERSAL );
00282 break;
00283 }
00284
00285 case SAGITTAL:
00286 {
00287 emit SignalChangeLayoutDesign( LAYOUT_SAGITTAL );
00288 break;
00289 }
00290 case CORONAL:
00291 {
00292 emit SignalChangeLayoutDesign( LAYOUT_CORONAL );
00293 break;
00294 }
00295 case THREE_D:
00296 {
00297 emit SignalChangeLayoutDesign( LAYOUT_BIG3D );
00298 break;
00299 }
00300 }
00301
00302
00303 this->MoveWidgetToCorrectPos(1.0f);
00304
00305
00306 this->ChangeFullScreenIcon();
00307
00308 }
00309 else
00310 {
00311 m_FullScreenMode = false;
00312 emit SignalChangeLayoutDesign( m_OldLayoutDesign );
00313
00314
00315 this->MoveWidgetToCorrectPos(1.0f);
00316
00317
00318 this->ChangeFullScreenIcon();
00319 }
00320 }
00321
00322
00324 void QmitkRenderWindowMenu::OnSettingsButton( bool )
00325 {
00326 if( m_Settings == NULL )
00327 this->CreateSettingsWidget();
00328
00329 QPoint point = this->mapToGlobal( m_SettingsButton->geometry().topLeft() );
00330 m_Settings->setVisible( true );
00331 m_Settings->exec( point );
00332 }
00333
00334 void QmitkRenderWindowMenu::OnChangeLayoutTo2DImagesUp(bool)
00335 {
00336
00337 m_FullScreenMode = false;
00338 this->ChangeFullScreenIcon();
00339
00340 m_LayoutDesign = LAYOUT_2DIMAGEUP;
00341 emit SignalChangeLayoutDesign( LAYOUT_2DIMAGEUP );
00342 }
00343 void QmitkRenderWindowMenu::OnChangeLayoutTo2DImagesLeft(bool)
00344 {
00345
00346 m_FullScreenMode = false;
00347 this->ChangeFullScreenIcon();
00348
00349 m_LayoutDesign = LAYOUT_2DIMAGELEFT;
00350 emit SignalChangeLayoutDesign( LAYOUT_2DIMAGELEFT );
00351 }
00352 void QmitkRenderWindowMenu::OnChangeLayoutToDefault(bool)
00353 {
00354
00355 m_FullScreenMode = false;
00356 this->ChangeFullScreenIcon();
00357
00358 m_LayoutDesign = LAYOUT_DEFAULT;
00359 emit SignalChangeLayoutDesign( LAYOUT_DEFAULT );
00360 }
00361 void QmitkRenderWindowMenu::OnChangeLayoutToBig3D(bool)
00362 {
00363
00364 m_FullScreenMode = false;
00365 this->ChangeFullScreenIcon();
00366
00367 m_LayoutDesign = LAYOUT_BIG3D;
00368 emit SignalChangeLayoutDesign( LAYOUT_BIG3D );
00369 }
00370 void QmitkRenderWindowMenu::OnChangeLayoutToWidget1(bool)
00371 {
00372
00373 m_FullScreenMode = false;
00374 this->ChangeFullScreenIcon();
00375
00376 m_LayoutDesign = LAYOUT_TRANSVERSAL;
00377 emit SignalChangeLayoutDesign( LAYOUT_TRANSVERSAL );
00378 }
00379 void QmitkRenderWindowMenu::OnChangeLayoutToWidget2(bool)
00380 {
00381
00382 m_FullScreenMode = false;
00383 this->ChangeFullScreenIcon();
00384
00385 m_LayoutDesign = LAYOUT_SAGITTAL;
00386 emit SignalChangeLayoutDesign( LAYOUT_SAGITTAL );
00387 }
00388 void QmitkRenderWindowMenu::OnChangeLayoutToWidget3(bool)
00389 {
00390
00391 m_FullScreenMode = false;
00392 this->ChangeFullScreenIcon();
00393
00394 m_LayoutDesign = LAYOUT_CORONAL;
00395 emit SignalChangeLayoutDesign( LAYOUT_CORONAL );
00396 }
00397 void QmitkRenderWindowMenu::OnChangeLayoutToRowWidget3And4(bool)
00398 {
00399
00400 m_FullScreenMode = false;
00401 this->ChangeFullScreenIcon();
00402
00403 m_LayoutDesign = LAYOUT_ROWWIDGET3AND4;
00404 emit SignalChangeLayoutDesign( LAYOUT_ROWWIDGET3AND4 );
00405 }
00406 void QmitkRenderWindowMenu::OnChangeLayoutToColumnWidget3And4(bool)
00407 {
00408
00409 m_FullScreenMode = false;
00410 this->ChangeFullScreenIcon();
00411
00412 m_LayoutDesign = LAYOUT_COLUMNWIDGET3AND4;
00413 emit SignalChangeLayoutDesign( LAYOUT_COLUMNWIDGET3AND4 );
00414 }
00415
00416 void QmitkRenderWindowMenu::OnChangeLayoutToSmallUpperWidget2Big3and4(bool)
00417 {
00418
00419 m_FullScreenMode = false;
00420 this->ChangeFullScreenIcon();
00421
00422 m_LayoutDesign = LAYOUT_SMALLUPPERWIDGET2BIGAND4;
00423 emit SignalChangeLayoutDesign( LAYOUT_SMALLUPPERWIDGET2BIGAND4 );
00424 }
00425 void QmitkRenderWindowMenu::OnChangeLayoutTo2x2Dand3DWidget(bool)
00426 {
00427
00428 m_FullScreenMode = false;
00429 this->ChangeFullScreenIcon();
00430
00431 m_LayoutDesign = LAYOUT_2X2DAND3DWIDGET;
00432 emit SignalChangeLayoutDesign( LAYOUT_2X2DAND3DWIDGET );
00433 }
00434 void QmitkRenderWindowMenu::OnChangeLayoutToLeft2Dand3DRight2D(bool)
00435 {
00436
00437 m_FullScreenMode = false;
00438 this->ChangeFullScreenIcon();
00439
00440 m_LayoutDesign = LAYOUT_LEFT2DAND3DRIGHT2D;
00441 emit SignalChangeLayoutDesign( LAYOUT_LEFT2DAND3DRIGHT2D );
00442 }
00443
00444 void QmitkRenderWindowMenu::UpdateLayoutDesignList( int layoutDesignIndex )
00445 {
00446 m_LayoutDesign = layoutDesignIndex;
00447
00448 if( m_Settings == NULL )
00449 this->CreateSettingsWidget();
00450
00451 switch( m_LayoutDesign )
00452 {
00453 case LAYOUT_DEFAULT:
00454 {
00455 m_DefaultLayoutAction->setEnabled(false);
00456 m_2DImagesUpLayoutAction->setEnabled(true);
00457 m_2DImagesLeftLayoutAction->setEnabled(true);
00458 m_Big3DLayoutAction->setEnabled(true);
00459 m_Widget1LayoutAction->setEnabled(true);
00460 m_Widget2LayoutAction->setEnabled(true);
00461 m_Widget3LayoutAction->setEnabled(true);
00462 m_RowWidget3And4LayoutAction->setEnabled(true);
00463 m_ColumnWidget3And4LayoutAction->setEnabled(true);
00464 m_SmallUpperWidget2Big3and4LayoutAction->setEnabled(true);
00465 m_2x2Dand3DWidgetLayoutAction->setEnabled(true);
00466 m_Left2Dand3DRight2DLayoutAction->setEnabled(true);
00467 break;
00468 }
00469
00470 case LAYOUT_2DIMAGEUP:
00471 {
00472 m_DefaultLayoutAction->setEnabled(true);
00473 m_2DImagesUpLayoutAction->setEnabled(false);
00474 m_2DImagesLeftLayoutAction->setEnabled(true);
00475 m_Big3DLayoutAction->setEnabled(true);
00476 m_Widget1LayoutAction->setEnabled(true);
00477 m_Widget2LayoutAction->setEnabled(true);
00478 m_Widget3LayoutAction->setEnabled(true);
00479 m_RowWidget3And4LayoutAction->setEnabled(true);
00480 m_ColumnWidget3And4LayoutAction->setEnabled(true);
00481 m_SmallUpperWidget2Big3and4LayoutAction->setEnabled(true);
00482 m_2x2Dand3DWidgetLayoutAction->setEnabled(true);
00483 m_Left2Dand3DRight2DLayoutAction->setEnabled(true);
00484 break;
00485 }
00486 case LAYOUT_2DIMAGELEFT:
00487 {
00488 m_DefaultLayoutAction->setEnabled(true);
00489 m_2DImagesUpLayoutAction->setEnabled(true);
00490 m_2DImagesLeftLayoutAction->setEnabled(false);
00491 m_Big3DLayoutAction->setEnabled(true);
00492 m_Widget1LayoutAction->setEnabled(true);
00493 m_Widget2LayoutAction->setEnabled(true);
00494 m_Widget3LayoutAction->setEnabled(true);
00495 m_RowWidget3And4LayoutAction->setEnabled(true);
00496 m_ColumnWidget3And4LayoutAction->setEnabled(true);
00497 m_SmallUpperWidget2Big3and4LayoutAction->setEnabled(true);
00498 m_2x2Dand3DWidgetLayoutAction->setEnabled(true);
00499 m_Left2Dand3DRight2DLayoutAction->setEnabled(true);
00500 break;
00501 }
00502 case LAYOUT_BIG3D:
00503 {
00504 m_DefaultLayoutAction->setEnabled(true);
00505 m_2DImagesUpLayoutAction->setEnabled(true);
00506 m_2DImagesLeftLayoutAction->setEnabled(true);
00507 m_Big3DLayoutAction->setEnabled(false);
00508 m_Widget1LayoutAction->setEnabled(true);
00509 m_Widget2LayoutAction->setEnabled(true);
00510 m_Widget3LayoutAction->setEnabled(true);
00511 m_RowWidget3And4LayoutAction->setEnabled(true);
00512 m_ColumnWidget3And4LayoutAction->setEnabled(true);
00513 m_SmallUpperWidget2Big3and4LayoutAction->setEnabled(true);
00514 m_2x2Dand3DWidgetLayoutAction->setEnabled(true);
00515 m_Left2Dand3DRight2DLayoutAction->setEnabled(true);
00516 break;
00517 }
00518 case LAYOUT_TRANSVERSAL:
00519 {
00520 m_DefaultLayoutAction->setEnabled(true);
00521 m_2DImagesUpLayoutAction->setEnabled(true);
00522 m_2DImagesLeftLayoutAction->setEnabled(true);
00523 m_Big3DLayoutAction->setEnabled(true);
00524 m_Widget1LayoutAction->setEnabled(false);
00525 m_Widget2LayoutAction->setEnabled(true);
00526 m_Widget3LayoutAction->setEnabled(true);
00527 m_RowWidget3And4LayoutAction->setEnabled(true);
00528 m_ColumnWidget3And4LayoutAction->setEnabled(true);
00529 m_SmallUpperWidget2Big3and4LayoutAction->setEnabled(true);
00530 m_2x2Dand3DWidgetLayoutAction->setEnabled(true);
00531 m_Left2Dand3DRight2DLayoutAction->setEnabled(true);
00532 break;
00533 }
00534 case LAYOUT_SAGITTAL:
00535 {
00536 m_DefaultLayoutAction->setEnabled(true);
00537 m_2DImagesUpLayoutAction->setEnabled(true);
00538 m_2DImagesLeftLayoutAction->setEnabled(true);
00539 m_Big3DLayoutAction->setEnabled(true);
00540 m_Widget1LayoutAction->setEnabled(true);
00541 m_Widget2LayoutAction->setEnabled(false);
00542 m_Widget3LayoutAction->setEnabled(true);
00543 m_RowWidget3And4LayoutAction->setEnabled(true);
00544 m_ColumnWidget3And4LayoutAction->setEnabled(true);
00545 m_SmallUpperWidget2Big3and4LayoutAction->setEnabled(true);
00546 m_2x2Dand3DWidgetLayoutAction->setEnabled(true);
00547 m_Left2Dand3DRight2DLayoutAction->setEnabled(true);
00548 break;
00549 }
00550 case LAYOUT_CORONAL:
00551 {
00552 m_DefaultLayoutAction->setEnabled(true);
00553 m_2DImagesUpLayoutAction->setEnabled(true);
00554 m_2DImagesLeftLayoutAction->setEnabled(true);
00555 m_Big3DLayoutAction->setEnabled(true);
00556 m_Widget1LayoutAction->setEnabled(true);
00557 m_Widget2LayoutAction->setEnabled(true);
00558 m_Widget3LayoutAction->setEnabled(false);
00559 m_RowWidget3And4LayoutAction->setEnabled(true);
00560 m_ColumnWidget3And4LayoutAction->setEnabled(true);
00561 m_SmallUpperWidget2Big3and4LayoutAction->setEnabled(true);
00562 m_2x2Dand3DWidgetLayoutAction->setEnabled(true);
00563 m_Left2Dand3DRight2DLayoutAction->setEnabled(true);
00564 break;
00565 }
00566 case LAYOUT_2X2DAND3DWIDGET:
00567 {
00568 m_DefaultLayoutAction->setEnabled(true);
00569 m_2DImagesUpLayoutAction->setEnabled(true);
00570 m_2DImagesLeftLayoutAction->setEnabled(true);
00571 m_Big3DLayoutAction->setEnabled(true);
00572 m_Widget1LayoutAction->setEnabled(true);
00573 m_Widget2LayoutAction->setEnabled(true);
00574 m_Widget3LayoutAction->setEnabled(true);
00575 m_RowWidget3And4LayoutAction->setEnabled(true);
00576 m_ColumnWidget3And4LayoutAction->setEnabled(true);
00577 m_SmallUpperWidget2Big3and4LayoutAction->setEnabled(true);
00578 m_2x2Dand3DWidgetLayoutAction->setEnabled(false);
00579 m_Left2Dand3DRight2DLayoutAction->setEnabled(true);
00580 break;
00581 }
00582 case LAYOUT_ROWWIDGET3AND4:
00583 {
00584 m_DefaultLayoutAction->setEnabled(true);
00585 m_2DImagesUpLayoutAction->setEnabled(true);
00586 m_2DImagesLeftLayoutAction->setEnabled(true);
00587 m_Big3DLayoutAction->setEnabled(true);
00588 m_Widget1LayoutAction->setEnabled(true);
00589 m_Widget2LayoutAction->setEnabled(true);
00590 m_Widget3LayoutAction->setEnabled(true);
00591 m_RowWidget3And4LayoutAction->setEnabled(false);
00592 m_ColumnWidget3And4LayoutAction->setEnabled(true);
00593 m_SmallUpperWidget2Big3and4LayoutAction->setEnabled(true);
00594 m_2x2Dand3DWidgetLayoutAction->setEnabled(true);
00595 m_Left2Dand3DRight2DLayoutAction->setEnabled(true);
00596 break;
00597 }
00598 case LAYOUT_COLUMNWIDGET3AND4:
00599 {
00600 m_DefaultLayoutAction->setEnabled(true);
00601 m_2DImagesUpLayoutAction->setEnabled(true);
00602 m_2DImagesLeftLayoutAction->setEnabled(true);
00603 m_Big3DLayoutAction->setEnabled(true);
00604 m_Widget1LayoutAction->setEnabled(true);
00605 m_Widget2LayoutAction->setEnabled(true);
00606 m_Widget3LayoutAction->setEnabled(true);
00607 m_RowWidget3And4LayoutAction->setEnabled(true);
00608 m_ColumnWidget3And4LayoutAction->setEnabled(false);
00609 m_SmallUpperWidget2Big3and4LayoutAction->setEnabled(true);
00610 m_2x2Dand3DWidgetLayoutAction->setEnabled(true);
00611 m_Left2Dand3DRight2DLayoutAction->setEnabled(true);
00612 break;
00613 }
00614 case LAYOUT_SMALLUPPERWIDGET2BIGAND4:
00615 {
00616 m_DefaultLayoutAction->setEnabled(true);
00617 m_2DImagesUpLayoutAction->setEnabled(true);
00618 m_2DImagesLeftLayoutAction->setEnabled(true);
00619 m_Big3DLayoutAction->setEnabled(true);
00620 m_Widget1LayoutAction->setEnabled(true);
00621 m_Widget2LayoutAction->setEnabled(true);
00622 m_Widget3LayoutAction->setEnabled(true);
00623 m_RowWidget3And4LayoutAction->setEnabled(true);
00624 m_ColumnWidget3And4LayoutAction->setEnabled(true);
00625 m_SmallUpperWidget2Big3and4LayoutAction->setEnabled(false);
00626 m_2x2Dand3DWidgetLayoutAction->setEnabled(true);
00627 m_Left2Dand3DRight2DLayoutAction->setEnabled(true);
00628 break;
00629 }
00630 case LAYOUT_LEFT2DAND3DRIGHT2D:
00631 {
00632 m_DefaultLayoutAction->setEnabled(true);
00633 m_2DImagesUpLayoutAction->setEnabled(true);
00634 m_2DImagesLeftLayoutAction->setEnabled(true);
00635 m_Big3DLayoutAction->setEnabled(true);
00636 m_Widget1LayoutAction->setEnabled(true);
00637 m_Widget2LayoutAction->setEnabled(true);
00638 m_Widget3LayoutAction->setEnabled(true);
00639 m_RowWidget3And4LayoutAction->setEnabled(true);
00640 m_ColumnWidget3And4LayoutAction->setEnabled(true);
00641 m_SmallUpperWidget2Big3and4LayoutAction->setEnabled(true);
00642 m_2x2Dand3DWidgetLayoutAction->setEnabled(true);
00643 m_Left2Dand3DRight2DLayoutAction->setEnabled(false);
00644 break;
00645 }
00646 }
00647 }
00648
00649 #ifdef QMITK_USE_EXTERNAL_RENDERWINDOW_MENU
00650 void QmitkRenderWindowMenu::MoveWidgetToCorrectPos(float opacity)
00651 #else
00652 void QmitkRenderWindowMenu::MoveWidgetToCorrectPos(float )
00653 #endif
00654 {
00655 #ifdef QMITK_USE_EXTERNAL_RENDERWINDOW_MENU
00656 int X=floor( double(this->parentWidget()->width() - this->width() - 8.0) );
00657 int Y=7;
00658
00659 QPoint pos = this->parentWidget()->mapToGlobal( QPoint(0,0) );
00660
00661 this->move( X+pos.x(), Y+pos.y() );
00662
00663 if(opacity<0) opacity=0;
00664 else if(opacity>1) opacity=1;
00665
00666 this->setWindowOpacity(opacity);
00667 #else
00668 int moveX= floor( double(this->parentWidget()->width() - this->width() - 4.0) );
00669 this->move( moveX, 3 );
00670 this->show();
00671 #endif
00672 }
00673
00674 void QmitkRenderWindowMenu::ChangeFullScreenIcon()
00675 {
00676
00677 if( m_FullScreenMode )
00678 {
00679 const QIcon icon( iconLeaveFullScreen_xpm );
00680 m_FullScreenButton->setIcon(icon);
00681 }
00682 else
00683 {
00684 const QIcon icon( iconFullScreen_xpm );
00685 m_FullScreenButton->setIcon(icon);
00686 }
00687 }
00688
00689 void QmitkRenderWindowMenu::OnCrosshairRotationModeSelected(QAction* action)
00690 {
00691 MITK_DEBUG << "selected crosshair mode " << action->data().toInt() ;
00692 emit ChangeCrosshairRotationMode( action->data().toInt() );
00693 }
00694
00695 void QmitkRenderWindowMenu::SetCrossHairVisibility( bool state )
00696 {
00697 if(m_Renderer.IsNotNull())
00698 {
00699 mitk::DataStorage *ds=m_Renderer->GetDataStorage();
00700 mitk::DataNode *n;
00701 if(ds)
00702 {
00703 n = ds->GetNamedNode("widget1Plane"); if(n) n->SetVisibility(state);
00704 n = ds->GetNamedNode("widget2Plane"); if(n) n->SetVisibility(state);
00705 n = ds->GetNamedNode("widget3Plane"); if(n) n->SetVisibility(state);
00706 m_Renderer->GetRenderingManager()->RequestUpdateAll();
00707 }
00708 }
00709 }
00710
00711 void QmitkRenderWindowMenu::OnTSNumChanged(int num)
00712 {
00713 MITK_DEBUG << "Thickslices num: " << num << " on renderer " << m_Renderer.GetPointer();
00714
00715 if(m_Renderer.IsNotNull())
00716 {
00717 if(num==0)
00718 {
00719 m_Renderer->GetCurrentWorldGeometry2DNode()->SetProperty( "reslice.thickslices", mitk::ResliceMethodProperty::New( 0 ) );
00720 }
00721 else
00722 {
00723 m_Renderer->GetCurrentWorldGeometry2DNode()->SetProperty( "reslice.thickslices", mitk::ResliceMethodProperty::New( 1 ) );
00724 m_Renderer->GetCurrentWorldGeometry2DNode()->SetProperty( "reslice.thickslices.num", mitk::IntProperty::New( num ) );
00725 }
00726 m_TSLabel->setText(QString::number(num*2+1));
00727 m_Renderer->SendUpdateSlice();
00728 m_Renderer->GetRenderingManager()->RequestUpdateAll();
00729 }
00730 }
00731
00732
00733
00734 void QmitkRenderWindowMenu::OnCrossHairMenuAboutToShow()
00735 {
00736 QMenu *crosshairModesMenu = m_CrosshairMenu;
00737
00738 crosshairModesMenu->clear();
00739
00740 QAction* resetViewAction = new QAction(crosshairModesMenu);
00741 resetViewAction->setText("Reset view");
00742 crosshairModesMenu->addAction( resetViewAction );
00743 connect( resetViewAction, SIGNAL(triggered()), this, SIGNAL(ResetView()));
00744
00745
00746 {
00747 bool currentState = true;
00748
00749 if(m_Renderer.IsNotNull())
00750 {
00751 mitk::DataStorage *ds=m_Renderer->GetDataStorage();
00752 mitk::DataNode *n;
00753 if(ds)
00754 {
00755 n = ds->GetNamedNode("widget1Plane"); if(n) { bool v; if(n->GetVisibility(v,0)) currentState&=v; }
00756 n = ds->GetNamedNode("widget2Plane"); if(n) { bool v; if(n->GetVisibility(v,0)) currentState&=v; }
00757 n = ds->GetNamedNode("widget3Plane"); if(n) { bool v; if(n->GetVisibility(v,0)) currentState&=v; }
00758 }
00759 }
00760
00761
00762 QAction* showHideCrosshairVisibilityAction = new QAction(crosshairModesMenu);
00763 showHideCrosshairVisibilityAction->setText("Show crosshair");
00764 showHideCrosshairVisibilityAction->setCheckable(true);
00765 showHideCrosshairVisibilityAction->setChecked(currentState);
00766 crosshairModesMenu->addAction( showHideCrosshairVisibilityAction );
00767 connect( showHideCrosshairVisibilityAction, SIGNAL(toggled(bool)), this, SLOT(SetCrossHairVisibility(bool)));
00768 }
00769
00770
00771 {
00772 QAction* rotationGroupSeparator = new QAction(crosshairModesMenu);
00773 rotationGroupSeparator->setSeparator(true);
00774 rotationGroupSeparator->setText("Rotation mode");
00775 crosshairModesMenu->addAction( rotationGroupSeparator );
00776
00777 QActionGroup* rotationModeActionGroup = new QActionGroup(crosshairModesMenu);
00778 rotationModeActionGroup->setExclusive(true);
00779
00780 QAction* noCrosshairRotation = new QAction(crosshairModesMenu);
00781 noCrosshairRotation->setActionGroup(rotationModeActionGroup);
00782 noCrosshairRotation->setText("No crosshair rotation");
00783 noCrosshairRotation->setCheckable(true);
00784 noCrosshairRotation->setChecked(currentCrosshairRotationMode==0);
00785 noCrosshairRotation->setData( 0 );
00786 crosshairModesMenu->addAction( noCrosshairRotation );
00787
00788 QAction* singleCrosshairRotation = new QAction(crosshairModesMenu);
00789 singleCrosshairRotation->setActionGroup(rotationModeActionGroup);
00790 singleCrosshairRotation->setText("Crosshair rotation");
00791 singleCrosshairRotation->setCheckable(true);
00792 singleCrosshairRotation->setChecked(currentCrosshairRotationMode==1);
00793 singleCrosshairRotation->setData( 1 );
00794 crosshairModesMenu->addAction( singleCrosshairRotation );
00795
00796 QAction* coupledCrosshairRotation = new QAction(crosshairModesMenu);
00797 coupledCrosshairRotation->setActionGroup(rotationModeActionGroup);
00798 coupledCrosshairRotation->setText("Coupled crosshair rotation");
00799 coupledCrosshairRotation->setCheckable(true);
00800 coupledCrosshairRotation->setChecked(currentCrosshairRotationMode==2);
00801 coupledCrosshairRotation->setData( 2 );
00802 crosshairModesMenu->addAction( coupledCrosshairRotation );
00803
00804 QAction* swivelMode = new QAction(crosshairModesMenu);
00805 swivelMode->setActionGroup(rotationModeActionGroup);
00806 swivelMode->setText("Swivel mode");
00807 swivelMode->setCheckable(true);
00808 swivelMode->setChecked(currentCrosshairRotationMode==3);
00809 swivelMode->setData( 3 );
00810 crosshairModesMenu->addAction( swivelMode );
00811
00812 connect( rotationModeActionGroup, SIGNAL(triggered(QAction*)), this, SLOT(OnCrosshairRotationModeSelected(QAction*)) );
00813 }
00814
00815
00816 if( m_Renderer.IsNotNull() && m_Renderer->GetMapperID() == mitk::BaseRenderer::Standard2D )
00817 {
00818 QAction* thickSlicesGroupSeparator = new QAction(crosshairModesMenu);
00819 thickSlicesGroupSeparator->setSeparator(true);
00820 thickSlicesGroupSeparator->setText("ThickSlices mode");
00821 crosshairModesMenu->addAction( thickSlicesGroupSeparator );
00822
00823 QActionGroup* thickSlicesActionGroup = new QActionGroup(crosshairModesMenu);
00824 thickSlicesActionGroup->setExclusive(true);
00825
00826 int currentMode = 0;
00827 {
00828 mitk::ResliceMethodProperty::Pointer m = dynamic_cast<mitk::ResliceMethodProperty*>(m_Renderer->GetCurrentWorldGeometry2DNode()->GetProperty( "reslice.thickslices" ));
00829 if( m.IsNotNull() )
00830 currentMode = m->GetValueAsId();
00831 }
00832
00833 int currentNum = 1;
00834 {
00835 mitk::IntProperty::Pointer m = dynamic_cast<mitk::IntProperty*>(m_Renderer->GetCurrentWorldGeometry2DNode()->GetProperty( "reslice.thickslices.num" ));
00836 if( m.IsNotNull() )
00837 {
00838 currentNum = m->GetValue();
00839 if(currentNum < 1) currentNum = 1;
00840 if(currentNum > 10) currentNum = 10;
00841 }
00842 }
00843
00844 if(currentMode==0)
00845 currentNum=0;
00846
00847 QSlider *m_TSSlider = new QSlider(crosshairModesMenu);
00848 m_TSSlider->setMinimum(0);
00849 m_TSSlider->setMaximum(9);
00850 m_TSSlider->setValue(currentNum);
00851
00852 m_TSSlider->setOrientation(Qt::Horizontal);
00853
00854 connect( m_TSSlider, SIGNAL( valueChanged(int) ), this, SLOT( OnTSNumChanged(int) ) );
00855
00856 QHBoxLayout* _TSLayout = new QHBoxLayout;
00857 _TSLayout->setContentsMargins(4,4,4,4);
00858 _TSLayout->addWidget(new QLabel("TS: "));
00859 _TSLayout->addWidget(m_TSSlider);
00860 _TSLayout->addWidget(m_TSLabel=new QLabel(QString::number(currentNum*2+1),this));
00861
00862 QWidget* _TSWidget = new QWidget;
00863 _TSWidget->setLayout(_TSLayout);
00864
00865 QWidgetAction *m_TSSliderAction = new QWidgetAction(crosshairModesMenu);
00866 m_TSSliderAction->setDefaultWidget(_TSWidget);
00867 crosshairModesMenu->addAction(m_TSSliderAction);
00868 }
00869 }
00870
00871 void QmitkRenderWindowMenu::NotifyNewWidgetPlanesMode( int mode )
00872 {
00873 currentCrosshairRotationMode = mode;
00874 }