diff --git a/applications/mne_scan/libs/scShared/Plugins/abstractalgorithm.h b/applications/mne_scan/libs/scShared/Plugins/abstractalgorithm.h index 75a0a76d953..9a68bc1b09f 100644 --- a/applications/mne_scan/libs/scShared/Plugins/abstractalgorithm.h +++ b/applications/mne_scan/libs/scShared/Plugins/abstractalgorithm.h @@ -136,12 +136,15 @@ class AbstractAlgorithm : public AbstractPlugin //========================================================================================================= /** - * Returns the set up widget for configuration of AbstractAlgorithm. - * Pure virtual method inherited by AbstractPlugin. - * - * @return the setup widget. + * Returns whether a plugin has a GUI component. + */ + virtual inline bool hasGUI() const; + + //========================================================================================================= + /** + * Whether the plugin can be added to a scene. */ - virtual QWidget* setupWidget() = 0; //setup(); + virtual bool inline isScenePlugin() const; protected: //========================================================================================================= @@ -161,6 +164,21 @@ inline bool AbstractAlgorithm::multiInstanceAllowed() const { return true; } + +//============================================================================================================= + +inline bool AbstractAlgorithm::hasGUI() const +{ + return true; +} + +//============================================================================================================= + +inline bool AbstractAlgorithm::isScenePlugin() const +{ + return true; +} + } // NAMESPACE Q_DECLARE_INTERFACE(SCSHAREDLIB::AbstractAlgorithm, "scsharedlib/1.0") diff --git a/applications/mne_scan/libs/scShared/Plugins/abstractpassive.h b/applications/mne_scan/libs/scShared/Plugins/abstractpassive.h new file mode 100644 index 00000000000..00ab7151140 --- /dev/null +++ b/applications/mne_scan/libs/scShared/Plugins/abstractpassive.h @@ -0,0 +1,4 @@ +#ifndef ABSTRACTPASSIVE_H +#define ABSTRACTPASSIVE_H + +#endif // ABSTRACTPASSIVE_H diff --git a/applications/mne_scan/libs/scShared/Plugins/abstractplugin.h b/applications/mne_scan/libs/scShared/Plugins/abstractplugin.h index 03d4f387d88..59a3763ca34 100644 --- a/applications/mne_scan/libs/scShared/Plugins/abstractplugin.h +++ b/applications/mne_scan/libs/scShared/Plugins/abstractplugin.h @@ -41,11 +41,15 @@ #include "../scshared_global.h" +#include "plugingui.h" + #include "../Management/pluginoutputdata.h" #include "../Management/plugininputdata.h" #include +#include + //============================================================================================================= // QT INCLUDES //============================================================================================================= @@ -142,11 +146,9 @@ class SCSHAREDSHARED_EXPORT AbstractPlugin : public QThread //========================================================================================================= /** - * A list of actions for the current plugin. - * - * @return a list of plugin actions. + * Whether the plugin can be added to a scene. */ - inline QList< QAction* > getPluginActions(); + virtual bool isScenePlugin() const = 0; //========================================================================================================= /** @@ -172,16 +174,13 @@ class SCSHAREDSHARED_EXPORT AbstractPlugin : public QThread * * @return true if multi instantiation of plugin is allowed. */ - virtual inline bool multiInstanceAllowed() const = 0; + virtual inline bool multiInstanceAllowed() const; //========================================================================================================= /** - * Returns the set up widget for configuration of the AbstractPlugin. - * Pure virtual method. - * - * @return the setup widget. + * Returns whether a plugin has a GUI component. */ - virtual QWidget* setupWidget() = 0; //setup() + virtual bool hasGUI() const = 0; //========================================================================================================= /** @@ -194,6 +193,7 @@ class SCSHAREDSHARED_EXPORT AbstractPlugin : public QThread inline InputConnectorList& getInputConnectors(){return m_inputConnectors;} inline OutputConnectorList& getOutputConnectors(){return m_outputConnectors;} + inline const PluginGUI* getGUI() const; signals: //========================================================================================================= /** @@ -223,21 +223,12 @@ class SCSHAREDSHARED_EXPORT AbstractPlugin : public QThread */ virtual void run() = 0; - //========================================================================================================= - /** - * Adds a plugin action to the current plugin. - * - * @param[in] pAction pointer to the action to be added to the plugin. - */ - inline void addPluginAction(QAction* pAction); - InputConnectorList m_inputConnectors; /**< Set of input connectors associated with this plug-in. */ OutputConnectorList m_outputConnectors; /**< Set of output connectors associated with this plug-in. */ bool m_bPluginControlWidgetsInit = false; /**< Flag to indicate if the plugin control widgets were initialized already. */ -private: - QList< QAction* > m_qListPluginActions; /**< List of plugin actions. */ + std::unique_ptr m_pGUI; /**< Plugin GUI. */ }; //============================================================================================================= @@ -251,16 +242,9 @@ inline bool AbstractPlugin::multiInstanceAllowed() const //============================================================================================================= -inline QList< QAction* > AbstractPlugin::getPluginActions() -{ - return m_qListPluginActions; -} - -//============================================================================================================= - -inline void AbstractPlugin::addPluginAction(QAction* pAction) +inline const PluginGUI* AbstractPlugin::getGUI() const { - m_qListPluginActions.append(pAction); + return m_pGUI.get(); } //============================================================================================================= diff --git a/applications/mne_scan/libs/scShared/Plugins/abstractsensor.h b/applications/mne_scan/libs/scShared/Plugins/abstractsensor.h index 4233f991c6b..89762c1f6df 100644 --- a/applications/mne_scan/libs/scShared/Plugins/abstractsensor.h +++ b/applications/mne_scan/libs/scShared/Plugins/abstractsensor.h @@ -128,12 +128,15 @@ class AbstractSensor : public AbstractPlugin //========================================================================================================= /** - * Returns the set up widget for configuration of AbstractSensor. - * Pure virtual method inherited by IModule. - * - * @return the setup widget. + * Returns whether a plugin has a GUI component. */ - virtual QWidget* setupWidget() = 0; + virtual inline bool hasGUI() const; + + //========================================================================================================= + /** + * Whether the plugin can be added to a scene. + */ + virtual bool inline isScenePlugin() const; protected: @@ -154,6 +157,21 @@ inline bool AbstractSensor::multiInstanceAllowed() const { return false; } + +//============================================================================================================= + +inline bool AbstractSensor::hasGUI() const +{ + return true; +} + +//============================================================================================================= + +inline bool AbstractSensor::isScenePlugin() const +{ + return true; +} + } //NAMESPACE Q_DECLARE_INTERFACE(SCSHAREDLIB::AbstractSensor, "scsharedlib/1.0") diff --git a/applications/mne_scan/libs/scShared/Plugins/plugingui.h b/applications/mne_scan/libs/scShared/Plugins/plugingui.h new file mode 100644 index 00000000000..c041ff1981c --- /dev/null +++ b/applications/mne_scan/libs/scShared/Plugins/plugingui.h @@ -0,0 +1,155 @@ +#ifndef PLUGINGUI_H +#define PLUGINGUI_H + +//============================================================================================================= +// QT INCLUDES +//============================================================================================================= + +#include +#include +#include + +//============================================================================================================= +/** + * Used as the interface for returning the GUI for a plugin. + * + * Can be used by either passing in items with the 'add' and 'set' functions, + * or subclassed and reimplementing the 'get' functions. + */ +class PluginGUI +{ +public: + //========================================================================================================= + /** + * A list of actions for the current plugin. + * + * @return a list of plugin actions. + */ + inline virtual QList< QAction* > getPluginActions() const; + + //========================================================================================================= + /** + * A list of menus for the current plugin. + * + * @return a list of plugin actions. + */ + inline virtual QList< QMenu* > getPluginMenus() const; + + //========================================================================================================= + /** + * A list of widgets for the current plugin. + * + * @return a list of plugin actions. + */ + inline virtual QList< QWidget* > getPluginWidgets() const; + + //========================================================================================================= + /** + * Adds a plugin action to the current plugin. + * + * @param[in] pAction pointer to the action to be added to the plugin. + */ + inline void addPluginAction(QAction* pAction); + + //========================================================================================================= + /** + * Adds a plugin menu to the current plugin. + * + * @param[in] pMenu pointer to the menu to be added to the plugin. + */ + inline void addPluginMenu(QMenu* pMenu); + + //========================================================================================================= + /** + * Adds a plugin widget to the current plugin. + * + * @param[in] pWidget pointer to the widget to be added to the plugin. + */ + inline void addPluginWidget(QWidget* pWidget); + + //========================================================================================================= + /** + * Returns the set up widget for configuration of the AbstractPlugin. + * + * @return the setup widget. + */ + inline virtual QWidget* getSetupWidget() const; + + //========================================================================================================= + /** + * Sets the setup widget. + */ + inline void setSetupWidget(QWidget* pWidget); + + +private: + QList< QAction* > m_qListPluginActions; /**< List of plugin actions. */ + QList< QMenu* > m_qListPluginMenus; /**< List of plugin menus. */ + QList< QWidget* > m_qListPluginWidgets; /**< List of plugin widgets. */ + + QWidget* m_pSetupWidget; +}; + +//============================================================================================================= +// INLINE DEFINITIONS +//============================================================================================================= + + +inline QList< QAction* > PluginGUI::getPluginActions() const +{ + return m_qListPluginActions; +} + +//============================================================================================================= + +inline void PluginGUI::addPluginAction(QAction* pAction) +{ + m_qListPluginActions.append(pAction); +} + +//============================================================================================================= + +inline QList< QMenu* > PluginGUI::getPluginMenus() const +{ + return m_qListPluginMenus; +} + +//============================================================================================================= + +inline void PluginGUI::addPluginMenu(QMenu* pMenu) +{ + m_qListPluginMenus.append(pMenu); +} + +//============================================================================================================= + +inline QList< QWidget* > PluginGUI::getPluginWidgets() const +{ + return m_qListPluginWidgets; +} + +//============================================================================================================= + +inline void PluginGUI::addPluginWidget(QWidget* pWidget) +{ + m_qListPluginWidgets.append(pWidget); +} + +//============================================================================================================= + +inline QWidget* PluginGUI::getSetupWidget() const +{ + return m_pSetupWidget; +} + +//============================================================================================================= +/** + * Sets the setup widget. + */ +inline void PluginGUI::setSetupWidget(QWidget* pWidget) +{ + m_pSetupWidget = pWidget; +} + + +#endif // PLUGINGUI_H diff --git a/applications/mne_scan/libs/scShared/scShared.pro b/applications/mne_scan/libs/scShared/scShared.pro index ce4fdc49a02..26dbf4bdedd 100644 --- a/applications/mne_scan/libs/scShared/scShared.pro +++ b/applications/mne_scan/libs/scShared/scShared.pro @@ -103,6 +103,8 @@ SOURCES += \ Management/displaymanager.cpp HEADERS += \ + Plugins/abstractpassive.h \ + Plugins/plugingui.h \ scshared_global.h \ Plugins/abstractplugin.h \ Plugins/abstractsensor.h \ diff --git a/applications/mne_scan/mne_scan/mainwindow.cpp b/applications/mne_scan/mne_scan/mainwindow.cpp index 1300ba0cfd1..5282e5ca3f3 100644 --- a/applications/mne_scan/mne_scan/mainwindow.cpp +++ b/applications/mne_scan/mne_scan/mainwindow.cpp @@ -58,7 +58,7 @@ #include "mainwindow.h" #include "startupwidget.h" -#include "plugingui.h" +#include "pluginscenegui.h" #include "info.h" #include "mainsplashscreencloser.h" @@ -692,20 +692,20 @@ void MainWindow::createPluginDockWindow() m_pPluginGuiDockWidget = new QDockWidget(tr("Plugins"), this); m_pPluginGuiDockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); - m_pPluginGui = new PluginGui(m_pPluginManager.data(), m_pPluginSceneManager.data()); + m_pPluginGui = new PluginSceneGui(m_pPluginManager.data(), m_pPluginSceneManager.data()); m_pPluginGui->setParent(m_pPluginGuiDockWidget); m_pPluginGuiDockWidget->setWidget(m_pPluginGui); addDockWidget(Qt::LeftDockWidgetArea, m_pPluginGuiDockWidget); - connect(m_pPluginGui.data(), &PluginGui::selectedPluginChanged, + connect(m_pPluginGui.data(), &PluginSceneGui::selectedPluginChanged, this, &MainWindow::updatePluginSetupWidget); if(m_pPluginGui->getCurrentPlugin()) { updatePluginSetupWidget(m_pPluginGui->getCurrentPlugin()); } - connect(m_pPluginGui.data(), &PluginGui::selectedConnectionChanged, + connect(m_pPluginGui.data(), &PluginSceneGui::selectedConnectionChanged, this, &MainWindow::updateConnectionWidget); m_pMenuView->addAction(m_pPluginGuiDockWidget->toggleViewAction()); @@ -736,17 +736,12 @@ void MainWindow::updatePluginSetupWidget(SCSHAREDLIB::AbstractPlugin::SPtr pPlug { m_qListDynamicPluginActions.clear(); - if(!pPlugin.isNull()) { + if(!pPlugin.isNull() && pPlugin->hasGUI()) { // Add Dynamic Plugin Actions - m_qListDynamicPluginActions.append(pPlugin->getPluginActions()); - - if(pPlugin.isNull()) { - QWidget* pWidget = new QWidget; - setCentralWidget(pWidget); - } else { - if(!m_bIsRunning) { - setCentralWidget(pPlugin->setupWidget()); - } + m_qListDynamicPluginActions.append(pPlugin->getGUI()->getPluginActions()); + if(!m_bIsRunning) { + this->centralWidget()->setParent(nullptr); + setCentralWidget(pPlugin->getGUI()->getSetupWidget()); } } else { QWidget* pWidget = new QWidget; @@ -761,7 +756,7 @@ void MainWindow::initMultiViewWidget(QListgetPluginActions()); + m_qListDynamicPluginActions.append(lPlugins.at(i)->getGUI()->getPluginActions()); QString sCurPluginName = lPlugins.at(i)->getName(); @@ -772,8 +767,8 @@ void MainWindow::initMultiViewWidget(QListsetupWidget()); + if(!m_bIsRunning && lPlugins.at(i)->hasGUI()) { + setCentralWidget(lPlugins.at(i)->getGUI()->getSetupWidget()); } else { // Connect plugin controls to GUI mode toggling connect(this, &MainWindow::guiModeChanged, diff --git a/applications/mne_scan/mne_scan/mainwindow.h b/applications/mne_scan/mne_scan/mainwindow.h index 345e57dedac..3c4cb8a78de 100644 --- a/applications/mne_scan/mne_scan/mainwindow.h +++ b/applications/mne_scan/mne_scan/mainwindow.h @@ -43,6 +43,7 @@ #include "info.h" #include "mainsplashscreen.h" #include "mainsplashscreencloser.h" +#include "pluginscenegui.h" #include @@ -103,7 +104,7 @@ namespace MNESCAN //============================================================================================================= class StartUpWidget; -class PluginGui; +class PluginSceneGui; class RunWidget; class PluginDockWidget; @@ -429,7 +430,7 @@ class MainWindow : public QMainWindow LogLevel m_eLogLevelCurrent; /**< Holds the current log level.*/ - QPointer m_pPluginGui; /**< Holds the plugin GUI.*/ + QPointer m_pPluginGui; /**< Holds the plugin GUI.*/ QPointer m_pQuickControlView; /**< quick control widget. */ diff --git a/applications/mne_scan/mne_scan/mne_scan.pro b/applications/mne_scan/mne_scan/mne_scan.pro index 3ebc58c0b63..aa5629f8ee1 100755 --- a/applications/mne_scan/mne_scan/mne_scan.pro +++ b/applications/mne_scan/mne_scan/mne_scan.pro @@ -144,22 +144,22 @@ CONFIG(debug, debug|release) { SOURCES += \ main.cpp \ mainsplashscreencloser.cpp \ + pluginscenegui.cpp \ startupwidget.cpp \ mainsplashscreen.cpp \ pluginscene.cpp \ pluginitem.cpp \ - plugingui.cpp \ arrow.cpp \ mainwindow.cpp HEADERS += \ info.h \ mainsplashscreencloser.h \ + pluginscenegui.h \ startupwidget.h \ mainsplashscreen.h \ pluginscene.h \ pluginitem.h \ - plugingui.h \ arrow.h \ mainwindow.h diff --git a/applications/mne_scan/mne_scan/pluginscene.cpp b/applications/mne_scan/mne_scan/pluginscene.cpp index e2e392cd0d5..23655f209ce 100644 --- a/applications/mne_scan/mne_scan/pluginscene.cpp +++ b/applications/mne_scan/mne_scan/pluginscene.cpp @@ -38,7 +38,7 @@ //============================================================================================================= #include "pluginscene.h" -#include "plugingui.h" +#include "pluginscenegui.h" #include "arrow.h" #include @@ -55,7 +55,7 @@ using namespace MNESCAN; // DEFINE MEMBER METHODS //============================================================================================================= -PluginScene::PluginScene(QMenu *pMenuPluginItem, PluginGui *pPluginGui) +PluginScene::PluginScene(QMenu *pMenuPluginItem, PluginSceneGui *pPluginGui) : QGraphicsScene(pPluginGui) , m_pPluginGui(pPluginGui) , m_pActionPluginItem(Q_NULLPTR) diff --git a/applications/mne_scan/mne_scan/pluginscene.h b/applications/mne_scan/mne_scan/pluginscene.h index a521bc536a7..2edf723b9b0 100644 --- a/applications/mne_scan/mne_scan/pluginscene.h +++ b/applications/mne_scan/mne_scan/pluginscene.h @@ -72,7 +72,7 @@ namespace MNESCAN // MNESCAN FORWARD DECLARATIONS //============================================================================================================= -class PluginGui; +class PluginSceneGui; class PluginScene : public QGraphicsScene { @@ -84,7 +84,7 @@ class PluginScene : public QGraphicsScene enum Mode { InsertPluginItem, InsertLine, MovePluginItem}; - explicit PluginScene(QMenu *pMenuPluginItem, PluginGui *pPluginGui); + explicit PluginScene(QMenu *pMenuPluginItem, PluginSceneGui *pPluginGui); ~PluginScene(); @@ -121,7 +121,7 @@ class PluginScene : public QGraphicsScene private: // bool isItemChange(int type); - PluginGui* m_pPluginGui; /**< Corresponding plugin gui. */ + PluginSceneGui* m_pPluginGui; /**< Corresponding plugin gui. */ //Current info Mode m_mode; diff --git a/applications/mne_scan/mne_scan/plugingui.cpp b/applications/mne_scan/mne_scan/pluginscenegui.cpp similarity index 92% rename from applications/mne_scan/mne_scan/plugingui.cpp rename to applications/mne_scan/mne_scan/pluginscenegui.cpp index 8a372064b99..34f3efb1b95 100644 --- a/applications/mne_scan/mne_scan/plugingui.cpp +++ b/applications/mne_scan/mne_scan/pluginscenegui.cpp @@ -37,7 +37,7 @@ // INCLUDES //============================================================================================================= -#include "plugingui.h" +#include "pluginscenegui.h" #include "arrow.h" #include "pluginitem.h" @@ -68,7 +68,7 @@ using namespace MNESCAN; // DEFINE MEMBER METHODS //============================================================================================================= -PluginGui::PluginGui(SCSHAREDLIB::PluginManager *pPluginManager, +PluginSceneGui::PluginSceneGui(SCSHAREDLIB::PluginManager *pPluginManager, SCSHAREDLIB::PluginSceneManager *pPluginSceneManager) : m_pPluginManager(pPluginManager) , m_pPluginSceneManager(pPluginSceneManager) @@ -90,10 +90,10 @@ PluginGui::PluginGui(SCSHAREDLIB::PluginManager *pPluginManager, //m_pPluginScene->setSceneRect(0, 0, 200, 500); connect(m_pPluginScene, &PluginScene::itemInserted, - this, &PluginGui::itemInserted); + this, &PluginSceneGui::itemInserted); connect(m_pPluginScene, &PluginScene::selectionChanged, - this, &PluginGui::newItemSelected); + this, &PluginSceneGui::newItemSelected); m_pGraphicsView = new QGraphicsView(m_pPluginScene); setCentralWidget(m_pGraphicsView); @@ -119,7 +119,7 @@ PluginGui::PluginGui(SCSHAREDLIB::PluginManager *pPluginManager, //============================================================================================================= -PluginGui::~PluginGui() +PluginSceneGui::~PluginSceneGui() { // // Save current configuration @@ -152,7 +152,7 @@ PluginGui::~PluginGui() //============================================================================================================= -void PluginGui::clearScene() +void PluginSceneGui::clearScene() { foreach (QGraphicsItem *item, m_pPluginScene->items()) { @@ -170,7 +170,7 @@ void PluginGui::clearScene() //============================================================================================================= -void PluginGui::loadConfig(const QString& sPath, const QString& sFileName) +void PluginSceneGui::loadConfig(const QString& sPath, const QString& sFileName) { qDebug() << "load" << sPath+"/"+sFileName; @@ -284,7 +284,7 @@ void PluginGui::loadConfig(const QString& sPath, const QString& sFileName) //============================================================================================================= -void PluginGui::saveConfig(const QString& sPath, const QString& sFileName) +void PluginSceneGui::saveConfig(const QString& sPath, const QString& sFileName) { qDebug() << "Save Config" << sPath+"/"+sFileName; QDomDocument doc("PluginConfig"); @@ -347,7 +347,7 @@ void PluginGui::saveConfig(const QString& sPath, const QString& sFileName) //============================================================================================================= -void PluginGui::uiSetupRunningState(bool state) +void PluginSceneGui::uiSetupRunningState(bool state) { if(state) { @@ -365,7 +365,7 @@ void PluginGui::uiSetupRunningState(bool state) //============================================================================================================= -bool PluginGui::removePlugin(SCSHAREDLIB::AbstractPlugin::SPtr pPlugin) +bool PluginSceneGui::removePlugin(SCSHAREDLIB::AbstractPlugin::SPtr pPlugin) { bool bRemoved = m_pPluginSceneManager->removePlugin(pPlugin); @@ -402,7 +402,7 @@ bool PluginGui::removePlugin(SCSHAREDLIB::AbstractPlugin::SPtr pPlugin) //============================================================================================================= -void PluginGui::actionGroupTriggered(QAction* action) +void PluginSceneGui::actionGroupTriggered(QAction* action) { m_pPluginScene->setActionPluginItem(action); m_pPluginScene->setMode(PluginScene::InsertPluginItem); @@ -410,7 +410,7 @@ void PluginGui::actionGroupTriggered(QAction* action) //============================================================================================================= -void PluginGui::itemInserted(PluginItem *item) +void PluginSceneGui::itemInserted(PluginItem *item) { if(item) { m_pCurrentPlugin = item->plugin(); @@ -425,7 +425,7 @@ void PluginGui::itemInserted(PluginItem *item) //============================================================================================================= -void PluginGui::newItemSelected() +void PluginSceneGui::newItemSelected() { SCSHAREDLIB::AbstractPlugin::SPtr pPlugin; SCSHAREDLIB::PluginConnectorConnection::SPtr pConnection; @@ -455,7 +455,7 @@ void PluginGui::newItemSelected() //============================================================================================================= -void PluginGui::deleteItem() +void PluginSceneGui::deleteItem() { //Remove Arrows ToDo Connections foreach (QGraphicsItem *item, m_pPluginScene->selectedItems()) @@ -488,14 +488,14 @@ void PluginGui::deleteItem() //============================================================================================================= -void PluginGui::pointerGroupClicked(int) +void PluginSceneGui::pointerGroupClicked(int) { m_pPluginScene->setMode(PluginScene::Mode(m_pButtonGroupPointers->checkedId())); } //============================================================================================================= -void PluginGui::bringToFront() +void PluginSceneGui::bringToFront() { if (m_pPluginScene->selectedItems().isEmpty()) return; @@ -513,7 +513,7 @@ void PluginGui::bringToFront() //============================================================================================================= -void PluginGui::sendToBack() +void PluginSceneGui::sendToBack() { if (m_pPluginScene->selectedItems().isEmpty()) return; @@ -531,28 +531,28 @@ void PluginGui::sendToBack() //============================================================================================================= -void PluginGui::createActions() +void PluginSceneGui::createActions() { deleteAction = new QAction(QIcon(":/images/delete.png"), tr("&Delete"), this); deleteAction->setShortcut(tr("Delete")); deleteAction->setStatusTip(tr("Delete item from diagram (Del)")); - connect(deleteAction, &QAction::triggered, this, &PluginGui::deleteItem); + connect(deleteAction, &QAction::triggered, this, &PluginSceneGui::deleteItem); toFrontAction = new QAction(QIcon(":/images/bringtofront.png"), tr("Bring to &Front"), this); toFrontAction->setShortcut(tr("Ctrl+F")); toFrontAction->setStatusTip(tr("Bring item to front (Ctrl+F)")); - connect(toFrontAction, &QAction::triggered, this, &PluginGui::bringToFront); + connect(toFrontAction, &QAction::triggered, this, &PluginSceneGui::bringToFront); sendBackAction = new QAction(QIcon(":/images/sendtoback.png"), tr("Send to &Back"), this); sendBackAction->setShortcut(tr("Ctrl+B")); sendBackAction->setStatusTip(tr("Send item to back (Ctrl+B)")); - connect(sendBackAction, &QAction::triggered, this, &PluginGui::sendToBack); + connect(sendBackAction, &QAction::triggered, this, &PluginSceneGui::sendToBack); } //============================================================================================================= -void PluginGui::createMenuItem() +void PluginSceneGui::createMenuItem() { m_pMenuItem = new QMenu; m_pMenuItem->addAction(deleteAction); @@ -563,19 +563,22 @@ void PluginGui::createMenuItem() //============================================================================================================= -void PluginGui::createToolbars() +void PluginSceneGui::createToolbars() { //Plugins Toolbar m_pActionGroupPlugins = new QActionGroup(this); m_pActionGroupPlugins->setExclusive(false); connect(m_pActionGroupPlugins, &QActionGroup::triggered, - this, &PluginGui::actionGroupTriggered); + this, &PluginSceneGui::actionGroupTriggered); //Sensors m_pSensorToolButton = new QToolButton; QMenu *menuSensors = new QMenu; - for(qint32 i = 0; i < m_pPluginManager->getSensorPlugins().size(); ++i) - createItemAction(m_pPluginManager->getSensorPlugins()[i]->getName(), menuSensors); + for(auto& plugin : m_pPluginManager->getSensorPlugins()){ + if(plugin->isScenePlugin()){ + createItemAction(plugin->getName(), menuSensors); + } + } m_pSensorToolButton->setMenu(menuSensors); m_pSensorToolButton->setPopupMode(QToolButton::InstantPopup); @@ -586,8 +589,11 @@ void PluginGui::createToolbars() //Algorithms m_pAlgorithmToolButton = new QToolButton; QMenu *menuAlgorithms = new QMenu; - for(qint32 i = 0; i < m_pPluginManager->getAlgorithmPlugins().size(); ++i) - createItemAction(m_pPluginManager->getAlgorithmPlugins()[i]->getName(), menuAlgorithms); + for(auto& plugin : m_pPluginManager->getAlgorithmPlugins()){ + if(plugin->isScenePlugin()){ + createItemAction(plugin->getName(), menuAlgorithms); + } + } m_pAlgorithmToolButton->setMenu(menuAlgorithms); m_pAlgorithmToolButton->setPopupMode(QToolButton::InstantPopup); @@ -626,7 +632,7 @@ void PluginGui::createToolbars() m_pButtonGroupPointers->addButton(m_pLinePointerButton, int(PluginScene::InsertLine)); connect(m_pButtonGroupPointers, static_cast(&QButtonGroup::buttonClicked), - this, &PluginGui::pointerGroupClicked); + this, &PluginSceneGui::pointerGroupClicked); m_pToolBarPointer = new QToolBar(tr("Pointer type"), this); @@ -655,7 +661,7 @@ void PluginGui::createToolbars() //============================================================================================================= -QAction* PluginGui::createItemAction(QString name, QMenu* menu) +QAction* PluginSceneGui::createItemAction(QString name, QMenu* menu) { QAction* action = menu->addAction(name); m_pActionGroupPlugins->addAction(action); diff --git a/applications/mne_scan/mne_scan/plugingui.h b/applications/mne_scan/mne_scan/pluginscenegui.h similarity index 94% rename from applications/mne_scan/mne_scan/plugingui.h rename to applications/mne_scan/mne_scan/pluginscenegui.h index 7e8ec37c1f3..894b4a709fc 100644 --- a/applications/mne_scan/mne_scan/plugingui.h +++ b/applications/mne_scan/mne_scan/pluginscenegui.h @@ -32,8 +32,8 @@ * */ -#ifndef PLUGINGUI_H -#define PLUGINGUI_H +#ifndef PLUGINSCENEGUI_H +#define PLUGINSCENEGUI_H //============================================================================================================= // INCLUDES @@ -74,16 +74,16 @@ class QGraphicsView; namespace MNESCAN { -class PluginGui : public QMainWindow +class PluginSceneGui : public QMainWindow { Q_OBJECT friend class PluginScene; public: - PluginGui(SCSHAREDLIB::PluginManager *pPluginManager, SCSHAREDLIB::PluginSceneManager *pPluginSceneManager); + PluginSceneGui(SCSHAREDLIB::PluginManager *pPluginManager, SCSHAREDLIB::PluginSceneManager *pPluginSceneManager); - ~PluginGui(); + ~PluginSceneGui(); //========================================================================================================= /** @@ -170,10 +170,10 @@ class PluginGui : public QMainWindow // INLINE DEFINITIONS //============================================================================================================= -inline SCSHAREDLIB::AbstractPlugin::SPtr PluginGui::getCurrentPlugin() +inline SCSHAREDLIB::AbstractPlugin::SPtr PluginSceneGui::getCurrentPlugin() { return m_pCurrentPlugin; } } //NAMESPACE -#endif // PLUGINGUI_H +#endif // PLUGINSCENEGUI_H diff --git a/applications/mne_scan/plugins/fiffsimulator/fiffsimulator.cpp b/applications/mne_scan/plugins/fiffsimulator/fiffsimulator.cpp index 6e47a64794a..6230b2bef89 100644 --- a/applications/mne_scan/plugins/fiffsimulator/fiffsimulator.cpp +++ b/applications/mne_scan/plugins/fiffsimulator/fiffsimulator.cpp @@ -89,6 +89,9 @@ FiffSimulator::FiffSimulator() //init channels when fiff info is available connect(this, &FiffSimulator::fiffInfoAvailable, this, &FiffSimulator::initConnector); + + m_pGUI = std::make_unique(); + m_pGUI->setSetupWidget(new FiffSimulatorSetupWidget(this)); } //============================================================================================================= @@ -201,15 +204,6 @@ QString FiffSimulator::getName() const //============================================================================================================= -QWidget* FiffSimulator::setupWidget() -{ - //widget is later distroyed by CentralWidget - so it has to be created everytime new - QWidget * pWidget(new FiffSimulatorSetupWidget(this)); - return pWidget; -} - -//============================================================================================================= - void FiffSimulator::run() { MatrixXf matValue; diff --git a/applications/mne_scan/plugins/fiffsimulator/fiffsimulator.h b/applications/mne_scan/plugins/fiffsimulator/fiffsimulator.h index 0f734b64421..d5c8e4d4e3f 100644 --- a/applications/mne_scan/plugins/fiffsimulator/fiffsimulator.h +++ b/applications/mne_scan/plugins/fiffsimulator/fiffsimulator.h @@ -147,14 +147,6 @@ class FIFFSIMULATORSHARED_EXPORT FiffSimulator : public SCSHAREDLIB::AbstractSen virtual QString getName() const; virtual QString getBuildInfo(); - //========================================================================================================= - /** - * Creates the setup widget. - * - * @return Returns the setup widget. - */ - virtual QWidget* setupWidget(); - protected: virtual void run(); diff --git a/applications/mne_scan/plugins/plugins.pro b/applications/mne_scan/plugins/plugins.pro index 9e4b48f69b5..76dadb3d7ee 100644 --- a/applications/mne_scan/plugins/plugins.pro +++ b/applications/mne_scan/plugins/plugins.pro @@ -43,37 +43,37 @@ TEMPLATE = subdirs #Sensors SUBDIRS += \ fiffsimulator \ - ftbuffer \ - babymeg \ - natus \ +# ftbuffer \ +# babymeg \ +# natus \ - contains(MNECPP_CONFIG, withBrainAmp) { - SUBDIRS += brainamp \ # Build guide -> https://mne-cpp.github.io/pages/development/brainamp.html - } - contains(MNECPP_CONFIG, withEego) { - SUBDIRS += eegosports \ # Build guide -> https://mne-cpp.github.io/pages/development/eegosports.html - } - contains(MNECPP_CONFIG, withGUSBAmp) { - SUBDIRS += gusbamp \ # Build guide -> https://mne-cpp.github.io/pages/development/gusbamp.html - } - contains(MNECPP_CONFIG, withTmsi) { - SUBDIRS += tmsi \ # Build guide (Windows only) -> https://mne-cpp.github.io/pages/development/tmsi.html - } - contains(MNECPP_CONFIG, withBrainFlow) { - SUBDIRS += brainflowboard \ # Build guide -> https://mne-cpp.github.io/pages/development/brainflow.html - } - contains(MNECPP_CONFIG, withLsl) { - SUBDIRS += lsladapter \ # Build guide -> https://mne-cpp.github.io/pages/development/lsl.html - } +# contains(MNECPP_CONFIG, withBrainAmp) { +# SUBDIRS += brainamp \ # Build guide -> https://mne-cpp.github.io/pages/development/brainamp.html +# } +# contains(MNECPP_CONFIG, withEego) { +# SUBDIRS += eegosports \ # Build guide -> https://mne-cpp.github.io/pages/development/eegosports.html +# } +# contains(MNECPP_CONFIG, withGUSBAmp) { +# SUBDIRS += gusbamp \ # Build guide -> https://mne-cpp.github.io/pages/development/gusbamp.html +# } +# contains(MNECPP_CONFIG, withTmsi) { +# SUBDIRS += tmsi \ # Build guide (Windows only) -> https://mne-cpp.github.io/pages/development/tmsi.html +# } +# contains(MNECPP_CONFIG, withBrainFlow) { +# SUBDIRS += brainflowboard \ # Build guide -> https://mne-cpp.github.io/pages/development/brainflow.html +# } +# contains(MNECPP_CONFIG, withLsl) { +# SUBDIRS += lsladapter \ # Build guide -> https://mne-cpp.github.io/pages/development/lsl.html +# } #Algorithms SUBDIRS += \ #dummytoolbox \ - rtcmne \ - averaging \ - covariance \ - noisereduction \ - neuronalconnectivity \ +# rtcmne \ +# averaging \ +# covariance \ +# noisereduction \ +# neuronalconnectivity \ writetofile \ - hpi \ - rtfwd \ +# hpi \ +# rtfwd \ diff --git a/applications/mne_scan/plugins/writetofile/writetofile.cpp b/applications/mne_scan/plugins/writetofile/writetofile.cpp index 3b8f7f72b60..8af625c77cc 100644 --- a/applications/mne_scan/plugins/writetofile/writetofile.cpp +++ b/applications/mne_scan/plugins/writetofile/writetofile.cpp @@ -79,18 +79,7 @@ WriteToFile::WriteToFile() , m_iRecordingMSeconds(5*60*1000) , m_pCircularBuffer(CircularBuffer_Matrix_double::SPtr(new CircularBuffer_Matrix_double(40))) { - m_pActionRecordFile = new QAction(QIcon(":/images/record.png"), tr("Start Recording"),this); - m_pActionRecordFile->setStatusTip(tr("Start Recording")); - connect(m_pActionRecordFile.data(), &QAction::triggered, - this, &WriteToFile::toggleRecordingFile); - addPluginAction(m_pActionRecordFile); - - m_pActionClipRecording = new QAction(QIcon(":/images/analyze.png"), tr("Send to MNE Analyze"),this); - m_pActionClipRecording->setStatusTip(tr("Clip Recording")); - connect(m_pActionClipRecording.data(), &QAction::triggered, - this, &WriteToFile::clipRecording); - addPluginAction(m_pActionClipRecording); - m_pActionClipRecording->setVisible(false); + initGUI(); //Init timers if(!m_pRecordTimer) { @@ -178,14 +167,6 @@ QString WriteToFile::getName() const //============================================================================================================= -QWidget* WriteToFile::setupWidget() -{ - WriteToFileSetupWidget* setupWidget = new WriteToFileSetupWidget(this);//widget is later distroyed by CentralWidget - so it has to be created everytime new - return setupWidget; -} - -//============================================================================================================= - void WriteToFile::update(SCMEASLIB::Measurement::SPtr pMeasurement) { if(QSharedPointer pRTMSA = pMeasurement.dynamicCast()) { @@ -632,3 +613,30 @@ int WriteToFile::popUpYesNo(const QString& sText, return ret; } +//============================================================================================================= + +void WriteToFile::initGUI() +{ + m_pGUI = std::make_unique(); + initGUIActions(); + m_pGUI->setSetupWidget(new WriteToFileSetupWidget(this)); +} + +//============================================================================================================= + +void WriteToFile::initGUIActions() +{ + m_pActionRecordFile = new QAction(QIcon(":/images/record.png"), tr("Start Recording"),this); + m_pActionRecordFile->setStatusTip(tr("Start Recording")); + connect(m_pActionRecordFile.data(), &QAction::triggered, + this, &WriteToFile::toggleRecordingFile); + + m_pGUI->addPluginAction(m_pActionRecordFile); + + m_pActionClipRecording = new QAction(QIcon(":/images/analyze.png"), tr("Send to MNE Analyze"),this); + m_pActionClipRecording->setStatusTip(tr("Clip Recording")); + connect(m_pActionClipRecording.data(), &QAction::triggered, + this, &WriteToFile::clipRecording); + m_pGUI->addPluginAction(m_pActionClipRecording); + m_pActionClipRecording->setVisible(false); +} diff --git a/applications/mne_scan/plugins/writetofile/writetofile.h b/applications/mne_scan/plugins/writetofile/writetofile.h index 1530c89d7b7..bad9bbf35af 100644 --- a/applications/mne_scan/plugins/writetofile/writetofile.h +++ b/applications/mne_scan/plugins/writetofile/writetofile.h @@ -124,7 +124,6 @@ class WRITETOFILESHARED_EXPORT WriteToFile : public SCSHAREDLIB::AbstractAlgorit virtual bool stop(); virtual AbstractPlugin::PluginType getType() const; virtual QString getName() const; - virtual QWidget* setupWidget(); virtual QString getBuildInfo(); //========================================================================================================= @@ -277,6 +276,12 @@ class WRITETOFILESHARED_EXPORT WriteToFile : public SCSHAREDLIB::AbstractAlgorit int popUpYesNo(const QString& sText, const QString& sInfoText); + //========================================================================================================= + void initGUI(); + + //========================================================================================================= + void initGUIActions(); + bool m_bWriteToFile; /**< Flag for for writing the received samples to a file. Defined by the user via the GUI.*/ bool m_bUseRecordTimer; /**< Flag whether to use data recording timer.*/ bool m_bContinuous; /**< Flag for whether to start plugin in continuous save mode */