Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "QmitkRenderWindow.h"
00020
00021 #include <QCursor>
00022 #include <QMouseEvent>
00023 #include <QWheelEvent>
00024 #include <QKeyEvent>
00025 #include <QResizeEvent>
00026 #include <QTimer>
00027
00028 #include "QmitkEventAdapter.h"
00029
00030 #include "QmitkRenderWindowMenu.h"
00031
00032 QmitkRenderWindow::QmitkRenderWindow(QWidget *parent, QString name, mitk::VtkPropRenderer* , mitk::RenderingManager* renderingManager )
00033 : QVTKWidget(parent)
00034 , m_ResendQtEvents(true)
00035 , m_MenuWidget(NULL)
00036 , m_MenuWidgetActivated(false)
00037 {
00038 Initialize( renderingManager, name.toStdString().c_str() );
00039
00040 setFocusPolicy(Qt::StrongFocus);
00041 setMouseTracking(true);
00042
00043
00044 m_MenuWidget = new QmitkRenderWindowMenu(this,0,m_Renderer);
00045
00046
00047 connect( m_MenuWidget, SIGNAL( SignalChangeLayoutDesign(int) ), this, SLOT(OnChangeLayoutDesign(int)) );
00048 connect( m_MenuWidget, SIGNAL( ResetView() ), this, SIGNAL( ResetView()) );
00049 connect( m_MenuWidget, SIGNAL( ChangeCrosshairRotationMode(int) ), this, SIGNAL( ChangeCrosshairRotationMode(int)) );
00050 }
00051
00052 QmitkRenderWindow::~QmitkRenderWindow()
00053 {
00054 Destroy();
00055
00056 }
00057
00058 void QmitkRenderWindow::SetResendQtEvents(bool resend)
00059 {
00060 m_ResendQtEvents = resend;
00061 }
00062
00063 void QmitkRenderWindow::SetLayoutIndex( unsigned int layoutIndex )
00064 {
00065 if( m_MenuWidget )
00066 m_MenuWidget->SetLayoutIndex(layoutIndex);
00067 }
00068
00069 unsigned int QmitkRenderWindow::GetLayoutIndex()
00070 {
00071 if( m_MenuWidget )
00072 return m_MenuWidget->GetLayoutIndex();
00073 else
00074 return NULL;
00075 }
00076
00077 void QmitkRenderWindow::LayoutDesignListChanged( int layoutDesignIndex )
00078 {
00079 if( m_MenuWidget )
00080 m_MenuWidget->UpdateLayoutDesignList( layoutDesignIndex );
00081 }
00082
00083 void QmitkRenderWindow::mousePressEvent(QMouseEvent *me)
00084 {
00085 mitk::MouseEvent myevent(QmitkEventAdapter::AdaptMouseEvent(m_Renderer, me));
00086 this->mousePressMitkEvent(&myevent);
00087
00088 QVTKWidget::mousePressEvent(me);
00089
00090 if (m_ResendQtEvents) me->ignore();
00091 }
00092
00093 void QmitkRenderWindow::mouseReleaseEvent(QMouseEvent *me)
00094 {
00095 mitk::MouseEvent myevent(QmitkEventAdapter::AdaptMouseEvent(m_Renderer, me));
00096 this->mouseReleaseMitkEvent(&myevent);
00097
00098 QVTKWidget::mouseReleaseEvent(me);
00099
00100 if (m_ResendQtEvents) me->ignore();
00101 }
00102
00103 void QmitkRenderWindow::mouseMoveEvent(QMouseEvent *me)
00104 {
00105 this->AdjustRenderWindowMenuVisibility( me->pos() );
00106
00107
00108 mitk::MouseEvent myevent(QmitkEventAdapter::AdaptMouseEvent(m_Renderer, me));
00109 this->mouseMoveMitkEvent(&myevent);
00110
00111 QVTKWidget::mouseMoveEvent(me);
00112
00113
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140 }
00141
00142 void QmitkRenderWindow::wheelEvent(QWheelEvent *we)
00143 {
00144 mitk::WheelEvent myevent(QmitkEventAdapter::AdaptWheelEvent(m_Renderer, we));
00145 this->wheelMitkEvent(&myevent);
00146
00147 QVTKWidget::wheelEvent(we);
00148
00149 if (m_ResendQtEvents)
00150 we->ignore();
00151 }
00152
00153 void QmitkRenderWindow::keyPressEvent(QKeyEvent *ke)
00154 {
00155 QPoint cp = mapFromGlobal(QCursor::pos());
00156 mitk::KeyEvent mke(QmitkEventAdapter::AdaptKeyEvent(m_Renderer, ke, cp));
00157 this->keyPressMitkEvent(&mke);
00158 ke->accept();
00159
00160 QVTKWidget::keyPressEvent(ke);
00161
00162 if (m_ResendQtEvents) ke->ignore();
00163 }
00164
00165 void QmitkRenderWindow::enterEvent( QEvent *e )
00166 {
00167 QVTKWidget::enterEvent(e);
00168 }
00169
00170 void QmitkRenderWindow::DeferredHideMenu( )
00171 {
00172 MITK_DEBUG << "QmitkRenderWindow::DeferredHideMenu";
00173
00174 if( m_MenuWidget )
00175 m_MenuWidget->HideMenu();
00176 }
00177
00178 void QmitkRenderWindow::leaveEvent( QEvent *e )
00179 {
00180 MITK_DEBUG << "QmitkRenderWindow::leaveEvent";
00181
00182
00183
00184
00185
00186 QTimer::singleShot(0,this,SLOT( DeferredHideMenu( ) ) );
00187
00188 QVTKWidget::leaveEvent(e);
00189 }
00190
00191 void QmitkRenderWindow::resizeEvent(QResizeEvent* event)
00192 {
00193 this->resizeMitkEvent(event->size().width(), event->size().height());
00194
00195 QVTKWidget::resizeEvent(event);
00196 }
00197
00198
00199 void QmitkRenderWindow::moveEvent( QMoveEvent* event )
00200 {
00201 QVTKWidget::moveEvent( event );
00202
00203
00204 emit Moved();
00205 }
00206
00207
00208 void QmitkRenderWindow::showEvent( QShowEvent* event )
00209 {
00210 QVTKWidget::showEvent( event );
00211
00212
00213
00214 QTimer::singleShot(0, this ,SIGNAL( Moved() ) );
00215 }
00216
00217
00218 void QmitkRenderWindow::AdjustRenderWindowMenuVisibility( const QPoint& pos )
00219 {
00220 if ( !m_MenuWidgetActivated )
00221 return;
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240 int min = m_MenuWidget->height() + 20;
00241 int max = m_MenuWidget->height() + 64;
00242
00243 int y=pos.y();
00244
00245 if( y <= max )
00246 {
00247 float opacity = 1.0f-(y-min)/float(max-min);
00248 m_MenuWidget->ShowMenu();
00249 m_MenuWidget->MoveWidgetToCorrectPos(opacity);
00250 }
00251 else if( !m_MenuWidget->GetSettingsMenuVisibilty() )
00252 {
00253 m_MenuWidget->hide();
00254 }
00255 }
00256
00257 void QmitkRenderWindow::HideRenderWindowMenu( )
00258 {
00259 if ( !m_MenuWidgetActivated )
00260 return;
00261
00262 m_MenuWidget->hide();
00263 }
00264
00265
00266 void QmitkRenderWindow::OnChangeLayoutDesign( int layoutDesignIndex )
00267 {
00268
00269 emit SignalLayoutDesignChanged( layoutDesignIndex );
00270 }
00271
00272 void QmitkRenderWindow::OnWidgetPlaneModeChanged( int mode )
00273 {
00274 if( m_MenuWidget )
00275 m_MenuWidget->NotifyNewWidgetPlanesMode( mode );
00276 }
00277
00278 void QmitkRenderWindow::FullScreenMode(bool state)
00279 {
00280 if( m_MenuWidget )
00281 m_MenuWidget->ChangeFullScreenMode( state );
00282 }