diff --git a/plugins/datamonitorPlugin/include/datamonitorplugin/datamonitortool.h b/plugins/datamonitorPlugin/include/datamonitorplugin/datamonitortool.h index ebb92480c..fb42c8e46 100644 --- a/plugins/datamonitorPlugin/include/datamonitorplugin/datamonitortool.h +++ b/plugins/datamonitorPlugin/include/datamonitorplugin/datamonitortool.h @@ -45,6 +45,8 @@ class SCOPY_DATAMONITORPLUGIN_EXPORT DatamonitorTool : public QWidget ToolTemplate *tool; GearBtn *settingsButton; + QPushButton *openLastMenuBtn; + QButtonGroup *rightMenuBtnGrp; InfoBtn *infoBtn; PrintBtn *printBtn; RunBtn *runBtn; diff --git a/plugins/datamonitorPlugin/include/datamonitorplugin/monitorselectionmenu.hpp b/plugins/datamonitorPlugin/include/datamonitorplugin/monitorselectionmenu.hpp index 47d40aa29..bf7dc9b54 100644 --- a/plugins/datamonitorPlugin/include/datamonitorplugin/monitorselectionmenu.hpp +++ b/plugins/datamonitorPlugin/include/datamonitorplugin/monitorselectionmenu.hpp @@ -16,25 +16,25 @@ class MonitorSelectionMenu : public QWidget friend class DataMonitorStyleHelper; Q_OBJECT public: - explicit MonitorSelectionMenu(QMap *monitorList, QWidget *parent = nullptr); + explicit MonitorSelectionMenu(QMap *monitorList, QButtonGroup *monitorsGroup, + QWidget *parent = nullptr); void addMonitor(DataMonitorModel *monitor); void removeDevice(QString device); - SemiExclusiveButtonGroup *monitorsGroup() const; - void setMonitorsGroup(SemiExclusiveButtonGroup *newMonitorsGroup); + QButtonGroup *monitorsGroup() const; Q_SIGNALS: void monitorToggled(bool toggled, QString monitorName); void removeMonitor(); void requestRemoveImportedDevice(QString device); - void requestMonitorMenu(QString monitorName); + void requestMonitorMenu(bool toggled, QString monitorName); private: QWidget *deviceChannelsWidget; QWidget *importedChannelsWidget; QVBoxLayout *layout; - SemiExclusiveButtonGroup *m_monitorsGroup; + QButtonGroup *m_monitorsGroup; QMap deviceMap; void generateDeviceSection(QString device, bool import = false); diff --git a/plugins/datamonitorPlugin/src/datamonitortool.cpp b/plugins/datamonitorPlugin/src/datamonitortool.cpp index b30c10913..f03a79d34 100644 --- a/plugins/datamonitorPlugin/src/datamonitortool.cpp +++ b/plugins/datamonitorPlugin/src/datamonitortool.cpp @@ -31,12 +31,14 @@ DatamonitorTool::DatamonitorTool(DataAcquisitionManager *dataAcquisitionManager, tool->leftContainer()->setVisible(true); tool->rightContainer()->setVisible(true); tool->bottomContainer()->setVisible(true); - tool->topContainerMenuControl()->setVisible(false); lay->addWidget(tool); settingsButton = new GearBtn(this); settingsButton->setChecked(true); + openLastMenuBtn = new OpenLastMenuBtn(dynamic_cast(tool->rightContainer()), true, this); + rightMenuBtnGrp = dynamic_cast(openLastMenuBtn)->getButtonGroup(); + infoBtn = new InfoBtn(this); printBtn = new PrintBtn(this); runBtn = new RunBtn(this); @@ -72,7 +74,8 @@ DatamonitorTool::DatamonitorTool(DataAcquisitionManager *dataAcquisitionManager, tool->addWidgetToTopContainerHelper(runBtn, TTA_RIGHT); tool->addWidgetToTopContainerHelper(clearBtn, TTA_RIGHT); - tool->addWidgetToTopContainerHelper(settingsButton, TTA_RIGHT); + tool->addWidgetToTopContainerMenuControlHelper(openLastMenuBtn, TTA_RIGHT); + tool->addWidgetToTopContainerMenuControlHelper(settingsButton, TTA_LEFT); tool->addWidgetToTopContainerHelper(addMonitorButton, TTA_LEFT); @@ -139,8 +142,9 @@ DatamonitorTool::DatamonitorTool(DataAcquisitionManager *dataAcquisitionManager, connect(m_dataMonitorSettings, &DataMonitorSettings::titleUpdated, this, &DatamonitorTool::settingsTitleChanged); connect(settingsButton, &GearBtn::toggled, this, [=, this](bool toggled) { - tool->openRightContainerHelper(toggled); - tool->requestMenu(DataMonitorUtils::getToolSettingsId()); + if(toggled) { + tool->requestMenu(DataMonitorUtils::getToolSettingsId()); + } }); /// 7 segments settings /// @@ -223,8 +227,10 @@ DatamonitorTool::DatamonitorTool(DataAcquisitionManager *dataAcquisitionManager, } /////////////////monitor selection menu /////////////// - m_monitorSelectionMenu = new MonitorSelectionMenu(dataAcquisitionManager->getDataMonitorMap()); - m_monitorSelectionMenu->monitorsGroup()->addButton(settingsButton); + m_monitorSelectionMenu = new MonitorSelectionMenu(dataAcquisitionManager->getDataMonitorMap(), rightMenuBtnGrp); + + rightMenuBtnGrp->addButton(settingsButton); + tool->leftStack()->add("Monitors", m_monitorSelectionMenu); connect(m_dataAcquisitionManager, &DataAcquisitionManager::monitorAdded, this, @@ -265,10 +271,12 @@ DatamonitorTool::DatamonitorTool(DataAcquisitionManager *dataAcquisitionManager, connect(m_monitorSelectionMenu, &MonitorSelectionMenu::requestRemoveImportedDevice, m_dataAcquisitionManager, &DataAcquisitionManager::removeDevice); - connect(m_monitorSelectionMenu, &MonitorSelectionMenu::requestMonitorMenu, this, [=, this](QString monitor) { - tool->openRightContainerHelper(true); - tool->requestMenu(monitor); - }); + connect(m_monitorSelectionMenu, &MonitorSelectionMenu::requestMonitorMenu, this, + [=, this](bool toggled, QString monitor) { + if(toggled) { + tool->requestMenu(monitor); + } + }); initTutorialProperties(); DataMonitorStyleHelper::DataMonitorToolStyle(this); diff --git a/plugins/datamonitorPlugin/src/menus/monitorselectionmenu.cpp b/plugins/datamonitorPlugin/src/menus/monitorselectionmenu.cpp index 3c70eb916..59620d39d 100644 --- a/plugins/datamonitorPlugin/src/menus/monitorselectionmenu.cpp +++ b/plugins/datamonitorPlugin/src/menus/monitorselectionmenu.cpp @@ -9,7 +9,8 @@ using namespace scopy; using namespace datamonitor; -MonitorSelectionMenu::MonitorSelectionMenu(QMap *monitorList, QWidget *parent) +MonitorSelectionMenu::MonitorSelectionMenu(QMap *monitorList, QButtonGroup *monitorsGroup, + QWidget *parent) : QWidget{parent} { QVBoxLayout *mainLayout = new QVBoxLayout(this); @@ -42,8 +43,7 @@ MonitorSelectionMenu::MonitorSelectionMenu(QMap *mo importedChannelsWidgetLayout->setSpacing(10); importedChannelsWidget->setLayout(importedChannelsWidgetLayout); - m_monitorsGroup = new SemiExclusiveButtonGroup(this); - m_monitorsGroup->setExclusive(true); + m_monitorsGroup = monitorsGroup; foreach(QString monitor, monitorList->keys()) { addMonitor(monitorList->value(monitor)); @@ -113,11 +113,11 @@ void MonitorSelectionMenu::addMonitor(DataMonitorModel *monitor) monitorChannel->setStyleSheet(monitorChannel->styleSheet() + QString(":hover{ background-color: %1 ; }").arg(monitor->getColor().name())); - connect(monitorChannel, &MenuControlButton::clicked, this, [=, this]() { + connect(monitorChannel, &MenuControlButton::toggled, this, [=, this](bool toggled) { if(!monitorChannel->checkBox()->isChecked()) { monitorChannel->checkBox()->setChecked(true); } - Q_EMIT requestMonitorMenu(monitor->getName()); + Q_EMIT requestMonitorMenu(toggled, monitor->getName()); }); connect(monitorChannel->checkBox(), &QCheckBox::toggled, this, @@ -139,9 +139,4 @@ void MonitorSelectionMenu::removeDevice(QString device) } } -SemiExclusiveButtonGroup *MonitorSelectionMenu::monitorsGroup() const { return m_monitorsGroup; } - -void MonitorSelectionMenu::setMonitorsGroup(SemiExclusiveButtonGroup *newMonitorsGroup) -{ - m_monitorsGroup = newMonitorsGroup; -} +QButtonGroup *MonitorSelectionMenu::monitorsGroup() const { return m_monitorsGroup; }