1
0
Fork 0

DBG+GUI: implemented _plugin_menuremove and _plugin_menuentryremove

This commit is contained in:
mrexodia 2017-08-10 20:25:18 +02:00
parent d69e9726b1
commit b79f1bd35b
No known key found for this signature in database
GPG Key ID: FC89E0AAA0C1AAD8
5 changed files with 47 additions and 0 deletions

View File

@ -128,6 +128,16 @@ PLUG_IMPEXP void _plugin_menuentrysethotkey(int pluginHandle, int hEntry, const
pluginmenuentrysethotkey(pluginHandle, hEntry, hotkey);
}
PLUG_IMPEXP bool _plugin_menuremove(int hMenu)
{
return pluginmenuremove(hMenu);
}
PLUG_IMPEXP bool _plugin_menuentryremove(int pluginHandle, int hEntry)
{
return pluginmenuentryremove(pluginHandle, hEntry);
}
PLUG_IMPEXP void _plugin_startscript(CBPLUGINSCRIPT cbScript)
{
dbgstartscriptthread(cbScript);

View File

@ -308,6 +308,8 @@ PLUG_IMPEXP void _plugin_menuentrysetvisible(int pluginHandle, int hEntry, bool
PLUG_IMPEXP void _plugin_menusetname(int pluginHandle, int hMenu, const char* name);
PLUG_IMPEXP void _plugin_menuentrysetname(int pluginHandle, int hEntry, const char* name);
PLUG_IMPEXP void _plugin_menuentrysethotkey(int pluginHandle, int hEntry, const char* hotkey);
PLUG_IMPEXP bool _plugin_menuremove(int hMenu);
PLUG_IMPEXP bool _plugin_menuentryremove(int pluginHandle, int hEntry);
PLUG_IMPEXP void _plugin_startscript(CBPLUGINSCRIPT cbScript);
PLUG_IMPEXP bool _plugin_waituntilpaused();
PLUG_IMPEXP bool _plugin_registerexprfunction(int pluginHandle, const char* name, int argc, CBPLUGINEXPRFUNCTION cbFunction, void* userdata);

View File

@ -934,6 +934,31 @@ void pluginmenuentrysethotkey(int pluginHandle, int hEntry, const char* hotkey)
}
}
bool pluginmenuremove(int hMenu)
{
EXCLUSIVE_ACQUIRE(LockPluginMenuList);
for(const auto & currentMenu : pluginMenuList)
if(currentMenu.hEntryMenu == hMenu && currentMenu.hParentMenu < 256)
return false;
return pluginmenuclear(hMenu, true);
}
bool pluginmenuentryremove(int pluginHandle, int hEntry)
{
EXCLUSIVE_ACQUIRE(LockPluginMenuList);
for(auto it = pluginMenuEntryList.begin(); it != pluginMenuEntryList.end(); ++it)
{
const auto & currentEntry = *it;
if(currentEntry.pluginHandle == pluginHandle && currentEntry.hEntryPlugin == hEntry)
{
GuiMenuRemove(currentEntry.hEntryMenu);
pluginMenuEntryList.erase(it);
return true;
}
}
return false;
}
bool pluginexprfuncregister(int pluginHandle, const char* name, int argc, CBPLUGINEXPRFUNCTION cbFunction, void* userdata)
{
PLUG_EXPRFUNCTION plugExprfunction;

View File

@ -91,6 +91,8 @@ void pluginmenuentrysetvisible(int pluginHandle, int hEntry, bool visible);
void pluginmenusetname(int pluginHandle, int hMenu, const char* name);
void pluginmenuentrysetname(int pluginHandle, int hEntry, const char* name);
void pluginmenuentrysethotkey(int pluginHandle, int hEntry, const char* hotkey);
bool pluginmenuremove(int hMenu);
bool pluginmenuentryremove(int pluginHandle, int hEntry);
bool pluginexprfuncregister(int pluginHandle, const char* name, int argc, CBPLUGINEXPRFUNCTION cbFunction, void* userdata);
bool pluginexprfuncunregister(int pluginHandle, const char* name);
bool pluginformatfuncregister(int pluginHandle, const char* type, CBPLUGINFORMATFUNCTION cbFunction, void* userdata);

View File

@ -1141,6 +1141,7 @@ void MainWindow::clearMenuHelper(int hMenu, bool erase)
{
if(erase)
{
auto hParentMenu = menu->hParentMenu;
//delete the menu itself
for(int i = mMenuList.size() - 1; i > -1; i--)
{
@ -1151,6 +1152,11 @@ void MainWindow::clearMenuHelper(int hMenu, bool erase)
break;
}
}
//hide the parent menu if empty
for(int i = mMenuList.size() - 1; i > -1; i--)
if(mMenuList.at(i).hMenu == hParentMenu)
if(mMenuList.at(i).mMenu->actions().empty())
mMenuList.at(i).mMenu->menuAction()->setVisible(false);
}
else
menu->mMenu->menuAction()->setVisible(false);
@ -1193,6 +1199,8 @@ void MainWindow::removeMenuEntry(int hEntryMenu)
QWidget* parent = menu == 0 ? this : menu->parent;
parent->removeAction(entry.mAction);
delete entry.mAction;
if(menu->mMenu->actions().empty())
menu->mMenu->menuAction()->setVisible(false);
mEntryList.erase(mEntryList.begin() + i);
Bridge::getBridge()->setResult();
return;