From 5a5b3cc7b2aeed77c810235e2d737d93aa9636a9 Mon Sep 17 00:00:00 2001 From: Gennady Pospelov <g.pospelov@fz-juelich.de> Date: Mon, 13 Jun 2016 15:59:27 +0200 Subject: [PATCH] New status for JobItem to mark running fitting; additional begin/end fit time properties set. --- GUI/coregui/Models/JobItem.cpp | 21 ++++++++++++++----- GUI/coregui/Models/JobQueueData.cpp | 8 ++----- GUI/coregui/Models/JobQueueData.h | 1 + GUI/coregui/Models/item_constants.h | 1 + .../Views/FitWidgets/FitSuiteWidget.cpp | 13 ++++++++++++ .../Views/FitWidgets/FittingWorker.cpp | 16 +++++++++++++- GUI/coregui/Views/FitWidgets/FittingWorker.h | 4 ++-- .../Views/FitWidgets/RunFitManager.cpp | 14 +++++++++++-- GUI/coregui/Views/FitWidgets/RunFitManager.h | 5 ++++- GUI/coregui/utils/GUIHelpers.cpp | 6 ++++++ GUI/coregui/utils/GUIHelpers.h | 2 ++ 11 files changed, 74 insertions(+), 17 deletions(-) diff --git a/GUI/coregui/Models/JobItem.cpp b/GUI/coregui/Models/JobItem.cpp index d1ff79c8779..3e34b164322 100644 --- a/GUI/coregui/Models/JobItem.cpp +++ b/GUI/coregui/Models/JobItem.cpp @@ -30,6 +30,16 @@ #include <QDateTime> #include <QDebug> +namespace { + QVariant createStatusVariant() { + ComboProperty status; + status << Constants::STATUS_IDLE << Constants::STATUS_RUNNING + << Constants::STATUS_FITTING << Constants::STATUS_COMPLETED + << Constants::STATUS_CANCELED << Constants::STATUS_FAILED; + return status.getVariant(); + } +} + const QString JobItem::P_IDENTIFIER = "Identifier"; const QString JobItem::P_SAMPLE_NAME = "Sample"; const QString JobItem::P_INSTRUMENT_NAME = "Instrument"; @@ -57,10 +67,10 @@ JobItem::JobItem() addProperty(P_INSTRUMENT_NAME, QString())->setEditable(false); addProperty(P_WITH_FITTING, false)->setVisible(false); - ComboProperty status; - status << Constants::STATUS_IDLE << Constants::STATUS_RUNNING << Constants::STATUS_COMPLETED - << Constants::STATUS_CANCELED << Constants::STATUS_FAILED; - addProperty(P_STATUS, status.getVariant())->setEditable(false); +// ComboProperty status; +// status << Constants::STATUS_IDLE << Constants::STATUS_RUNNING << Constants::STATUS_FITTING << Constants::STATUS_COMPLETED +// << Constants::STATUS_CANCELED << Constants::STATUS_FAILED; + addProperty(P_STATUS, createStatusVariant())->setEditable(false); addProperty(P_BEGIN_TIME, QString())->setEditable(false); addProperty(P_END_TIME, QString())->setEditable(false); @@ -197,7 +207,8 @@ void JobItem::setEndTime(const QString &end_time) void JobItem::setDuration(int duration) { QString str; - str.sprintf("%7.3f", duration/1000.); + if(duration != 0) + str.sprintf("%7.3f", duration/1000.); setItemValue(P_DURATION, str.simplified()); } diff --git a/GUI/coregui/Models/JobQueueData.cpp b/GUI/coregui/Models/JobQueueData.cpp index 761f1c8642a..902e425807f 100644 --- a/GUI/coregui/Models/JobQueueData.cpp +++ b/GUI/coregui/Models/JobQueueData.cpp @@ -22,7 +22,6 @@ #include "DomainSimulationBuilder.h" #include "GUIHelpers.h" #include <QThread> -#include <QDateTime> #include <QDebug> JobQueueData::JobQueueData(JobModel *jobModel) @@ -154,9 +153,7 @@ void JobQueueData::onStartedJob() JobItem *jobItem = m_jobModel->getJobItemForIdentifier(runner->getIdentifier()); jobItem->setProgress(0); jobItem->setStatus(Constants::STATUS_RUNNING); - QString begin_time - = QDateTime::currentDateTime().toString(QStringLiteral("yyyy.MM.dd hh:mm:ss")); - jobItem->setBeginTime(begin_time); + jobItem->setBeginTime(GUIHelpers::currentDateTime()); jobItem->setEndTime(QString()); } @@ -275,8 +272,7 @@ void JobQueueData::clearSimulation(const QString &identifier) void JobQueueData::processFinishedJob(JobRunner *runner, JobItem *jobItem) { - QString end_time = QDateTime::currentDateTime().toString("yyyy.MM.dd hh:mm:ss"); - jobItem->setEndTime(end_time); + jobItem->setEndTime(GUIHelpers::currentDateTime()); jobItem->setDuration(runner->getSimulationDuration()); // propagating status of runner diff --git a/GUI/coregui/Models/JobQueueData.h b/GUI/coregui/Models/JobQueueData.h index d81628aa8a7..87dea678f91 100644 --- a/GUI/coregui/Models/JobQueueData.h +++ b/GUI/coregui/Models/JobQueueData.h @@ -50,6 +50,7 @@ public slots: void onStartedJob(); void onProgressUpdate(); void onFinishedJob(); + void onFinishedThread(); void onCancelAllJobs(); diff --git a/GUI/coregui/Models/item_constants.h b/GUI/coregui/Models/item_constants.h index 363a43ad625..03dc82a4eb6 100644 --- a/GUI/coregui/Models/item_constants.h +++ b/GUI/coregui/Models/item_constants.h @@ -188,6 +188,7 @@ const ModelType UnitsQyQz = "Qy,Qz"; const ModelType STATUS_IDLE = "Idle"; const ModelType STATUS_RUNNING = "Running"; +const ModelType STATUS_FITTING = "Fitting"; const ModelType STATUS_COMPLETED = "Completed"; const ModelType STATUS_CANCELED = "Canceled"; const ModelType STATUS_FAILED = "Failed"; diff --git a/GUI/coregui/Views/FitWidgets/FitSuiteWidget.cpp b/GUI/coregui/Views/FitWidgets/FitSuiteWidget.cpp index a91c1315308..c130ad551be 100644 --- a/GUI/coregui/Views/FitWidgets/FitSuiteWidget.cpp +++ b/GUI/coregui/Views/FitWidgets/FitSuiteWidget.cpp @@ -30,6 +30,7 @@ #include "MinimizerSettingsWidget.h" #include "FitResultsWidget.h" #include "mainwindow_constants.h" +#include "GUIHelpers.h" #include <QVBoxLayout> #include <QTabWidget> #include <QMessageBox> @@ -190,14 +191,26 @@ void FitSuiteWidget::stopFitting() void FitSuiteWidget::onFittingStarted() { + m_currentItem->setStatus(Constants::STATUS_FITTING); + m_currentItem->setProgress(0); + m_currentItem->setStatus(Constants::STATUS_RUNNING); + m_currentItem->setBeginTime(GUIHelpers::currentDateTime()); + m_currentItem->setEndTime(QString()); + m_currentItem->setDuration(0); + qDebug() << "FitSuiteWidget::onFittingStarted()"; emit fittingStarted(m_currentItem); } void FitSuiteWidget::onFittingFinished() { + m_currentItem->setStatus(Constants::STATUS_COMPLETED); + m_currentItem->setEndTime(GUIHelpers::currentDateTime()); + m_currentItem->setProgress(100); + m_currentItem->setDuration(m_manager->getDuration()); qDebug() << "FitSuiteWidget::onFittingFinished()"; m_currentItem->fitSuiteItem()->mapper()->unsubscribe(this); + Q_ASSERT(0); emit fittingFinished(m_currentItem); } diff --git a/GUI/coregui/Views/FitWidgets/FittingWorker.cpp b/GUI/coregui/Views/FitWidgets/FittingWorker.cpp index 0da53a4cf46..5aa13717094 100644 --- a/GUI/coregui/Views/FitWidgets/FittingWorker.cpp +++ b/GUI/coregui/Views/FitWidgets/FittingWorker.cpp @@ -16,17 +16,25 @@ #include "FittingWorker.h" #include "FitSuite.h" +#include <QDateTime> +#include <QDebug> void FittingWorker::startFit() { + int duration(0); + QDateTime beginTime = QDateTime::currentDateTime(); + m_fitsuite->resetInterrupt(); emit started(); try { m_fitsuite->runFit(); + duration = durationSince(beginTime); + } catch(const std::exception& ex) { + duration = durationSince(beginTime); emit error(QString::fromLatin1(ex.what())); } - emit finished(); + emit finished(duration); } void FittingWorker::interruptFitting() @@ -36,3 +44,9 @@ void FittingWorker::interruptFitting() } } +int FittingWorker::durationSince(const QDateTime &since) +{ + QDateTime endTime = QDateTime::currentDateTime(); + return int(since.msecsTo(endTime)); +} + diff --git a/GUI/coregui/Views/FitWidgets/FittingWorker.h b/GUI/coregui/Views/FitWidgets/FittingWorker.h index c96bda1dd4f..71684535ec4 100644 --- a/GUI/coregui/Views/FitWidgets/FittingWorker.h +++ b/GUI/coregui/Views/FitWidgets/FittingWorker.h @@ -41,12 +41,12 @@ signals: void started(); - void finished(); + void finished(int duration); void error(const QString &message); private: - + int durationSince(const class QDateTime &since); std::shared_ptr<FitSuite> m_fitsuite; }; diff --git a/GUI/coregui/Views/FitWidgets/RunFitManager.cpp b/GUI/coregui/Views/FitWidgets/RunFitManager.cpp index 341e7e4b12b..be9ae56d6f3 100644 --- a/GUI/coregui/Views/FitWidgets/RunFitManager.cpp +++ b/GUI/coregui/Views/FitWidgets/RunFitManager.cpp @@ -19,11 +19,13 @@ #include "FitSuite.h" #include <QThread> #include <memory> +#include <QDebug> RunFitManager::RunFitManager(QObject *parent) : QObject(parent) , m_fitSuite(nullptr) , m_is_fit_running{false} + , m_duration(0) { } @@ -51,7 +53,7 @@ void RunFitManager::runFitting() connect(fw, SIGNAL(error(QString)), this, SLOT(intern_error(QString))); - connect(fw, SIGNAL(finished()), this, SLOT(intern_workerFinished())); + connect(fw, SIGNAL(finished(int)), this, SLOT(intern_workerFinished(int))); // delete fitting worker and thread when done connect(fw, SIGNAL(finished()), fw, SLOT(deleteLater())); @@ -61,6 +63,13 @@ void RunFitManager::runFitting() thread->start(); } +//! Returns duration of fit in msec. + +int RunFitManager::getDuration() +{ + return m_duration; +} + void RunFitManager::interruptFitting() { if (m_is_fit_running) { @@ -68,9 +77,10 @@ void RunFitManager::interruptFitting() } } -void RunFitManager::intern_workerFinished() +void RunFitManager::intern_workerFinished(int duration) { m_is_fit_running = false; + m_duration = duration; m_fitSuite.reset(); emit finishedFitting(); } diff --git a/GUI/coregui/Views/FitWidgets/RunFitManager.h b/GUI/coregui/Views/FitWidgets/RunFitManager.h index 23be3005607..7ebcb631ab2 100644 --- a/GUI/coregui/Views/FitWidgets/RunFitManager.h +++ b/GUI/coregui/Views/FitWidgets/RunFitManager.h @@ -35,6 +35,8 @@ public: void runFitting(); + int getDuration(); + public slots: void interruptFitting(); @@ -47,7 +49,7 @@ signals: // only used by manager for communication with FittingWorker private slots: - void intern_workerFinished(); + void intern_workerFinished(int duration); void intern_workerStarted(); @@ -59,6 +61,7 @@ signals: private: std::shared_ptr<FitSuite> m_fitSuite; std::atomic<bool> m_is_fit_running; + int m_duration; }; #endif diff --git a/GUI/coregui/utils/GUIHelpers.cpp b/GUI/coregui/utils/GUIHelpers.cpp index 04847aff7e6..7dce5a0c5f1 100644 --- a/GUI/coregui/utils/GUIHelpers.cpp +++ b/GUI/coregui/utils/GUIHelpers.cpp @@ -25,6 +25,7 @@ #include <QMessageBox> #include <QPushButton> #include <QFileInfo> +#include <QDateTime> #include <QDebug> namespace GUIHelpers { @@ -213,5 +214,10 @@ QString fileDir(const QString &fileName) return QString(); } +QString currentDateTime() +{ + return QDateTime::currentDateTime().toString("yyyy.MM.dd hh:mm:ss");; +} + } // namespace GUIHelpers diff --git a/GUI/coregui/utils/GUIHelpers.h b/GUI/coregui/utils/GUIHelpers.h index 3f4b7f9ec43..f7a9b0e486c 100644 --- a/GUI/coregui/utils/GUIHelpers.h +++ b/GUI/coregui/utils/GUIHelpers.h @@ -68,6 +68,8 @@ BA_CORE_API_ bool parseVersion(const QString &version, int &major_num, int &mino BA_CORE_API_ bool isVersionMatchMinimal(const QString &version, const QString &minimal_version); +BA_CORE_API_ QString currentDateTime(); + template<class T, class... Ts> std::unique_ptr<T> make_unique(Ts&&... params) { return std::unique_ptr<T>(new T(std::forward<Ts>(params)...)); -- GitLab