Composition
Typically a client is composed of several components that are linked via CinnamonDesktopClient.config.xml
The client consists of several components that all have a special purpose. The behaviour of the client components is mostly handled via sending and receiving messages between its components. Nearly every component may be exchanged by others implementing the same interfaces.
Dispatcher Window
reads the config file CinnamonDesktopClient.config.xml and starts all control windows.
Control Window
Starts and ends sessions to a Cinnamon server, opens and closes session windows. It listens to SessionWindowRequest messages and sends SessionOpened, SessionClosed, WindowOpened, and WindowClosed events.
Repository Navigation Window
Handles most of the actions on a Cinnamon repository. Its window consists of a TreeView at the left side and two TabSelectionControls at the right side, one is designated for tree selection controls and the other is designated for list selection controls. The TreeView and the TabSelectionControls are filled by evaluating the config file and putting each control at the appropriate (i.e. configured) place.
Client Message
A vehicle to send status information between Function and Control classes (e.g. FolderModifiedMessage). Each message contains a source and various other informations. A Function or Control can listen to these messages via its MessageSent() method.
Object Function
An object function implements three methods: IsValid(), DisplayInMenu() and Execute().
IsValid() Gets a CmnObject. Returns true if the function should be displayed in a menu for this object. Example: The IsValid() method of a ViewObjectFunction gets an CmnObject. If the objects content is empty or the user does not have the rights to view this object, then IsValid() returns false.

