diff --git a/GUI/coregui/Views/FitWidgets/FitSuiteManager.cpp b/GUI/coregui/Views/FitWidgets/FitSuiteManager.cpp index 9ab591493337366d6267414a1b5ff307301fd689..36794256b17fd1fc49f9ce9aedde90dc74c5e951 100644 --- a/GUI/coregui/Views/FitWidgets/FitSuiteManager.cpp +++ b/GUI/coregui/Views/FitWidgets/FitSuiteManager.cpp @@ -24,11 +24,14 @@ #include "IntensityDataItem.h" #include "FitParameterItems.h" #include "GUIHelpers.h" +#include "FitLog.h" +#include <QTextEdit> FitSuiteManager::FitSuiteManager(QObject* parent) : QObject(parent) , m_runFitManager(new RunFitManager(this)) , m_observer(new GUIFitObserver) + , m_fitlog(new FitLog) , m_block_progress_update(false) { connect(m_observer.get(), &GUIFitObserver::plotsUpdate, this, &FitSuiteManager::onPlotsUpdate); @@ -36,14 +39,21 @@ FitSuiteManager::FitSuiteManager(QObject* parent) connect(m_observer.get(), &GUIFitObserver::progressInfoUpdate, this, &FitSuiteManager::onProgressInfoUpdate); + connect(m_observer.get(), &GUIFitObserver::logInfoUpdate, + [&](const QString& text) { + m_fitlog->append(text.toStdString(), FitLogFlags::DEFAULT);}); + connect(m_runFitManager, &RunFitManager::fittingStarted, this, &FitSuiteManager::onFittingStarted); connect(m_runFitManager, &RunFitManager::fittingFinished, this, &FitSuiteManager::onFittingFinished); connect(m_runFitManager, &RunFitManager::fittingError, - this, &FitSuiteManager::fittingError); + this, &FitSuiteManager::onFittingError); + } +FitSuiteManager::~FitSuiteManager() = default; + void FitSuiteManager::setItem(JobItem* item) { m_jobItem = item; @@ -78,6 +88,7 @@ void FitSuiteManager::onStartFittingRequest() } catch(std::exception& e) { m_jobItem->setStatus(Constants::STATUS_FAILED); m_jobItem->fitSuiteItem()->mapper()->unsubscribe(this); + m_fitlog->append(e.what(), FitLogFlags::ERROR); emit fittingError(QString::fromStdString(e.what())); } @@ -93,6 +104,11 @@ std::shared_ptr<GUIFitObserver> FitSuiteManager::fitObserver() return m_observer; } +FitLog* FitSuiteManager::fitLog() +{ + return m_fitlog.get(); +} + void FitSuiteManager::onStopFittingRequest() { m_runFitManager->interruptFitting(); @@ -106,6 +122,8 @@ void FitSuiteManager::onPlotsUpdate() void FitSuiteManager::onFittingStarted() { + m_fitlog->clearLog(); + m_jobItem->setStatus(Constants::STATUS_FITTING); m_jobItem->setProgress(0); m_jobItem->setBeginTime(GUIHelpers::currentDateTime()); @@ -124,9 +142,24 @@ void FitSuiteManager::onFittingFinished() m_jobItem->setDuration(m_runFitManager->getDuration()); m_jobItem->fitSuiteItem()->mapper()->unsubscribe(this); + if(m_jobItem->isCompleted()) + m_fitlog->append("Done", FitLogFlags::SUCCESS); + emit fittingFinished(); } +void FitSuiteManager::onFittingError(const QString& text) +{ + QString message; + message.append("Current settings cause fitting failure.\n\n"); + message.append(text); + m_fitlog->append(message.toStdString(), FitLogFlags::ERROR); + + emit fittingError(message); +} + +//! Propagates fit progress as reported by GUIFitObserver back to JobItem. + void FitSuiteManager::onProgressInfoUpdate(const FitProgressInfo& info) { if(m_block_progress_update) @@ -169,5 +202,7 @@ void FitSuiteManager::updateLog(const FitProgressInfo& info) message.append(parinfo); } - emit fittingMessage(message); + m_fitlog->append(message.toStdString(), FitLogFlags::DEFAULT); + +// emit fittingMessage(message); } diff --git a/GUI/coregui/Views/FitWidgets/FitSuiteManager.h b/GUI/coregui/Views/FitWidgets/FitSuiteManager.h index 5df7a13ee84925744490d8a3a03f8502ede56d5f..af64eac4339dc88d2accfad3279b04d06b3977b4 100644 --- a/GUI/coregui/Views/FitWidgets/FitSuiteManager.h +++ b/GUI/coregui/Views/FitWidgets/FitSuiteManager.h @@ -25,6 +25,7 @@ class JobItem; class RunFitManager; class GUIFitObserver; class FitProgressInfo; +class FitLog; //! Handles all activity related to the single fitting task for JobItem. //! Provides interaction between FitSuiteWidget and fit observers. @@ -34,17 +35,19 @@ class BA_CORE_API_ FitSuiteManager : public QObject Q_OBJECT public: FitSuiteManager(QObject* parent = nullptr); + ~FitSuiteManager(); void setItem(JobItem* item); RunFitManager* runFitManager(); std::shared_ptr<GUIFitObserver> fitObserver(); + FitLog* fitLog(); signals: void fittingStarted(); void fittingFinished(); void fittingError(const QString& message); - void fittingMessage(const QString& message); +// void fittingMessage(const QString& message); public slots: void onStartFittingRequest(); @@ -54,6 +57,7 @@ private slots: void onPlotsUpdate(); void onFittingStarted(); void onFittingFinished(); + void onFittingError(const QString& text); void onProgressInfoUpdate(const FitProgressInfo &info); void updateIterationCount(const FitProgressInfo &info); void updateFitParameterValues(const FitProgressInfo &info); @@ -63,6 +67,7 @@ private: JobItem* m_jobItem; RunFitManager *m_runFitManager; std::shared_ptr<GUIFitObserver> m_observer; + std::unique_ptr<FitLog> m_fitlog; bool m_block_progress_update; }; diff --git a/GUI/coregui/Views/FitWidgets/FitSuiteWidget.cpp b/GUI/coregui/Views/FitWidgets/FitSuiteWidget.cpp index 36be95ce0f83722796740c27ad9a58d022c6b4e3..8504fa5f80f761a736fdc96f7fb9ea9480192512 100644 --- a/GUI/coregui/Views/FitWidgets/FitSuiteWidget.cpp +++ b/GUI/coregui/Views/FitWidgets/FitSuiteWidget.cpp @@ -35,6 +35,7 @@ #include "FitSuiteManager.h" #include "RunFitControlWidget.h" #include "JobMessagePanel.h" +#include "FitLog.h" #include <QMessageBox> #include <QTabWidget> #include <QVBoxLayout> @@ -96,6 +97,7 @@ void FitSuiteWidget::setModelTuningWidget(ParameterTuningWidget *tuningWidget) void FitSuiteWidget::setJobMessagePanel(JobMessagePanel* jobMessagePanel) { m_jobMessagePanel = jobMessagePanel; + m_fitSuiteManager->fitLog()->setMessagePanel(m_jobMessagePanel); } QSize FitSuiteWidget::sizeHint() const @@ -108,52 +110,10 @@ QSize FitSuiteWidget::minimumSizeHint() const return QSize(25, 25); } -//! Propagates fit progress as reported by GUIFitObserver back to JobItem. - -//void FitSuiteWidget::onProgressInfoUpdate(const FitProgressInfo &info) -//{ -// if(m_block_progress_update) return; - -// m_block_progress_update = true; - -// updateIterationCount(info); -// updateTuningWidgetParameterValues(info); -// updateLog(info); - -// m_block_progress_update = false; -//} - - -void FitSuiteWidget::onFittingStarted() -{ - m_jobMessagePanel->onClearLog(); -} - -void FitSuiteWidget::onFittingFinished() -{ - - if(m_currentItem->isCompleted()) - m_jobMessagePanel->onMessage(QStringLiteral("Done"), QColor(Qt::darkBlue)); -} - -void FitSuiteWidget::onFittingLogUpdate(const QString& text) -{ - m_jobMessagePanel->onMessage(text); -} void FitSuiteWidget::onFittingError(const QString& text) { - QString message; - message.append("Current settings cause fitting failure.\n\n"); - message.append(text); - m_jobMessagePanel->onMessage(message, QColor(Qt::darkRed)); - - m_controlWidget->onFittingError(message); -} - -void FitSuiteWidget::onFittingMessage(const QString& text) -{ - m_jobMessagePanel->onMessage(text); + m_controlWidget->onFittingError(text); } void FitSuiteWidget::connectSignals() @@ -161,17 +121,7 @@ void FitSuiteWidget::connectSignals() connect(m_controlWidget, SIGNAL(startFittingPushed()), m_fitSuiteManager, SLOT(onStartFittingRequest())); connect(m_controlWidget, SIGNAL(stopFittingPushed()), m_fitSuiteManager, SLOT(onStopFittingRequest())); - connect(m_fitSuiteManager, SIGNAL(fittingStarted()), this, SLOT(onFittingStarted())); - connect(m_fitSuiteManager, SIGNAL(fittingFinished()), this, SLOT(onFittingFinished())); - - connect(m_fitSuiteManager, SIGNAL(fittingMessage(QString)), - this, SLOT(onFittingMessage(QString))); - connect(m_fitSuiteManager, SIGNAL(fittingError(QString)), this, SLOT(onFittingError(QString))); - - connect(m_fitSuiteManager->fitObserver().get(), SIGNAL(logInfoUpdate(QString)), - this, SLOT(onFittingLogUpdate(QString))); - } diff --git a/GUI/coregui/Views/FitWidgets/FitSuiteWidget.h b/GUI/coregui/Views/FitWidgets/FitSuiteWidget.h index ed9674476a1e7f6df7caa1393697c31d16d75376..5f70f32176c9c516b45eba822ecdad3107afde12 100644 --- a/GUI/coregui/Views/FitWidgets/FitSuiteWidget.h +++ b/GUI/coregui/Views/FitWidgets/FitSuiteWidget.h @@ -57,11 +57,7 @@ public: QSize minimumSizeHint() const; private slots: - void onFittingStarted(); - void onFittingFinished(); - void onFittingLogUpdate(const QString &text); void onFittingError(const QString &text); - void onFittingMessage(const QString &text); private: void connectSignals();