diff --git a/Modules/IGTUI/Qmitk/QmitkNavigationDataPlayerControlWidget.cpp b/Modules/IGTUI/Qmitk/QmitkNavigationDataPlayerControlWidget.cpp index 65fb8346d2..24cd111439 100644 --- a/Modules/IGTUI/Qmitk/QmitkNavigationDataPlayerControlWidget.cpp +++ b/Modules/IGTUI/Qmitk/QmitkNavigationDataPlayerControlWidget.cpp @@ -1,111 +1,122 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "QmitkNavigationDataPlayerControlWidget.h" #include "ui_QmitkNavigationDataPlayerControlWidget.h" #include QmitkNavigationDataPlayerControlWidget::QmitkNavigationDataPlayerControlWidget(QWidget *parent) : QWidget(parent), m_UpdateTimer(new QTimer(this)), ui(new Ui::QmitkNavigationDataPlayerControlWidget) { ui->setupUi(this); connect(m_UpdateTimer, SIGNAL(timeout()), this, SLOT(OnUpdate())); } QmitkNavigationDataPlayerControlWidget::~QmitkNavigationDataPlayerControlWidget() { delete ui; } void QmitkNavigationDataPlayerControlWidget::SetPlayer(mitk::NavigationDataPlayer::Pointer player) { m_Player = player; ui->samplePositionHorizontalSlider->setMaximum(player->GetNumberOfSnapshots()-1); } void QmitkNavigationDataPlayerControlWidget::OnStop() { m_UpdateTimer->stop(); m_Player->StopPlaying(); ui->playPushButton->setChecked(false); - this->OnUpdate(); + this->ResetPlayerDisplay(); } void QmitkNavigationDataPlayerControlWidget::OnPlayPause() { switch ( m_Player->GetCurrentPlayerState() ) { case mitk::NavigationDataPlayer::PlayerStopped: { m_Player->StartPlaying(); if ( ! m_UpdateTimer->isActive() ) { m_UpdateTimer->start(10); } + if ( ! ui->playPushButton->isChecked() ) { ui->playPushButton->setChecked(true); } break; } case mitk::NavigationDataPlayer::PlayerPaused: { m_Player->Resume(); break; } case mitk::NavigationDataPlayer::PlayerRunning: { m_Player->Pause(); break; } } } void QmitkNavigationDataPlayerControlWidget::OnRestart() { - m_Player->StopPlaying(); - m_Player->StartPlaying(); + this->OnStop(); + this->OnPlayPause(); } void QmitkNavigationDataPlayerControlWidget::OnUpdate() { m_Player->Update(); int msc = static_cast(m_Player->GetTimeStampSinceStart()); // calculation for playing time display int ms = msc % 1000; msc = (msc - ms) / 1000; int s = msc % 60; int min = (msc-s) / 60; // set lcd numbers ui->msecLCDNumber->display(ms); ui->secLCDNumber->display(s); ui->minLCDNumber->display(min); ui->samplePositionHorizontalSlider->setValue(static_cast(m_Player->GetCurrentSnapshotNumber())); emit SignalUpdate(); if ( m_Player->GetCurrentPlayerState() == mitk::NavigationDataPlayer::PlayerStopped ) { m_UpdateTimer->stop(); ui->playPushButton->setChecked(false); emit SignalEndReached(); } } + +void QmitkNavigationDataPlayerControlWidget::ResetPlayerDisplay() +{ + // set lcd numbers + ui->msecLCDNumber->display(0); + ui->secLCDNumber->display(0); + ui->minLCDNumber->display(0); + + ui->samplePositionHorizontalSlider->setValue(0); +} diff --git a/Modules/IGTUI/Qmitk/QmitkNavigationDataPlayerControlWidget.h b/Modules/IGTUI/Qmitk/QmitkNavigationDataPlayerControlWidget.h index 151805d3dd..138e4a424f 100644 --- a/Modules/IGTUI/Qmitk/QmitkNavigationDataPlayerControlWidget.h +++ b/Modules/IGTUI/Qmitk/QmitkNavigationDataPlayerControlWidget.h @@ -1,60 +1,62 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #ifndef QMITKNAVIGATIONDATAPLAYERCONTROLWIDGET_H #define QMITKNAVIGATIONDATAPLAYERCONTROLWIDGET_H #include #include "mitkNavigationDataPlayer.h" #include "MitkIGTUIExports.h" class QTimer; namespace Ui { class QmitkNavigationDataPlayerControlWidget; } class MitkIGTUI_EXPORT QmitkNavigationDataPlayerControlWidget : public QWidget { Q_OBJECT signals: void SignalUpdate(); void SignalEndReached(); - public slots: - void OnStop(); - void OnPlayPause(); - void OnRestart(); +public slots: + void OnStop(); + void OnPlayPause(); + void OnRestart(); - protected slots: - void OnUpdate(); +protected slots: + void OnUpdate(); public: explicit QmitkNavigationDataPlayerControlWidget(QWidget *parent = 0); ~QmitkNavigationDataPlayerControlWidget(); void SetPlayer(mitk::NavigationDataPlayer::Pointer player); private: + void ResetPlayerDisplay(); + mitk::NavigationDataPlayer::Pointer m_Player; QTimer* m_UpdateTimer; Ui::QmitkNavigationDataPlayerControlWidget *ui; }; -#endif // QMITKNAVIGATIONDATAPLAYERCONTROLWIDGET_H \ No newline at end of file +#endif // QMITKNAVIGATIONDATAPLAYERCONTROLWIDGET_H diff --git a/Modules/IGTUI/Qmitk/QmitkNavigationDataSequentialPlayerControlWidget.cpp b/Modules/IGTUI/Qmitk/QmitkNavigationDataSequentialPlayerControlWidget.cpp index e486ee65ac..6e34475370 100644 --- a/Modules/IGTUI/Qmitk/QmitkNavigationDataSequentialPlayerControlWidget.cpp +++ b/Modules/IGTUI/Qmitk/QmitkNavigationDataSequentialPlayerControlWidget.cpp @@ -1,103 +1,105 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "QmitkNavigationDataSequentialPlayerControlWidget.h" #include "ui_QmitkNavigationDataSequentialPlayerControlWidget.h" #include QmitkNavigationDataSequentialPlayerControlWidget::QmitkNavigationDataSequentialPlayerControlWidget(QWidget *parent) : QWidget(parent), ui(new Ui::QmitkNavigationDataSequentialPlayerControlWidget) { ui->setupUi(this); m_UpdateTimer = new QTimer(); connect( m_UpdateTimer, SIGNAL(timeout()), this, SLOT(OnUpdate()) ); } QmitkNavigationDataSequentialPlayerControlWidget::~QmitkNavigationDataSequentialPlayerControlWidget() { delete ui; } void QmitkNavigationDataSequentialPlayerControlWidget::SetPlayer(mitk::NavigationDataSequentialPlayer::Pointer player) { m_Player = player; ui->samplePositionHorizontalSlider->setMaximum(player->GetNumberOfSnapshots()); } void QmitkNavigationDataSequentialPlayerControlWidget::OnStop() { m_UpdateTimer->stop(); m_Player->GoToSnapshot(0); this->UpdatePlayerDisplay(); // make sure that the play/pause button is not checked after stopping ui->playPushButton->setChecked(false); } void QmitkNavigationDataSequentialPlayerControlWidget::OnPlayPause() { if ( m_UpdateTimer->isActive() ) { m_UpdateTimer->stop(); } else { if ( m_Player->IsAtEnd() ) { m_Player->GoToSnapshot(0); } m_UpdateTimer->start(ui->updateIntervalSpinBox->value()); + if ( ! ui->playPushButton->isChecked() ) { ui->playPushButton->setChecked(true); } } } void QmitkNavigationDataSequentialPlayerControlWidget::OnRestart() { - m_Player->GoToSnapshot(0); + this->OnStop(); + this->OnPlayPause(); } void QmitkNavigationDataSequentialPlayerControlWidget::OnUpdate() { // if the last snapshot was reached if ( ! m_Player->GoToNextSnapshot() ) { m_UpdateTimer->stop(); ui->playPushButton->setChecked(false); emit SignalEndReached(); } m_Player->Update(); this->UpdatePlayerDisplay(); emit SignalUpdate(); } void QmitkNavigationDataSequentialPlayerControlWidget::OnUpdateIntervalChanged(int value) { m_UpdateTimer->setInterval(value); } void QmitkNavigationDataSequentialPlayerControlWidget::UpdatePlayerDisplay() { int currentSnapshotNumber = static_cast(m_Player->GetCurrentSnapshotNumber()); ui->sampleLCDNumber->display(currentSnapshotNumber); ui->samplePositionHorizontalSlider->setValue(currentSnapshotNumber); }