Plugins are components with a GUI that perform some action for Chalk.
Note that plugins are only loaded when a KisView is constructed; note
also that every plugin is reloaded when a new KisView is created.
Plugins are _not_ allowed to depend on each other. You may _not_
#include a header file from a plugin anywhere but in that same plugin.
You can however choose to group a cluster of related functions in
one plugin, like with the selection tools.
There are several kinds of plugins for Chalk:
Tools have the Chalk/Tool servicetype. A tool plugin registers
the tool factories it provides with the tool registry. A tool must descend
from the KisTool interface. There are several base classes for
specialized tools, like painting and non painting tools.
Paintops implement methods for changing pixels that can be used
by painting tools. Examples are brush, pen, airbrush. Paintop plugins
have the Chalk/Paintop servicetype, register paintop factories they
provide the paintop registry. Paintops inherit KisPaintOp.
Filters implement methods of changin a rectangular area of pixels. Filter
plugins have the Chalk/Filter servicetype and are registered with
the filter registry. A filter inherits the KisFilter class and may
provide a configuration widget and a configuration object.
Extensions are loaded by every view instance. They provide user interface
elements such as dialog boxes and wizards. Their parent is KisView and
they provide an .rc file to merge their gui with the view gui. Extensions
have the servicetype Chalk/Plugin. They are not loaded automatically by
the KParts mechanism; please do not create ordinary kparts that are to
be loaded by the Chalk view since KParts are not versioned.