Rough 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
    For keeping the last view and last day selected

  Has command-line option
    For opening on the day specified

  Has a GcalManager object
    For managingn source and events, and everything else


+ GcalManager

  Has a list of GcalStoreUnit,
    Containing:
      Esource, ECalClient,ECalClientView

  Has a list of ESourceGroup

  Has GDate *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:
    - objects-added   (wrapping ECalClientView)
    - objects-removed (wrapping ECalClientView)
    - events-retrieved (for time range changing)

  Has a GtkListStore with calendar/sources info.

+ GcalSource

  Has a base_uri
  Has a relative uri
  Has a color


+ GcalView

  Has NavigationPane
  Has GDate: 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 GDate attribute
    For keeping actual date

  Has set_view/update_view method
    For updating the view content by talking to GcalManager
    about events an dates of the view
