summaryrefslogtreecommitdiffstats
path: root/libkipi/libkipi/mainpage.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libkipi/libkipi/mainpage.cpp')
-rw-r--r--libkipi/libkipi/mainpage.cpp100
1 files changed, 100 insertions, 0 deletions
diff --git a/libkipi/libkipi/mainpage.cpp b/libkipi/libkipi/mainpage.cpp
new file mode 100644
index 0000000..0347fc7
--- /dev/null
+++ b/libkipi/libkipi/mainpage.cpp
@@ -0,0 +1,100 @@
+/**
+ \mainpage libkipi reference page.
+
+ This page will tell you both how to develop a new
+ plugin for KIPI, and how to add KIPI support to a new
+ application (referred to as host application).
+
+ You can find more information about KIPI at this <a
+ href="http://extragear.kde.org/apps/kipi">url</a>.
+
+ This documentation has been writen by Renchi Raju, Gilles Caulier,
+ Jesper K. Pedersen, and Aurelien Gateau.
+
+ <h1>Developing a new Plugin</h1>
+ The easiest way to start a new plugin, is to copy the hello world
+ plugin, which you may find in kdeextragear-libs-1/kipi-plugins. Please
+ also read <a
+ href="http://developer.kde.org/documentation/tutorials/developing-a-plugin-structure/index.html">
+ this tutorial</a> which tells in general about developing a plugin
+ structure for an application, but it also gives some background
+ information on how plugins are loaded, and especially on the macros
+ involved. The tutorial has been written by one of the KIPI authors, so
+ it matches fairly good the model of KIPI (except the part on merging
+ GUI's from plugins).
+
+
+
+
+ <h2>General things to do to implement a plugin</h2>
+ Here is a list of things to do.
+ <ul>
+ <li> Create a class that inherits KIPI::Plugin. In the constructor you
+ must create instances of KAction for your application. The topmost
+ actions should be given to the Plugin super class using
+ KIPI::Plugin::addAction().
+ <li> As described in the tutorial <a href="http://developer.kde.org/documentation/tutorials/developing-a-plugin-structure/index.html#understanding_loading">here</a>, you must call the macro
+ <tt>K_EXPORT_COMPONENT_FACTORY</tt>.
+ <li> You also need to create a desktop file, as described <a href="http://developer.kde.org/documentation/tutorials/developing-a-plugin-structure/index.html#makefile_am_client">here</a>
+ </ul>
+
+
+
+
+
+ <h2>Retrieving information from the host application</h2>
+ The above was the required step to build the plugin. The following will
+ tell you about the functions with which you communicate with the host
+ application.
+
+ The origin of all your communication with the host application is
+ \ref KIPI::Interface. You obtain a pointer to this by casting the parent
+ pointer given to your plugin during construction.
+
+ Selection of images can be obtained using
+ KIPI::Interface::currentSelection(), KIPI::Interface::currentAlbum() and
+ KIPI::Interface::allAlbums(). These methods uses KIPI::ImageCollection
+ to wrap a selection of images.
+
+ Finally to obtain information about individual images, call
+ KIPI::Interface::info(), which returns a KIPI::ImageInfo, with the
+ information.
+
+ When developing plugins, you should pay special attention to the fact the different
+ host applications may have different feature sets they
+ support. Information about what the host application support can be
+ obtained from KIPI::Interface::hasFeature().
+
+
+
+
+ <h2>Utilities for Plugins</h2>
+ KIPI has a number of utilities useful when developing plugins:
+ <ul>
+ <li> use KIPI::ImageCollectionDialog to ask the user for an image.
+ <li> use KIPI::UploadWidget when the user should specify a directory to
+ write images into.
+ <li> KIPI::ThumbnailJob helps you load thumb nails of images.
+ </ul>
+
+
+
+
+ <h1>Adding KIPI support to a new host application.</h1>
+ To add KIPI support to your application you must inherit
+ KIPI::Interface, and give an instance of this class to
+ KIPI::PluginLoader. See \ref KIPI::PluginLoader for details on loading plugins.
+
+ To be able to create an instance of your subclass of KIPI::Interface,
+ you must of course implement all the pure virtual method of the super
+ class, among others this requires you to create and return instances of
+ KIPI::ImageCollection and KIPI::ImageInfo. The only way you can do so
+ are by giving the classes a pointer to a subclass of
+ KIPI::ImageCollectionShared and KIPI::ImageInfoShared. These sub classes
+ are also your responsibility to implement.
+
+ The reason why things are that complicated, are to solve the problem of
+ ownership of pointers to the classes in question. The
+ KIPI::ImageCollectionShared pointer you give to KIPI::ImageCollection
+ constructor will be the owned by the ImageCollection instance.
+*/