diff --git a/MantidPlot/src/ProjectRecoveryGUIs/ProjectRecoveryModel.cpp b/MantidPlot/src/ProjectRecoveryGUIs/ProjectRecoveryModel.cpp index a1bbf51850a501403d71b65321de79c5623247a0..5d247376b35190f9253d7f89117a78adf3e41d65 100644 --- a/MantidPlot/src/ProjectRecoveryGUIs/ProjectRecoveryModel.cpp +++ b/MantidPlot/src/ProjectRecoveryGUIs/ProjectRecoveryModel.cpp @@ -59,56 +59,16 @@ std::vector<std::string> ProjectRecoveryModel::getRow(int i) { return m_rows.at(i); } -void ProjectRecoveryModel::recoverLast() { - // Clear the ADS - Mantid::API::AnalysisDataService::Instance().clear(); - - // Recover using the last checkpoint - Poco::Path output(Mantid::Kernel::ConfigService::Instance().getAppDataDir()); - output.append("ordered_recovery.py"); - auto mostRecentCheckpoints = m_projRec->getRecoveryFolderCheckpointsPR( - m_projRec->getRecoveryFolderLoadPR()); - auto mostRecentCheckpoint = mostRecentCheckpoints.back(); - m_projRec->openInEditor(mostRecentCheckpoint, output); - - if (m_failedRun) { - createThreadAndManage(mostRecentCheckpoint); - auto checkpointToCheck = - mostRecentCheckpoint.directory(mostRecentCheckpoint.depth() - 1); - updateCheckpointTried( - checkpointToCheck.replace(checkpointToCheck.find("T"), 1, " ")); +std::vector<std::string> +ProjectRecoveryModel::getRow(std::string checkpointName) { + for (auto c : m_rows) { + if (c[0] == checkpointName) { + return c; + } } - - // Close View - m_presenter->closeView(); + return std::vector<std::string>({"", "", "0"}); } -void ProjectRecoveryModel::openLastInEditor() { - // Clear the ADS - Mantid::API::AnalysisDataService::Instance().clear(); - // Open the last made checkpoint in editor - auto beforeCheckpoints = m_projRec->getRecoveryFolderLoadPR(); - auto mostRecentCheckpoints = - m_projRec->getRecoveryFolderCheckpointsPR(beforeCheckpoints); - auto mostRecentCheckpoint = mostRecentCheckpoints.back(); - Poco::Path output(Mantid::Kernel::ConfigService::Instance().getAppDataDir()); - output.append("ordered_recovery.py"); - m_projRec->openInEditor(mostRecentCheckpoint, output); - // Restart project recovery as we stay synchronous - m_projRec->clearAllCheckpoints(beforeCheckpoints); - m_projRec->startProjectSaving(); - - if (m_failedRun) { - auto checkpointToRecover = - mostRecentCheckpoint.directory(mostRecentCheckpoint.depth() - 1); - checkpointToRecover.replace(checkpointToRecover.find("T"), 1, " "); - updateCheckpointTried(checkpointToRecover); - } - - m_failedRun = false; - // Close View - m_presenter->closeView(); -} void ProjectRecoveryModel::startMantidNormally() { m_projRec->clearAllUnusedCheckpoints(); m_projRec->startProjectSaving(); @@ -216,4 +176,10 @@ void ProjectRecoveryModel::createThreadAndManage(const Poco::Path &checkpoint) { // Set failed run member to the value from the thread m_failedRun = recoverThread->getFailedRun(); +} + +std::string ProjectRecoveryModel::decideLastCheckpoint() { + auto mostRecentCheckpoints = m_projRec->getRecoveryFolderCheckpointsPR( + m_projRec->getRecoveryFolderLoadPR()); + return mostRecentCheckpoints.back().toString(); } \ No newline at end of file diff --git a/MantidPlot/src/ProjectRecoveryGUIs/ProjectRecoveryModel.h b/MantidPlot/src/ProjectRecoveryGUIs/ProjectRecoveryModel.h index 4bc243a32662ee1940668e2286de34f2f00480cc..05e620c8b2de69d89049504ae13eaaf240ceb5e9 100644 --- a/MantidPlot/src/ProjectRecoveryGUIs/ProjectRecoveryModel.h +++ b/MantidPlot/src/ProjectRecoveryGUIs/ProjectRecoveryModel.h @@ -20,12 +20,12 @@ public: ProjectRecoveryModel(MantidQt::ProjectRecovery *projectRecovery, ProjectRecoveryPresenter *presenter); std::vector<std::string> getRow(int i); - void recoverLast(); - void openLastInEditor(); + std::vector<std::string> getRow(std::string checkpointName); void startMantidNormally(); void recoverSelectedCheckpoint(std::string &selected); void openSelectedInEditor(std::string &selected); bool getFailedRun() const; + std::string decideLastCheckpoint(); private: void fillRows(); diff --git a/MantidPlot/src/ProjectRecoveryGUIs/ProjectRecoveryPresenter.cpp b/MantidPlot/src/ProjectRecoveryGUIs/ProjectRecoveryPresenter.cpp index b1d562998c014e54a16e6d52fabec6f965b45f84..0c0e1935159c84bd4594ac25c1483bd516afbbed 100644 --- a/MantidPlot/src/ProjectRecoveryGUIs/ProjectRecoveryPresenter.cpp +++ b/MantidPlot/src/ProjectRecoveryGUIs/ProjectRecoveryPresenter.cpp @@ -11,6 +11,7 @@ #include "ProjectRecoveryView.h" #include "RecoveryFailureView.h" +#include <QDialog> #include <memory> ProjectRecoveryPresenter::ProjectRecoveryPresenter( @@ -75,24 +76,31 @@ QStringList ProjectRecoveryPresenter::getRow(int i) { return returnVal; } -void ProjectRecoveryPresenter::recoverLast() { m_model->recoverLast(); } +void ProjectRecoveryPresenter::recoverLast(boost::shared_ptr<QDialog> view) { + auto checkpointToRecover = m_model->decideLastCheckpoint(); + setUpProgressBar(checkpointToRecover, view); + m_model->recoverSelectedCheckpoint(checkpointToRecover); +} void ProjectRecoveryPresenter::openLastInEditor() { - m_model->openLastInEditor(); + auto checkpointToRecover = m_model->decideLastCheckpoint(); + m_model->openSelectedInEditor(checkpointToRecover); } void ProjectRecoveryPresenter::startMantidNormally() { m_model->startMantidNormally(); } -void ProjectRecoveryPresenter::recoverSelectedCheckpoint(QString &selected) { - std::string stdString = selected.toStdString(); - m_model->recoverSelectedCheckpoint(stdString); +void ProjectRecoveryPresenter::recoverSelectedCheckpoint( + QString &selected, boost::shared_ptr<QDialog> view) { + auto checkpointToRecover = selected.toStdString(); + setUpProgressBar(checkpointToRecover, view); + m_model->recoverSelectedCheckpoint(checkpointToRecover); } void ProjectRecoveryPresenter::openSelectedInEditor(QString &selected) { - std::string stdString = selected.toStdString(); - m_model->openSelectedInEditor(stdString); + auto checkpointToRecover = selected.toStdString(); + m_model->openSelectedInEditor(checkpointToRecover); } void ProjectRecoveryPresenter::closeView() { @@ -114,4 +122,17 @@ operator=(const ProjectRecoveryPresenter &obj) { m_mainWindow = obj.m_mainWindow; } return *this; +} + +void ProjectRecoveryPresenter::setUpProgressBar( + std::string checkpointToRecover, boost::shared_ptr<QDialog> view) { + auto row = m_model->getRow(checkpointToRecover); + auto firstView = boost::dynamic_pointer_cast<ProjectRecoveryView>(view); + auto secondView = boost::dynamic_pointer_cast<RecoveryFailureView>(view); + if (firstView) { + firstView->setProgressBarMaximum(std::stoi(row[2])); + } + if (secondView) { + secondView->setProgressBarMaximum(std::stoi(row[2])); + } } \ No newline at end of file diff --git a/MantidPlot/src/ProjectRecoveryGUIs/ProjectRecoveryPresenter.h b/MantidPlot/src/ProjectRecoveryGUIs/ProjectRecoveryPresenter.h index 79e5097c9a7895b9f1b26e03478165062f492bc2..39152fec74c441a7a08a6da2028cc2608611e649 100644 --- a/MantidPlot/src/ProjectRecoveryGUIs/ProjectRecoveryPresenter.h +++ b/MantidPlot/src/ProjectRecoveryGUIs/ProjectRecoveryPresenter.h @@ -8,7 +8,9 @@ #define PROJECTRECOVERYPRESENTER_H #include "ProjectRecoveryModel.h" +#include <QDialog> #include <QStringList> +#include <boost/shared_ptr.hpp> #include <memory> namespace MantidQt { @@ -27,15 +29,20 @@ public: bool startRecoveryView(); bool startRecoveryFailure(); QStringList getRow(int i); - void recoverLast(); + void recoverLast(boost::shared_ptr<QDialog> view); void openLastInEditor(); void startMantidNormally(); - void recoverSelectedCheckpoint(QString &selected); + void recoverSelectedCheckpoint(QString &selected, + boost::shared_ptr<QDialog> view); void openSelectedInEditor(QString &selected); void closeView(); ProjectRecoveryPresenter &operator=(const ProjectRecoveryPresenter &obj); private: + void setUpProgressBar(std::string checkpointToRecover, + boost::shared_ptr<QDialog> view); + friend class ProjectRecoveryView; + friend class RecoveryFailureView; ProjectRecoveryModel *m_model; ProjectRecoveryView *m_recView; RecoveryFailureView *m_failureView; diff --git a/MantidPlot/src/ProjectRecoveryGUIs/ProjectRecoveryView.cpp b/MantidPlot/src/ProjectRecoveryGUIs/ProjectRecoveryView.cpp index e9e140918263893e6527e44803735b32335a751e..b03b2a6cfadc10558e112905523ebec248f2aeec 100644 --- a/MantidPlot/src/ProjectRecoveryGUIs/ProjectRecoveryView.cpp +++ b/MantidPlot/src/ProjectRecoveryGUIs/ProjectRecoveryView.cpp @@ -6,16 +6,26 @@ // SPDX - License - Identifier: GPL - 3.0 + #include "ProjectRecoveryView.h" #include "MantidKernel/UsageService.h" +#include "ApplicationWindow.h" +#include "ScriptingWindow.h" +#include "ScriptFileInterpreter.h" +#include "Script.h" #include "ui_ProjectRecoveryWidget.h" +#include <boost/smart_ptr/make_shared.hpp> ProjectRecoveryView::ProjectRecoveryView(QWidget *parent, ProjectRecoveryPresenter *presenter) - : QDialog(parent), ui(new Ui::ProjectRecoveryWidget), - m_presenter(presenter) { - + : QDialog(parent), m_progressBarCounter(0) { + ui = new Ui::ProjectRecoveryWidget; + m_presenter = presenter; + connect(m_presenter->m_mainWindow->getScriptWindowHandle() + ->getCurrentScriptInterpreter()->getRunner().data(), + SIGNAL(currentLineChanged(int, bool)), this, + SLOT(updateProgressBar(int, bool))); ui->setupUi(this); ui->tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch); ui->tableWidget->verticalHeader()->setResizeMode(QHeaderView::Stretch); + ui->progressBar->setMinimum(0); // Set the table information addDataToTable(ui); Mantid::Kernel::UsageService::Instance().registerFeatureUsage( @@ -32,7 +42,7 @@ void ProjectRecoveryView::addDataToTable(Ui::ProjectRecoveryWidget *ui) { void ProjectRecoveryView::onClickLastCheckpoint() { // Recover last checkpoint - m_presenter->recoverLast(); + m_presenter->recoverLast(boost::make_shared<QDialog>(this)); Mantid::Kernel::UsageService::Instance().registerFeatureUsage( "Feature", "ProjectRecoveryWindow->RecoverLastCheckpoint", false); } @@ -52,8 +62,18 @@ void ProjectRecoveryView::onClickStartMantidNormally() { } void ProjectRecoveryView::reject() { - // Do nothing just absorb request + // Do the same as startMantidNormally m_presenter->startMantidNormally(); Mantid::Kernel::UsageService::Instance().registerFeatureUsage( "Feature", "ProjectRecoveryWindow->StartMantidNormally", false); +} + +void ProjectRecoveryView::updateProgressBar(int newValue, bool err) { + if (!err) { + ui->progressBar->setValue(newValue); + } +} + +void ProjectRecoveryView::setProgressBarMaximum(int newValue) { + ui->progressBar->setMaximum(newValue); } \ No newline at end of file diff --git a/MantidPlot/src/ProjectRecoveryGUIs/ProjectRecoveryView.h b/MantidPlot/src/ProjectRecoveryGUIs/ProjectRecoveryView.h index ddf9c287d67fad098f69d443bba984932e9cc7b7..778e684460ca9c497efcdefb3a8a83901ae9e1ba 100644 --- a/MantidPlot/src/ProjectRecoveryGUIs/ProjectRecoveryView.h +++ b/MantidPlot/src/ProjectRecoveryGUIs/ProjectRecoveryView.h @@ -23,6 +23,10 @@ public: ProjectRecoveryPresenter *presenter = nullptr); ~ProjectRecoveryView(); void reject() override; + void setProgressBarMaximum(int newValue); + +public slots: + void updateProgressBar(int newValue, bool err); private slots: void onClickLastCheckpoint(); @@ -31,6 +35,7 @@ private slots: private: void addDataToTable(Ui::ProjectRecoveryWidget *ui); + unsigned int m_progressBarCounter; Ui::ProjectRecoveryWidget *ui; ProjectRecoveryPresenter *m_presenter; }; diff --git a/MantidPlot/src/ProjectRecoveryGUIs/RecoveryFailureView.cpp b/MantidPlot/src/ProjectRecoveryGUIs/RecoveryFailureView.cpp index 48aaaa826f097a439e8cc40d56dfe8c4fe180abe..94734988f5d398aeab167fba8bc6658ba560f580 100644 --- a/MantidPlot/src/ProjectRecoveryGUIs/RecoveryFailureView.cpp +++ b/MantidPlot/src/ProjectRecoveryGUIs/RecoveryFailureView.cpp @@ -6,12 +6,14 @@ // SPDX - License - Identifier: GPL - 3.0 + #include "RecoveryFailureView.h" #include "ui_RecoveryFailure.h" - +#include "ApplicationWindow.h" #include "MantidKernel/UsageService.h" +#include <boost/smart_ptr/make_shared.hpp> RecoveryFailureView::RecoveryFailureView(QWidget *parent, ProjectRecoveryPresenter *presenter) - : QDialog(parent), ui(new Ui::RecoveryFailure), m_presenter(presenter) { + : QDialog(parent), ui(new Ui::RecoveryFailure), m_presenter(presenter), + m_progressBarCounter(0) { ui->setupUi(this); ui->tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch); ui->tableWidget->verticalHeader()->setResizeMode(QHeaderView::Stretch); @@ -48,7 +50,7 @@ void RecoveryFailureView::addDataToTable(Ui::RecoveryFailure *ui) { void RecoveryFailureView::onClickLastCheckpoint() { // Recover last checkpoint - m_presenter->recoverLast(); + m_presenter->recoverLast(boost::make_shared<QDialog>(this)); Mantid::Kernel::UsageService::Instance().registerFeatureUsage( "Feature", "ProjectRecoveryFailureWindow->RecoverLastCheckpoint", false); } @@ -61,7 +63,8 @@ void RecoveryFailureView::onClickSelectedCheckpoint() { if (text.toStdString() == "") { return; } - m_presenter->recoverSelectedCheckpoint(text); + m_presenter->recoverSelectedCheckpoint(text, + boost::make_shared<QDialog>(this)); } Mantid::Kernel::UsageService::Instance().registerFeatureUsage( "Feature", "ProjectRecoveryFailureWindow->RecoverSelectedCheckpoint", @@ -95,4 +98,12 @@ void RecoveryFailureView::reject() { m_presenter->startMantidNormally(); Mantid::Kernel::UsageService::Instance().registerFeatureUsage( "Feature", "ProjectRecoveryFailureWindow->StartMantidNormally", false); +} + +void RecoveryFailureView::updateProgressBar(int newValue) { + ui->progressBar->setValue(newValue); +} + +void RecoveryFailureView::setProgressBarMaximum(int newValue) { + ui->progressBar->setMaximum(newValue); } \ No newline at end of file diff --git a/MantidPlot/src/ProjectRecoveryGUIs/RecoveryFailureView.h b/MantidPlot/src/ProjectRecoveryGUIs/RecoveryFailureView.h index 9b8f3cc45dca58e678613d8671ae62cc532ac3bc..efe59f01d505ecff8a127b7100d304c1e86b37f3 100644 --- a/MantidPlot/src/ProjectRecoveryGUIs/RecoveryFailureView.h +++ b/MantidPlot/src/ProjectRecoveryGUIs/RecoveryFailureView.h @@ -23,6 +23,8 @@ public: ProjectRecoveryPresenter *presenter = nullptr); ~RecoveryFailureView(); void reject() override; + void updateProgressBar(int newValue); + void setProgressBarMaximum(int newValue); private slots: void onClickLastCheckpoint(); @@ -33,6 +35,7 @@ private slots: private: void addDataToTable(Ui::RecoveryFailure *ui); + unsigned int m_progressBarCounter; Ui::RecoveryFailure *ui; ProjectRecoveryPresenter *m_presenter; }; diff --git a/MantidPlot/src/ScriptFileInterpreter.h b/MantidPlot/src/ScriptFileInterpreter.h index 8a6a5b394f9285ab1c150c51b6a2d3351d39a6fb..03a5ad6a138b35d5724e1b84862e26311a7b670c 100644 --- a/MantidPlot/src/ScriptFileInterpreter.h +++ b/MantidPlot/src/ScriptFileInterpreter.h @@ -57,6 +57,8 @@ public: /// Is the script running virtual bool isExecuting() const; + QSharedPointer<Script> getRunner() { return m_runner; } + public slots: /// Save to the currently stored name virtual void saveToCurrentFile(); diff --git a/MantidPlot/src/ScriptingWindow.cpp b/MantidPlot/src/ScriptingWindow.cpp index 3c5b9c7d898686cb2b5efc547e94e6d4cf48b881..7cfd0e0d5b76f2174b0d57f49e9144030fa2583d 100644 --- a/MantidPlot/src/ScriptingWindow.cpp +++ b/MantidPlot/src/ScriptingWindow.cpp @@ -905,3 +905,7 @@ Script::ExecutionMode ScriptingWindow::getExecutionMode() const { else return Script::Serialised; } + +ScriptFileInterpreter *ScriptingWindow::getCurrentScriptInterpreter() { + return m_manager->m_current; +} \ No newline at end of file diff --git a/MantidPlot/src/ScriptingWindow.h b/MantidPlot/src/ScriptingWindow.h index 8c5b048ccbb640cf92b83011ed371a763e93ebd1..fd5cb2f9945577f8c9bded2950a1c24f5edd2c52 100644 --- a/MantidPlot/src/ScriptingWindow.h +++ b/MantidPlot/src/ScriptingWindow.h @@ -19,6 +19,7 @@ //---------------------------------------------------------- // Forward declarations //--------------------------------------------------------- +class ScriptFileInterpreter; class MultiTabScriptInterpreter; class ScriptingEnv; class QTextEdit; @@ -76,6 +77,8 @@ public: // We set a flag on failure to avoid problems with Async not returning success bool getSynchronousErrorFlag() { return m_failureFlag; } + ScriptFileInterpreter *getCurrentScriptInterpreter(); + signals: /// Show the scripting language dialog void chooseScriptingLanguage();