More plugin updates, enum for location

This commit is contained in:
Adam Honse 2021-08-29 14:56:54 -05:00
parent 702be2401b
commit 2f25c4af7f
3 changed files with 73 additions and 62 deletions

View file

@ -18,11 +18,22 @@
#define OPENRGB_PLUGIN_API_VERSION 1 #define OPENRGB_PLUGIN_API_VERSION 1
/*-----------------------------------------------------------------------------------------------------*\
| Plugin Tab Location Values |
\*-----------------------------------------------------------------------------------------------------*/
enum
{
OPENRGB_PLUGIN_LOCATION_TOP = 0, /* Top-level tab (no icon) */
OPENRGB_PLUGIN_LOCATION_DEVICES = 1, /* Devices tab */
OPENRGB_PLUGIN_LOCATION_INFORMATION = 2, /* Information tab */
OPENRGB_PLUGIN_LOCATION_SETTINGS = 3, /* Settings tab */
};
struct OpenRGBPluginInfo struct OpenRGBPluginInfo
{ {
/*-------------------------------------------------------------------------------------------------*\ /*-------------------------------------------------------------------------------------------------*\
| Plugin Details | | Plugin Details |
\*------------------------------------------------------------------------------------------------ */ \*-------------------------------------------------------------------------------------------------*/
std::string Name; /* Plugin name string */ std::string Name; /* Plugin name string */
std::string Description; /* Plugin description string */ std::string Description; /* Plugin description string */
std::string Version; /* Plugin version string */ std::string Version; /* Plugin version string */
@ -33,9 +44,9 @@ struct OpenRGBPluginInfo
/*-------------------------------------------------------------------------------------------------*\ /*-------------------------------------------------------------------------------------------------*\
| Plugin Tab Configuration | | Plugin Tab Configuration |
\*-------------------------------------------------------------------------------------------------*/ \*-------------------------------------------------------------------------------------------------*/
std::string Location; /* Plugin tab location. This field is mandatory */ unsigned int Location; /* Plugin tab location from Plugin Tab Location enum */
/* Options are "TopTabBar", "DevicesTab", */ /* This field is mandatory, an invalid value will */
/* "InformationTab", or "SettingsTab" */ /* prevent plugin tab from being displayed */
std::string Label; /* Plugin tab label string */ std::string Label; /* Plugin tab label string */
std::string TabIconString; /* Plugin tab icon string, leave empty to use custom */ std::string TabIconString; /* Plugin tab icon string, leave empty to use custom */
QImage TabIcon; /* Custom tab icon image (displayed 16x16) */ QImage TabIcon; /* Custom tab icon image (displayed 16x16) */
@ -55,8 +66,8 @@ public:
/*-------------------------------------------------------------------------------------------------*\ /*-------------------------------------------------------------------------------------------------*\
| Plugin Functionality | | Plugin Functionality |
\*-------------------------------------------------------------------------------------------------*/ \*-------------------------------------------------------------------------------------------------*/
virtual void Initialize(bool dark_theme, ResourceManager* resource_manager_ptr) = 0; virtual void Load(bool dark_theme, ResourceManager* resource_manager_ptr) = 0;
virtual QWidget *CreateGUI(QWidget* parent) = 0; virtual QWidget* GetWidget() = 0;
virtual void Unload() = 0; virtual void Unload() = 0;
}; };

View file

