WIP: two convenience methods for plugin API

This commit is contained in:
Matthias Koefferlein 2025-08-24 22:29:47 +02:00
parent 0b7ef4b6b2
commit ac9a589d6f
1 changed files with 32 additions and 1 deletions

View File

@ -48,7 +48,8 @@ class PluginBase
{
public:
PluginBase ()
: lay::Plugin (sp_dispatcher), lay::ViewService (sp_view ? sp_view->canvas () : 0)
: lay::Plugin (sp_dispatcher), lay::ViewService (sp_view ? sp_view->canvas () : 0),
mp_view (sp_view), mp_dispatcher (sp_dispatcher)
{
if (! s_in_create_plugin) {
throw tl::Exception (tl::to_string (tr ("A PluginBase object can only be created in the PluginFactory's create_plugin method")));
@ -271,6 +272,16 @@ public:
}
}
lay::LayoutViewBase *view ()
{
return mp_view.get ();
}
lay::Dispatcher *dispatcher ()
{
return mp_dispatcher.get ();
}
gsi::Callback f_menu_activated;
gsi::Callback f_configure;
gsi::Callback f_config_finalize;
@ -289,6 +300,10 @@ public:
gsi::Callback f_update;
gsi::Callback f_has_tracking_position;
gsi::Callback f_tracking_position;
private:
tl::weak_ptr<lay::LayoutViewBase> mp_view;
tl::weak_ptr<lay::Dispatcher> mp_dispatcher;
};
static std::map <std::string, PluginFactoryBase *> s_factories;
@ -837,6 +852,22 @@ Class<gsi::PluginBase> decl_Plugin ("lay", "Plugin",
"See \\has_tracking_position for details.\n"
"\n"
"This method has been added in version 0.27.6."
) +
gsi::method ("view", &gsi::PluginBase::view,
"@brief Gets the view object the plugin is associated with\n"
"This method returns the view object that the plugin is associated with.\n"
"\n"
"This convenience method has been added in version 0.30.4."
) +
gsi::method ("dispatcher", &gsi::PluginBase::dispatcher,
"@brief Gets the dispatcher object the plugin is associated with\n"
"This method returns the dispatcher object that the plugin is associated with.\n"
"The dispatcher object manages the configuration parameters. 'set_config', 'get_config' and 'commit_config' "
"can be used on this object to get or set configuration parameters. "
"Configuration parameters are a way to persist information and the preferred way of communicating with "
"editor option pages and configuration pages.\n"
"\n"
"This convenience method has been added in version 0.30.4."
),
"@brief The plugin object\n"
"\n"