From e37a2f3fbc5d23bc3a44100a972eb842e357f8d4 Mon Sep 17 00:00:00 2001 From: andreidanila1 Date: Thu, 28 Nov 2024 16:49:08 +0200 Subject: [PATCH] core: Create device config page. The device configuration page is a tab widget that contains configuration pages for all its compatible plugins, with each tab representing a plugin's configuration page. This device configuration page is added into the ScopyMainWindow tool stack and can be accessed by clicking the 'Device' button in the tool menu. Signed-off-by: andreidanila1 --- core/include/core/device.h | 1 + core/include/core/deviceimpl.h | 4 ++++ core/include/core/scopymainwindow.h | 1 - core/include/core/toolmenumanager.h | 1 - core/src/deviceimpl.cpp | 15 +++++++++++++++ core/src/scopymainwindow.cpp | 13 ++++--------- core/src/toolmenumanager.cpp | 2 +- 7 files changed, 25 insertions(+), 12 deletions(-) diff --git a/core/include/core/device.h b/core/include/core/device.h index 53a32956f5..3dac1b9bf7 100644 --- a/core/include/core/device.h +++ b/core/include/core/device.h @@ -51,6 +51,7 @@ class SCOPY_CORE_EXPORT Device virtual QPixmap iconPixmap() = 0; virtual QWidget *page() = 0; + virtual QWidget *configPage() = 0; virtual QList toolList() = 0; virtual void init() = 0; diff --git a/core/include/core/deviceimpl.h b/core/include/core/deviceimpl.h index 8209bdb86e..dba938ab07 100644 --- a/core/include/core/deviceimpl.h +++ b/core/include/core/deviceimpl.h @@ -30,6 +30,7 @@ #include #include #include +#include namespace scopy { @@ -50,6 +51,7 @@ class SCOPY_CORE_EXPORT DeviceImpl : public QObject, public Device QWidget *icon() override; QPixmap iconPixmap() override; QWidget *page() override; + QWidget *configPage() override; QList toolList() override; virtual void init() override; virtual void preload() override; @@ -85,6 +87,7 @@ public Q_SLOTS: void loadName(); void loadIcons(); void loadPages(); + void loadConfigPage(); void loadToolList(); void loadBadges(); void setPingPlugin(Plugin *plugin); @@ -103,6 +106,7 @@ public Q_SLOTS: QString m_param; QWidget *m_icon; QWidget *m_page; + QTabWidget *m_configPage; QPushButton *connbtn, *discbtn; Plugin *m_pingPlugin = nullptr; }; diff --git a/core/include/core/scopymainwindow.h b/core/include/core/scopymainwindow.h index 027b3e2b4d..5e4263e017 100644 --- a/core/include/core/scopymainwindow.h +++ b/core/include/core/scopymainwindow.h @@ -108,7 +108,6 @@ public Q_SLOTS: void handleScanner(); void enableScanner(); void deviceAutoconnect(); - void showDevicePage(QString id, ToolStack *ts); protected: void closeEvent(QCloseEvent *event) override; diff --git a/core/include/core/toolmenumanager.h b/core/include/core/toolmenumanager.h index b6bd075cdd..879f65bb81 100644 --- a/core/include/core/toolmenumanager.h +++ b/core/include/core/toolmenumanager.h @@ -66,7 +66,6 @@ public Q_SLOTS: Q_SIGNALS: void requestToolSelect(QString id); - void requestDevicePage(QString id); void connState(QString id, bool isConnected); private Q_SLOTS: diff --git a/core/src/deviceimpl.cpp b/core/src/deviceimpl.cpp index 8b07c6a097..356e098934 100644 --- a/core/src/deviceimpl.cpp +++ b/core/src/deviceimpl.cpp @@ -89,6 +89,7 @@ void DeviceImpl::loadPlugins() loadIcons(); loadBadges(); loadPages(); + loadConfigPage(); loadToolList(); if(m_plugins.isEmpty()) { connbtn->hide(); @@ -215,6 +216,18 @@ void DeviceImpl::loadPages() } } +void DeviceImpl::loadConfigPage() +{ + m_configPage = new QTabWidget(); + m_configPage->setTabPosition(QTabWidget::South); + + for(auto &&p : plugins()) { + if(p->loadConfigPage()) { + m_configPage->addTab(p->configPage(), p->name()); + } + } +} + void DeviceImpl::loadToolList() { for(auto &&p : m_plugins) { @@ -449,6 +462,8 @@ QPixmap DeviceImpl::iconPixmap() return pixmap; } +QWidget *DeviceImpl::configPage() { return m_configPage; } + QWidget *DeviceImpl::page() { return m_page; } QList DeviceImpl::toolList() diff --git a/core/src/scopymainwindow.cpp b/core/src/scopymainwindow.cpp index 010aceb1a6..8d7f2f8e55 100644 --- a/core/src/scopymainwindow.cpp +++ b/core/src/scopymainwindow.cpp @@ -181,8 +181,6 @@ ScopyMainWindow::ScopyMainWindow(QWidget *parent) connect(dm, &DeviceManager::requestTool, m_toolMenuManager, &ToolMenuManager::showMenuItem); connect(m_toolMenuManager, &ToolMenuManager::requestToolSelect, ts, &ToolStack::show); connect(m_toolMenuManager, &ToolMenuManager::requestToolSelect, dtm, &DetachedToolWindowManager::show); - connect(m_toolMenuManager, &ToolMenuManager::requestDevicePage, this, - [this, ts](QString id) { showDevicePage(id, ts); }); connect(hp, &ScopyHomePage::displayNameChanged, m_toolMenuManager, &ToolMenuManager::onDisplayNameChanged); connect(hp, &ScopyHomePage::newDeviceAvailable, dm, &DeviceManager::addDevice); @@ -255,13 +253,6 @@ void ScopyMainWindow::deviceAutoconnect() } } -void ScopyMainWindow::showDevicePage(QString id, ToolStack *ts) -{ - QString hpKey = ts->getKey(hp); - ts->show(hpKey); - hp->viewDevice(id); -} - void ScopyMainWindow::save() { QString selectedFilter; @@ -614,12 +605,16 @@ void ScopyMainWindow::addDeviceToUi(QString id, Device *d) DeviceInfo dInfo = {id, d->displayName(), d->param(), d->iconPixmap(), d->toolList()}; m_toolMenuManager->addMenuItem(dInfo); hp->addDevice(id, d); + auto ts = ui->wsToolStack; + ts->add(id, d->configPage()); } void ScopyMainWindow::removeDeviceFromUi(QString id) { m_toolMenuManager->removeMenuItem(id); hp->removeDevice(id); + auto ts = ui->wsToolStack; + ts->remove(id); } void ScopyMainWindow::receiveVersionDocument(QJsonDocument document) diff --git a/core/src/toolmenumanager.cpp b/core/src/toolmenumanager.cpp index e2d554bcc1..2024f812de 100644 --- a/core/src/toolmenumanager.cpp +++ b/core/src/toolmenumanager.cpp @@ -341,7 +341,7 @@ void ToolMenuManager::initToolMenuHeaderWidget(MenuCollapseHeader *header, const connect(thw->deviceBtn(), &QPushButton::toggled, this, [=](bool en) { if(en) { Style::setStyle(header, style::properties::widget::deviceHeaderWidget, "selected"); - Q_EMIT requestDevicePage(dInfo.id); + Q_EMIT requestToolSelect(dInfo.id); } else { Style::setStyle(header, style::properties::widget::deviceHeaderWidget, "idle"); }