This is the start of documentation for the design of Kicker. Add as motivated.

Contents
--------
1. Kicker Startup
2. The Extension Manager
3. The Plugin Manager
4. Files Important To Kicker That Aren't In kdebase/kicker
5. Top Level Directories



1. Kicker Startup
   --------------
NOTE: This is the design which we are working towards, not the design as it
currently is, but there's no point in documenting yesterday.

The class Kicker is a subclass of KUniqueApplication and is where all the
fun begins. It is always available via the static Kicker::kicker() method.
Upon creation, Kicker::kicker() ensures that its resources are added to the
standard dirs for the process. This includes tile, background and various
plugin directories.

It then creates the KMenu, which is shared by all items that provide
access to it to keep performance up and memory usage down.

    Note: The usage of this shared KMenu could use some attention

Next the ExtensionManager (EM), another singleton, is created. The EM loads
and manages all the KPanelExtension subclasses, or "panels", for Kicker. If
on load there are no extensions loaded by the EM, then Kicker creates a
default panel with a default setup. This default setup is based off of the
template file <TODO: decide where to store this file and what it is called>.

Kicker then checks to see if the menubar panel has been selected and if so
sets up a panel at the top of the screen. It uses the kickermenubarrc
file for this panel, creating it if it does not exist.

The individual extensions may end up loading various applets and even other
extensions, which they use the PluginManager (PM) and EM to do.


3. The Extension Manager
   ---------------------


4. The Plugin Manager
   ------------------


5. Files Important To Kicker That Aren't In kdebase/kicker
   -------------------------------------------------------
There are two important sets of kicker-related files that aren't in this
source tree. The first is the kicker configuration panels, the second are
the applet and extentions classes.

For historical reasons, the configuration panels can be found in
kdebase/kcontrol/kicker. When we move to a better RCS (e.g. subversion)
these files should be moved to kdebase/kicker/kcm

(... add docu here about the structure of the kcm stuff and how it uses
DCOP to communicate with the panels ...)

In kdelibs/kdeui there are two classes that are quite important to kicker.
The first is KPanelApplet, which is the base class of all kicker applets.
The other class is KPanelExtension, which is the base class of all kicker
extensions. 

These classes are in kdeui so that other applications besides kicker may
use these facilities, either to provide their own applet/extension
facilities or so as to provide kicker applets/extensions. This strategy
should be re-examined in KDE4 and the APIs of both classes cleaned up
extensively.

3. Top Level Directories
   ---------------------
applets/
The basic set of applets. Everything here subclasses from KPanelApplet found
in kdelibs/kdeui. These can be assumed to exist at startup and are allowed,
if not encouraged to, access kicker internals.

buttons/
Anything button-like that you can click on in kicker. Includes the KMenu,
quickbrowsers and application buttons.

core/
As the name suggests, this is the main kicker code. This include the main()
and various containers and collection classes needed to glue everything
together.

data/
Icons, button tiles, backgrounds and the KMenu side images.

extensions/
Extensions, aka panels. Everything here subclasses from KPanelExtension.
Includes the external taskbar, kasbar, windowmaker doc applet bar, child
panel and universal sidebar.

menuext/
Like buttons, but also like menus. These are plugins that provide both
a button for the panel and a menu that appear in the KMenu. These are
generally encouraged over creating buttons in buttons/ that popup menus.

proxy/
Small applications that wrap applets and extensions allowing for out-of-
process execution of these items. This is used to safeguard kicker against
instiating an applet or extension that may crash, taking kicker with it if
they were loaded internally.

share/
Some basic classes that were meant for use beyond what is in core/. Should
probably be moved / consolidated with core/ eventually.

ui/
Menus and dialogs. Menus tend to contain "_mnu" in the file name. Kicker's
control panels are not found here, however. Those are in i
kdebase/kcontrol/kicker.

taskbar/
The code that implements the actual taskbar widget. This is wrapped by the
taskbar applet (applets/taskbar) and the taskbar extension (extensions/taskbar)

taskmanager/
Classes representing tasks and collections of tasks. Used by taskbar/


Kicker Startup Process
----------------------


The Building Blocks Of A Panel
------------------------------
Fittslawframe, Panner, ContainerArea, ContainerPanel


Applets
-------
KPanelApplet, AppletInfo, .desktop file description, PluginManager/PluginLoader


Extensions (aka "Panels")
-------------------------
KPanelExtension, .desktop file description, PluginLoader, ExtensionContainer,
ExtensionManager



