Plugin callback working

The regeistered menu items are call the plugin
presentation
Andreas Butti 7 years ago
parent cb81180eac
commit e7193b1082
  1. 2
      src/control/Control.cpp
  2. 55
      src/plugin/Plugin.cpp
  3. 56
      src/plugin/Plugin.h
  4. 24
      src/plugin/PluginController.cpp
  5. 5
      src/plugin/PluginController.h
  6. 1
      src/util/XournalTypeList.h
  7. 22
      ui/main.glade

@ -365,6 +365,8 @@ void Control::initWindow(MainWindow* win)
win->setFontButtonFont(settings->getFont());
this->pluginController->registerMenu();
fireActionSelected(GROUP_SNAPPING, settings->isSnapRotation() ? ACTION_ROTATION_SNAPPING : ACTION_NONE);
fireActionSelected(GROUP_GRID_SNAPPING, settings->isSnapGrid() ? ACTION_GRID_SNAPPING : ACTION_NONE);
}

@ -51,6 +51,12 @@ Plugin::~Plugin()
lua = NULL;
}
for (MenuEntry* m : menuEntries)
{
delete m;
}
menuEntries.clear();
XOJ_RELEASE_TYPE(Plugin);
}
@ -108,6 +114,47 @@ void Plugin::registerToolbar()
inInitUi = false;
}
/**
* Register all menu entries to the menu
*/
void Plugin::registerMenu(GtkWidget* menu)
{
XOJ_CHECK_TYPE(Plugin);
if (menuEntries.empty())
{
// No entries - nothing to do
return;
}
gtk_menu_shell_append(GTK_MENU_SHELL(menu), gtk_separator_menu_item_new());
for (MenuEntry* m : menuEntries)
{
GtkWidget* mi = gtk_menu_item_new_with_label(m->menu.c_str());
m->widget = mi;
gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi);
g_signal_connect(mi, "activate", G_CALLBACK(
+[](GtkWidget* bt, MenuEntry* me)
{
XOJ_CHECK_TYPE_OBJ(me, MenuEntry);
me->plugin->executeMenuEntry(me);
}), m);
}
}
/**
* Execute menu entry
*/
void Plugin::executeMenuEntry(MenuEntry* entry)
{
XOJ_CHECK_TYPE(Plugin);
callFunction(entry->callback);
}
/**
* @return the Plugin name
*/
@ -135,8 +182,12 @@ bool Plugin::isInInitUi()
*/
int Plugin::registerMenu(string menu, string callback)
{
// TODO
return 0;
MenuEntry* m = new MenuEntry(this);
m->menu = menu;
m->callback = callback;
menuEntries.push_back(m);
return menuEntries.size() - 1;
}
/**

@ -13,11 +13,52 @@
#include <XournalType.h>
#include <gtk/gtk.h>
#include <config-features.h>
#ifdef ENABLE_PLUGINS
#include <lua.h>
class Plugin;
class MenuEntry {
public:
MenuEntry(Plugin* plugin)
: plugin(plugin)
{
XOJ_INIT_TYPE(MenuEntry);
}
~MenuEntry()
{
XOJ_CHECK_TYPE(MenuEntry);
XOJ_RELEASE_TYPE(MenuEntry);
}
public:
XOJ_TYPE_ATTRIB;
/**
* The Plugin
*/
Plugin* plugin;
/**
* Menu item
*/
GtkWidget* widget = NULL;
/**
* Menu display name
*/
string menu;
/**
* Callback function name
*/
string callback;
};
class Plugin
{
@ -36,6 +77,16 @@ public:
*/
void registerToolbar();
/**
* Register all menu entries to the menu
*/
void registerMenu(GtkWidget* menu);
/**
* Execute menu entry
*/
void executeMenuEntry(MenuEntry* entry);
/**
* @return the Plugin name
*/
@ -118,6 +169,11 @@ private:
*/
lua_State* lua = NULL;
/**
* All registered menu entries
*/
vector<MenuEntry*> menuEntries;
/**
* Flag to check if init ui is currently running
*/

@ -13,7 +13,6 @@ PluginController::PluginController(Control* control)
: control(control)
{
XOJ_INIT_TYPE(PluginController);
#ifdef ENABLE_PLUGINS
string path = control->getGladeSearchPath()->getFirstSearchPath();
if (StringUtils::endsWith(path, "ui"))
@ -99,4 +98,27 @@ void PluginController::registerToolbar()
#endif
}
/**
* Register menu stuff
*/
void PluginController::registerMenu()
{
XOJ_CHECK_TYPE(PluginController);
#ifdef ENABLE_PLUGINS
GtkWidget* menuPlugin = control->getWindow()->get("menuPlugin");
for (Plugin* p : this->plugins)
{
p->registerMenu(menuPlugin);
}
gtk_widget_show_all(menuPlugin);
#else
// If plugins are disabled - disable menu also
GtkWidget* menuitemPlugin = control->getWindow()->get("menuitemPlugin");
gtk_widget_hide(menuitemPlugin);
#endif
}

@ -35,6 +35,11 @@ public:
*/
void registerToolbar();
/**
* Register menu stuff
*/
void registerMenu();
private:
XOJ_TYPE_ATTRIB;

@ -282,6 +282,7 @@ XOJ_DECLARE_TYPE(XmlAudioNode, 272);
XOJ_DECLARE_TYPE(LayoutMapper, 273);
XOJ_DECLARE_TYPE(PluginController, 274);
XOJ_DECLARE_TYPE(Plugin, 275);
XOJ_DECLARE_TYPE(MenuEntry, 276);

@ -1534,6 +1534,28 @@
</child>
</object>
</child>
<child>
<object class="GtkMenuItem" id="menuitemPlugin">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Plugin</property>
<property name="use_underline">True</property>
<child type="submenu">
<object class="GtkMenu" id="menuPlugin">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkMenuItem" id="menuitem8">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Plugin _Manager</property>
<property name="use_underline">True</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkMenuItem" id="menuitemHelp">
<property name="visible">True</property>

Loading…
Cancel
Save