diff --git a/Plugins/org.mitk.gui.qt.cli/files.cmake b/Plugins/org.mitk.gui.qt.cli/files.cmake index 366c26fccd..65dee90e7e 100644 --- a/Plugins/org.mitk.gui.qt.cli/files.cmake +++ b/Plugins/org.mitk.gui.qt.cli/files.cmake @@ -1,63 +1,66 @@ set(SRC_CPP_FILES QmitkCmdLineModuleMenuComboBox.cpp + QmitkCmdLineModuleProgressWidget.cpp ) set(INTERNAL_CPP_FILES QmitkDataStorageComboBoxWithSelectNone.cpp QmitkDirectoryListWidget.cpp QmitkFileListWidget.cpp QmitkCmdLineModuleGui.cpp QmitkCmdLineModuleFactoryGui.cpp QmitkUiLoader.cpp org_mitk_gui_qt_cli_Activator.cpp CommandLineModulesViewConstants.cpp CommandLineModulesViewControls.cpp CommandLineModulesPreferencesPage.cpp CommandLineModulesView.cpp ) set(UI_FILES + src/QmitkCmdLineModuleProgressWidget.ui src/internal/QmitkPathListWidget.ui src/internal/CommandLineModulesViewControls.ui ) set(MOC_H_FILES src/QmitkCmdLineModuleMenuComboBox.h + src/QmitkCmdLineModuleProgressWidget.h src/internal/QmitkDataStorageComboBoxWithSelectNone.h src/internal/QmitkDirectoryListWidget.h src/internal/QmitkFileListWidget.h src/internal/QmitkCmdLineModuleGui.h src/internal/QmitkUiLoader.h src/internal/org_mitk_gui_qt_cli_Activator.h src/internal/CommandLineModulesViewControls.h src/internal/CommandLineModulesPreferencesPage.h src/internal/CommandLineModulesView.h ) # list of resource files which can be used by the plug-in # system without loading the plug-ins shared library, # for example the icon used in the menu and tabs for the # plug-in views in the workbench set(CACHED_RESOURCE_FILES resources/icon.xpm resources/run.png resources/stop.png plugin.xml ) # list of Qt .qrc files which contain additional resources # specific to this plugin set(QRC_FILES resources/CommandLineModulesResources.qrc ) set(CPP_FILES ) foreach(file ${SRC_CPP_FILES}) set(CPP_FILES ${CPP_FILES} src/${file}) endforeach(file ${SRC_CPP_FILES}) foreach(file ${INTERNAL_CPP_FILES}) set(CPP_FILES ${CPP_FILES} src/internal/${file}) endforeach(file ${INTERNAL_CPP_FILES}) diff --git a/Plugins/org.mitk.gui.qt.cli/src/QmitkCmdLineModuleProgressWidget.cpp b/Plugins/org.mitk.gui.qt.cli/src/QmitkCmdLineModuleProgressWidget.cpp new file mode 100644 index 0000000000..2e3c9408cb --- /dev/null +++ b/Plugins/org.mitk.gui.qt.cli/src/QmitkCmdLineModuleProgressWidget.cpp @@ -0,0 +1,144 @@ +/*=================================================================== + +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 + +#include "QmitkCmdLineModuleProgressWidget.h" +#include "ui_QmitkCmdLineModuleProgressWidget.h" + + +QmitkCmdLineModuleProgressWidget::QmitkCmdLineModuleProgressWidget(QWidget *parent) + : QWidget(parent) + , m_UI(new Ui::QmitkCmdLineModuleProgressWidget) +{ + m_UI->setupUi(this); + + m_UI->m_RemoveButton->setIcon(QApplication::style()->standardIcon(QStyle::SP_TitleBarCloseButton)); + + // Due to Qt bug 12152, we cannot listen to the "paused" signal because it is + // not emitted directly when the QFuture is paused. Instead, it is emitted after + // resuming the future, after the "resume" signal has been emitted... we use + // a polling aproach instead. + m_PollPauseTimer.setInterval(300); + connect(&m_PollPauseTimer, SIGNAL(timeout()), SLOT(checkModulePaused())); + + connect(&m_FutureWatcher, SIGNAL(started()), SLOT(moduleStarted())); + connect(&m_FutureWatcher, SIGNAL(canceled()), SLOT(moduleCanceled())); + connect(&m_FutureWatcher, SIGNAL(finished()), SLOT(moduleFinished())); + connect(&m_FutureWatcher, SIGNAL(resumed()), SLOT(moduleResumed())); + connect(&m_FutureWatcher, SIGNAL(progressRangeChanged(int,int)), SLOT(moduleProgressRangeChanged(int,int))); + connect(&m_FutureWatcher, SIGNAL(progressTextChanged(QString)), SLOT(moduleProgressTextChanged(QString))); + connect(&m_FutureWatcher, SIGNAL(progressValueChanged(int)), SLOT(moduleProgressValueChanged(int))); + + connect(m_UI->m_CancelButton, SIGNAL(clicked()), &this->m_FutureWatcher, SLOT(cancel())); + + m_PollPauseTimer.start(); +} + +QmitkCmdLineModuleProgressWidget::~QmitkCmdLineModuleProgressWidget() +{ + delete m_UI; +} + +void QmitkCmdLineModuleProgressWidget::setFuture(const ctkCmdLineModuleFuture &future) +{ + m_UI->m_PauseButton->setEnabled(future.canPause()); + m_UI->m_CancelButton->setEnabled(future.canCancel()); + m_UI->m_RemoveButton->setEnabled(!future.isRunning()); + + m_FutureWatcher.setFuture(future); +} + +void QmitkCmdLineModuleProgressWidget::setTitle(const QString &title) +{ + m_UI->m_ProgressTitle->setText(title); +} + + +void QmitkCmdLineModuleProgressWidget::mouseReleaseEvent(QMouseEvent*) +{ + emit clicked(); +} + +void QmitkCmdLineModuleProgressWidget::on_PauseButton_toggled(bool toggled) +{ + this->m_FutureWatcher.setPaused(toggled); +} + +void QmitkCmdLineModuleProgressWidget::on_RemoveButton_clicked() +{ + this->deleteLater(); +} + +void QmitkCmdLineModuleProgressWidget::moduleStarted() +{ + this->m_UI->m_ProgressBar->setMaximum(0); +} + +void QmitkCmdLineModuleProgressWidget::moduleCanceled() +{ + this->m_UI->m_PauseButton->setEnabled(false); + this->m_UI->m_PauseButton->setChecked(false); + this->m_UI->m_CancelButton->setEnabled(false); + this->m_UI->m_RemoveButton->setEnabled(true); +} + +void QmitkCmdLineModuleProgressWidget::moduleFinished() +{ + this->m_UI->m_PauseButton->setEnabled(false); + this->m_UI->m_PauseButton->setChecked(false); + this->m_UI->m_CancelButton->setEnabled(false); + this->m_UI->m_RemoveButton->setEnabled(true); +} + +void QmitkCmdLineModuleProgressWidget::checkModulePaused() +{ + if (this->m_FutureWatcher.future().isPaused()) + { + if (!m_UI->m_PauseButton->isChecked()) + { + m_UI->m_PauseButton->setChecked(true); + } + } + else + { + if (m_UI->m_PauseButton->isChecked()) + { + m_UI->m_PauseButton->setChecked(false); + } + } +} + +void QmitkCmdLineModuleProgressWidget::moduleResumed() +{ + this->m_UI->m_PauseButton->setChecked(false); +} + +void QmitkCmdLineModuleProgressWidget::moduleProgressRangeChanged(int progressMin, int progressMax) +{ + this->m_UI->m_ProgressBar->setMinimum(progressMin); + this->m_UI->m_ProgressBar->setMaximum(progressMax); +} + +void QmitkCmdLineModuleProgressWidget::moduleProgressTextChanged(const QString& progressText) +{ + //m_UI->m_ProgressText->setText(progressText); +} + +void QmitkCmdLineModuleProgressWidget::moduleProgressValueChanged(int progressValue) +{ + m_UI->m_ProgressBar->setValue(progressValue); +} diff --git a/Plugins/org.mitk.gui.qt.cli/src/QmitkCmdLineModuleProgressWidget.h b/Plugins/org.mitk.gui.qt.cli/src/QmitkCmdLineModuleProgressWidget.h new file mode 100644 index 0000000000..f767742de4 --- /dev/null +++ b/Plugins/org.mitk.gui.qt.cli/src/QmitkCmdLineModuleProgressWidget.h @@ -0,0 +1,82 @@ +/*=================================================================== + +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 QMITKCMDLINEMODULEPROGRESSWIDGET_H +#define QMITKCMDLINEMODULEPROGRESSWIDGET_H + +#include "ctkCmdLineModuleResult.h" +#include "ctkCmdLineModuleFutureWatcher.h" + +#include +#include +#include + +class ctkCmdLineModuleFuture; + +namespace Ui { +class QmitkCmdLineModuleProgressWidget; +} + +/** + * \class QmitkCmdLineModuleProgressWidget + * \brief Based on ctkCmdLineModuleExplorerProgressWidget, implements a progress widget + * with console output, and space for storing the GUI widget once the module is running. + */ +class QmitkCmdLineModuleProgressWidget : public QWidget +{ + Q_OBJECT + +public: + + QmitkCmdLineModuleProgressWidget(QWidget *parent = 0); + ~QmitkCmdLineModuleProgressWidget(); + + void setFuture(const ctkCmdLineModuleFuture& future); + + void setTitle(const QString& title); + +Q_SIGNALS: + + void clicked(); + +protected: + + void mouseReleaseEvent(QMouseEvent*); + +private Q_SLOTS: + + void on_PauseButton_toggled(bool toggled); + void on_RemoveButton_clicked(); + + void checkModulePaused(); + + void moduleStarted(); + void moduleCanceled(); + void moduleFinished(); + void moduleResumed(); + void moduleProgressRangeChanged(int progressMin, int progressMax); + void moduleProgressTextChanged(const QString& progressText); + void moduleProgressValueChanged(int progressValue); + +private: + Ui::QmitkCmdLineModuleProgressWidget *m_UI; + + ctkCmdLineModuleFutureWatcher m_FutureWatcher; + QTimer m_PollPauseTimer; + +}; + +#endif // QMITKCMDLINEMODULEPROGRESSWIDGET_H diff --git a/Plugins/org.mitk.gui.qt.cli/src/QmitkCmdLineModuleProgressWidget.ui b/Plugins/org.mitk.gui.qt.cli/src/QmitkCmdLineModuleProgressWidget.ui new file mode 100644 index 0000000000..8dead2619a --- /dev/null +++ b/Plugins/org.mitk.gui.qt.cli/src/QmitkCmdLineModuleProgressWidget.ui @@ -0,0 +1,132 @@ + + + QmitkCmdLineModuleProgressWidget + + + + 0 + 0 + 533 + 288 + + + + Form + + + + + + + 0 + 0 + + + + TextLabel + + + + + + + + + 0 + + + + + + + ... + + + + :/CommandLineModulesResources/pause.png:/CommandLineModulesResources/pause.png + + + true + + + true + + + + + + + ... + + + + :/CommandLineModulesResources/stop.png:/CommandLineModulesResources/stop.png + + + true + + + + + + + Remove + + + true + + + + + + + + + + 0 + 0 + + + + Parameters + + + + + + + Console + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 4 + + + + + + + + + ctkCollapsibleGroupBox + QGroupBox +
ctkCollapsibleGroupBox.h
+ 1 +
+
+ + + + +
diff --git a/Plugins/org.mitk.gui.qt.cli/src/internal/CommandLineModulesViewControls.ui b/Plugins/org.mitk.gui.qt.cli/src/internal/CommandLineModulesViewControls.ui index 9d3689ca31..6d20ca67a3 100644 --- a/Plugins/org.mitk.gui.qt.cli/src/internal/CommandLineModulesViewControls.ui +++ b/Plugins/org.mitk.gui.qt.cli/src/internal/CommandLineModulesViewControls.ui @@ -1,150 +1,159 @@ CommandLineModulesViewControls 0 0 678 582 0 0 QmitkTemplate 0 0 choose: 0 0 restore default parameters 0 0 run the command line module 0 0 stop the command line module Qt::Horizontal 40 20 0 0 0 0 - - - - 0 - 0 - - - + + + + + + 0 + 0 + + + + QmitkCmdLineModuleMenuComboBox QWidget
QmitkCmdLineModuleMenuComboBox.h
1
+ + QmitkCmdLineModuleProgressWidget + QWidget +
QmitkCmdLineModuleProgressWidget.h
+ 1 +