[Kst] Dummy objects and KstBasicPlugin
Adam Treat
treat at kde.org
Thu Oct 5 23:11:40 CEST 2006
Hi all,
Currently the pluginify branch uses KDE 3.4's componentFactory for
instantiating and loading KstDataObject plugins. This is opposed to how
KstDataSource plugins are loaded with kst explicitly handling the symbol
lookup and loading.
Right now, in the pluginify branch we have the case that every KstDataObject
plugin has a shadow dummy object for plugin introspection and for providing
the config widget. This is nice for a couple of reasons:
1. It allows KstBasicPlugin to have a very basic API where only one magical
macro is needed to tell the KParts::ComponentFactory how to instantiate the
plugin.
2. The plugin writer doesn't need to export an C symbols at all... the
implementation that a plugin writer needs to worry themselves about is
exactly defined by the use of some pure virtual functions in KstBasicPlugin.
3. It makes it much easier to deal with the configuration widget which can
just be called from the instantiated shadow dummy object. When a config
widget is requested, it has two modes: 'Edit' and 'New' ... in 'New' mode it
is expected to instantiate a plugin and load it upon the user clicking 'ok'.
In 'Edit' mode it must load a currently existing plugin object and adapt its
UI accordingly. This is very easy when you have a shadow copy, because the
impl for 'Edit' and 'New' is the same... either way you are adapting the
dialog's UI to one type of object.
4. With a shadow copy there is no need for additional .desktop property items
to distinguish between the various KstDataObject plugins. Without a shadow,
there is.
OTOH, creating a shadow dummy object has performance implications if the
plugin author decides to do anything resource intensive in the plugins
constructor.
Right now, I'm having a hard time getting rid of the shadow dummy object
without entirely changing the API for KstBasicPlugin.
In order to get rid of it, I'll have to do away with the virtual pure methods
in KstBasicPlugin and the plugin author will have to be responsible for
providing some static C methods that provide introspection of the plugins
various input/output objects as well as a static C method providing a config
widget.
Note, that even getting rid of a shadow dummy object ... we still need to
instantiate a 'plugininfo' object for each plugin that will take care of
checking for and calling into these various static C methods.
Personally, I think the cleaner solution is to just keep using the shadow
dummy plugin objects and putting some clear notices in the documentation that
resource intensive bits shouldn't be included in the ctor.
Thoughts?
Adam
More information about the Kst
mailing list