Plugin based design
-------------------
  This version is fundamentally different from Quanta 3.x, because instead of a 
monolitic design we switched to a plugin based designed using the existing
KDevelop framework. 
  The QuantaCore plugin is essential to get "Quanta" functionality, usage of all 
the others is optional and not all plugins depend on QuantaCore, meaning that 
they could be used in the standard KDevelop as well.
  Project support is provided by the QuantaProject plugin. The project format
is described in the plugins/project/PROJECTDOM.dtd document.

Profiles
--------
  Profiles hold a set of plugins that are loaded when the application starts.
The default profile is called "quanta" and is defined in src/profile.config.
You can create new profiles with the "kdevprofileeditor" application and you can
load them on startup with the "quanta --profile <profile_name>" command.
  If you modify a profile with the profile editor you get a file under 
$KDEHOME/share/apps/kdevelop/profiles/quanta. Modifications made in the systems 
profile.config will not be taken into account unless you remove the file in 
your home folder.
  Every plugin has a property name (X-KDevelop-Properties in the plugin's
.desktop file) and this property name should be included in the [Properties]
section of the profile.config file or added to the list of profiles in the
profile editor. If the property list in the .desktop file contains the "Quanta"
property as well, it will be automatically loaded if the "Quanta" property is
included in the profile, so you don't have to add your own property name to the
profile in order to load your plugin. Please provide aside of "Quanta" another
property name as well, so the plugin can be disabled by the user. Our Quanta 
specific plugins all have the "Quanta" and a unique property defined, like 
"X-KDevelop-Properties=Quanta,Quanta-StructureTree".


The "kdevquanta" library
------------------------
  The library in the lib folder named "libkdevquanta" is an installed shared 
library. It is used by most Quanta specific plugins. It contains utility classes,
extensions for the KDevelop interfaces, interfaces towards the Quanta plugins,
shared data structures and classes. The library is considered to be private,
thus the header files are not installed. Binary compatibility is not guaranteed.
  Plugins wanting to access QuantaCore, QuantaProject or other Quanta specific
data structures (like the Node, Tag, Settings class) should use this library.
  An important feature is the way to access one plugin from the other using an
interface defined in the library. As an example plugins wanting to use QuantaCore
functionality should use the following code:

#include "quantacore.if"
...
QuantaCoreIf *qcore = extension<QuantaCoreIf>("KDevelop/Quanta");

From now with the "qcore" object you can access the QuantaCore specific methods.
Same technique can be used to access methods of a plugin from another plugin
which does not link directly against it.

The Makefile.am of your project should have a rule to include the lib source
directory:
INCLUES = -I($top_srcdir)/lib ...
or 
AM_CPPFLAGS = -I($top_srcdir)/lib ...

Using the global Settings class is similar

#include "settings.h"
...
Settings *s = Settings::self();

The Makefile.am of your project should have a rule to include the lib build
directory:
INCLUES = -I($top_builddir)/lib ...
or 
AM_CPPFLAGS = -I($top_builddir)/lib ...

Linking against this library is done by using the following lines in the Makefile.am:

libYOURPLUGIN_la_LDFLAGS = -L$(top_builddir)/lib $(all_libraries) $(KDE_PLUGIN)
libYOURPLUGIN_la_LIBADD = (YOUR_LIBRARY DEPENDENCIES) -lkdevquanta -lkdevelop

  The classes from the library are documented in their header files using
doxygen comments.
  

Current folder layout
---------------------

data: 
  data files for Quanta

lib: 
  A private, but installed shared libary for the common Quanta plugins

plugins: 
  Quanta specific and Quanta independent plugins, which were created from old Quanta functionality.
  The toplevel directory contains global KDevelop plugins.

plugins/createproject: 
  New project creation wizard. Requires quantacore to be loaded for some
  functionality.

plugins/filestree: 
  Local and remote directory browsing plugin. Independent of quantacore.

plugins/preview: 
  Internal HTML preview. Independent of quantacore.

plugins/structuretree: 
  Show the document as a DOM like tree. Requires quantacore to be loaded.

plugins/tagdialogs: 
  XML tags editing in a dialog. Requires quantacore to be loaded.

plugins/templatestree: 
  Template support. Requires quantacore to be loaded.

plugins/usertoolbars:
  Offer the possibility to create user actions and toolbars. Requires quantacore
to be loaded for some functionality.

plugins/project:
  Plugins that depend on the existance of a project. 

plugins/project/projecttree:
  Tree-like representation of a project.

plugins/project/quantaproject:
  Plugin for Quanta specific projects. Requires quantacore to be loaded.

quantacore: 
  The core Quanta plugin

src: 
  The main Quanta application ("quanta").
