KDE PIM/KOrganizer/Architecture
KOrganizer is now separated into a non-GUI low-level calendar framework, which is included in the library libkcal, part of the kdepimlibs repository, and the GUI part in the korganizer subdirectory of kdepim. KOrganizer consists of the actual KOrganizer program and the alarm daemon, both using libkcal for handling actual calendar data.
libkcal
libkcal provides the non-GUI part of calendaring. It is partly based on libical, an implementation of the iCalendar format defined in rfc2445. libical is an object-oriented C library, which provides basic but complete handling of calendaring components. libkcal puts a C++ face on it, which fully encapsulates the library.
Calendaring data is handled by the Calendar class interface, which provides a storage for calendar components. One implementation of the Calendar interface exists, the CalendarLocal class, which provides local storage as a file.
The Calendar class uses the CalFormat class interface to convert calendar data into a textual representation. There are two implementations, the VCalFormat for vCalendar and the ICalFormat for iCalendar.
Actual calendaring components are handled by the classes Event, Todo and Journal, all inheriting from the common base class Incidence. These classes store the information related to an event, todo or journal entry.
KOrganizer classes
The central class of KOrganizer is the CalendarView. This class owns the calendar classes and all the views, editors and other dialogs representing the calendar GUI. The main window of KOrganizer is represented by the class KOrganizer, which instantiates a CalendarView as main widget. It also creates all the actions for the menu and toolbars and the statusbar.
Calendar information is shown in several views, all inheriting from the class KOBaseView. There are the KOAgendaView, the KOMonthView, the KOListView, the KOWhatsNextView, the KOProjectView and the KOTodoView. They fetch the relevant data from a Calendar object and display it as appropriate. They also provide the controls to manipulate calendar objects in view specific ways and signal the CalendarView, when the general editor dialogs are called.
There are currently two editor dialog classes, KOEventEditor and KOTodoEditor, both inheriting from the common base class KOIncidenceEditor. A KOJournalEditor class should be added. They use a set of editor widgets (KOEditorGeneralEvent, KOEditorGeneralTodo, KOEditorDetails and KOEditorRecurrence) to edit the underlying event or todo information.
The preferences settings of KOrganizer are handled by the class KOPrefs, which inherits from KPrefs. The preferences dialog KOPrefsDialog operates on the preferences class in a generic way, which makes it quite easy to add new preferences settings to KOrganizer or adapt the existing ones.