@ -269,7 +269,7 @@ void PluginManager::LoadPlugin(std::string path)
{ {
ActivePlugins[plugin_idx].plugin = plugin; ActivePlugins[plugin_idx].plugin = plugin;
plugin->Initialize(dark_theme, ResourceManager::get()); plugin->Load(dark_theme, ResourceManager::get());
/*-------------------------------------------------*\ /*-------------------------------------------------*\
| Call the Add Plugin Tab callback | | Call the Add Plugin Tab callback |

View file

@ -726,26 +726,24 @@ void OpenRGBDialog2::AddPluginTab(OpenRGBPluginEntry* plugin)
PluginTabLabel = (QLabel*)new TabLabel(PluginLabelString, QString::fromStdString(plugin->info.Label)); PluginTabLabel = (QLabel*)new TabLabel(PluginLabelString, QString::fromStdString(plugin->info.Label));
/*-----------------------------------------------------*\ /*-----------------------------------------------------*\
| InformationTab - Place plugin in the Information tab | | Place plugin as its own top level tab |
\*-----------------------------------------------------*/ \*-----------------------------------------------------*/
if(plugin->info.Location == "InformationTab") if(plugin->info.Location == OPENRGB_PLUGIN_LOCATION_TOP)
{ {
QWidget* NewPluginTab = plugin->plugin->CreateGUI(this); QWidget* NewPluginTab = plugin->plugin->GetWidget();
plugin->widget = NewPluginTab; plugin->widget = NewPluginTab;
OpenRGBPluginContainer* NewPluginContainer = new OpenRGBPluginContainer(NewPluginTab); OpenRGBPluginContainer* NewPluginContainer = new OpenRGBPluginContainer(NewPluginTab);
ui->InformationTabBar->addTab(NewPluginContainer," "); ui->MainTabBar->addTab(NewPluginContainer,QString().fromStdString(plugin->info.Label));
ui->InformationTabBar->tabBar()->setTabButton((ui->InformationTabBar->count() - 1),QTabBar::LeftSide , PluginTabLabel);
} }
/*-----------------------------------------------------*\ /*-----------------------------------------------------*\
| DevicesTab - Place plugin in the Devices tab | | Place plugin in the Devices tab |
\*-----------------------------------------------------*/ \*-----------------------------------------------------*/
else if(plugin->info.Location == "DevicesTab") else if(plugin->info.Location == OPENRGB_PLUGIN_LOCATION_DEVICES)
{ {
QWidget* NewPluginTab = plugin->plugin->CreateGUI(this); QWidget* NewPluginTab = plugin->plugin->GetWidget();
plugin->widget = NewPluginTab; plugin->widget = NewPluginTab;
@ -756,24 +754,26 @@ void OpenRGBDialog2::AddPluginTab(OpenRGBPluginEntry* plugin)
ui->DevicesTabBar->tabBar()->setTabButton((ui->DevicesTabBar->count() - 1),QTabBar::LeftSide , PluginTabLabel); ui->DevicesTabBar->tabBar()->setTabButton((ui->DevicesTabBar->count() - 1),QTabBar::LeftSide , PluginTabLabel);
} }
/*-----------------------------------------------------*\ /*-----------------------------------------------------*\
| TopTabBar - Place plugin as its own top level tab | | Place plugin in the Information tab |
\*-----------------------------------------------------*/ \*-----------------------------------------------------*/
else if(plugin->info.Location == "TopTabBar") else if(plugin->info.Location == OPENRGB_PLUGIN_LOCATION_INFORMATION)
{ {
QWidget* NewPluginTab = plugin->plugin->CreateGUI(this); QWidget* NewPluginTab = plugin->plugin->GetWidget();
plugin->widget = NewPluginTab; plugin->widget = NewPluginTab;
OpenRGBPluginContainer* NewPluginContainer = new OpenRGBPluginContainer(NewPluginTab); OpenRGBPluginContainer* NewPluginContainer = new OpenRGBPluginContainer(NewPluginTab);
ui->MainTabBar->addTab(NewPluginContainer,QString().fromStdString(plugin->info.Label)); ui->InformationTabBar->addTab(NewPluginContainer," ");
ui->InformationTabBar->tabBar()->setTabButton((ui->InformationTabBar->count() - 1),QTabBar::LeftSide , PluginTabLabel);
} }
/*-----------------------------------------------------*\ /*-----------------------------------------------------*\
| SettingsTab - Place plugin in the Settings tab | | Place plugin in the Settings tab |
\*-----------------------------------------------------*/ \*-----------------------------------------------------*/
else if(plugin->info.Location == "SettingsTab") else if(plugin->info.Location == OPENRGB_PLUGIN_LOCATION_SETTINGS)
{ {
QWidget* NewPluginTab = plugin->plugin->CreateGUI(this); QWidget* NewPluginTab = plugin->plugin->GetWidget();
plugin->widget = NewPluginTab; plugin->widget = NewPluginTab;
@ -789,50 +789,16 @@ void OpenRGBDialog2::AddPluginTab(OpenRGBPluginEntry* plugin)
\*-----------------------------------------------------*/ \*-----------------------------------------------------*/
else else
{ {
std::cout << ("Cannot load plugin '" + plugin->info.Name + "' as it does not specify a valid location: " + plugin->info.Location + "\n"); std::cout << ("Cannot load plugin '" + plugin->info.Name + "' as it does not specify a valid location.\n");
} }
} }
void OpenRGBDialog2::RemovePluginTab(OpenRGBPluginEntry* plugin) void OpenRGBDialog2::RemovePluginTab(OpenRGBPluginEntry* plugin)
{ {
/*-----------------------------------------------------*\ /*-----------------------------------------------------*\
| InformationTab - Place plugin in the Information tab | | Place plugin as its own top level tab |
\*-----------------------------------------------------*/ \*-----------------------------------------------------*/
if(plugin->info.Location == "InformationTab") if(plugin->info.Location == OPENRGB_PLUGIN_LOCATION_TOP)
{
for(int tab_idx = 0; tab_idx < ui->InformationTabBar->count(); tab_idx++)
{
if(dynamic_cast<OpenRGBPluginContainer*>(ui->InformationTabBar->widget(tab_idx)) != nullptr)
{
if(dynamic_cast<OpenRGBPluginContainer*>(ui->InformationTabBar->widget(tab_idx))->plugin_widget == plugin->widget)
{
ui->InformationTabBar->removeTab(tab_idx);
delete plugin->widget;
}
}
}
}
/*-----------------------------------------------------*\
| DevicesTab - Place plugin in the Devices tab |
\*-----------------------------------------------------*/
else if(plugin->info.Location == "DevicesTab")
{
for(int tab_idx = 0; tab_idx < ui->DevicesTabBar->count(); tab_idx++)
{
if(dynamic_cast<OpenRGBPluginContainer*>(ui->DeviceTabBar->widget(tab_idx)) != nullptr)
{
if(dynamic_cast<OpenRGBPluginContainer*>(ui->DeviceTabBar->widget(tab_idx))->plugin_widget == plugin->widget)
{
ui->DeviceTabBar->removeTab(tab_idx);
delete plugin->widget;
}
}
}
}
/*-----------------------------------------------------*\
| TopTabBar - Place plugin as its own top level tab |
\*-----------------------------------------------------*/
else if(plugin->info.Location == "TopTabBar")
{ {
for(int tab_idx = 0; tab_idx < ui->MainTabBar->count(); tab_idx++) for(int tab_idx = 0; tab_idx < ui->MainTabBar->count(); tab_idx++)
{ {
@ -847,9 +813,43 @@ void OpenRGBDialog2::RemovePluginTab(OpenRGBPluginEntry* plugin)
} }
} }
/*-----------------------------------------------------*\ /*-----------------------------------------------------*\
| SettingsTab - Place plugin in the Settings tab | | Place plugin in the Devices tab |
\*-----------------------------------------------------*/ \*-----------------------------------------------------*/
else if(plugin->info.Location == "SettingsTab") else if(plugin->info.Location == OPENRGB_PLUGIN_LOCATION_DEVICES)
{
for(int tab_idx = 0; tab_idx < ui->DevicesTabBar->count(); tab_idx++)
{
if(dynamic_cast<OpenRGBPluginContainer*>(ui->DevicesTabBar->widget(tab_idx)) != nullptr)
{
if(dynamic_cast<OpenRGBPluginContainer*>(ui->DevicesTabBar->widget(tab_idx))->plugin_widget == plugin->widget)
{
ui->DevicesTabBar->removeTab(tab_idx);
delete plugin->widget;
}
}
}
}
/*-----------------------------------------------------*\
| Place plugin in the Information tab |
\*-----------------------------------------------------*/
else if(plugin->info.Location == OPENRGB_PLUGIN_LOCATION_INFORMATION)
{
for(int tab_idx = 0; tab_idx < ui->InformationTabBar->count(); tab_idx++)
{
if(dynamic_cast<OpenRGBPluginContainer*>(ui->InformationTabBar->widget(tab_idx)) != nullptr)
{
if(dynamic_cast<OpenRGBPluginContainer*>(ui->InformationTabBar->widget(tab_idx))->plugin_widget == plugin->widget)
{
ui->InformationTabBar->removeTab(tab_idx);
delete plugin->widget;
}
}
}
}
/*-----------------------------------------------------*\
| Place plugin in the Settings tab |
\*-----------------------------------------------------*/
else if(plugin->info.Location == OPENRGB_PLUGIN_LOCATION_SETTINGS)
{ {
for(int tab_idx = 0; tab_idx < ui->SettingsTabBar->count(); tab_idx++) for(int tab_idx = 0; tab_idx < ui->SettingsTabBar->count(); tab_idx++)
{ {