Kexi Plugin System
Kexi is not only heavily based on libraries, it's also heavily componentized using it's Plugin System.
- Plugin type - a group of plugins sharing the same API and designed for similar task. For example, database drivers share the same API and purpose - handling database connections and operations on database contents.
- KexiDB plugins - (so-called drivers, implementations of KexiDB::Driver, KexiDB::Connection, KexiDB::Cursor interfaces) used to adding low-level database handlers, usually for reading/writing via well-specified SQL database interface but or also usable for reading from read-only data sources like, say, RSS feed
- Kexi Dialogs - (implementions of KexiPart and KexiViewBase interfaces) used for displaying specialized editors: Query Designer, Form Designer, Table Designer. Dialogs share the same behaviour regarding to view mode switching, objects renaming, removing and so on.
- Kexi Table View Cell Editors - allows to displaying a non standard table cell content, e.g. graphics or even playing mp3 sound. It's planned to reuse this within forms as well.
- Form Widgets - form editor's widgets are all retrieved from plugins, so called factories. It's similar to the technique known from Qt Designer, but allows better integration with KDE framework and is more user-friendly (eg. class names are translatable).
- Property Editor's Items - usable for displaying non standard items in property editor (coming soon)
- Import/Export Plugins - handle actions for data and/or schema importing/exporting to different formats (text, cvs, .xls, .ooc, .mdb) (work in progress)
- What are the advantages of making Kexi so plugin based?
- Application is less monolythic so there can be more developers working concurently on different tasks without problems. It's no longer update entire application to change selected functionality, eg. add support for another database type.
Plugin System Implementation
KDE dynamic modules API is used (see KLibFactory, KLibLoader documentation) for querying and loading needed code. Each plugin type is defined within KDE as a service.