[Ktechlab-devel] Loading all the component and model plugins

Julian Bäume julian at svg4all.de
Sun Jul 18 00:17:03 UTC 2010


Hey,
I needed some time to think about all this, but I think, it's now time to 
share some thoughts ;)

On Thursday 15 July 2010 09:47:57 Zoltan Padrah wrote:
> The problem that should be discussed is related to the plugin-loading
> mechanism of kdevplatform: the plugins are loaded and unloaded
> automatically.
If there is really a problem with KDevPlatform-plugin-handling, we should 
discuss these with the kdevelop-team. I'm sure, we can find a solution 
together with them.

The main issue, I see at the moment, is the versioning of the plugins. We need 
to keep the version-numbers in sync with the KDevPlatform-Version, we are 
using. This could differ from developer to developer and this is annoying. I 
experimented to solve this for us with some cmake-magic, but haven't tried to 
hard and didn't find a good solution, so far. Anyway, it should be possible to 
generate the version-string in the desktop file, depending on the KDevPlatform 
version installed. Quite a few version bumps didn't affect our plugins during 
the last times and so this could save us some work. OTOH it doesn't solve API-
changes, but we would have to deal with them anyway.

Concerning loading of plugins, there are 2 different types of plugins in 
kdevplatform. Plugins of the "global" type show up in the modules-list in the 
application settings. You can load and unload these on demand as a user. In 
KTechLab the circuit plugin is one of these. Later there will be the flowcode 
plugin and maybe some micro-controller-plugin. Then there are plugins of 
"project" type. These are always loaded and these won't show up in the 
modules-list in the settings. The project-plugins only work with some project 
being loaded and active.
This is at least, what I remember from the KDevPlatform documentation.

>  We need all circuit/component/... plugins to be loaded. In order to
> achieve this, I'd like to define an interface that will be implemented by
> the needed plugins, and at startup ktechlab should ask for all the plugins
> implementing that interface (and keep a list of them?).
My understanding of KTechLab looks like this: There is the main application 
doing nothing but providing space to place toolboxes, edit-windows and all 
kind of tools needed for development. Then there are the "global" plugins, 
which define the capabilities of KTechLab. From the kde3-version point-of-
view, these are: Circuits, FlowCode and MCU-Programming. (Where MCU is limited 
to PIC only.) Then there are plugins that support those activities, like 
components (to be placed in a circuit file or on FlowCode documents), routing 
(also circuits and FlowCode) and so on.

>  In my view, the plugins should only register factories; themself shouldn't
> implement any other functionalities. For example one plugin could register
> factories for a transistor and for a model for the transistor.
Agreed. The plugin itself knows which type of objects it can provide factories 
for. So there's a component-plugin providing factories for graphical-
representations and models of transistors. It's intended to be used in circuit 
files. It could then register the factories at the circuit plugin, so this one 
keeps track of all plugins, that are capable of extending circuit files. The 
plugin providing some special conditional-component for the FlowCode plugin 
registeres itself at the FlowCode plugin. Interfaces for the components can be 
shared, this way (like it was in the KDE3-version) and it will be scalable  by 
writing more plugins and distribute them.

Zoltan, do you agree on that architecture? Then I am going to write that down 
in the wiki to have all this documented in a central place (beside the ML). I 
had most of this in mind for a long time, now, but didn't document it, yet. 
This reminds me of starting to do so :S

I'm sure there will be minor problems implementing all this. Since it's 
possible to unload the global plugins via the settings, what happens to the 
plugins providing factories for these? The FlowCode-components won't be 
needed, when FlowCode is deactivated and they would register themselves during 
initialization and not, when the FlowCode plugin is loaded. The KDevPlatform 
sessions would make it possible to work on different projects with different 
plugins loaded. This way one could reduce memory usage and we should respect 
that with the plugins we load. But I think all these issues can be solved and 
we should continue this way.

bye then
julian
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 490 bytes
Desc: This is a digitally signed message part.
URL: <http://mail.kde.org/pipermail/ktechlab-devel/attachments/20100718/eae98e23/attachment.sig>


More information about the Ktechlab-devel mailing list