# 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<uid, ECalComponent>`
       (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

  * 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
