From dd4865c3e01af5965ab4b88389ee80377825fcba Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Tue, 20 Apr 2021 13:27:21 -0500 Subject: [PATCH] Add initial version of the Plugin Container, which prevents plugins from resizing the window unless shown --- OpenRGB.pro | 3 +++ qt/OpenRGBDialog2.cpp | 18 ++++++++++----- qt/OpenRGBPluginContainer.cpp | 32 +++++++++++++++++++++++++++ qt/OpenRGBPluginContainer.h | 29 +++++++++++++++++++++++++ qt/OpenRGBPluginContainer.ui | 41 +++++++++++++++++++++++++++++++++++ 5 files changed, 117 insertions(+), 6 deletions(-) create mode 100644 qt/OpenRGBPluginContainer.cpp create mode 100644 qt/OpenRGBPluginContainer.h create mode 100644 qt/OpenRGBPluginContainer.ui diff --git a/OpenRGB.pro b/OpenRGB.pro index 760a8eb7..b87f7ef7 100644 --- a/OpenRGB.pro +++ b/OpenRGB.pro @@ -145,6 +145,7 @@ HEADERS += pci_ids/pci_ids.h \ qt/DeviceView.h \ qt/OpenRGBDialog2.h \ + qt/OpenRGBPluginContainer.h \ qt/OpenRGBProfileSaveDialog.h \ qt/OpenRGBServerInfoPage.h \ qt/OpenRGBSoftwareInfoPage.h \ @@ -378,6 +379,7 @@ SOURCES += net_port/net_port.cpp \ qt/DeviceView.cpp \ qt/OpenRGBDialog2.cpp \ + qt/OpenRGBPluginContainer.cpp \ qt/OpenRGBProfileSaveDialog.cpp \ qt/OpenRGBServerInfoPage.cpp \ qt/OpenRGBSoftwareInfoPage.cpp \ @@ -655,6 +657,7 @@ FORMS += qt/OpenRGBDevicePage.ui \ qt/OpenRGBDialog.ui \ qt/OpenRGBDialog2.ui \ + qt/OpenRGBPluginContainer.ui \ qt/OpenRGBProfileSaveDialog.ui \ qt/OpenRGBServerInfoPage.ui \ qt/OpenRGBSoftwareInfoPage.ui \ diff --git a/qt/OpenRGBDialog2.cpp b/qt/OpenRGBDialog2.cpp index da4b8f0e..da85b540 100644 --- a/qt/OpenRGBDialog2.cpp +++ b/qt/OpenRGBDialog2.cpp @@ -3,6 +3,7 @@ #include "OpenRGBDevicePage.h" #include "OpenRGBDeviceInfoPage.h" #include "OpenRGBServerInfoPage.h" +#include "OpenRGBPluginContainer.h" #include "OpenRGBProfileSaveDialog.h" #include "ResourceManager.h" #include @@ -489,9 +490,11 @@ void OpenRGBDialog2::AddPluginTab(PluginManager* plugin_manager, int plugin_inde if(Location == "InformationTab" && !TopBarAlreadyLoaded) { QWidget* NewPluginTab = new QWidget; - NewPluginTab = plugin_manager->ActivePlugins[plugin_index]->CreateGUI(NewPluginTab); - ui->InformationTabBar->addTab(NewPluginTab," "); + + OpenRGBPluginContainer* NewPluginContainer = new OpenRGBPluginContainer(NewPluginTab); + + ui->InformationTabBar->addTab(NewPluginContainer," "); ui->InformationTabBar->tabBar()->setTabButton((ui->InformationTabBar->count() - 1),QTabBar::LeftSide , PluginTabLabel); } @@ -501,9 +504,11 @@ void OpenRGBDialog2::AddPluginTab(PluginManager* plugin_manager, int plugin_inde else if(Location == "DevicesTab") { QWidget* NewPluginTab = new QWidget; - NewPluginTab = plugin_manager->ActivePlugins[plugin_index]->CreateGUI(NewPluginTab); - ui->DevicesTabBar->addTab(NewPluginTab," "); + + OpenRGBPluginContainer* NewPluginContainer = new OpenRGBPluginContainer(NewPluginTab); + + ui->DevicesTabBar->addTab(NewPluginContainer," "); ui->DevicesTabBar->tabBar()->setTabButton((ui->DevicesTabBar->count() - 1),QTabBar::LeftSide , PluginTabLabel); } @@ -513,10 +518,11 @@ void OpenRGBDialog2::AddPluginTab(PluginManager* plugin_manager, int plugin_inde else if(Location == "TopTabBar" && !TopBarAlreadyLoaded) { QWidget* NewPluginTab = new QWidget; - NewPluginTab = plugin_manager->ActivePlugins[plugin_index]->CreateGUI(NewPluginTab); - ui->MainTabBar->addTab(NewPluginTab,QString().fromStdString(plugin_manager->ActivePlugins[plugin_index]->info.PluginName)); + OpenRGBPluginContainer* NewPluginContainer = new OpenRGBPluginContainer(NewPluginTab); + + ui->MainTabBar->addTab(NewPluginContainer,QString().fromStdString(plugin_manager->ActivePlugins[plugin_index]->info.PluginName)); } /*-----------------------------------------------------*\ | Display an error message if the plugin does not | diff --git a/qt/OpenRGBPluginContainer.cpp b/qt/OpenRGBPluginContainer.cpp new file mode 100644 index 00000000..02f6978a --- /dev/null +++ b/qt/OpenRGBPluginContainer.cpp @@ -0,0 +1,32 @@ +#include "OpenRGBPluginContainer.h" +#include "ui_OpenRGBPluginContainer.h" + +Ui::OpenRGBPluginContainer::OpenRGBPluginContainer(QWidget *plugin, QWidget *parent) : + QWidget(parent), + ui(new Ui::OpenRGBPluginContainerUi) +{ + ui->setupUi(this); + + plugin_widget = plugin; + + ui->PluginContainerLayout->layout()->addWidget(plugin_widget); + + plugin_widget->hide(); +} + +Ui::OpenRGBPluginContainer::~OpenRGBPluginContainer() +{ + delete ui; +} + +void Ui::OpenRGBPluginContainer::on_ShowPluginButton_clicked() +{ + if(plugin_widget->isHidden()) + { + plugin_widget->show(); + } + else + { + plugin_widget->hide(); + } +} diff --git a/qt/OpenRGBPluginContainer.h b/qt/OpenRGBPluginContainer.h new file mode 100644 index 00000000..b824c86d --- /dev/null +++ b/qt/OpenRGBPluginContainer.h @@ -0,0 +1,29 @@ +#ifndef OPENRGBPLUGINCONTAINER_H +#define OPENRGBPLUGINCONTAINER_H + +#include "ui_OpenRGBPluginContainer.h" + +#include + +namespace Ui +{ + class OpenRGBPluginContainer; +} + +class Ui::OpenRGBPluginContainer : public QWidget +{ + Q_OBJECT + +public: + explicit OpenRGBPluginContainer(QWidget *plugin, QWidget *parent = nullptr); + ~OpenRGBPluginContainer(); + +private slots: + void on_ShowPluginButton_clicked(); + +private: + Ui::OpenRGBPluginContainerUi *ui; + QWidget* plugin_widget; +}; + +#endif // OPENRGBPLUGINCONTAINER_H diff --git a/qt/OpenRGBPluginContainer.ui b/qt/OpenRGBPluginContainer.ui new file mode 100644 index 00000000..6588536a --- /dev/null +++ b/qt/OpenRGBPluginContainer.ui @@ -0,0 +1,41 @@ + + + OpenRGBPluginContainerUi + + + + 0 + 0 + 400 + 300 + + + + + 0 + 0 + + + + Form + + + + + + QLayout::SetNoConstraint + + + + + Show/Hide Plugin + + + + + + + + + +