diff --git a/qt/scientific_interfaces/General/IReflSearcher.h b/qt/scientific_interfaces/General/IReflSearcher.h index 71c7f9aac77ebfe9ec56224c321a7624c4b72c72..27437062bd56a58bc2b3c70b0c6f6ec26ec64b9c 100644 --- a/qt/scientific_interfaces/General/IReflSearcher.h +++ b/qt/scientific_interfaces/General/IReflSearcher.h @@ -3,7 +3,7 @@ #include <string> -#include "MantidQtCustomInterfaces/IReflPresenter.h" +//#include "MantidQtCustomInterfaces/IReflPresenter.h" #include "MantidAPI/ITableWorkspace_fwd.h" namespace MantidQt { diff --git a/qt/scientific_interfaces/ISISReflectometry/IReflBatchPresenter.h b/qt/scientific_interfaces/ISISReflectometry/IReflBatchPresenter.h index 1bbe88bdcc16152e60b6fd23cc85f86025b77d40..32cbe77e86fb9a88a5e923eae54897cfdb11053e 100644 --- a/qt/scientific_interfaces/ISISReflectometry/IReflBatchPresenter.h +++ b/qt/scientific_interfaces/ISISReflectometry/IReflBatchPresenter.h @@ -76,6 +76,8 @@ public: /// Data processing check for a specific group virtual bool isProcessing(int group) const = 0; + virtual bool requestClose() const = 0; + virtual void settingsChanged(int group) = 0; }; } diff --git a/qt/scientific_interfaces/ISISReflectometry/IReflBatchView.h b/qt/scientific_interfaces/ISISReflectometry/IReflBatchView.h index 3981b850113c93436d771ea23cc99e9f943e73eb..af68a20ca04ac8b81149d278c4a3b9701361e74b 100644 --- a/qt/scientific_interfaces/ISISReflectometry/IReflBatchView.h +++ b/qt/scientific_interfaces/ISISReflectometry/IReflBatchView.h @@ -2,6 +2,10 @@ #define MANTID_ISISREFLECTOMETRY_IREFLBATCHVIEW_H #include <string> +#include "IReflRunsTabView.h" +#include "IReflSettingsTabView.h" +#include "IReflEventTabView.h" +#include "IReflSaveTabView.h" namespace MantidQt { namespace CustomInterfaces { @@ -36,6 +40,10 @@ Code Documentation is available at: <http://doxygen.mantidproject.org> */ class IReflBatchView { public: + virtual IReflRunsTabView* runs() const = 0; + virtual IReflEventTabView* eventHandling() const = 0; + virtual IReflSettingsTabView* settings() const = 0; + virtual IReflSaveTabView* save() const = 0; virtual ~IReflBatchView() = default; }; } diff --git a/qt/scientific_interfaces/ISISReflectometry/IReflEventTabPresenter.h b/qt/scientific_interfaces/ISISReflectometry/IReflEventTabPresenter.h index db1d61157a8796f33b810476f480c90cc0ef74a4..fac8801fa3081505be4d844374639eb8f348a28d 100644 --- a/qt/scientific_interfaces/ISISReflectometry/IReflEventTabPresenter.h +++ b/qt/scientific_interfaces/ISISReflectometry/IReflEventTabPresenter.h @@ -7,8 +7,6 @@ namespace MantidQt { namespace CustomInterfaces { -class IReflMainWindowPresenter; - /** @class IReflEventTabPresenter IReflEventTabPresenter is an interface which defines the functions that need @@ -37,7 +35,7 @@ Code Documentation is available at: <http://doxygen.mantidproject.org> */ class IReflEventTabPresenter { public: - virtual ~IReflEventTabPresenter(){}; + virtual ~IReflEventTabPresenter() = default; /// Time-slicing values virtual std::string getTimeSlicingValues(int group) const = 0; /// Time-slicing type diff --git a/qt/scientific_interfaces/ISISReflectometry/IReflEventTabView.h b/qt/scientific_interfaces/ISISReflectometry/IReflEventTabView.h new file mode 100644 index 0000000000000000000000000000000000000000..8fa82a3f4b14d2d3f59c08a9b6f0f0f57e094feb --- /dev/null +++ b/qt/scientific_interfaces/ISISReflectometry/IReflEventTabView.h @@ -0,0 +1,42 @@ +#ifndef MANTID_ISISREFLECTOMETRY_IREFLEVENTTABVIEW_H +#define MANTID_ISISREFLECTOMETRY_IREFLEVENTTABVIEW_H + +#include "DllConfig.h" + +namespace MantidQt { +namespace CustomInterfaces { + +/** @class IReflEventTabView + +IReflSettingsView is the base view class for the Reflectometry settings. It +contains no QT specific functionality as that should be handled by a subclass. + +Copyright © 2011-16 ISIS Rutherford Appleton Laboratory, NScD Oak Ridge +National Laboratory & European Spallation Source + +This file is part of Mantid. + +Mantid is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. + +Mantid is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. + +File change history is stored at: <https://github.com/mantidproject/mantid>. +Code Documentation is available at: <http://doxygen.mantidproject.org> +*/ + +class DLLExport IReflEventTabView { +public: + virtual ~IReflEventTabView() = default; +}; +} +} +#endif /* MANTID_ISISREFLECTOMETRY_IREFLSETTINGSVIEW_H */ diff --git a/qt/scientific_interfaces/ISISReflectometry/IReflMainWindowPresenter.h b/qt/scientific_interfaces/ISISReflectometry/IReflMainWindowPresenter.h index 685f0edf4eba08d4d36798b6fb9988b7e9906749..c168638811e96370436035159e765615064de3d4 100644 --- a/qt/scientific_interfaces/ISISReflectometry/IReflMainWindowPresenter.h +++ b/qt/scientific_interfaces/ISISReflectometry/IReflMainWindowPresenter.h @@ -3,7 +3,7 @@ #include "MantidQtWidgets/Common/DataProcessorUI/OptionsQMap.h" #include "MantidQtWidgets/Common/DataProcessorUI/TreeData.h" - +#include "IReflMainWindowView.h" #include <string> namespace MantidQt { @@ -36,17 +36,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. File change history is stored at: <https://github.com/mantidproject/mantid>. Code Documentation is available at: <http://doxygen.mantidproject.org> */ -class IReflMainWindowPresenter { +class IReflMainWindowPresenter : public ReflMainWindowSubscriber { public: - /// Destructor - virtual ~IReflMainWindowPresenter(){}; - - enum class Flag { HelpPressed }; - - virtual void notify(Flag flag) = 0; virtual std::string runPythonAlgorithm(const std::string &pythonCode) = 0; // virtual void setInstrumentName(const std::string &instName) const = 0; virtual bool isProcessing() const = 0; + virtual ~IReflMainWindowPresenter() = default; }; } } diff --git a/qt/scientific_interfaces/ISISReflectometry/IReflMainWindowView.h b/qt/scientific_interfaces/ISISReflectometry/IReflMainWindowView.h index 176a7d8d7055b5508b3f9b96cca3ae09c220f1d4..c2b83dbd9fd3591e4938a1734ed2d55262966c6b 100644 --- a/qt/scientific_interfaces/ISISReflectometry/IReflMainWindowView.h +++ b/qt/scientific_interfaces/ISISReflectometry/IReflMainWindowView.h @@ -2,6 +2,8 @@ #define MANTID_ISISREFLECTOMETRY_IREFLMAINWINDOWVIEW_H #include <string> +#include <vector> +#include "IReflBatchView.h" namespace MantidQt { namespace CustomInterfaces { @@ -34,8 +36,20 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. File change history is stored at: <https://github.com/mantidproject/mantid>. Code Documentation is available at: <http://doxygen.mantidproject.org> */ +class ReflMainWindowSubscriber { +public: + virtual void notifyHelpPressed() = 0; + virtual void notifyNewBatchRequested() = 0; + virtual void notifyCloseBatchRequested(int batchIndex) = 0; + virtual ~ReflMainWindowSubscriber() = default; +}; + class IReflMainWindowView { public: + virtual void subscribe(ReflMainWindowSubscriber *notifyee) = 0; + virtual IReflBatchView *newBatch() = 0; + virtual void removeBatch(int index) = 0; + virtual std::vector<IReflBatchView *> batches() const = 0; virtual std::string runPythonAlgorithm(const std::string &pythonCode) = 0; virtual ~IReflMainWindowView() = default; }; diff --git a/qt/scientific_interfaces/ISISReflectometry/IReflRunsTabView.h b/qt/scientific_interfaces/ISISReflectometry/IReflRunsTabView.h index e0acaeb903a98d1f7e8ce0f537b8f95a74b8a5bd..b97cab7f30a5b5648759401f0275fc4892e8d004 100644 --- a/qt/scientific_interfaces/ISISReflectometry/IReflRunsTabView.h +++ b/qt/scientific_interfaces/ISISReflectometry/IReflRunsTabView.h @@ -6,6 +6,7 @@ #include <boost/shared_ptr.hpp> #include "Views/IBatchView.h" #include "DllConfig.h" +#include "MantidQtWidgets/Common/ProgressableView.h" namespace MantidQt { @@ -51,7 +52,7 @@ File change history is stored at: <https://github.com/mantidproject/mantid>. Code Documentation is available at: <http://doxygen.mantidproject.org> */ -class MANTIDQT_ISISREFLECTOMETRY_DLL IReflRunsTabView { +class MANTIDQT_ISISREFLECTOMETRY_DLL IReflRunsTabView : public MantidQt::MantidWidgets::ProgressableView { public: virtual ~IReflRunsTabView() = default; diff --git a/qt/scientific_interfaces/ISISReflectometry/IReflSaveTabView.h b/qt/scientific_interfaces/ISISReflectometry/IReflSaveTabView.h index eddcce789c943c5e4ed8da25ec617ad66712a8ff..ae02ed1eb4c9e908cd7c0989db9dd8a36925d9a5 100644 --- a/qt/scientific_interfaces/ISISReflectometry/IReflSaveTabView.h +++ b/qt/scientific_interfaces/ISISReflectometry/IReflSaveTabView.h @@ -4,11 +4,11 @@ #include "DllConfig.h" #include <string> #include <vector> +#include "IReflSaveTabPresenter.h" namespace MantidQt { namespace CustomInterfaces { -class IReflSaveTabPresenter; /** @class IReflSaveTabView @@ -40,10 +40,7 @@ Code Documentation is available at: <http://doxygen.mantidproject.org> class MANTIDQT_ISISREFLECTOMETRY_DLL IReflSaveTabView { public: - /// Constructor - IReflSaveTabView(){}; - /// Destructor - virtual ~IReflSaveTabView(){}; + virtual ~IReflSaveTabView() = default; virtual void subscribe(IReflSaveTabPresenter *presenter) = 0; virtual std::string getSavePath() const = 0; diff --git a/qt/scientific_interfaces/ISISReflectometry/IReflSettingsTabView.h b/qt/scientific_interfaces/ISISReflectometry/IReflSettingsTabView.h new file mode 100644 index 0000000000000000000000000000000000000000..ba68ae0a985380f443b191b8e2ae9919532a88f3 --- /dev/null +++ b/qt/scientific_interfaces/ISISReflectometry/IReflSettingsTabView.h @@ -0,0 +1,44 @@ +#ifndef MANTID_ISISREFLECTOMETRY_IREFLSETTINGSTABVIEW_H +#define MANTID_ISISREFLECTOMETRY_IREFLSETTINGSTABVIEW_H + +#include "DllConfig.h" +#include "IReflSettingsTabPresenter.h" + +namespace MantidQt { +namespace CustomInterfaces { + +/** @class IReflEventTabView + +IReflSettingsView is the base view class for the Reflectometry settings. It +contains no QT specific functionality as that should be handled by a subclass. + +Copyright © 2011-16 ISIS Rutherford Appleton Laboratory, NScD Oak Ridge +National Laboratory & European Spallation Source + +This file is part of Mantid. + +Mantid is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. + +Mantid is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. + +File change history is stored at: <https://github.com/mantidproject/mantid>. +Code Documentation is available at: <http://doxygen.mantidproject.org> +*/ + +class MANTIDQT_ISISREFLECTOMETRY_DLL IReflSettingsTabView { +public: + virtual void subscribe(IReflSettingsTabPresenter* notifyee) = 0; + virtual ~IReflSettingsTabView() = default; +}; +} +} +#endif /* MANTID_ISISREFLECTOMETRY_IREFLSETTINGSVIEW_H */ diff --git a/qt/scientific_interfaces/ISISReflectometry/IndexOf.h b/qt/scientific_interfaces/ISISReflectometry/IndexOf.h index 1f7c35f5e5ffc7634cc96852363d4345460ce6e6..0ade32a499a985580d5d019bfbe6c196cc58cd4c 100644 --- a/qt/scientific_interfaces/ISISReflectometry/IndexOf.h +++ b/qt/scientific_interfaces/ISISReflectometry/IndexOf.h @@ -15,6 +15,7 @@ boost::optional<int> indexOf(Container const &container, Predicate pred) { else return boost::none; } + } } #endif // MANTID_ISISREFLECTOMETRY_INDEXOF_H diff --git a/qt/scientific_interfaces/ISISReflectometry/QtReflBatchView.cpp b/qt/scientific_interfaces/ISISReflectometry/QtReflBatchView.cpp index 9f293ed154d788ade42d223d7b2a1e116f9349e7..d47be50003f761caa5ddeb782d9d34935c26bda2 100644 --- a/qt/scientific_interfaces/ISISReflectometry/QtReflBatchView.cpp +++ b/qt/scientific_interfaces/ISISReflectometry/QtReflBatchView.cpp @@ -15,101 +15,55 @@ namespace MantidQt { namespace CustomInterfaces { -//---------------------------------------------------------------------------------------------- -/** Constructor -*/ QtReflBatchView::QtReflBatchView(QWidget *parent) : QWidget(parent) { initLayout(); } -/** -Initialise the Interface -*/ void QtReflBatchView::initLayout() { m_ui.setupUi(this); - // Create the tabs - auto runsPresenter = createRunsTab(); - auto eventPresenter = createEventTab(); - auto settingsPresenter = createSettingsTab(); - auto savePresenter = createSaveTab(); + m_runs = createRunsTab(); + m_ui.batchTabs->addTab(m_runs.get(), "Runs"); - // Create the presenter - m_presenter = Mantid::Kernel::make_unique<ReflBatchPresenter>( - this, std::move(runsPresenter), eventPresenter, settingsPresenter, - std::move(savePresenter)); -} + m_eventHandling = createEventTab(); + m_ui.batchTabs->addTab(m_eventHandling.get(), "Event Handling"); -int indexOfElseFirst(std::string const &instrument, - std::vector<std::string> const &instruments) { - auto it = std::find(instruments.cbegin(), instruments.cend(), instrument); - if (it != instruments.cend()) - return static_cast<int>(std::distance(instruments.cbegin(), it)); - else - return 0; -} + m_settings = createSettingsTab(); + m_ui.batchTabs->addTab(m_settings.get(), "Settings"); -int defaultInstrumentFromConfig(std::vector<std::string> const &instruments) { - return indexOfElseFirst( - Mantid::Kernel::ConfigService::Instance().getString("default.instrument"), - instruments); + m_save = createSaveTab(); + m_ui.batchTabs->addTab(m_settings.get(), "Save ASCII"); } -/** Creates the 'Runs' tab and returns a pointer to its presenter -* @return :: A pointer to the presenter managing the 'Runs' tab -*/ -std::unique_ptr<IReflRunsTabPresenter> QtReflBatchView::createRunsTab() { - auto instruments = std::vector<std::string>( - {{"INTER", "SURF", "CRISP", "POLREF", "OFFSPEC"}}); - auto defaultInstrumentIndex = defaultInstrumentFromConfig(instruments); +IReflRunsTabView *QtReflBatchView::runs() const { return m_runs.get(); } - auto *runsTab = new QtReflRunsTabView(this, BatchViewFactory(instruments)); - m_ui.batchTabs->addTab(runsTab, QString("Runs")); - connect(runsTab, SIGNAL(runAsPythonScript(const QString &, bool)), this, - SIGNAL(runAsPythonScript(const QString &, bool))); - - auto workspaceNamesFactory = WorkspaceNamesFactory(Slicing()); - auto runsTabPresenter = Mantid::Kernel::make_unique<ReflRunsTabPresenter>( - runsTab, runsTab, - BatchPresenterFactory(instruments, 0.01, workspaceNamesFactory), - workspaceNamesFactory, 0.01, instruments, defaultInstrumentIndex); - - return std::move(runsTabPresenter); +IReflEventTabView *QtReflBatchView::eventHandling() const { + return m_eventHandling.get(); } -/** Creates the 'Event Handling' tab and returns a pointer to its presenter -* @return :: A pointer to the presenter managing the 'Event Handling' tab -*/ -IReflEventTabPresenter *QtReflBatchView::createEventTab() { - - QtReflEventTabView *eventTab = new QtReflEventTabView(this); - m_ui.batchTabs->addTab(eventTab, QString("Event Handling")); - - return eventTab->getPresenter(); +IReflSettingsTabView *QtReflBatchView::settings() const { + return m_settings.get(); } -/** Creates the 'Settings' tab and returns a pointer to its presenter -* @return :: A pointer to the presenter managing the 'Settings' tab -*/ -IReflSettingsTabPresenter *QtReflBatchView::createSettingsTab() { - - QtReflSettingsTabView *settingsTab = new QtReflSettingsTabView(this); - m_ui.batchTabs->addTab(settingsTab, QString("Settings")); +IReflSaveTabView *QtReflBatchView::save() const { return m_save.get(); } - return settingsTab->getPresenter(); +std::unique_ptr<QtReflRunsTabView> QtReflBatchView::createRunsTab() { + auto instruments = std::vector<std::string>( + {{"INTER", "SURF", "CRISP", "POLREF", "OFFSPEC"}}); + return Mantid::Kernel::make_unique<QtReflRunsTabView>( + this, BatchViewFactory(instruments)); } -/** Creates the 'Save ASCII' tab and returns a pointer to its presenter -* @return :: A pointer to the presenter managing the 'Save ASCII' tab -*/ -std::unique_ptr<IReflSaveTabPresenter> QtReflBatchView::createSaveTab() { - auto saveTabView = Mantid::Kernel::make_unique<QtReflSaveTabView>(this); - m_ui.batchTabs->addTab(saveTabView.get(), QString("Save ASCII")); +std::unique_ptr<QtReflEventTabView> QtReflBatchView::createEventTab() { + return Mantid::Kernel::make_unique<QtReflEventTabView>(this); +} - auto saver = Mantid::Kernel::make_unique<ReflAsciiSaver>(); - return Mantid::Kernel::make_unique<ReflSaveTabPresenter>( - std::move(saver), std::move(saveTabView)); +std::unique_ptr<QtReflSettingsTabView> QtReflBatchView::createSettingsTab() { + return Mantid::Kernel::make_unique<QtReflSettingsTabView>(this); } +std::unique_ptr<QtReflSaveTabView> QtReflBatchView::createSaveTab() { + return Mantid::Kernel::make_unique<QtReflSaveTabView>(this); +} } } diff --git a/qt/scientific_interfaces/ISISReflectometry/QtReflBatchView.h b/qt/scientific_interfaces/ISISReflectometry/QtReflBatchView.h index a4549e30d9b0664fa571bf7791362f67ad0c51e0..7ed9951b1315ef41836644bf06bebee0ca794f41 100644 --- a/qt/scientific_interfaces/ISISReflectometry/QtReflBatchView.h +++ b/qt/scientific_interfaces/ISISReflectometry/QtReflBatchView.h @@ -5,17 +5,16 @@ #include "IReflBatchPresenter.h" #include "ui_ReflBatchWidget.h" #include <memory> +#include "QtReflSaveTabView.h" +#include "QtReflEventTabView.h" +#include "QtReflSettingsTabView.h" +#include "QtReflRunsTabView.h" #include <QCloseEvent> namespace MantidQt { namespace CustomInterfaces { -class IReflEventTabPresenter; -class IReflRunsTabPresenter; -class IReflSettingsTabPresenter; -class IReflSaveTabPresenter; - /** Copyright © 2016 ISIS Rutherford Appleton Laboratory, NScD Oak Ridge National Laboratory & European Spallation Source @@ -41,29 +40,27 @@ Code Documentation is available at: <http://doxygen.mantidproject.org> class QtReflBatchView : public QWidget, public IReflBatchView { Q_OBJECT public: - /// Constructor explicit QtReflBatchView(QWidget *parent = nullptr); + void subscribe(IReflBatchPresenter *notifyee); + + IReflRunsTabView *runs() const override; + IReflEventTabView *eventHandling() const override; + IReflSettingsTabView *settings() const override; + IReflSaveTabView *save() const override; -// QtReflRunsTabView& runsTab() const; -// QtReflEventTabView& eventTab() const; -// QtReflSaveTabView& saveTab() const; -// QtReflSettingsTabView& settingsTab() const; private: - /// Initializes the interface void initLayout(); - /// Creates the 'Runs' tab - std::unique_ptr<IReflRunsTabPresenter> createRunsTab(); - /// Creates the 'Event Handling' tab - IReflEventTabPresenter *createEventTab(); - /// Creates the 'Settings' tab - IReflSettingsTabPresenter *createSettingsTab(); - /// Creates the 'Save ASCII' tab - std::unique_ptr<IReflSaveTabPresenter> createSaveTab(); + std::unique_ptr<QtReflRunsTabView> createRunsTab(); + std::unique_ptr<QtReflEventTabView> createEventTab(); + std::unique_ptr<QtReflSettingsTabView> createSettingsTab(); + std::unique_ptr<QtReflSaveTabView> createSaveTab(); - /// Interface definition with widgets for the main interface window Ui::ReflBatchWidget m_ui; - /// The presenter handling this view - std::unique_ptr<IReflBatchPresenter> m_presenter; + IReflBatchPresenter *m_notifyee; + std::unique_ptr<QtReflRunsTabView> m_runs; + std::unique_ptr<QtReflEventTabView> m_eventHandling; + std::unique_ptr<QtReflSettingsTabView> m_settings; + std::unique_ptr<QtReflSaveTabView> m_save; }; } } diff --git a/qt/scientific_interfaces/ISISReflectometry/QtReflEventTabView.cpp b/qt/scientific_interfaces/ISISReflectometry/QtReflEventTabView.cpp index 03419711922604964c882101ddbcc79a08b2299c..307f7dfcd1563c05b4f6a143e4a0454cbd28d6db 100644 --- a/qt/scientific_interfaces/ISISReflectometry/QtReflEventTabView.cpp +++ b/qt/scientific_interfaces/ISISReflectometry/QtReflEventTabView.cpp @@ -10,15 +10,13 @@ namespace CustomInterfaces { * @param parent :: [input] The parent of this widget */ QtReflEventTabView::QtReflEventTabView(QWidget *parent) { - UNUSED_ARG(parent); initLayout(); } -//---------------------------------------------------------------------------------------------- -/** Destructor -*/ -QtReflEventTabView::~QtReflEventTabView() {} +void QtReflEventTabView::subscribe(IReflEventTabPresenter* notifyee) { + m_notifyee = notifyee; +} /** Initialise the interface @@ -35,16 +33,6 @@ void QtReflEventTabView::initLayout() { std::vector<IReflEventPresenter *> presenters; presenters.push_back(event_1->getPresenter()); presenters.push_back(event_2->getPresenter()); - - m_presenter.reset(new ReflEventTabPresenter(presenters)); -} - -/** Returns the presenter managing this view -* @return :: A pointer to the presenter -*/ -IReflEventTabPresenter *QtReflEventTabView::getPresenter() const { - - return m_presenter.get(); } } // namespace CustomInterfaces diff --git a/qt/scientific_interfaces/ISISReflectometry/QtReflEventTabView.h b/qt/scientific_interfaces/ISISReflectometry/QtReflEventTabView.h index 6a9be8251e0a569baddccc53477d7160cb2346b6..8292aa2efe751b9f954dd4a4caaedf22d2267b7d 100644 --- a/qt/scientific_interfaces/ISISReflectometry/QtReflEventTabView.h +++ b/qt/scientific_interfaces/ISISReflectometry/QtReflEventTabView.h @@ -3,14 +3,13 @@ #include "DllConfig.h" #include "ui_ReflEventTabWidget.h" +#include "IReflEventTabView.h" +#include "IReflEventTabPresenter.h" #include <memory> namespace MantidQt { namespace CustomInterfaces { -// Forward decs -class IReflEventTabPresenter; - /** QtReflEventTabView : Provides an interface for the "Event" tab in the Reflectometry interface. @@ -35,24 +34,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. File change history is stored at: <https://github.com/mantidproject/mantid> Code Documentation is available at: <http://doxygen.mantidproject.org> */ -class MANTIDQT_ISISREFLECTOMETRY_DLL QtReflEventTabView : public QWidget { +class MANTIDQT_ISISREFLECTOMETRY_DLL QtReflEventTabView : public QWidget, public IReflEventTabView { Q_OBJECT public: - /// Constructor QtReflEventTabView(QWidget *parent = nullptr); - /// Destructor - ~QtReflEventTabView() override; - /// Returns the presenter managing this view - IReflEventTabPresenter *getPresenter() const; + void subscribe(IReflEventTabPresenter* notifyee); private: - /// Initialise the interface void initLayout(); - - /// The widget Ui::ReflEventTabWidget m_ui; - /// The presenter - std::unique_ptr<IReflEventTabPresenter> m_presenter; + IReflEventTabPresenter* m_notifyee; }; } // namespace Mantid diff --git a/qt/scientific_interfaces/ISISReflectometry/QtReflMainWindowView.cpp b/qt/scientific_interfaces/ISISReflectometry/QtReflMainWindowView.cpp index 89c8945d26436c79bf88ceeafca1490720ba592c..4cc721461a3c93128870670e6c997773eb2fde0b 100644 --- a/qt/scientific_interfaces/ISISReflectometry/QtReflMainWindowView.cpp +++ b/qt/scientific_interfaces/ISISReflectometry/QtReflMainWindowView.cpp @@ -1,16 +1,10 @@ #include "QtReflMainWindowView.h" -#include "QtReflEventTabView.h" -#include "QtReflRunsTabView.h" -#include "QtReflSaveTabView.h" -#include "QtReflSettingsTabView.h" -#include "ReflSaveTabPresenter.h" -#include "ReflMainWindowPresenter.h" -#include "ReflAsciiSaver.h" #include "MantidKernel/make_unique.h" -#include "Presenters/BatchPresenter.h" -#include "ReflRunsTabPresenter.h" +#include "QtReflBatchView.h" +#include "Reduction/Slicing.h" #include <QMessageBox> +#include <QToolButton> namespace MantidQt { namespace CustomInterfaces { @@ -20,21 +14,73 @@ DECLARE_SUBWINDOW(QtReflMainWindowView) QtReflMainWindowView::QtReflMainWindowView(QWidget *parent) : UserSubWindow(parent) {} +IReflBatchView *QtReflMainWindowView::newBatch() { + auto index = m_ui.mainTabs->count(); + auto *newTab = new QtReflBatchView(this); + m_ui.mainTabs->addTab(newTab, QString("Batch ") + QString::number(index)); + m_batchViews.emplace_back(newTab); + return newTab; +} + +void QtReflMainWindowView::removeBatch(int batchIndex) { + m_batchViews.erase(m_batchViews.begin() + batchIndex); + m_ui.mainTabs->removeTab(batchIndex); +} + +std::vector<IReflBatchView *> QtReflMainWindowView::batches() const { + return m_batchViews; +} + /** Initialise the Interface */ void QtReflMainWindowView::initLayout() { m_ui.setupUi(this); connect(m_ui.helpButton, SIGNAL(clicked()), this, SLOT(helpPressed())); + connect(m_ui.mainTabs, SIGNAL(tabCloseRequested(int)), this, + SLOT(onTabCloseRequested(int))); + + auto instruments = std::vector<std::string>( + {{"INTER", "SURF", "CRISP", "POLREF", "OFFSPEC"}}); + + auto defaultSlicing = Slicing(); + auto thetaTolerance = 0.01; + auto makeWorkspaceNames = WorkspaceNamesFactory(defaultSlicing); + auto makeBatchPresenter = + BatchPresenterFactory(instruments, thetaTolerance, makeWorkspaceNames); + auto defaultInstrumentIndex = 0; // TODO: Look this up properly; + auto searcher = boost::shared_ptr<IReflSearcher>(); + + auto makeRunsPresenter = RunsPresenterFactory( + std::move(makeBatchPresenter), std::move(makeWorkspaceNames), + thetaTolerance, instruments, defaultInstrumentIndex, searcher); + + auto makeEventPresenter = EventPresenterFactory(); + auto makeSettingsPresenter = SettingsPresenterFactory(); + auto makeSaveSettingsPresenter = SavePresenterFactory(); + + auto makeReflBatchPresenter = ReflBatchPresenterFactory( + std::move(makeRunsPresenter), std::move(makeEventPresenter), + std::move(makeSettingsPresenter), std::move(makeSaveSettingsPresenter)); // Create the presenter - m_presenter = Mantid::Kernel::make_unique<ReflMainWindowPresenter>(this); + m_presenter = + ReflMainWindowPresenter(this, std::move(makeReflBatchPresenter)); + + m_presenter.get().notifyNewBatchRequested(); + m_presenter.get().notifyNewBatchRequested(); } -void QtReflMainWindowView::helpPressed() { - m_presenter->notify(IReflMainWindowPresenter::Flag::HelpPressed); +void QtReflMainWindowView::onTabCloseRequested(int tabIndex) { + m_ui.mainTabs->removeTab(tabIndex); } +void QtReflMainWindowView::subscribe(ReflMainWindowSubscriber *notifyee) { + m_notifyee = notifyee; +} + +void QtReflMainWindowView::helpPressed() { m_notifyee->notifyHelpPressed(); } + /** Runs python code * @param pythonCode : [input] The code to run @@ -53,7 +99,7 @@ Handles attempt to close main window */ void QtReflMainWindowView::closeEvent(QCloseEvent *event) { // Close only if reduction has been paused - if (!m_presenter->isProcessing()) { + if (!m_presenter.get().isProcessing()) { event->accept(); } else { event->ignore(); diff --git a/qt/scientific_interfaces/ISISReflectometry/QtReflMainWindowView.h b/qt/scientific_interfaces/ISISReflectometry/QtReflMainWindowView.h index eff6f17b08fb787909a9e7a5060aa174036817b6..9e7a9045628fb50a4767755013b1d4fd25ab2317 100644 --- a/qt/scientific_interfaces/ISISReflectometry/QtReflMainWindowView.h +++ b/qt/scientific_interfaces/ISISReflectometry/QtReflMainWindowView.h @@ -4,18 +4,14 @@ #include "MantidQtWidgets/Common/UserSubWindow.h" #include "IReflMainWindowView.h" #include "ui_ReflMainWindowWidget.h" +#include "IReflMainWindowPresenter.h" +#include "ReflMainWindowPresenter.h" #include <QCloseEvent> namespace MantidQt { namespace CustomInterfaces { -class IReflEventTabPresenter; -class IReflMainWindowPresenter; -class IReflRunsTabPresenter; -class IReflSettingsTabPresenter; -class IReflSaveTabPresenter; - /** @class ReflMainWindowView ReflMainWindowView is the concrete main window view implementing the @@ -46,19 +42,23 @@ class QtReflMainWindowView : public MantidQt::API::UserSubWindow, public IReflMainWindowView { Q_OBJECT public: - /// Constructor explicit QtReflMainWindowView(QWidget *parent = nullptr); - /// Name of the interface + void subscribe(ReflMainWindowSubscriber* notifyee) override; + static std::string name() { return "ISIS Reflectometry"; } - /// This interface's categories. static QString categoryInfo() { return "Reflectometry"; } - /// Run a python algorithm std::string runPythonAlgorithm(const std::string &pythonCode) override; - /// Close window handler + + virtual std::vector<IReflBatchView*> batches() const override; + void closeEvent(QCloseEvent *event) override; + IReflBatchView* newBatch() override; + void removeBatch(int batchIndex) override; + public slots: void helpPressed(); + void onTabCloseRequested(int tabIndex); private: /// Initializes the interface @@ -66,7 +66,9 @@ private: /// Interface definition with widgets for the main interface window Ui::ReflMainWindowWidget m_ui; /// The presenter handling this view - std::unique_ptr<IReflMainWindowPresenter> m_presenter; + ReflMainWindowSubscriber* m_notifyee; + boost::optional<ReflMainWindowPresenter> m_presenter; + std::vector<IReflBatchView*> m_batchViews; }; } } diff --git a/qt/scientific_interfaces/ISISReflectometry/QtReflRunsTabView.h b/qt/scientific_interfaces/ISISReflectometry/QtReflRunsTabView.h index 5d7168213e4c1953a629389322841d368cc29bc6..788300fd81bb4a847093e31276af5dc11541020d 100644 --- a/qt/scientific_interfaces/ISISReflectometry/QtReflRunsTabView.h +++ b/qt/scientific_interfaces/ISISReflectometry/QtReflRunsTabView.h @@ -5,7 +5,6 @@ #include "MantidQtWidgets/Common/MantidWidget.h" #include "DllConfig.h" #include "IReflRunsTabView.h" -#include "MantidQtWidgets/Common/ProgressableView.h" #include "MantidQtWidgets/Common/DataProcessorUI/QtCommandAdapter.h" #include "Presenters/BatchPresenter.h" #include "Views/BatchView.h" @@ -62,8 +61,7 @@ Code Documentation is available at: <http://doxygen.mantidproject.org> */ class MANTIDQT_ISISREFLECTOMETRY_DLL QtReflRunsTabView : public MantidQt::API::MantidWidget, - public IReflRunsTabView, - public MantidQt::MantidWidgets::ProgressableView { + public IReflRunsTabView { Q_OBJECT public: QtReflRunsTabView(QWidget *parent, BatchViewFactory makeView); diff --git a/qt/scientific_interfaces/ISISReflectometry/QtReflSettingsTabView.cpp b/qt/scientific_interfaces/ISISReflectometry/QtReflSettingsTabView.cpp index 7c2557638106c8655b9a8b917624b0c3b353c961..51ab8516acb5f8d2cb745d9f6c5b120d683fc494 100644 --- a/qt/scientific_interfaces/ISISReflectometry/QtReflSettingsTabView.cpp +++ b/qt/scientific_interfaces/ISISReflectometry/QtReflSettingsTabView.cpp @@ -5,7 +5,6 @@ namespace MantidQt { namespace CustomInterfaces { -//---------------------------------------------------------------------------------------------- /** Constructor * @param parent :: [input] The parent of this widget */ @@ -15,10 +14,9 @@ QtReflSettingsTabView::QtReflSettingsTabView(QWidget *parent) { initLayout(); } -//---------------------------------------------------------------------------------------------- -/** Destructor -*/ -QtReflSettingsTabView::~QtReflSettingsTabView() {} +void QtReflSettingsTabView::subscribe(IReflSettingsTabPresenter* notifyee) { + m_notifyee = notifyee; +} /** Initialise the interface @@ -31,20 +29,6 @@ void QtReflSettingsTabView::initLayout() { QtReflSettingsView *settings_2 = new QtReflSettingsView(1, this); m_ui.toolbox->addItem(settings_2, "Group 2"); - - std::vector<IReflSettingsPresenter *> presenters; - presenters.push_back(settings_1->getPresenter()); - presenters.push_back(settings_2->getPresenter()); - - m_presenter.reset(new ReflSettingsTabPresenter(presenters)); -} - -/** Returns the presenter managing this view -* @return :: A pointer to the presenter -*/ -IReflSettingsTabPresenter *QtReflSettingsTabView::getPresenter() const { - - return m_presenter.get(); } } // namespace CustomInterfaces diff --git a/qt/scientific_interfaces/ISISReflectometry/QtReflSettingsTabView.h b/qt/scientific_interfaces/ISISReflectometry/QtReflSettingsTabView.h index f640a25698adafd3c914642d31fa48129c15be1e..8cdfe6b2a77afaed097450987b0288b8f1cf9950 100644 --- a/qt/scientific_interfaces/ISISReflectometry/QtReflSettingsTabView.h +++ b/qt/scientific_interfaces/ISISReflectometry/QtReflSettingsTabView.h @@ -3,13 +3,13 @@ #include "DllConfig.h" #include "ui_ReflSettingsTabWidget.h" +#include "IReflSettingsTabView.h" +#include "IReflSettingsTabPresenter.h" #include <memory> namespace MantidQt { namespace CustomInterfaces { -// Forward decs -class IReflSettingsTabPresenter; /** QtReflSettingsTabView : Provides an interface for the "Settings" tab in the ISIS Reflectometry interface. @@ -35,24 +35,17 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. File change history is stored at: <https://github.com/mantidproject/mantid> Code Documentation is available at: <http://doxygen.mantidproject.org> */ -class MANTIDQT_ISISREFLECTOMETRY_DLL QtReflSettingsTabView : public QWidget { +class MANTIDQT_ISISREFLECTOMETRY_DLL QtReflSettingsTabView : public QWidget, public IReflSettingsTabView { Q_OBJECT public: - /// Constructor QtReflSettingsTabView(QWidget *parent = nullptr); - /// Destructor - ~QtReflSettingsTabView() override; - /// Returns the presenter managing this view - IReflSettingsTabPresenter *getPresenter() const; - private: /// Initialise the interface void initLayout(); + void subscribe(IReflSettingsTabPresenter* notifyee) override; - /// The widget Ui::ReflSettingsTabWidget m_ui; - /// The presenter - std::unique_ptr<IReflSettingsTabPresenter> m_presenter; + IReflSettingsTabPresenter* m_notifyee; }; } // namespace Mantid diff --git a/qt/scientific_interfaces/ISISReflectometry/Reduction/WorkspaceNamesFactory.h b/qt/scientific_interfaces/ISISReflectometry/Reduction/WorkspaceNamesFactory.h index 5858999b5b822dceb7a4d4d9a3ce8d25c8140070..b3918e4995b320972800066b6d72bf78d6b9de3e 100644 --- a/qt/scientific_interfaces/ISISReflectometry/Reduction/WorkspaceNamesFactory.h +++ b/qt/scientific_interfaces/ISISReflectometry/Reduction/WorkspaceNamesFactory.h @@ -43,7 +43,7 @@ public: class MANTIDQT_ISISREFLECTOMETRY_DLL WorkspaceNamesFactory { public: - WorkspaceNamesFactory(Slicing const &slicing) : m_slicing(slicing) {} + WorkspaceNamesFactory(Slicing slicing) : m_slicing(slicing) {} template <typename WorkspaceNames> WorkspaceNames @@ -61,7 +61,7 @@ public: } private: - Slicing const &m_slicing; + Slicing m_slicing; }; } } diff --git a/qt/scientific_interfaces/ISISReflectometry/ReflBatchPresenter.cpp b/qt/scientific_interfaces/ISISReflectometry/ReflBatchPresenter.cpp index 550eac8f57e5863aff13ef566dd7f08582fa2481..f59b71b7bec655b977c9eee3fb3012c3c61af853 100644 --- a/qt/scientific_interfaces/ISISReflectometry/ReflBatchPresenter.cpp +++ b/qt/scientific_interfaces/ISISReflectometry/ReflBatchPresenter.cpp @@ -20,13 +20,13 @@ namespace CustomInterfaces { * @param savePresenter :: [input] A pointer to the 'Save ASCII' tab presenter */ ReflBatchPresenter::ReflBatchPresenter( - IReflBatchView *view, - std::unique_ptr<IReflRunsTabPresenter> runsPresenter, - IReflEventTabPresenter *eventPresenter, - IReflSettingsTabPresenter *settingsPresenter, + IReflBatchView *view, std::unique_ptr<IReflRunsTabPresenter> runsPresenter, + std::unique_ptr<IReflEventTabPresenter> eventPresenter, + std::unique_ptr<IReflSettingsTabPresenter> settingsPresenter, std::unique_ptr<IReflSaveTabPresenter> savePresenter) : m_view(view), m_runsPresenter(std::move(runsPresenter)), - m_eventPresenter(eventPresenter), m_settingsPresenter(settingsPresenter), + m_eventPresenter(std::move(eventPresenter)), + m_settingsPresenter(std::move(settingsPresenter)), m_savePresenter(std::move(savePresenter)) { // Tell the tab presenters that this is going to be the main presenter @@ -39,9 +39,7 @@ ReflBatchPresenter::ReflBatchPresenter( m_runsPresenter->notify(IReflRunsTabPresenter::InstrumentChangedFlag); } -/** Destructor -*/ -ReflBatchPresenter::~ReflBatchPresenter() {} +bool ReflBatchPresenter::requestClose() const { return true; } void ReflBatchPresenter::completedGroupReductionSuccessfully( GroupData const &group, std::string const &workspaceName) { @@ -76,9 +74,6 @@ void ReflBatchPresenter::settingsChanged(int group) { * @return :: Global options for 'CreateTransmissionWorkspaceAuto' */ OptionsQMap ReflBatchPresenter::getTransmissionOptions(int group) const { - - checkSettingsPtrValid(m_settingsPresenter); - return m_settingsPresenter->getTransmissionOptions(group); } @@ -89,10 +84,6 @@ OptionsQMap ReflBatchPresenter::getTransmissionOptions(int group) const { * @return :: Global processing options */ OptionsQMap ReflBatchPresenter::getReductionOptions(int group) const { - - checkSettingsPtrValid(m_settingsPresenter); - - // Request global processing options to 'Settings' presenter return m_settingsPresenter->getReductionOptions(group); } @@ -103,10 +94,6 @@ OptionsQMap ReflBatchPresenter::getReductionOptions(int group) const { * @return :: Global post-processing options */ std::string ReflBatchPresenter::getStitchOptions(int group) const { - - checkSettingsPtrValid(m_settingsPresenter); - - // Request global post-processing options to 'Settings' presenter return m_settingsPresenter->getStitchOptions(group); } @@ -117,9 +104,6 @@ std::string ReflBatchPresenter::getStitchOptions(int group) const { * @return :: Time-slicing values */ std::string ReflBatchPresenter::getTimeSlicingValues(int group) const { - - checkEventPtrValid(m_eventPresenter); - // Request global time-slicing values to 'Event Handling' presenter return m_eventPresenter->getTimeSlicingValues(group); } @@ -131,9 +115,6 @@ std::string ReflBatchPresenter::getTimeSlicingValues(int group) const { * @return :: Time-slicing type */ std::string ReflBatchPresenter::getTimeSlicingType(int group) const { - - checkEventPtrValid(m_eventPresenter); - // Request time-slicing type to 'Event Handling' presenter return m_eventPresenter->getTimeSlicingType(group); } @@ -146,12 +127,8 @@ std::string ReflBatchPresenter::getTimeSlicingType(int group) const { * @param angle :: the run angle to look up transmission runs for * @return :: Values passed for 'Transmission run(s)' */ -OptionsQMap -ReflBatchPresenter::getOptionsForAngle(int group, - const double angle) const { - - checkSettingsPtrValid(m_settingsPresenter); - +OptionsQMap ReflBatchPresenter::getOptionsForAngle(int group, + const double angle) const { return m_settingsPresenter->getOptionsForAngle(group, angle); } @@ -159,7 +136,6 @@ ReflBatchPresenter::getOptionsForAngle(int group, * @return :: true if there are per-angle transmission runs * */ bool ReflBatchPresenter::hasPerAngleOptions(int group) const { - checkSettingsPtrValid(m_settingsPresenter); return m_settingsPresenter->hasPerAngleOptions(group); } @@ -167,9 +143,7 @@ bool ReflBatchPresenter::hasPerAngleOptions(int group) const { Tells the setting tab presenter what to set its current instrument name to * @param instName : The name of the instrument to be set */ -void ReflBatchPresenter::setInstrumentName( - const std::string &instName) const { - +void ReflBatchPresenter::setInstrumentName(const std::string &instName) const { m_settingsPresenter->setInstrumentName(instName); } @@ -189,23 +163,5 @@ for a specific group bool ReflBatchPresenter::isProcessing(int group) const { return m_runsPresenter->isProcessing(group); } - -/** Checks for Settings Tab null pointer -* @param pointer :: The pointer -*/ -void ReflBatchPresenter::checkSettingsPtrValid( - IReflSettingsTabPresenter *pointer) const { - if (pointer == nullptr) - throw std::invalid_argument("Could not read settings"); -} - -/** Checks for Event Handling Tab null pointer -* @param pointer :: The pointer -*/ -void ReflBatchPresenter::checkEventPtrValid( - IReflEventTabPresenter *pointer) const { - if (pointer == nullptr) - throw std::invalid_argument("Could not read event handling"); -} } } diff --git a/qt/scientific_interfaces/ISISReflectometry/ReflBatchPresenter.h b/qt/scientific_interfaces/ISISReflectometry/ReflBatchPresenter.h index af87274ff8e7ace95041ce96f9eb45c5baf9ae05..ce130033872a23a84fb2d172d955939f24785082 100644 --- a/qt/scientific_interfaces/ISISReflectometry/ReflBatchPresenter.h +++ b/qt/scientific_interfaces/ISISReflectometry/ReflBatchPresenter.h @@ -46,11 +46,9 @@ public: /// Constructor ReflBatchPresenter(IReflBatchView *view, std::unique_ptr<IReflRunsTabPresenter> runsPresenter, - IReflEventTabPresenter *eventPresenter, - IReflSettingsTabPresenter *settingsPresenter, + std::unique_ptr<IReflEventTabPresenter> eventPresenter, + std::unique_ptr<IReflSettingsTabPresenter> settingsPresenter, std::unique_ptr<IReflSaveTabPresenter> savePresenter); - /// Destructor - ~ReflBatchPresenter() override; /// Returns values passed for 'Transmission run(s)' MantidWidgets::DataProcessor::OptionsQMap @@ -79,6 +77,7 @@ public: void settingsChanged(int group) override; void notifyReductionPaused(int group) override; void notifyReductionResumed(int group) override; + bool requestClose() const override; void completedGroupReductionSuccessfully( MantidWidgets::DataProcessor::GroupData const &group, @@ -88,10 +87,6 @@ public: std::string const &workspaceName) override; private: - /// Check for Settings Tab null pointer - void checkSettingsPtrValid(IReflSettingsTabPresenter *pointer) const; - /// Check for Event Handling Tab null pointer - void checkEventPtrValid(IReflEventTabPresenter *pointer) const; /// Pauses reduction in the Runs Tab void pauseReduction() const; /// Resumes reduction in the Runs Tab @@ -101,9 +96,9 @@ private: /// The presenter of tab 'Runs' std::unique_ptr<IReflRunsTabPresenter> m_runsPresenter; /// The presenter of tab 'Event Handling' - IReflEventTabPresenter *m_eventPresenter; + std::unique_ptr<IReflEventTabPresenter> m_eventPresenter; /// The presenter of tab 'Settings' - IReflSettingsTabPresenter *m_settingsPresenter; + std::unique_ptr<IReflSettingsTabPresenter> m_settingsPresenter; /// The presenter of tab 'Save ASCII' std::unique_ptr<IReflSaveTabPresenter> m_savePresenter; }; diff --git a/qt/scientific_interfaces/ISISReflectometry/ReflBatchPresenterFactory.h b/qt/scientific_interfaces/ISISReflectometry/ReflBatchPresenterFactory.h new file mode 100644 index 0000000000000000000000000000000000000000..ef47c3f437f35fa386ec3cfbf9bb516564921bb5 --- /dev/null +++ b/qt/scientific_interfaces/ISISReflectometry/ReflBatchPresenterFactory.h @@ -0,0 +1,45 @@ +#ifndef MANTID_ISISREFLECTOMETRY_REFLBATCHPRESENTERFACTORY_H +#define MANTID_ISISREFLECTOMETRY_REFLBATCHPRESENTERFACTORY_H +#include "DllConfig.h" +#include "IReflBatchView.h" +#include "IReflBatchPresenter.h" +#include "ReflRunsPresenterFactory.h" +#include "ReflSavePresenterFactory.h" +#include "ReflSettingsPresenterFactory.h" +#include "ReflEventPresenterFactory.h" +#include "ReflBatchPresenter.h" +#include <memory> + +namespace MantidQt { +namespace CustomInterfaces { +class ReflBatchPresenterFactory { +public: + ReflBatchPresenterFactory( + RunsPresenterFactory runsPresenterFactory, + EventPresenterFactory eventPresenterFactory, + SettingsPresenterFactory settingsPresenterFactory, + SavePresenterFactory savePresenterFactory) + : m_runsPresenterFactory(std::move(runsPresenterFactory)), + m_eventPresenterFactory(std::move(eventPresenterFactory)), + m_settingsPresenterFactory(std::move(settingsPresenterFactory)), + m_savePresenterFactory(std::move(savePresenterFactory)) {} + + std::unique_ptr<IReflBatchPresenter> make(IReflBatchView *view) { + auto runsPresenter = m_runsPresenterFactory.make(view->runs()); + auto eventPresenter = m_eventPresenterFactory.make(view->eventHandling()); + auto settingsPresenter = m_settingsPresenterFactory.make(view->settings()); + auto savePresenter = m_savePresenterFactory.make(view->save()); + + return std::make_unique<ReflBatchPresenter>( + view, std::move(runsPresenter), std::move(eventPresenter), + std::move(settingsPresenter), std::move(savePresenter)); + } +private: + RunsPresenterFactory m_runsPresenterFactory; + EventPresenterFactory m_eventPresenterFactory; + SettingsPresenterFactory m_settingsPresenterFactory; + SavePresenterFactory m_savePresenterFactory; +}; +} +} +#endif // MANTID_ISISREFLECTOMETRY_REFLBATCHPRESENTERFACTORY_H diff --git a/qt/scientific_interfaces/ISISReflectometry/ReflEventPresenterFactory.h b/qt/scientific_interfaces/ISISReflectometry/ReflEventPresenterFactory.h new file mode 100644 index 0000000000000000000000000000000000000000..70558fd8dcf796e7087edb95330b985fe51dafaf --- /dev/null +++ b/qt/scientific_interfaces/ISISReflectometry/ReflEventPresenterFactory.h @@ -0,0 +1,21 @@ +#ifndef MANTID_ISISREFLECTOMETRY_REFLEVENTPRESENTERFACTORY_H +#define MANTID_ISISREFLECTOMETRY_REFLEVENTPRESENTERFACTORY_H +#include "DllConfig.h" +#include "IReflEventTabView.h" +#include "IReflEventTabPresenter.h" +#include "ReflEventTabPresenter.h" +#include "Presenters/BatchPresenterFactory.h" +#include <memory> + +namespace MantidQt { +namespace CustomInterfaces { + +class EventPresenterFactory { +public: + std::unique_ptr<IReflEventTabPresenter> make(IReflEventTabView *view) { + return std::make_unique<ReflEventTabPresenter>(view); + } +}; +} +} +#endif // MANTID_ISISREFLECTOMETRY_REFLEVENTPRESENTERFACTORY_H diff --git a/qt/scientific_interfaces/ISISReflectometry/ReflEventTabPresenter.cpp b/qt/scientific_interfaces/ISISReflectometry/ReflEventTabPresenter.cpp index 012f298b422f2cf2e49464d794bdfc5d81bbf4f5..382d640b992b5dda665dadc19e1d5deefd83a842 100644 --- a/qt/scientific_interfaces/ISISReflectometry/ReflEventTabPresenter.cpp +++ b/qt/scientific_interfaces/ISISReflectometry/ReflEventTabPresenter.cpp @@ -9,23 +9,11 @@ namespace CustomInterfaces { * * @param presenters :: The presenters of each group as a vector */ -ReflEventTabPresenter::ReflEventTabPresenter( - std::vector<IReflEventPresenter *> presenters) - : m_eventPresenters(presenters) { - passSelfToChildren(presenters); +ReflEventTabPresenter::ReflEventTabPresenter(IReflEventTabView *view) + : m_view(view) { + // TODO: subscribe. } -void ReflEventTabPresenter::passSelfToChildren( - std::vector<IReflEventPresenter *> const &children) { - for (auto *presenter : children) - presenter->acceptTabPresenter(this); -} - -/** Destructor -* -*/ -ReflEventTabPresenter::~ReflEventTabPresenter() {} - void ReflEventTabPresenter::acceptMainPresenter( IReflBatchPresenter *mainPresenter) { m_mainPresenter = mainPresenter; @@ -37,7 +25,7 @@ void ReflEventTabPresenter::acceptMainPresenter( * @return :: Time-slicing values for 'ReflectometryReductionOneAuto' */ std::string ReflEventTabPresenter::getTimeSlicingValues(int group) const { - return m_eventPresenters.at(group)->getTimeSlicingValues(); +// return m_eventPresenters.at(group)->getTimeSlicingValues(); } /** Returns time-slicing type for 'ReflectometryReductionOneAuto' @@ -46,19 +34,19 @@ std::string ReflEventTabPresenter::getTimeSlicingValues(int group) const { * @return :: Time-slicing type for 'ReflectometryReductionOneAuto' */ std::string ReflEventTabPresenter::getTimeSlicingType(int group) const { - return m_eventPresenters.at(group)->getTimeSlicingType(); + // return m_eventPresenters.at(group)->getTimeSlicingType(); } void ReflEventTabPresenter::onReductionPaused(int group) { - m_eventPresenters[group]->onReductionPaused(); +// m_eventPresenters[group]->onReductionPaused(); } void ReflEventTabPresenter::onReductionResumed(int group) { - m_eventPresenters[group]->onReductionResumed(); +// m_eventPresenters[group]->onReductionResumed(); } void ReflEventTabPresenter::settingsChanged(int group) { - m_mainPresenter->settingsChanged(group); + // m_mainPresenter->settingsChanged(group); } } } diff --git a/qt/scientific_interfaces/ISISReflectometry/ReflEventTabPresenter.h b/qt/scientific_interfaces/ISISReflectometry/ReflEventTabPresenter.h index 8a633360407c3ecbbcda7aee633be008a78a6212..f6742469f6465e8706d5eb5dc6e8cadc7aa7f281 100644 --- a/qt/scientific_interfaces/ISISReflectometry/ReflEventTabPresenter.h +++ b/qt/scientific_interfaces/ISISReflectometry/ReflEventTabPresenter.h @@ -4,6 +4,7 @@ #include "DllConfig.h" #include "IReflEventTabPresenter.h" #include "IReflBatchPresenter.h" +#include "IReflEventTabView.h" #include <vector> namespace MantidQt { @@ -41,10 +42,7 @@ Code Documentation is available at: <http://doxygen.mantidproject.org> class MANTIDQT_ISISREFLECTOMETRY_DLL ReflEventTabPresenter : public IReflEventTabPresenter { public: - /// Constructor - ReflEventTabPresenter(std::vector<IReflEventPresenter *> presenters); - /// Destructor - ~ReflEventTabPresenter() override; + ReflEventTabPresenter(IReflEventTabView* view); /// Returns time-slicing values std::string getTimeSlicingValues(int group) const override; @@ -55,11 +53,9 @@ public: void settingsChanged(int group) override; void onReductionResumed(int group) override; void onReductionPaused(int group) override; - void passSelfToChildren(std::vector<IReflEventPresenter *> const &children); private: - /// The presenters for each group as a vector - std::vector<IReflEventPresenter *> m_eventPresenters; + IReflEventTabView* m_view; IReflBatchPresenter *m_mainPresenter; }; } diff --git a/qt/scientific_interfaces/ISISReflectometry/ReflMainWindowPresenter.cpp b/qt/scientific_interfaces/ISISReflectometry/ReflMainWindowPresenter.cpp index 7354477c39c07a59e3492e38032e4e180089764d..a0a85473411ae30be436fe5a50dc53f1fe9a37f6 100644 --- a/qt/scientific_interfaces/ISISReflectometry/ReflMainWindowPresenter.cpp +++ b/qt/scientific_interfaces/ISISReflectometry/ReflMainWindowPresenter.cpp @@ -19,22 +19,30 @@ namespace CustomInterfaces { * @param settingsPresenter :: [input] A pointer to the 'Settings' tab presenter * @param savePresenter :: [input] A pointer to the 'Save ASCII' tab presenter */ -ReflMainWindowPresenter::ReflMainWindowPresenter(IReflMainWindowView *view) - : m_view(view) { +ReflMainWindowPresenter::ReflMainWindowPresenter( + IReflMainWindowView *view, ReflBatchPresenterFactory batchPresenterFactory) + : m_view(view), m_batchPresenterFactory(std::move(batchPresenterFactory)) { + view->subscribe(this); + for (auto *batchView : m_view->batches()) + m_batchPresenters.emplace_back(m_batchPresenterFactory.make(batchView)); +} + +void ReflMainWindowPresenter::notifyNewBatchRequested() { + auto *newBatchView = m_view->newBatch(); + m_batchPresenters.emplace_back(m_batchPresenterFactory.make(newBatchView)); +} + +void ReflMainWindowPresenter::notifyCloseBatchRequested(int batchIndex) { + if (m_batchPresenters[batchIndex]->requestClose()) { + m_batchPresenters.erase(m_batchPresenters.begin() + batchIndex); + m_view->removeBatch(batchIndex); + } } /** Used by the view to tell the presenter something has changed */ -void ReflMainWindowPresenter::notify(IReflMainWindowPresenter::Flag flag) { - switch (flag) { - case Flag::HelpPressed: - showHelp(); - break; - } - // Not having a 'default' case is deliberate. gcc issues a warning if there's - // a flag we aren't handling. -} +void ReflMainWindowPresenter::notifyHelpPressed() { showHelp(); } bool ReflMainWindowPresenter::isProcessing() const { // TODO Implement this once you have ownership of child presenters. @@ -53,9 +61,7 @@ Tells the view to show the user the dialog for an algorithm */ std::string ReflMainWindowPresenter::runPythonAlgorithm(const std::string &pythonCode) { - return m_view->runPythonAlgorithm(pythonCode); } - } } diff --git a/qt/scientific_interfaces/ISISReflectometry/ReflMainWindowPresenter.h b/qt/scientific_interfaces/ISISReflectometry/ReflMainWindowPresenter.h index f73ee1b4dd7e0d298a4543c35e677b0d7ad29b28..502a0215c6d341ed31f8a4c9d738fa3fd24a353f 100644 --- a/qt/scientific_interfaces/ISISReflectometry/ReflMainWindowPresenter.h +++ b/qt/scientific_interfaces/ISISReflectometry/ReflMainWindowPresenter.h @@ -3,6 +3,7 @@ #include "DllConfig.h" #include "IReflMainWindowPresenter.h" +#include "ReflBatchPresenterFactory.h" #include <memory> namespace MantidQt { @@ -44,14 +45,19 @@ class MANTIDQT_ISISREFLECTOMETRY_DLL ReflMainWindowPresenter : public IReflMainWindowPresenter { public: /// Constructor - ReflMainWindowPresenter(IReflMainWindowView *view); + ReflMainWindowPresenter(IReflMainWindowView *view, + ReflBatchPresenterFactory batchPresenterFactory); /// Run a python algorithm std::string runPythonAlgorithm(const std::string &pythonCode) override; bool isProcessing() const override; + void notifyHelpPressed() override; + void notifyNewBatchRequested() override; + void notifyCloseBatchRequested(int batchIndex) override; private: void showHelp(); IReflMainWindowView* m_view; - void notify(IReflMainWindowPresenter::Flag flag) override; + ReflBatchPresenterFactory m_batchPresenterFactory; + std::vector<std::unique_ptr<IReflBatchPresenter>> m_batchPresenters; }; } } diff --git a/qt/scientific_interfaces/ISISReflectometry/ReflMainWindowWidget.ui b/qt/scientific_interfaces/ISISReflectometry/ReflMainWindowWidget.ui index 1348f6760b2077ec6c42c1b13afbc62ac3d4517b..3115272b2dfd45e91cea90fa78d99d567da13fa5 100644 --- a/qt/scientific_interfaces/ISISReflectometry/ReflMainWindowWidget.ui +++ b/qt/scientific_interfaces/ISISReflectometry/ReflMainWindowWidget.ui @@ -13,13 +13,22 @@ <property name="windowTitle"> <string>ISIS Reflectometry</string> </property> + <property name="layoutDirection"> + <enum>Qt::LeftToRight</enum> + </property> <widget class="QWidget" name="centralwidget"> <layout class="QVBoxLayout" name="verticalLayout"> <item> - <widget class="QTabWidget" name="mainTab"> + <widget class="QTabWidget" name="mainTabs"> + <property name="layoutDirection"> + <enum>Qt::LeftToRight</enum> + </property> <property name="tabPosition"> <enum>QTabWidget::West</enum> </property> + <property name="tabsClosable"> + <bool>true</bool> + </property> </widget> </item> <item> diff --git a/qt/scientific_interfaces/ISISReflectometry/ReflRunsPresenterFactory.h b/qt/scientific_interfaces/ISISReflectometry/ReflRunsPresenterFactory.h new file mode 100644 index 0000000000000000000000000000000000000000..f2badf6f53bbe93a9d6f8e1907f66ecd26f76ed7 --- /dev/null +++ b/qt/scientific_interfaces/ISISReflectometry/ReflRunsPresenterFactory.h @@ -0,0 +1,48 @@ +#ifndef MANTID_ISISREFLECTOMETRY_REFLRUNSPRESENTERFACTORY_H +#define MANTID_ISISREFLECTOMETRY_REFLRUNSPRESENTERFACTORY_H +#include "DllConfig.h" +#include "IReflEventView.h" +#include "IReflEventTabPresenter.h" +#include "IReflRunsTabPresenter.h" +#include "IReflRunsTabView.h" +#include "ReflRunsTabPresenter.h" +#include "MantidQtWidgets/Common/ProgressableView.h" +#include "Presenters/BatchPresenterFactory.h" +#include "../General/IReflSearcher.h" +#include <memory> + +namespace MantidQt { +namespace CustomInterfaces { + +class RunsPresenterFactory { +public: + RunsPresenterFactory(BatchPresenterFactory batchPresenterFactory, + WorkspaceNamesFactory workspaceNamesFactory, + double thetaTolerance, + std::vector<std::string> instruments, + int defaultInstrumentIndex, + boost::shared_ptr<IReflSearcher> searcher) + : m_batchPresenterFactory(std::move(batchPresenterFactory)), + m_workspaceNamesFactory(std::move(workspaceNamesFactory)), + m_thetaTolerance(std::move(thetaTolerance)), + m_instruments(std::move(instruments)), + m_defaultInstrumentIndex(std::move(defaultInstrumentIndex)), + m_searcher(std::move(searcher)) {} + + std::unique_ptr<IReflRunsTabPresenter> make(IReflRunsTabView *view) { + return std::make_unique<ReflRunsTabPresenter>( + view, view, m_batchPresenterFactory, m_workspaceNamesFactory, + m_thetaTolerance, m_instruments, m_defaultInstrumentIndex, m_searcher); + } + +private: + BatchPresenterFactory m_batchPresenterFactory; + WorkspaceNamesFactory m_workspaceNamesFactory; + double m_thetaTolerance; + std::vector<std::string> m_instruments; + int m_defaultInstrumentIndex; + boost::shared_ptr<IReflSearcher> m_searcher; +}; +} +} +#endif // MANTID_ISISREFLECTOMETRY_REFLRUNSPRESENTERFACTORY_H diff --git a/qt/scientific_interfaces/ISISReflectometry/ReflSavePresenterFactory.h b/qt/scientific_interfaces/ISISReflectometry/ReflSavePresenterFactory.h new file mode 100644 index 0000000000000000000000000000000000000000..03521a4cfda46f84a4b80f9d3c6868d12a1adaa2 --- /dev/null +++ b/qt/scientific_interfaces/ISISReflectometry/ReflSavePresenterFactory.h @@ -0,0 +1,22 @@ +#ifndef MANTID_ISISREFLECTOMETRY_REFLSAVEPRESENTERFACTORY_H +#define MANTID_ISISREFLECTOMETRY_REFLSAVEPRESENTERFACTORY_H +#include "DllConfig.h" +#include "IReflSaveTabView.h" +#include "IReflSaveTabPresenter.h" +#include "ReflSaveTabPresenter.h" +#include "ReflAsciiSaver.h" +#include <memory> + +namespace MantidQt { +namespace CustomInterfaces { + +class SavePresenterFactory { +public: + std::unique_ptr<IReflSaveTabPresenter> make(IReflSaveTabView *view) { + return Mantid::Kernel::make_unique<ReflSaveTabPresenter>( + view, Mantid::Kernel::make_unique<ReflAsciiSaver>()); + } +}; +} +} +#endif // MANTID_ISISREFLECTOMETRY_REFLSETTINGSPRESENTERFACTORY_H diff --git a/qt/scientific_interfaces/ISISReflectometry/ReflSaveTabPresenter.cpp b/qt/scientific_interfaces/ISISReflectometry/ReflSaveTabPresenter.cpp index 929764a56a5f3aad63eb38334f147eeafea37773..2aac8a636c6701ef8577afbd86c0d5a9ac4f417a 100644 --- a/qt/scientific_interfaces/ISISReflectometry/ReflSaveTabPresenter.cpp +++ b/qt/scientific_interfaces/ISISReflectometry/ReflSaveTabPresenter.cpp @@ -23,18 +23,13 @@ using namespace Mantid::API; * @param view :: The view we are handling */ ReflSaveTabPresenter::ReflSaveTabPresenter( - std::unique_ptr<IReflAsciiSaver> saver, - std::unique_ptr<IReflSaveTabView> view) - : m_view(std::move(view)), m_saver(std::move(saver)), m_mainPresenter(), + IReflSaveTabView *view, std::unique_ptr<IReflAsciiSaver> saver) + : m_view(view), m_saver(std::move(saver)), m_mainPresenter(), m_shouldAutosave(false) { m_view->subscribe(this); } -/** Destructor -*/ -ReflSaveTabPresenter::~ReflSaveTabPresenter() {} - /** Accept a main presenter * @param mainPresenter :: [input] The main presenter */ diff --git a/qt/scientific_interfaces/ISISReflectometry/ReflSaveTabPresenter.h b/qt/scientific_interfaces/ISISReflectometry/ReflSaveTabPresenter.h index d18a0ba0e329ae4288bfd38f06cd16891e466fed..b359a3823c9c8fef412f60a992f00f2d66bea7af 100644 --- a/qt/scientific_interfaces/ISISReflectometry/ReflSaveTabPresenter.h +++ b/qt/scientific_interfaces/ISISReflectometry/ReflSaveTabPresenter.h @@ -3,6 +3,7 @@ #include "DllConfig.h" #include "IReflSaveTabPresenter.h" +#include "IReflSaveTabView.h" #include <vector> #include <string> #include <memory> @@ -13,10 +14,6 @@ namespace MantidQt { namespace CustomInterfaces { -// Forward decs -class IReflMainWindowPresenter; -class IReflSaveTabView; - /** @class ReflSaveTabPresenter ReflSaveTabPresenter is a presenter class for the tab 'Save ASCII' in the @@ -46,11 +43,8 @@ Code Documentation is available at: <http://doxygen.mantidproject.org> class MANTIDQT_ISISREFLECTOMETRY_DLL ReflSaveTabPresenter : public IReflSaveTabPresenter { public: - /// Constructor - ReflSaveTabPresenter(std::unique_ptr<IReflAsciiSaver> saver, - std::unique_ptr<IReflSaveTabView> view); - /// Destructor - ~ReflSaveTabPresenter() override; + ReflSaveTabPresenter(IReflSaveTabView* view, + std::unique_ptr<IReflAsciiSaver> saver); /// Accept a main presenter void acceptMainPresenter(IReflBatchPresenter *mainPresenter) override; void notify(IReflSaveTabPresenter::Flag flag) override; @@ -93,7 +87,7 @@ private: bool shouldAutosave() const; /// The view - std::unique_ptr<IReflSaveTabView> m_view; + IReflSaveTabView* m_view; std::unique_ptr<IReflAsciiSaver> m_saver; /// The main presenter IReflBatchPresenter *m_mainPresenter; diff --git a/qt/scientific_interfaces/ISISReflectometry/ReflSettingsPresenterFactory.h b/qt/scientific_interfaces/ISISReflectometry/ReflSettingsPresenterFactory.h new file mode 100644 index 0000000000000000000000000000000000000000..549f2399bba94f02296ee51637f4d7c6c04c6a42 --- /dev/null +++ b/qt/scientific_interfaces/ISISReflectometry/ReflSettingsPresenterFactory.h @@ -0,0 +1,20 @@ +#ifndef MANTID_ISISREFLECTOMETRY_REFLSETTINGSPRESENTERFACTORY_H +#define MANTID_ISISREFLECTOMETRY_REFLSETTINGSPRESENTERFACTORY_H +#include "DllConfig.h" +#include "IReflSettingsTabView.h" +#include "IReflSettingsTabPresenter.h" +#include "ReflSettingsTabPresenter.h" +#include <memory> + +namespace MantidQt { +namespace CustomInterfaces { + +class SettingsPresenterFactory { +public: + std::unique_ptr<IReflSettingsTabPresenter> make(IReflSettingsTabView *view) { + return std::make_unique<ReflSettingsTabPresenter>(view); + } +}; +} +} +#endif // MANTID_ISISREFLECTOMETRY_REFLSETTINGSPRESENTERFACTORY_H diff --git a/qt/scientific_interfaces/ISISReflectometry/ReflSettingsTabPresenter.cpp b/qt/scientific_interfaces/ISISReflectometry/ReflSettingsTabPresenter.cpp index 153c0d0a7fb071a633974fd373eb08743a39a9ef..c94c377eb639c6b1ed150260117da1ebbb5056cc 100644 --- a/qt/scientific_interfaces/ISISReflectometry/ReflSettingsTabPresenter.cpp +++ b/qt/scientific_interfaces/ISISReflectometry/ReflSettingsTabPresenter.cpp @@ -16,16 +16,9 @@ namespace CustomInterfaces { * * @param presenters :: The presenters of each group as a vector */ -ReflSettingsTabPresenter::ReflSettingsTabPresenter( - std::vector<IReflSettingsPresenter *> presenters) - : m_settingsPresenters(presenters) { - passSelfToChildren(presenters); -} - -void ReflSettingsTabPresenter::passSelfToChildren( - std::vector<IReflSettingsPresenter *> const &children) { - for (auto *presenter : children) - presenter->acceptTabPresenter(this); +ReflSettingsTabPresenter::ReflSettingsTabPresenter(IReflSettingsTabView *view) + : m_view(view) { + // TODO view->subscribe(this); } void ReflSettingsTabPresenter::acceptMainPresenter( @@ -37,25 +30,22 @@ void ReflSettingsTabPresenter::settingsChanged(int group) { m_mainPresenter->settingsChanged(group); } -/// Destructor -ReflSettingsTabPresenter::~ReflSettingsTabPresenter() {} - /** Sets the current instrument name and changes accessibility status of * the polarisation corrections option in the view accordingly * * @param instName :: [input] The name of the instrument to set to */ void ReflSettingsTabPresenter::setInstrumentName(const std::string &instName) { - for (auto presenter : m_settingsPresenters) - presenter->setInstrumentName(instName); + // for (auto presenter : m_settingsPresenters) + // presenter->setInstrumentName(instName); } void ReflSettingsTabPresenter::onReductionResumed(int group) { - m_settingsPresenters[group]->onReductionResumed(); + // m_settingsPresenters[group]->onReductionResumed(); } void ReflSettingsTabPresenter::onReductionPaused(int group) { - m_settingsPresenters[group]->onReductionPaused(); + // m_settingsPresenters[group]->onReductionPaused(); } /** Returns values passed for 'Transmission run(s)' @@ -67,15 +57,16 @@ void ReflSettingsTabPresenter::onReductionPaused(int group) { OptionsQMap ReflSettingsTabPresenter::getOptionsForAngle(int group, const double angle) const { - - return m_settingsPresenters.at(group)->getOptionsForAngle(angle); + // return m_settingsPresenters.at(group)->getOptionsForAngle(angle); + return {}; } /** Check whether per-angle transmission runs are specified * @return :: true if per-angle transmission runs are specified */ bool ReflSettingsTabPresenter::hasPerAngleOptions(int group) const { - return m_settingsPresenters.at(group)->hasPerAngleOptions(); + // return m_settingsPresenters.at(group)->hasPerAngleOptions(); + return {}; } /** Returns global options for 'CreateTransmissionWorkspaceAuto' @@ -84,8 +75,8 @@ bool ReflSettingsTabPresenter::hasPerAngleOptions(int group) const { * @return :: Global options for 'CreateTransmissionWorkspaceAuto' */ OptionsQMap ReflSettingsTabPresenter::getTransmissionOptions(int group) const { - - return m_settingsPresenters.at(group)->getTransmissionOptions(); + // return m_settingsPresenters.at(group)->getTransmissionOptions(); + return {}; } /** Returns global options for 'ReflectometryReductionOneAuto' @@ -94,8 +85,8 @@ OptionsQMap ReflSettingsTabPresenter::getTransmissionOptions(int group) const { * @return :: Global options for 'ReflectometryReductionOneAuto' */ OptionsQMap ReflSettingsTabPresenter::getReductionOptions(int group) const { - - return m_settingsPresenters.at(group)->getReductionOptions(); + // return m_settingsPresenters.at(group)->getReductionOptions(); + return {}; } /** Returns global options for 'Stitch1DMany' @@ -104,8 +95,8 @@ OptionsQMap ReflSettingsTabPresenter::getReductionOptions(int group) const { * @return :: Global options for 'Stitch1DMany' */ std::string ReflSettingsTabPresenter::getStitchOptions(int group) const { - - return m_settingsPresenters.at(group)->getStitchOptions(); + // return m_settingsPresenters.at(group)->getStitchOptions(); + return {}; } } } diff --git a/qt/scientific_interfaces/ISISReflectometry/ReflSettingsTabPresenter.h b/qt/scientific_interfaces/ISISReflectometry/ReflSettingsTabPresenter.h index c44bc8b248d849b44f72bcbaf0556c01de6e52a5..4225d98cbb4c3b9e0728b14332a82690ff80b3c5 100644 --- a/qt/scientific_interfaces/ISISReflectometry/ReflSettingsTabPresenter.h +++ b/qt/scientific_interfaces/ISISReflectometry/ReflSettingsTabPresenter.h @@ -3,6 +3,7 @@ #include "DllConfig.h" #include "IReflSettingsTabPresenter.h" +#include "IReflSettingsTabView.h" #include "IReflBatchPresenter.h" #include <vector> @@ -42,18 +43,13 @@ class MANTIDQT_ISISREFLECTOMETRY_DLL ReflSettingsTabPresenter : public IReflSettingsTabPresenter { public: /// Constructor - ReflSettingsTabPresenter(std::vector<IReflSettingsPresenter *> presenters); - /// Destructor - ~ReflSettingsTabPresenter() override; + ReflSettingsTabPresenter(IReflSettingsTabView* view); /// Set the instrument name void setInstrumentName(const std::string &instName) override; void acceptMainPresenter(IReflBatchPresenter *mainPresenter) override; void settingsChanged(int group) override; void onReductionPaused(int group) override; void onReductionResumed(int group) override; - void - passSelfToChildren(std::vector<IReflSettingsPresenter *> const &children); - /// Returns values passed for 'Transmission run(s)' MantidWidgets::DataProcessor::OptionsQMap getOptionsForAngle(int group, const double angle) const override; @@ -70,7 +66,7 @@ public: private: /// The presenters for each group as a vector - std::vector<IReflSettingsPresenter *> m_settingsPresenters; + IReflSettingsTabView* m_view; IReflBatchPresenter *m_mainPresenter; }; } diff --git a/qt/scientific_interfaces/ISISReflectometry/Views/BatchView.cpp b/qt/scientific_interfaces/ISISReflectometry/Views/BatchView.cpp index c00c8081894b94d0504d56607240d88331cf90f9..1fa4d4bf2f504579a91a185fc9a7cfc9fcb23248 100644 --- a/qt/scientific_interfaces/ISISReflectometry/Views/BatchView.cpp +++ b/qt/scientific_interfaces/ISISReflectometry/Views/BatchView.cpp @@ -1,4 +1,5 @@ #include "BatchView.h" +#include "../IndexOf.h" #include "MantidKernel/make_unique.h" #include "MantidKernel/ConfigService.h" #include "MantidQtWidgets/Common/AlgorithmHintStrategy.h" @@ -174,11 +175,9 @@ BatchView *BatchViewFactory::operator()() const { } int BatchViewFactory::indexOfElseFirst(std::string const &instrument) const { - auto it = std::find(m_instruments.cbegin(), m_instruments.cend(), instrument); - if (it != m_instruments.cend()) - return static_cast<int>(std::distance(m_instruments.cbegin(), it)); - else - return 0; + return indexOf(m_instruments, [&instrument](std::string const &inst) { + return instrument == inst; + }).get_value_or(0); } int BatchViewFactory::defaultInstrumentFromConfig() const {