# Internals # Description of some internals of Gnome Calendar Application * mainToolbar object: Has 3 states: 1. Overview 2. View Event 3. Edit Event (this one could act as New Event View, or even as New anything view) * GcalApplication * Has dconf-key attribute (To keep the last view and last day selected) * Has command-line option (To open on a specified day) * Has a GcalManager object (To manage source and events, and everything else) * GcalManager * Has a list of GcalStoreUnit containing: 1. Esource, ECalClient,ECalClientView, 2. `GHashTable` (representing *active events* of the view) * Has a list of ESourceGroup * Has `icaltimetype *initial_date, *final_date;` For defining a range to get events from Could have an active query representing the range (s-exp) * Has a list of Events in the active range (a list of ECalComponent) * Emit signals for: 1. objects-added (wrapping ECalClientView) 2. objects-removed (wrapping ECalClientView) 3. events-changed (for time range changing) This signal is emitted so the views knows they have to update the GcalEvent widgets they contain. E.g. when you disable/enable a Calendar in SourcesView widget. * Has a GtkListStore with calendar/sources info. * GcalView * Has NavigationPane * Has icaltimetype: `selected_date` attribute * Has child classes 1. GcalDayView * GcalEvent * Has one source * GcalMainWindow Design
+- GtkClutter.Embed::ClutterBox(BoxLayout) ----------------------------------+
|                                                                            |
|  +- _body_actor::ClutterBox(BoxLayout) --------------------------------+   |
|  |                                                                     |   |
|  |  +- _main_toolbar -----------------------------------------------+  |   |
|  |  |                                                               |  |   |
|  |  +---------------------------------------------------------------+  |   |
|  |  +- _contents_actor::ClutterBox(BinLayout) ----------------------+  |   |
|  |  |                                                               |  |   |
|  |  |  +- _sources_actor ----------------------------------------+  |  |   |
|  |  |  |                                                         |  |  |   |
|  |  |  +---------------------------------------------------------+  |  |   |
|  |  |                                                               |  |   |
|  |  |  +- _notebook_actor ---------------------------------------+  |  |   |
|  |  |  |                                                         |  |  |   |
|  |  |  |                                                         |  |  |   |
|  |  |  |                                                         |  |  |   |
|  |  |  +---------------------------------------------------------+  |  |   |
|  |  +---------------------------------------------------------------+  |   |
|  |                                                                     |   |
|  +---------------------------------------------------------------------+   |
+----------------------------------------------------------------------------+
* Has an `active_view` attribute For keeping the type view is actually showing * Has views 1. GcalDayView 2. GcalWeekView 3. GcalMonthView ... * Has icaltimetype attribute For keeping actual date * Has `set_view/update_view` method For updating the view content by talking to GcalManager about events and dates of the view