diff --git a/MantidQt/MantidWidgets/CMakeLists.txt b/MantidQt/MantidWidgets/CMakeLists.txt index c7dbc9137bb35cd8b75afef09c6600dee6f61d30..9b389cd52585f306554faeb268e6cf55db108e50 100644 --- a/MantidQt/MantidWidgets/CMakeLists.txt +++ b/MantidQt/MantidWidgets/CMakeLists.txt @@ -10,6 +10,7 @@ set ( SRC_FILES src/DataProcessorUI/DataProcessorPreprocessingAlgorithm.cpp src/DataProcessorUI/DataProcessorProcessingAlgorithm.cpp src/DataProcessorUI/DataProcessorProcessingAlgorithmBase.cpp + src/DataProcessorUI/DataProcessorTwoLevelTreeManager.cpp src/DataProcessorUI/DataProcessorWhiteList.cpp src/DataProcessorUI/GenericDataProcessorPresenter.cpp src/DataProcessorUI/ParseKeyValueString.cpp @@ -228,6 +229,8 @@ set ( INC_FILES inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorProcessingAlgorithmBase.h inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorSaveTableAsCommand.h inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorSaveTableCommand.h + inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorTreeManager.h + inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorTwoLevelTreeManager.h inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorVectorString.h inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorView.h inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorWhiteList.h @@ -333,6 +336,7 @@ set ( TEST_FILES DataProcessorUI/DataProcessorProcessingAlgorithmTest.h DataProcessorUI/DataProcessorCommandsTest.h DataProcessorUI/DataProcessorGenerateNotebookTest.h + DataProcessorUI/DataProcessorTwoLevelTreeManagerTest.h DataProcessorUI/DataProcessorWhiteListTest.h DataProcessorUI/GenericDataProcessorPresenterTest.h DataProcessorUI/ParseKeyValueStringTest.h diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorAppendGroupCommand.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorAppendGroupCommand.h index c288990a45b7f27bf50ccc447af89ef73a6e1b62..2a9486bb3a5738eae2bc9e2b8a3b9eccee8fb4b8 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorAppendGroupCommand.h +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorAppendGroupCommand.h @@ -42,6 +42,13 @@ public: }; std::string name() override { return std::string("Insert Group After"); } std::string icon() override { return std::string("://insert_group.png"); } + std::string tooltip() override { return std::string("Inserts group after"); } + std::string whatsthis() override { + return std::string("Inserts a new group after the first selected group. If " + "no groups are selected then a new group is added at " + "the end of the table"); + } + std::string shortcut() override { return std::string(); } }; } } diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorAppendRowCommand.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorAppendRowCommand.h index e113d5c9e7e49583169e3e5b654146039583a2ec..5fba52f856eaa5b215e57a3bad385924ce879115 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorAppendRowCommand.h +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorAppendRowCommand.h @@ -42,6 +42,14 @@ public: }; std::string name() override { return std::string("Insert Row After"); } std::string icon() override { return std::string("://insert_row.png"); } + std::string tooltip() override { return std::string("Inserts row after"); } + std::string whatsthis() override { + return std::string("Inserts a new row after the last selected row. If " + "groups exist and a group is selected, the new row is " + "appended to the selected group. If nothing is selected " + "then a new row is added to the last group"); + } + std::string shortcut() override { return std::string(); } }; } } diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorClearSelectedCommand.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorClearSelectedCommand.h index 92270dc1234a337acdc4f565a839eb7ec9ba3a9d..81e387d829d610ddeba1892a83dd16402927911d 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorClearSelectedCommand.h +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorClearSelectedCommand.h @@ -41,6 +41,11 @@ public: }; std::string name() override { return std::string("Clear Selected"); } std::string icon() override { return std::string("://erase.png"); } + std::string tooltip() override { return std::string("Clear selected"); } + std::string whatsthis() override { + return std::string("Clears the contents of the selected rows"); + } + std::string shortcut() override { return std::string(); } }; } } diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorCommand.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorCommand.h index f862282aa293a730d097d3c92d0892e9918b166a..ee056a7810497903c22a23b0dada1ac70870cf1d 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorCommand.h +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorCommand.h @@ -41,6 +41,9 @@ public: virtual void execute() = 0; virtual std::string name() = 0; virtual std::string icon() = 0; + virtual std::string tooltip() = 0; + virtual std::string whatsthis() = 0; + virtual std::string shortcut() = 0; virtual bool hasChild() final { return !m_child.empty(); }; virtual void setChild(std::vector<std::unique_ptr<DataProcessorCommand>> child) final { diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorCommandAdapter.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorCommandAdapter.h index b1c70b7785cddc128d0af01d00c86ecbeffc6e0f..6fd0dbb71b569cb5bbc49f347dd9e694613aed66 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorCommandAdapter.h +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorCommandAdapter.h @@ -7,6 +7,7 @@ #include <QObject> #include <memory> #include <qmenu.h> +#include <qtoolbar.h> #include <vector> namespace MantidQt { @@ -45,6 +46,10 @@ class EXPORT_OPT_MANTIDQT_MANTIDWIDGETS DataProcessorCommandAdapter : public QObject { Q_OBJECT public: + /** Constructor: Adds actions to a menu + * @param menu :: The menu where the actions will be added + * @param adaptee :: The action to add + */ DataProcessorCommandAdapter(QMenu *menu, DataProcessorCommand_uptr adaptee) : m_adaptee(std::move(adaptee)) { @@ -72,6 +77,30 @@ public: } }; + /** Constructor: Adds actions to a toolbar + * @param toolbar :: The toolbar where actions will be added + * @param adaptee :: The action to add + */ + DataProcessorCommandAdapter(QToolBar *toolbar, + DataProcessorCommand_uptr adaptee) + : m_adaptee(std::move(adaptee)) { + + if (!m_adaptee->hasChild()) { + // Sub-menus cannot be added to a toolbar + + QAction *action = + new QAction(QString::fromStdString(m_adaptee->name()), this); + action->setIcon(QIcon(QString::fromStdString(m_adaptee->icon()))); + action->setSeparator(m_adaptee->isSeparator()); + action->setToolTip(QString::fromStdString(m_adaptee->tooltip())); + action->setWhatsThis(QString::fromStdString(m_adaptee->whatsthis())); + action->setShortcut( + QKeySequence(QString::fromStdString(m_adaptee->shortcut()))); + toolbar->addAction(action); + connect(action, SIGNAL(triggered()), this, SLOT(call())); + } + }; + public slots: void call() { m_adaptee->execute(); } diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorCopySelectedCommand.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorCopySelectedCommand.h index c650005e6e8a03d31e5aaf4fadfc1fd590956fce..10125347e269ef71342df4e6fff47a5ccc390c8b 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorCopySelectedCommand.h +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorCopySelectedCommand.h @@ -41,6 +41,13 @@ public: }; std::string name() override { return std::string("Copy Selected"); } std::string icon() override { return std::string("://copy.png"); } + std::string tooltip() override { return std::string("Copy selected"); } + std::string whatsthis() override { + return std::string("Copies the selected rows to the clipboard. Each row is " + "placed on a new line, and each cell is separated by a " + "tab"); + } + std::string shortcut() override { return std::string("Ctrl+C"); } }; } } diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorCutSelectedCommand.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorCutSelectedCommand.h index a928ffd6a59d4b22b1b5d80b416248eaa4b2eeea..9d40805a573a161ecd2ff8951bd5fd758d674c10 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorCutSelectedCommand.h +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorCutSelectedCommand.h @@ -41,6 +41,13 @@ public: }; std::string name() override { return std::string("Cut Selected"); } std::string icon() override { return std::string("://cut.png"); } + std::string tooltip() override { return std::string("Cut selected"); } + std::string whatsthis() override { + return std::string("Copies the selected rows to the clipboard, and then " + "deletes them. Each row is placed on a new line, and " + "each cell is separated by a tab"); + } + std::string shortcut() override { return std::string("Ctrl+X"); } }; } } diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorDeleteGroupCommand.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorDeleteGroupCommand.h index f5439df1ef82cdffa5378d2f3880dba11523bfaa..ca2ac858da13d03d0c42882a1fe18e573bd8c579 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorDeleteGroupCommand.h +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorDeleteGroupCommand.h @@ -42,6 +42,13 @@ public: }; std::string name() override { return std::string("Delete Group"); } std::string icon() override { return std::string("://delete_group.png"); } + std::string tooltip() override { + return std::string("Deletes selected group"); + } + std::string whatsthis() override { + return std::string("Deletes the selected groups"); + } + std::string shortcut() override { return std::string(); } }; } } diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorDeleteRowCommand.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorDeleteRowCommand.h index 9563c50d86ca2554d9aef3e909cf0abbfac3643d..2913afcc68aaea097b7030e7585ba27b117012bd 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorDeleteRowCommand.h +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorDeleteRowCommand.h @@ -42,6 +42,11 @@ public: }; std::string name() override { return std::string("Delete Row"); } std::string icon() override { return std::string("://delete_row.png"); } + std::string tooltip() override { return std::string("Deletes a row"); } + std::string whatsthis() override { + return std::string("Deletes the selected row"); + } + std::string shortcut() override { return std::string(); } }; } } diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorExpandCommand.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorExpandCommand.h index f0ccee1d39c1c5c7d9ba500dc3a038c04b5e9966..ffd81fde66e9ca4094e1b926aeee8040ba29e8b4 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorExpandCommand.h +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorExpandCommand.h @@ -41,6 +41,16 @@ public: }; std::string name() override { return std::string("Expand Selection"); } std::string icon() override { return std::string("://fit_frame.png"); } + std::string tooltip() override { + return std::string("Selects an entire group"); + } + std::string whatsthis() override { + return std::string("Expands the current selection to include any runs that " + "are in the same group as any selected run. This " + "effectively means selecting the group to which the " + "selected run belongs"); + } + std::string shortcut() override { return std::string(); } }; } } diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorExportTableCommand.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorExportTableCommand.h index 75302adbcdc7813695b498131bef9afdd2e34727..1d79e9a3ee577b57ed1a8153947af5b236ecb8a8 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorExportTableCommand.h +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorExportTableCommand.h @@ -43,6 +43,11 @@ public: }; std::string name() override { return std::string("Export .TBL"); } std::string icon() override { return std::string("://save_template.png"); } + std::string tooltip() override { return std::string("Export .TBL file"); } + std::string whatsthis() override { + return std::string("Opens a dialog to export a table as .TBL file"); + } + std::string shortcut() override { return std::string(); } }; } } diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorGroupRowsCommand.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorGroupRowsCommand.h index f8a3fb6023804f771efb7b674dd41bd4236c7630..05c67bc607563af72cb3f9aec888792283b9f22d 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorGroupRowsCommand.h +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorGroupRowsCommand.h @@ -41,6 +41,11 @@ public: }; std::string name() override { return std::string("Group Selected"); } std::string icon() override { return std::string("://drag_curves.png"); } + std::string tooltip() override { return std::string("Group selected rows"); } + std::string whatsthis() override { + return std::string("Places all selected runs into the same group"); + } + std::string shortcut() override { return std::string(); } }; } } diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorImportTableCommand.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorImportTableCommand.h index 09c8f26064519f909f9b3a401d1abc0dd3708885..f4e34e1801d38655bb03c2f13b2b5ee5d817b472 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorImportTableCommand.h +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorImportTableCommand.h @@ -41,6 +41,11 @@ public: }; std::string name() override { return std::string("Import .TBL"); } std::string icon() override { return std::string("://open_template.png"); } + std::string tooltip() override { return std::string("Import .TBL file"); } + std::string whatsthis() override { + return std::string("Opens a dialog to select a .TBL file to import"); + } + std::string shortcut() override { return std::string(); } }; } } diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorMockObjects.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorMockObjects.h index 8bbbcf0d9389282c1477cace34cb4139373246e9..b35ff72755ac4c7769c0c52abb3cfe040317af35 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorMockObjects.h +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorMockObjects.h @@ -53,12 +53,21 @@ public: // Settings MOCK_METHOD1(loadSettings, void(std::map<std::string, QVariant> &)); + // Acctions/commands + // Gmock requires parameters and return values of mocked methods to be + // copyable which means we have to mock addActions() via a proxy method + void addActions(std::vector<DataProcessorCommand_uptr>) override { + addActionsProxy(); + } + MOCK_METHOD0(addActionsProxy, void()); + // Calls we don't care about void showTable(QDataProcessorTwoLevelTreeModel_sptr) override{}; void saveSettings(const std::map<std::string, QVariant> &) override{}; std::string getProcessInstrument() const override { return "FAKE"; } DataProcessorPresenter *getPresenter() const override { return nullptr; } + }; class MockMainPresenter : public DataProcessorMainPresenter { diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorNewTableCommand.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorNewTableCommand.h index 91e74b6e5961f99cb871aac09d1e770a330987f2..8677030aaa65f1bf5afc386f6d777f0e3d584de7 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorNewTableCommand.h +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorNewTableCommand.h @@ -41,6 +41,11 @@ public: }; std::string name() override { return std::string("New Table"); } std::string icon() override { return std::string("://new.png"); } + std::string tooltip() override { return std::string("New Table"); } + std::string whatsthis() override { + return std::string("Loads a blank table into the interface"); + } + std::string shortcut() override { return std::string(); } }; } } diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorOpenTableCommand.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorOpenTableCommand.h index cd09308792bf64383907bb0e5c7a74190d8055e8..84ab75640966675eae528d5789411c07df232b65 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorOpenTableCommand.h +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorOpenTableCommand.h @@ -41,6 +41,13 @@ public: }; std::string name() override { return std::string("Open Table"); } std::string icon() override { return std::string("://multiload.png"); } + std::string tooltip() override { return std::string("Open Table"); } + std::string whatsthis() override { + return std::string("Loads a table into the interface. Table must exist in " + "the ADS and be compatible in terms of the number and " + "type of columns"); + } + std::string shortcut() override { return std::string(); } }; } } diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorOptionsCommand.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorOptionsCommand.h index be6a3e760c7e39400c8a2d2508f1dcc0b3818217..2758978de7b6a3468f0ef0f43b8ec6dd075444ed 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorOptionsCommand.h +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorOptionsCommand.h @@ -41,6 +41,11 @@ public: }; std::string name() override { return std::string("Options"); } std::string icon() override { return std::string("://configure.png"); } + std::string tooltip() override { return std::string("Options"); } + std::string whatsthis() override { + return std::string("Opens a dialog with some options for the table"); + } + std::string shortcut() override { return std::string(); } }; } } diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorPasteSelectedCommand.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorPasteSelectedCommand.h index bd95252faabe29c0148d441749259e9cbb80c81b..16ccd8f8ecb368ab8bff3a9d05ac31dda0fa68b8 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorPasteSelectedCommand.h +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorPasteSelectedCommand.h @@ -41,6 +41,13 @@ public: }; std::string name() override { return std::string("Paste Selected"); } std::string icon() override { return std::string("://paste.png"); } + std::string tooltip() override { return std::string("Paste selected"); } + std::string whatsthis() override { + return std::string("Pastes the contents of the clipboard into the selected " + "rows. If no rows are selected, new ones are added at " + "the end"); + } + std::string shortcut() override { return std::string("Ctrl+V"); } }; } } diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorPlotGroupCommand.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorPlotGroupCommand.h index b18566abf28ea5e9724392e1a765b955f4b5e121..1842ddec73af80be899926a64586664bf9da7f91 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorPlotGroupCommand.h +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorPlotGroupCommand.h @@ -41,6 +41,14 @@ public: }; std::string name() override { return std::string("Plot Selected Groups"); } std::string icon() override { return std::string("://trajectory.png"); } + std::string tooltip() override { + return std::string("Plots the selected group"); + } + std::string whatsthis() override { + return std::string("Creates a plot of the post-processed workspaces " + "produced by any groups any selected runs are in"); + } + std::string shortcut() override { return std::string(); } }; } } diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorPlotRowCommand.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorPlotRowCommand.h index 1a0c6f3c67132072738bc8431400758d16c63be7..eafc5b9e566e357351662261780d2b1e0f211981 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorPlotRowCommand.h +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorPlotRowCommand.h @@ -41,6 +41,14 @@ public: }; std::string name() override { return std::string("Plot Selected Rows"); } std::string icon() override { return std::string("://graph.png"); } + std::string tooltip() override { + return std::string("Plot the selected runs"); + } + std::string whatsthis() override { + return std::string("Creates a plot of the reduced workspaces produced by " + "the selected runs"); + } + std::string shortcut() override { return std::string(); } }; } } diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorProcessCommand.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorProcessCommand.h index 03f7ce1c27af1cf679f85d2c8303d26649100593..011e3dda63f5a363967173311b3807af5eb6d1d8 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorProcessCommand.h +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorProcessCommand.h @@ -41,6 +41,16 @@ public: }; std::string name() override { return std::string("Process"); } std::string icon() override { return std::string("://stat_rows.png"); } + std::string tooltip() override { + return std::string("Processes selected runs"); + } + std::string whatsthis() override { + return std::string("Processes the selected runs. Selected runs are reduced " + "sequentially and independently. If nothing is " + "selected, the behaviour is as if all " + "runs were selected."); + } + std::string shortcut() override { return std::string(); } }; } } diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorSaveTableAsCommand.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorSaveTableAsCommand.h index ccb14070295a578b4d3a38ce2643a2ae24c0c6f4..5600edcbf4ad9f4b4498a0d38e16bbe84087f135 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorSaveTableAsCommand.h +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorSaveTableAsCommand.h @@ -41,6 +41,12 @@ public: }; std::string name() override { return std::string("Save Table As"); } std::string icon() override { return std::string("://filesaveas.png"); } + std::string tooltip() override { return std::string("Save Table As"); } + std::string whatsthis() override { + return std::string("Saves current table as a table workspace. Asks for the " + "name of the ouput table"); + } + std::string shortcut() override { return std::string(); } }; } } diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorSaveTableCommand.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorSaveTableCommand.h index e96c7808e67cb0553aa34ba1079a534cea81f96d..2281de73a2b4dd30a3a25a419f24c3579b05f22b 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorSaveTableCommand.h +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorSaveTableCommand.h @@ -41,6 +41,11 @@ public: }; std::string name() override { return std::string("Save Table"); } std::string icon() override { return std::string("://filesave.png"); } + std::string tooltip() override { return std::string("Save Table"); } + std::string whatsthis() override { + return std::string("Saves current table as a table workspace"); + } + std::string shortcut() override { return std::string(); } }; } } diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorSeparatorCommand.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorSeparatorCommand.h index 4234d01032ed56da076ebe32e6075f9619c6faf8..43c69e495cf867216cd9b1bea411fc0bda39944c 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorSeparatorCommand.h +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorSeparatorCommand.h @@ -41,6 +41,9 @@ public: void execute() override{}; std::string name() override { return std::string(); } std::string icon() override { return std::string(); } + std::string tooltip() override { return std::string(); } + std::string whatsthis() override { return std::string(); } + std::string shortcut() override { return std::string(); } }; } } diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorTreeManager.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorTreeManager.h new file mode 100644 index 0000000000000000000000000000000000000000..f79df6e497ced7b418184be2f57cbb742113b9b3 --- /dev/null +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorTreeManager.h @@ -0,0 +1,57 @@ +#ifndef MANTIDQTMANTIDWIDGETS_DATAPROCESSORTREEMANAGER_H +#define MANTIDQTMANTIDWIDGETS_DATAPROCESSORTREEMANAGER_H + +#include <memory> +#include <vector> + +namespace MantidQt { +namespace MantidWidgets { + +class DataProcessorCommand; + +/** @class DataProcessorTreeManager + +// TODO: Description + +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 DataProcessorTreeManager { +public: + virtual ~DataProcessorTreeManager(){}; + + /// Actions/commands + + /// Publish actions/commands + virtual std::vector<std::unique_ptr<DataProcessorCommand>> + publishCommands() = 0; + +protected: + /// Add a command to the list of available commands + void addCommand(std::vector<std::unique_ptr<DataProcessorCommand>> &commands, + std::unique_ptr<DataProcessorCommand> command) { + commands.push_back(std::move(command)); + } +}; +} +} +#endif /* MANTIDQTMANTIDWIDGETS_DATAPROCESSORTREEMANAGER_H */ diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorTwoLevelTreeManager.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorTwoLevelTreeManager.h new file mode 100644 index 0000000000000000000000000000000000000000..fb114b9ee2d574ba619005b08a43664d0f311c08 --- /dev/null +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorTwoLevelTreeManager.h @@ -0,0 +1,55 @@ +#ifndef MANTIDQTMANTIDWIDGETS_DATAPROCESSORTWOLEVELTREEMANAGER_H +#define MANTIDQTMANTIDWIDGETS_DATAPROCESSORTWOLEVELTREEMANAGER_H + +#include "MantidAPI/ITableWorkspace_fwd.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorTreeManager.h" +#include "MantidQtMantidWidgets/WidgetDllOption.h" + +namespace MantidQt { +namespace MantidWidgets { + +class DataProcessorPresenter; + +/** @class DataProcessorTwoLevelTreeManager + +// TODO: Description + +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 EXPORT_OPT_MANTIDQT_MANTIDWIDGETS DataProcessorTwoLevelTreeManager + : public DataProcessorTreeManager { +public: + /// Constructor + DataProcessorTwoLevelTreeManager(DataProcessorPresenter *presenter); + /// Destructor + ~DataProcessorTwoLevelTreeManager() override; + + /// Publish commands + std::vector<std::unique_ptr<DataProcessorCommand>> publishCommands() override; + +private: + /// The DataProcessor presenter + DataProcessorPresenter *m_presenter; +}; +} +} +#endif /*MANTIDQTMANTIDWIDGETS_DATAPROCESSORTWOLEVELTREEMANAGER_H*/ diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorView.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorView.h index cfa41d1b87332ca6061967a4844657441deb2fda..f1abfdff5533da1c5f3bf1646a2a49902c2aced3 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorView.h +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorView.h @@ -5,6 +5,7 @@ #include "MantidQtMantidWidgets/DataProcessorUI/QDataProcessorTwoLevelTreeModel.h" #include <map> +#include <memory> #include <set> #include <string> @@ -12,6 +13,7 @@ namespace MantidQt { namespace MantidWidgets { // Forward dec class HintStrategy; +class DataProcessorCommand; class DataProcessorPresenter; /** @class DataProcessorView @@ -47,6 +49,10 @@ public: DataProcessorView(){}; virtual ~DataProcessorView(){}; + // Add actions to the toolbar + virtual void addActions( + std::vector<std::unique_ptr<DataProcessorCommand>> commands) = 0; + // Connect the model virtual void showTable(QDataProcessorTwoLevelTreeModel_sptr model) = 0; diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorWidget.ui b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorWidget.ui index 7d5a0d04d6b64bd94f6454a89e9a73f1c3295a95..d9deb8bc5cea806dcefc4518eaed56832f467c38 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorWidget.ui +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorWidget.ui @@ -27,23 +27,6 @@ <property name="styleSheet"> <string>QToolBar{border: none;}</string> </property> - <addaction name="actionProcess"/> - <addaction name="actionExpandSelection"/> - <addaction name="separator"/> - <addaction name="actionPlotRow"/> - <addaction name="actionPlotGroup"/> - <addaction name="separator"/> - <addaction name="actionAppendRow"/> - <addaction name="actionAppendGroup"/> - <addaction name="actionDeleteRow"/> - <addaction name="actionDeleteGroup"/> - <addaction name="separator"/> - <addaction name="actionGroupRows"/> - <addaction name="actionCopySelected"/> - <addaction name="actionCutSelected"/> - <addaction name="actionPasteSelected"/> - <addaction name="actionClearSelected"/> - <addaction name="actionHelp"/> </widget> </item> <item> @@ -160,218 +143,6 @@ </iconset> </property> </widget> - <action name="actionProcess"> - <property name="icon"> - <iconset resource="../../../../MantidPlot/icons/icons.qrc"> - <normaloff>:/stat_rows.png</normaloff>:/stat_rows.png</iconset> - </property> - <property name="text"> - <string>Process</string> - </property> - <property name="whatsThis"> - <string>Processes the selected rows/groups. Selected rows are reduced sequentially and independently. When a group is selected, rows are in addition post-processed together. If nothing is selected the behaviour is as if all groups were selected.</string> - </property> - </action> - <action name="actionExpandSelection"> - <property name="icon"> - <iconset resource="../../../../MantidPlot/icons/icons.qrc"> - <normaloff>:/fit_frame.png</normaloff>:/fit_frame.png</iconset> - </property> - <property name="text"> - <string>Expand Selection</string> - </property> - <property name="toolTip"> - <string>Select an entire group</string> - </property> - <property name="whatsThis"> - <string>Expands the current selection to include any rows that are in the same group as any selected row. This effectively means selecting the group to which the selected row belongs.</string> - </property> - </action> - <action name="actionPlotRow"> - <property name="icon"> - <iconset resource="../../../../MantidPlot/icons/icons.qrc"> - <normaloff>:/graph.png</normaloff>:/graph.png - </iconset> - </property> - <property name="text"> - <string>Plot Selected Rows</string> - </property> - <property name="toolTip"> - <string>Plot the selected rows</string> - </property> - <property name="whatsThis"> - <string>Creates a plot of the reduced workspaces produced by the selected rows.</string> - </property> - </action> - <action name="actionPlotGroup"> - <property name="icon"> - <iconset resource="../../../../MantidPlot/icons/icons.qrc"> - <normaloff>:/trajectory.png</normaloff>:/trajectory.png - </iconset> - </property> - <property name="text"> - <string>Plot Selected Groups</string> - </property> - <property name="toolTip"> - <string>Plot the selected groups</string> - </property> - <property name="whatsThis"> - <string>Creates a plot of the post-processed workspaces produced by any groups any selected rows are in.</string> - </property> - </action> - <action name="actionAppendRow"> - <property name="icon"> - <iconset resource="../../../../MantidPlot/icons/icons.qrc"> - <normaloff>:/insert_row.png</normaloff>:/insert_row.png - </iconset> - </property> - <property name="text"> - <string>Insert Row After</string> - </property> - <property name="toolTip"> - <string>Insert Row After</string> - </property> - <property name="whatsThis"> - <string>Inserts a new row after the last selected row. - If a group is selected, the new row is appended to the selected group. - If nothing is selected then a new row is added to the last group.</string> - </property> - </action> - <action name="actionAppendGroup"> - <property name="icon"> - <iconset resource="../../../../MantidPlot/icons/icons.qrc"> - <normaloff>:/insert_group.png</normaloff>:/insert_group.png - </iconset> - </property> - <property name="text"> - <string>Insert Group After</string> - </property> - <property name="toolTip"> - <string>Insert Group After</string> - </property> - <property name="whatsThis"> - <string>Inserts a new group after the first selected group. If no groups are selected then a new group is added at the end of the table.</string> - </property> - </action> - <action name="actionDeleteRow"> - <property name="icon"> - <iconset resource="../../../../MantidPlot/icons/icons.qrc"> - <normaloff>:/delete_row.png</normaloff>:/delete_row.png - </iconset> - </property> - <property name="text"> - <string>Delete Row</string> - </property> - <property name="whatsThis"> - <string>Deletes the selected rows.</string> - </property> - </action> - <action name="actionDeleteGroup"> - <property name="icon"> - <iconset resource="../../../../MantidPlot/icons/icons.qrc"> - <normaloff>:/delete_group.png</normaloff>:/delete_group.png - </iconset> - </property> - <property name="text"> - <string>Delete Row</string> - </property> - <property name="whatsThis"> - <string>Deletes the selected groups.</string> - </property> - </action> - <action name="actionGroupRows"> - <property name="icon"> - <iconset resource="../../../../MantidPlot/icons/icons.qrc"> - <normaloff>:/drag_curves.png</normaloff>:/drag_curves.png - </iconset> - </property> - <property name="text"> - <string>Group Selected</string> - </property> - <property name="whatsThis"> - <string>Places all of the selected rows into the same group.</string> - </property> - </action> - <action name="actionCopySelected"> - <property name="icon"> - <iconset resource="../../../../MantidPlot/icons/icons.qrc"> - <normaloff>:/copy.png</normaloff>:/copy.png - </iconset> - </property> - <property name="text"> - <string>Copy Selected</string> - </property> - <property name="whatsThis"> - <string>Copies the selected rows to the clipboard. Each row is placed on a new line, and each cell is separated by a tab.</string> - </property> - <property name="shortcut"> - <string>Ctrl+C</string> - </property> - </action> - <action name="actionCutSelected"> - <property name="icon"> - <iconset resource="../../../../MantidPlot/icons/icons.qrc"> - <normaloff>:/cut.png</normaloff>:/cut.png - </iconset> - </property> - <property name="text"> - <string>Cut Selected</string> - </property> - <property name="whatsThis"> - <string>Copies the selected rows to the clipboard, and then deletes them. Each row is placed on a new line, and each cell is separated by a tab.</string> - </property> - <property name="shortcut"> - <string>Ctrl+X</string> - </property> - </action> - <action name="actionPasteSelected"> - <property name="icon"> - <iconset resource="../../../../MantidPlot/icons/icons.qrc"> - <normaloff>:/paste.png</normaloff>:/paste.png - </iconset> - </property> - <property name="text"> - <string>Paste Selected</string> - </property> - <property name="whatsThis"> - <string>Pastes the contents of the clipboard into the selected rows. If no rows are selected, new ones are added at the end of the group.</string> - </property> - <property name="shortcut"> - <string>Ctrl+V</string> - </property> - </action> - <action name="actionClearSelected"> - <property name="icon"> - <iconset resource="../../../../MantidPlot/icons/icons.qrc"> - <normaloff>:/erase.png</normaloff>:/erase.png - </iconset> - </property> - <property name="text"> - <string>Clear Selected</string> - </property> - <property name="whatsThis"> - <string>Clears the contents of the selected rows.</string> - </property> - </action> - <action name="actionHelp"> - <property name="icon"> - <iconset resource="../../../../MantidPlot/icons/icons.qrc"> - <normaloff>:/help.png</normaloff>:/help.png - </iconset> - </property> - <property name="text"> - <string>Help</string> - </property> - <property name="toolTip"> - <string>Opens the documentation.</string> - </property> - <property name="whatsThis"> - <string>Opens the interface's documentation in the Qt Help Browser.</string> - </property> - <property name="shortcut"> - <string>F1</string> - </property> - </action> </widget> <tabstops> <tabstop>viewTable</tabstop> diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorWorkspaceCommand.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorWorkspaceCommand.h index 84670355d6c61998a720461bf72ccf6d387e5cd0..470fe04197f63e1f6a7bd6642c9349218d65f21f 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorWorkspaceCommand.h +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/DataProcessorWorkspaceCommand.h @@ -45,6 +45,9 @@ public: }; std::string name() override { return m_name; } std::string icon() override { return std::string("://worksheet.png"); } + std::string tooltip() override { return std::string("Table Workspace"); } + std::string whatsthis() override { return std::string("Table Workspace"); } + std::string shortcut() override { return std::string(); } private: std::string m_name; diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/GenericDataProcessorPresenter.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/GenericDataProcessorPresenter.h index f2bfdb50805f7cfc76e90fd2c6d072ac35eaa5dd..65ae278a8f9ba27e2aa79f59d4b192cbaf4bf9f7 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/GenericDataProcessorPresenter.h +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/GenericDataProcessorPresenter.h @@ -17,6 +17,7 @@ namespace MantidWidgets { class ProgressableView; class DataProcessorView; class DataProcessorCommand; +class DataProcessorTreeManager; /** @class GenericDataProcessorPresenter @@ -84,7 +85,9 @@ public: const std::set<int> &rows, const std::string &prefix = ""); -protected: +private: + // the tree manager + std::unique_ptr<DataProcessorTreeManager> m_manager; // the workspace the model is currently representing Mantid::API::ITableWorkspace_sptr m_ws; // the model @@ -175,6 +178,9 @@ protected: void showOptionsDialog(); void initOptions(); + // actions + void addActions(); + // List of workspaces the user can open std::set<std::string> m_workspaceList; diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/QDataProcessorWidget.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/QDataProcessorWidget.h index 147a1568f00622c96a660992738522264c4c1669..42b74607a90abfb007870724ffb28b2786a1ab52 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/QDataProcessorWidget.h +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/QDataProcessorWidget.h @@ -13,6 +13,8 @@ namespace MantidQt { namespace MantidWidgets { +class DataProcessorCommandAdapter; + /** QDataProcessorWidget : Provides an interface for processing table data. @@ -48,6 +50,10 @@ public: QWidget *parent = 0); ~QDataProcessorWidget() override; + // Add actions to the toolbar + void QDataProcessorWidget::addActions( + std::vector<std::unique_ptr<DataProcessorCommand>> commands) override; + // Connect the model void showTable(QDataProcessorTwoLevelTreeModel_sptr model) override; @@ -101,6 +107,8 @@ private: // the workspace the user selected to open std::string m_toOpen; QSignalMapper *m_openMap; + // Command adapters + std::vector<std::unique_ptr<DataProcessorCommandAdapter>> m_commands; signals: void comboProcessInstrument_currentIndexChanged(int index); @@ -109,21 +117,6 @@ public slots: void on_comboProcessInstrument_currentIndexChanged(int index); private slots: - void on_actionAppendRow_triggered(); - void on_actionAppendGroup_triggered(); - void on_actionDeleteRow_triggered(); - void on_actionDeleteGroup_triggered(); - void on_actionProcess_triggered(); - void on_actionGroupRows_triggered(); - void on_actionClearSelected_triggered(); - void on_actionCopySelected_triggered(); - void on_actionCutSelected_triggered(); - void on_actionPasteSelected_triggered(); - void on_actionExpandSelection_triggered(); - void on_actionHelp_triggered(); - void on_actionPlotRow_triggered(); - void on_actionPlotGroup_triggered(); - void setModel(QString name); void tableUpdated(const QModelIndex &topLeft, const QModelIndex &bottomRight); void showContextMenu(const QPoint &pos); diff --git a/MantidQt/MantidWidgets/src/DataProcessorUI/DataProcessorTwoLevelTreeManager.cpp b/MantidQt/MantidWidgets/src/DataProcessorUI/DataProcessorTwoLevelTreeManager.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e4b6aa8dfa2417bf628a6cf666d1548c640d9b00 --- /dev/null +++ b/MantidQt/MantidWidgets/src/DataProcessorUI/DataProcessorTwoLevelTreeManager.cpp @@ -0,0 +1,83 @@ +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorTwoLevelTreeManager.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorAppendGroupCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorAppendRowCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorClearSelectedCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorCopySelectedCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorCutSelectedCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorDeleteGroupCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorDeleteRowCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorExpandCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorExportTableCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorGroupRowsCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorImportTableCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorNewTableCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorOpenTableCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorOptionsCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorPasteSelectedCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorPlotGroupCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorPlotRowCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorProcessCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorSaveTableAsCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorSaveTableCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorSeparatorCommand.h" +#include "MantidKernel/make_unique.h" + +using namespace Mantid::Kernel; +using namespace MantidQt::MantidWidgets; + +namespace MantidQt { +namespace MantidWidgets { + +/** +* Constructor +* @param presenter :: a pointer to the presenter +*/ +DataProcessorTwoLevelTreeManager::DataProcessorTwoLevelTreeManager( + DataProcessorPresenter *presenter) + : m_presenter(presenter) {} + +/** +* Destructor +*/ +DataProcessorTwoLevelTreeManager::~DataProcessorTwoLevelTreeManager() {} + +/** +* Publishes a list of available commands +* @return : The list of available commands +*/ +std::vector<DataProcessorCommand_uptr> +DataProcessorTwoLevelTreeManager::publishCommands() { + + std::vector<DataProcessorCommand_uptr> commands; + + addCommand(commands, make_unique<DataProcessorOpenTableCommand>(m_presenter)); + addCommand(commands, make_unique<DataProcessorNewTableCommand>(m_presenter)); + addCommand(commands, make_unique<DataProcessorSaveTableCommand>(m_presenter)); + addCommand(commands, make_unique<DataProcessorSaveTableAsCommand>(m_presenter)); + addCommand(commands, make_unique<DataProcessorSeparatorCommand>(m_presenter)); + addCommand(commands, make_unique<DataProcessorImportTableCommand>(m_presenter)); + addCommand(commands, make_unique<DataProcessorExportTableCommand>(m_presenter)); + addCommand(commands, make_unique<DataProcessorSeparatorCommand>(m_presenter)); + addCommand(commands, make_unique<DataProcessorOptionsCommand>(m_presenter)); + addCommand(commands, make_unique<DataProcessorSeparatorCommand>(m_presenter)); + addCommand(commands, make_unique<DataProcessorProcessCommand>(m_presenter)); + addCommand(commands, make_unique<DataProcessorExpandCommand>(m_presenter)); + addCommand(commands, make_unique<DataProcessorSeparatorCommand>(m_presenter)); + addCommand(commands, make_unique<DataProcessorPlotRowCommand>(m_presenter)); + addCommand(commands, make_unique<DataProcessorPlotGroupCommand>(m_presenter)); + addCommand(commands, make_unique<DataProcessorSeparatorCommand>(m_presenter)); + addCommand(commands, make_unique<DataProcessorAppendRowCommand>(m_presenter)); + addCommand(commands, make_unique<DataProcessorAppendGroupCommand>(m_presenter)); + addCommand(commands, make_unique<DataProcessorSeparatorCommand>(m_presenter)); + addCommand(commands, make_unique<DataProcessorGroupRowsCommand>(m_presenter)); + addCommand(commands, make_unique<DataProcessorCopySelectedCommand>(m_presenter)); + addCommand(commands, make_unique<DataProcessorCutSelectedCommand>(m_presenter)); + addCommand(commands, make_unique<DataProcessorPasteSelectedCommand>(m_presenter)); + addCommand(commands, make_unique<DataProcessorClearSelectedCommand>(m_presenter)); + addCommand(commands, make_unique<DataProcessorSeparatorCommand>(m_presenter)); + addCommand(commands, make_unique<DataProcessorDeleteRowCommand>(m_presenter)); + addCommand(commands, make_unique<DataProcessorDeleteGroupCommand>(m_presenter)); + return commands; +} +} +} diff --git a/MantidQt/MantidWidgets/src/DataProcessorUI/GenericDataProcessorPresenter.cpp b/MantidQt/MantidWidgets/src/DataProcessorUI/GenericDataProcessorPresenter.cpp index 281b87c6c68a0a9871fd4bc12849f84da8d9f485..30bdae8571bb9f9c0461eb17882079d0764e4c1f 100644 --- a/MantidQt/MantidWidgets/src/DataProcessorUI/GenericDataProcessorPresenter.cpp +++ b/MantidQt/MantidWidgets/src/DataProcessorUI/GenericDataProcessorPresenter.cpp @@ -11,29 +11,9 @@ #include "MantidKernel/Utils.h" #include "MantidKernel/make_unique.h" #include "MantidQtMantidWidgets/AlgorithmHintStrategy.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorAppendGroupCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorAppendRowCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorClearSelectedCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorCopySelectedCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorCutSelectedCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorDeleteGroupCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorDeleteRowCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorExpandCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorExportTableCommand.h" #include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorGenerateNotebook.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorGroupRowsCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorImportTableCommand.h" #include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorMainPresenter.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorNewTableCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorOpenTableCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorOptionsCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorPasteSelectedCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorPlotGroupCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorPlotRowCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorProcessCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorSaveTableAsCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorSaveTableCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorSeparatorCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorTwoLevelTreeManager.h" #include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorView.h" #include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorWorkspaceCommand.h" #include "MantidQtMantidWidgets/DataProcessorUI/ParseKeyValueString.h" @@ -74,6 +54,9 @@ GenericDataProcessorPresenter::GenericDataProcessorPresenter( m_processor(processor), m_postprocessor(postprocessor), m_mainPresenter(), m_tableDirty(false) { + m_manager = + Mantid::Kernel::make_unique<DataProcessorTwoLevelTreeManager>(this); + // Column Options must be added to the whitelist m_whitelist.addElement("Options", "Options", "<b>Override <samp>" + processor.name() + @@ -124,6 +107,9 @@ void GenericDataProcessorPresenter::acceptViews( m_view = tableView; m_progressView = progressView; + // Add actions to toolbar + addActions(); + // Initialise options // Load saved values from disk initOptions(); @@ -1557,6 +1543,17 @@ void GenericDataProcessorPresenter::initOptions() { m_view->loadSettings(m_options); } +/** Tells the view which of the actions should be added to the toolbar +*/ +void GenericDataProcessorPresenter::addActions() { + + auto commands = m_manager->publishCommands(); + std::vector<std::unique_ptr<DataProcessorCommand>> commandsToShow; + for (size_t comm = 10; comm < commands.size(); comm++) + commandsToShow.push_back(std::move(commands.at(comm))); + m_view->addActions(std::move(commandsToShow)); +} + /** * Tells the view to load a table workspace * @param name : [input] The workspace's name @@ -1565,52 +1562,14 @@ void GenericDataProcessorPresenter::setModel(std::string name) { m_view->setModel(name); } -/** -* Adds a command to a vector of commands -* @param commands : [input] The vector where the new command will be added -* @param command : [input] The command to add -*/ -void addToCommand(std::vector<DataProcessorCommand_uptr> &commands, - DataProcessorCommand_uptr command) { - commands.push_back(std::move(command)); -} - /** * Publishes a list of available commands * @return : The list of available commands */ -std::vector<DataProcessorCommand_uptr> +std::vector<std::unique_ptr<DataProcessorCommand>> GenericDataProcessorPresenter::publishCommands() { - std::vector<DataProcessorCommand_uptr> commands; - - addToCommand(commands, make_unique<DataProcessorOpenTableCommand>(this)); - addToCommand(commands, make_unique<DataProcessorNewTableCommand>(this)); - addToCommand(commands, make_unique<DataProcessorSaveTableCommand>(this)); - addToCommand(commands, make_unique<DataProcessorSaveTableAsCommand>(this)); - addToCommand(commands, make_unique<DataProcessorSeparatorCommand>(this)); - addToCommand(commands, make_unique<DataProcessorImportTableCommand>(this)); - addToCommand(commands, make_unique<DataProcessorExportTableCommand>(this)); - addToCommand(commands, make_unique<DataProcessorSeparatorCommand>(this)); - addToCommand(commands, make_unique<DataProcessorOptionsCommand>(this)); - addToCommand(commands, make_unique<DataProcessorSeparatorCommand>(this)); - addToCommand(commands, make_unique<DataProcessorProcessCommand>(this)); - addToCommand(commands, make_unique<DataProcessorExpandCommand>(this)); - addToCommand(commands, make_unique<DataProcessorSeparatorCommand>(this)); - addToCommand(commands, make_unique<DataProcessorPlotRowCommand>(this)); - addToCommand(commands, make_unique<DataProcessorPlotGroupCommand>(this)); - addToCommand(commands, make_unique<DataProcessorSeparatorCommand>(this)); - addToCommand(commands, make_unique<DataProcessorAppendRowCommand>(this)); - addToCommand(commands, make_unique<DataProcessorAppendGroupCommand>(this)); - addToCommand(commands, make_unique<DataProcessorSeparatorCommand>(this)); - addToCommand(commands, make_unique<DataProcessorGroupRowsCommand>(this)); - addToCommand(commands, make_unique<DataProcessorCopySelectedCommand>(this)); - addToCommand(commands, make_unique<DataProcessorCutSelectedCommand>(this)); - addToCommand(commands, make_unique<DataProcessorPasteSelectedCommand>(this)); - addToCommand(commands, make_unique<DataProcessorClearSelectedCommand>(this)); - addToCommand(commands, make_unique<DataProcessorSeparatorCommand>(this)); - addToCommand(commands, make_unique<DataProcessorDeleteRowCommand>(this)); - addToCommand(commands, make_unique<DataProcessorDeleteGroupCommand>(this)); + auto commands = m_manager->publishCommands(); // "Open Table" needs the list of "child" commands, i.e. the list of // available workspaces in the ADS @@ -1640,11 +1599,11 @@ GenericDataProcessorPresenter::getTableList() { // Create a command for each of the workspaces in the ADS for (auto it = m_workspaceList.begin(); it != m_workspaceList.end(); ++it) { - addToCommand( - workspaces, - Mantid::Kernel::make_unique<DataProcessorWorkspaceCommand>(this, *it)); + workspaces.push_back(std::move( + Mantid::Kernel::make_unique<DataProcessorWorkspaceCommand>(this, *it))); } return workspaces; } + } } diff --git a/MantidQt/MantidWidgets/src/DataProcessorUI/QDataProcessorWidget.cpp b/MantidQt/MantidWidgets/src/DataProcessorUI/QDataProcessorWidget.cpp index b13c8597cbe176b9878393a417b59f32b4bf90a8..378bf696b9c363b65eb440cedaef95975e8eca16 100644 --- a/MantidQt/MantidWidgets/src/DataProcessorUI/QDataProcessorWidget.cpp +++ b/MantidQt/MantidWidgets/src/DataProcessorUI/QDataProcessorWidget.cpp @@ -1,7 +1,7 @@ #include "MantidQtMantidWidgets/DataProcessorUI/QDataProcessorWidget.h" #include "MantidQtAPI/FileDialogHandler.h" -#include "MantidQtAPI/HelpWindow.h" #include "MantidQtAPI/MantidWidget.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorCommandAdapter.h" #include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorPresenter.h" #include "MantidQtMantidWidgets/DataProcessorUI/QDataProcessorTwoLevelTreeModel.h" #include "MantidQtMantidWidgets/HintingLineEditFactory.h" @@ -42,11 +42,6 @@ Initialise the Interface void QDataProcessorWidget::createTable() { ui.setupUi(this); - ui.buttonProcess->setDefaultAction(ui.actionProcess); - - // Create a whats this button - ui.rowToolBar->addAction(QWhatsThis::createAction(this)); - // Allow rows and columns to be reordered QHeaderView *header = new QHeaderView(Qt::Horizontal); header->setMovable(true); @@ -62,6 +57,23 @@ void QDataProcessorWidget::createTable() { this, SLOT(showContextMenu(const QPoint &))); } +/** Add actions to the toolbar +* @param commands :: A vector of actions (commands) +*/ +void QDataProcessorWidget::addActions( + std::vector<std::unique_ptr<DataProcessorCommand>> commands) { + + // Put the commands in the toolbar + for (auto &command : commands) { + m_commands.push_back( + Mantid::Kernel::make_unique<DataProcessorCommandAdapter>( + ui.rowToolBar, std::move(command))); + } + + // Add a whats this button + ui.rowToolBar->addAction(QWhatsThis::createAction(this)); +} + /** This slot loads a table workspace model and changes to a LoadedMainView presenter @@ -121,114 +133,6 @@ void QDataProcessorWidget::setTableList(const std::set<std::string> &tables) { } } -/** -This slot notifies the presenter that the "append row" button has been pressed -*/ -void QDataProcessorWidget::on_actionAppendRow_triggered() { - m_presenter->notify(DataProcessorPresenter::AppendRowFlag); -} - -/** -This slot notifies the presenter that the "append group" button has been pressed -*/ -void QDataProcessorWidget::on_actionAppendGroup_triggered() { - m_presenter->notify(DataProcessorPresenter::AppendGroupFlag); -} - -/** -This slot notifies the presenter that the "delete row" button has been pressed -*/ -void QDataProcessorWidget::on_actionDeleteRow_triggered() { - m_presenter->notify(DataProcessorPresenter::DeleteRowFlag); -} - -/** -This slot notifies the presenter that the "delete group" button has been pressed -*/ -void QDataProcessorWidget::on_actionDeleteGroup_triggered() { - m_presenter->notify(DataProcessorPresenter::DeleteGroupFlag); -} - -/** -This slot notifies the presenter that the "process" button has been pressed -*/ -void QDataProcessorWidget::on_actionProcess_triggered() { - m_presenter->notify(DataProcessorPresenter::ProcessFlag); -} - -/** -This slot notifies the presenter that the "group rows" button has been pressed -*/ -void QDataProcessorWidget::on_actionGroupRows_triggered() { - m_presenter->notify(DataProcessorPresenter::GroupRowsFlag); -} - -/** -This slot notifies the presenter that the "clear selected" button has been -pressed -*/ -void QDataProcessorWidget::on_actionClearSelected_triggered() { - m_presenter->notify(DataProcessorPresenter::ClearSelectedFlag); -} - -/** -This slot notifies the presenter that the "copy selection" button has been -pressed -*/ -void QDataProcessorWidget::on_actionCopySelected_triggered() { - m_presenter->notify(DataProcessorPresenter::CopySelectedFlag); -} - -/** -This slot notifies the presenter that the "cut selection" button has been -pressed -*/ -void QDataProcessorWidget::on_actionCutSelected_triggered() { - m_presenter->notify(DataProcessorPresenter::CutSelectedFlag); -} - -/** -This slot notifies the presenter that the "paste selection" button has been -pressed -*/ -void QDataProcessorWidget::on_actionPasteSelected_triggered() { - m_presenter->notify(DataProcessorPresenter::PasteSelectedFlag); -} - -/** -This slot notifies the presenter that the "expand selection" button has been -pressed -*/ -void QDataProcessorWidget::on_actionExpandSelection_triggered() { - m_presenter->notify(DataProcessorPresenter::ExpandSelectionFlag); -} - -/** -This slot opens the documentation when the "help" button has been pressed -*/ -void QDataProcessorWidget::on_actionHelp_triggered() { - MantidQt::API::HelpWindow::showPage( - this, - QString( - "qthelp://org.mantidproject/doc/interfaces/ISIS_Reflectometry.html")); -} - -/** -This slot notifies the presenter that the "plot selected rows" button has been -pressed -*/ -void QDataProcessorWidget::on_actionPlotRow_triggered() { - m_presenter->notify(DataProcessorPresenter::PlotRowFlag); -} - -/** -This slot notifies the presenter that the "plot selected groups" button has been -pressed -*/ -void QDataProcessorWidget::on_actionPlotGroup_triggered() { - m_presenter->notify(DataProcessorPresenter::PlotGroupFlag); -} - /** This slot is used to update the instrument*/ void QDataProcessorWidget::on_comboProcessInstrument_currentIndexChanged( int index) { @@ -255,27 +159,28 @@ void QDataProcessorWidget::showContextMenu(const QPoint &pos) { if (!ui.viewTable->indexAt(pos).isValid()) return; - // parent widget takes ownership of QMenu - QMenu *menu = new QMenu(this); - menu->addAction(ui.actionProcess); - menu->addAction(ui.actionExpandSelection); - menu->addSeparator(); - menu->addAction(ui.actionPlotRow); - menu->addAction(ui.actionPlotGroup); - menu->addSeparator(); - menu->addAction(ui.actionAppendRow); - menu->addAction(ui.actionAppendGroup); - menu->addSeparator(); - menu->addAction(ui.actionGroupRows); - menu->addAction(ui.actionCopySelected); - menu->addAction(ui.actionCutSelected); - menu->addAction(ui.actionPasteSelected); - menu->addAction(ui.actionClearSelected); - menu->addSeparator(); - menu->addAction(ui.actionDeleteRow); - menu->addAction(ui.actionDeleteGroup); - - menu->popup(ui.viewTable->viewport()->mapToGlobal(pos)); + // TODO + //// parent widget takes ownership of QMenu + //QMenu *menu = new QMenu(this); + //menu->addAction(ui.actionProcess); + //menu->addAction(ui.actionExpandSelection); + //menu->addSeparator(); + //menu->addAction(ui.actionPlotRow); + //menu->addAction(ui.actionPlotGroup); + //menu->addSeparator(); + //menu->addAction(ui.actionAppendRow); + //menu->addAction(ui.actionAppendGroup); + //menu->addSeparator(); + //menu->addAction(ui.actionGroupRows); + //menu->addAction(ui.actionCopySelected); + //menu->addAction(ui.actionCutSelected); + //menu->addAction(ui.actionPasteSelected); + //menu->addAction(ui.actionClearSelected); + //menu->addSeparator(); + //menu->addAction(ui.actionDeleteRow); + //menu->addAction(ui.actionDeleteGroup); + + //menu->popup(ui.viewTable->viewport()->mapToGlobal(pos)); } /** diff --git a/MantidQt/MantidWidgets/test/DataProcessorUI/DataProcessorCommandsTest.h b/MantidQt/MantidWidgets/test/DataProcessorUI/DataProcessorCommandsTest.h index ff1a323f1c4e2ed0d1153a46b7339e8bd0bde3b4..02e1add8f8aeb48eca688e60c52639a8f87b64bb 100644 --- a/MantidQt/MantidWidgets/test/DataProcessorUI/DataProcessorCommandsTest.h +++ b/MantidQt/MantidWidgets/test/DataProcessorUI/DataProcessorCommandsTest.h @@ -32,7 +32,6 @@ #include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorWorkspaceCommand.h" using namespace MantidQt::MantidWidgets; -// using namespace Mantid::API; using namespace testing; //===================================================================================== diff --git a/MantidQt/MantidWidgets/test/DataProcessorUI/DataProcessorTwoLevelTreeManagerTest.h b/MantidQt/MantidWidgets/test/DataProcessorUI/DataProcessorTwoLevelTreeManagerTest.h new file mode 100644 index 0000000000000000000000000000000000000000..e509592b71726f7774b95311e5fa32a00a975d6c --- /dev/null +++ b/MantidQt/MantidWidgets/test/DataProcessorUI/DataProcessorTwoLevelTreeManagerTest.h @@ -0,0 +1,89 @@ +#ifndef MANTID_MANTIDWIDGETS_DATAPROCESSORTWOLEVELTREEMANAGERTEST_H +#define MANTID_MANTIDWIDGETS_DATAPROCESSORTWOLEVELTREEMANAGERTEST_H + +#include <cxxtest/TestSuite.h> +#include <gmock/gmock.h> +#include <gtest/gtest.h> + +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorTwoLevelTreeManager.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorAppendGroupCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorAppendRowCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorClearSelectedCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorCopySelectedCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorCutSelectedCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorDeleteGroupCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorDeleteRowCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorExpandCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorExportTableCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorGroupRowsCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorImportTableCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorMockObjects.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorNewTableCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorOpenTableCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorOptionsCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorPasteSelectedCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorPlotGroupCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorPlotRowCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorProcessCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorSaveTableAsCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorSaveTableCommand.h" +#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorSeparatorCommand.h" + +using namespace MantidQt::MantidWidgets; +using namespace testing; + +//===================================================================================== +// Functional tests +//===================================================================================== +class DataProcessorTwoLevelTreeManagerTest : public CxxTest::TestSuite { + +private: +public: + // This pair of boilerplate methods prevent the suite being created statically + // This means the constructor isn't called when running other tests + static DataProcessorTwoLevelTreeManagerTest *createSuite() { + return new DataProcessorTwoLevelTreeManagerTest(); + } + static void destroySuite(DataProcessorTwoLevelTreeManagerTest *suite) { + delete suite; + } + + void test_publish_commands() { + NiceMock<MockDataProcessorPresenter> presenter; + DataProcessorTwoLevelTreeManager manager(&presenter); + + auto comm = manager.publishCommands(); + + TS_ASSERT_EQUALS(comm.size(), 27); + TS_ASSERT(dynamic_cast<DataProcessorOpenTableCommand *>(comm[0].get())); + TS_ASSERT(dynamic_cast<DataProcessorNewTableCommand *>(comm[1].get())); + TS_ASSERT(dynamic_cast<DataProcessorSaveTableCommand *>(comm[2].get())); + TS_ASSERT(dynamic_cast<DataProcessorSaveTableAsCommand *>(comm[3].get())); + TS_ASSERT(dynamic_cast<DataProcessorSeparatorCommand *>(comm[4].get())); + TS_ASSERT(dynamic_cast<DataProcessorImportTableCommand *>(comm[5].get())); + TS_ASSERT(dynamic_cast<DataProcessorExportTableCommand *>(comm[6].get())); + TS_ASSERT(dynamic_cast<DataProcessorSeparatorCommand *>(comm[7].get())); + TS_ASSERT(dynamic_cast<DataProcessorOptionsCommand *>(comm[8].get())); + TS_ASSERT(dynamic_cast<DataProcessorSeparatorCommand *>(comm[9].get())); + TS_ASSERT(dynamic_cast<DataProcessorProcessCommand *>(comm[10].get())); + TS_ASSERT(dynamic_cast<DataProcessorExpandCommand *>(comm[11].get())); + TS_ASSERT(dynamic_cast<DataProcessorSeparatorCommand *>(comm[12].get())); + TS_ASSERT(dynamic_cast<DataProcessorPlotRowCommand *>(comm[13].get())); + TS_ASSERT(dynamic_cast<DataProcessorPlotGroupCommand *>(comm[14].get())); + TS_ASSERT(dynamic_cast<DataProcessorSeparatorCommand *>(comm[15].get())); + TS_ASSERT(dynamic_cast<DataProcessorAppendRowCommand *>(comm[16].get())); + TS_ASSERT(dynamic_cast<DataProcessorAppendGroupCommand *>(comm[17].get())); + TS_ASSERT(dynamic_cast<DataProcessorSeparatorCommand *>(comm[18].get())); + TS_ASSERT(dynamic_cast<DataProcessorGroupRowsCommand *>(comm[19].get())); + TS_ASSERT(dynamic_cast<DataProcessorCopySelectedCommand *>(comm[20].get())); + TS_ASSERT(dynamic_cast<DataProcessorCutSelectedCommand *>(comm[21].get())); + TS_ASSERT( + dynamic_cast<DataProcessorPasteSelectedCommand *>(comm[22].get())); + TS_ASSERT( + dynamic_cast<DataProcessorClearSelectedCommand *>(comm[23].get())); + TS_ASSERT(dynamic_cast<DataProcessorSeparatorCommand *>(comm[24].get())); + TS_ASSERT(dynamic_cast<DataProcessorDeleteRowCommand *>(comm[25].get())); + TS_ASSERT(dynamic_cast<DataProcessorDeleteGroupCommand *>(comm[26].get())); + } +}; +#endif /* MANTID_MANTIDWIDGETS_DATAPROCESSORTWOLEVELTREEMANAGERTEST_H */ diff --git a/MantidQt/MantidWidgets/test/DataProcessorUI/GenericDataProcessorPresenterTest.h b/MantidQt/MantidWidgets/test/DataProcessorUI/GenericDataProcessorPresenterTest.h index 162757d97abb1c5919c0fa480d0738a10fe9af13..5bc65a098121913552d540c5a3185e9e05c1dff3 100644 --- a/MantidQt/MantidWidgets/test/DataProcessorUI/GenericDataProcessorPresenterTest.h +++ b/MantidQt/MantidWidgets/test/DataProcessorUI/GenericDataProcessorPresenterTest.h @@ -8,28 +8,7 @@ #include "MantidAPI/FrameworkManager.h" #include "MantidAPI/TableRow.h" #include "MantidGeometry/Instrument.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorAppendGroupCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorAppendRowCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorClearSelectedCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorCopySelectedCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorCutSelectedCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorDeleteGroupCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorDeleteRowCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorExpandCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorExportTableCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorGroupRowsCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorImportTableCommand.h" #include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorMockObjects.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorNewTableCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorOpenTableCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorOptionsCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorPasteSelectedCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorPlotGroupCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorPlotRowCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorProcessCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorSaveTableAsCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorSaveTableCommand.h" -#include "MantidQtMantidWidgets/DataProcessorUI/DataProcessorSeparatorCommand.h" #include "MantidQtMantidWidgets/DataProcessorUI/GenericDataProcessorPresenter.h" #include "MantidQtMantidWidgets/DataProcessorUI/ProgressableViewMockObject.h" #include "MantidTestHelpers/WorkspaceCreationHelper.h" @@ -327,6 +306,7 @@ public: // called EXPECT_CALL(mockDataProcessorView, setTableList(_)).Times(0); EXPECT_CALL(mockDataProcessorView, setOptionsHintStrategy(_, _)).Times(0); + EXPECT_CALL(mockDataProcessorView, addActionsProxy()).Times(0); // Constructor GenericDataProcessorPresenter presenter( createReflectometryWhiteList(), createReflectometryPreprocessMap(), @@ -352,6 +332,8 @@ public: createReflectometryProcessor(), createReflectometryPostprocessor()); // When the presenter accepts the views, expect the following: + // Expect that the list of actions is published + EXPECT_CALL(mockDataProcessorView, addActionsProxy()).Times(Exactly(1)); // Expect that the list of settings is populated EXPECT_CALL(mockDataProcessorView, loadSettings(_)).Times(Exactly(1)); // Expect that the list of tables is populated @@ -2720,68 +2702,6 @@ public: TS_ASSERT(Mock::VerifyAndClearExpectations(&mockMainPresenter)); } - void testPublishCommands() { - // The mock view is not needed for this test - // We just want to test the list of commands returned by the presenter - NiceMock<MockDataProcessorView> mockDataProcessorView; - MockProgressableView mockProgress; - NiceMock<MockMainPresenter> mockMainPresenter; - GenericDataProcessorPresenter presenter( - createReflectometryWhiteList(), createReflectometryPreprocessMap(), - createReflectometryProcessor(), createReflectometryPostprocessor()); - presenter.acceptViews(&mockDataProcessorView, &mockProgress); - presenter.accept(&mockMainPresenter); - - // Actions (commands) - auto commands = presenter.publishCommands(); - TS_ASSERT_EQUALS(commands.size(), 27); - - TS_ASSERT(dynamic_cast<DataProcessorOpenTableCommand *>(commands[0].get())); - TS_ASSERT(dynamic_cast<DataProcessorNewTableCommand *>(commands[1].get())); - TS_ASSERT(dynamic_cast<DataProcessorSaveTableCommand *>(commands[2].get())); - TS_ASSERT( - dynamic_cast<DataProcessorSaveTableAsCommand *>(commands[3].get())); - TS_ASSERT(dynamic_cast<DataProcessorSeparatorCommand *>(commands[4].get())); - TS_ASSERT( - dynamic_cast<DataProcessorImportTableCommand *>(commands[5].get())); - TS_ASSERT( - dynamic_cast<DataProcessorExportTableCommand *>(commands[6].get())); - TS_ASSERT(dynamic_cast<DataProcessorSeparatorCommand *>(commands[7].get())); - TS_ASSERT(dynamic_cast<DataProcessorOptionsCommand *>(commands[8].get())); - TS_ASSERT(dynamic_cast<DataProcessorSeparatorCommand *>(commands[9].get())); - TS_ASSERT(dynamic_cast<DataProcessorProcessCommand *>(commands[10].get())); - TS_ASSERT(dynamic_cast<DataProcessorExpandCommand *>(commands[11].get())); - TS_ASSERT( - dynamic_cast<DataProcessorSeparatorCommand *>(commands[12].get())); - TS_ASSERT(dynamic_cast<DataProcessorPlotRowCommand *>(commands[13].get())); - TS_ASSERT( - dynamic_cast<DataProcessorPlotGroupCommand *>(commands[14].get())); - TS_ASSERT( - dynamic_cast<DataProcessorSeparatorCommand *>(commands[15].get())); - TS_ASSERT( - dynamic_cast<DataProcessorAppendRowCommand *>(commands[16].get())); - TS_ASSERT( - dynamic_cast<DataProcessorAppendGroupCommand *>(commands[17].get())); - TS_ASSERT( - dynamic_cast<DataProcessorSeparatorCommand *>(commands[18].get())); - TS_ASSERT( - dynamic_cast<DataProcessorGroupRowsCommand *>(commands[19].get())); - TS_ASSERT( - dynamic_cast<DataProcessorCopySelectedCommand *>(commands[20].get())); - TS_ASSERT( - dynamic_cast<DataProcessorCutSelectedCommand *>(commands[21].get())); - TS_ASSERT( - dynamic_cast<DataProcessorPasteSelectedCommand *>(commands[22].get())); - TS_ASSERT( - dynamic_cast<DataProcessorClearSelectedCommand *>(commands[23].get())); - TS_ASSERT( - dynamic_cast<DataProcessorSeparatorCommand *>(commands[24].get())); - TS_ASSERT( - dynamic_cast<DataProcessorDeleteRowCommand *>(commands[25].get())); - TS_ASSERT( - dynamic_cast<DataProcessorDeleteGroupCommand *>(commands[26].get())); - } - void testWorkspaceNamesNoTrans() { NiceMock<MockDataProcessorView> mockDataProcessorView; NiceMock<MockProgressableView> mockProgress;