[evolution/kill-bonobo] Add properties to calendar classes.
- From: Matthew Barnes <mbarnes src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [evolution/kill-bonobo] Add properties to calendar classes.
- Date: Wed, 5 Aug 2009 21:01:51 +0000 (UTC)
commit 2fe24b4c136b4d5f255af3571c3d6e1082071809
Author: Matthew Barnes <mbarnes redhat com>
Date: Thu Jul 30 12:38:24 2009 -0400
Add properties to calendar classes.
So we can bind them to EShellSettings and kill off EDayViewConfig
and similar GConf notification classes.
calendar/gui/Makefile.am | 6 -
calendar/gui/e-cal-list-view-config.c | 203 ------------
calendar/gui/e-cal-list-view-config.h | 56 ----
calendar/gui/e-cal-model.c | 274 +++++++++-------
calendar/gui/e-calendar-view.c | 67 +++--
calendar/gui/e-day-view-config.c | 464 --------------------------
calendar/gui/e-day-view-config.h | 56 ----
calendar/gui/e-day-view-main-item.c | 2 +-
calendar/gui/e-day-view-time-item.c | 2 +-
calendar/gui/e-day-view.c | 518 +++++++++++++++++++++++++-----
calendar/gui/e-day-view.h | 47 ++-
calendar/gui/e-week-view-config.c | 288 ----------------
calendar/gui/e-week-view-config.h | 55 ----
calendar/gui/e-week-view.c | 540 +++++++++++++++++++------------
calendar/gui/e-week-view.h | 4 +-
calendar/gui/gnome-cal.c | 21 +--
modules/calendar/e-cal-shell-content.c | 183 ++++++++++-
modules/calendar/e-cal-shell-settings.c | 170 ++++++++++
18 files changed, 1343 insertions(+), 1613 deletions(-)
---
diff --git a/calendar/gui/Makefile.am b/calendar/gui/Makefile.am
index 7bc52c9..0878c0e 100644
--- a/calendar/gui/Makefile.am
+++ b/calendar/gui/Makefile.am
@@ -83,8 +83,6 @@ libcal_gui_la_SOURCES = \
e-cal-popup.c \
e-cal-list-view.c \
e-cal-list-view.h \
- e-cal-list-view-config.c \
- e-cal-list-view-config.h \
e-cal-model-memos.c \
e-cal-model-memos.h \
e-calendar-table-config.c \
@@ -101,8 +99,6 @@ libcal_gui_la_SOURCES = \
e-date-edit-config.h \
e-date-time-list.c \
e-date-time-list.h \
- e-day-view-config.c \
- e-day-view-config.h \
e-day-view-layout.c \
e-day-view-layout.h \
e-day-view-main-item.c \
@@ -144,8 +140,6 @@ libcal_gui_la_SOURCES = \
e-select-names-renderer.h \
e-task-list-selector.c \
e-task-list-selector.h \
- e-week-view-config.c \
- e-week-view-config.h \
e-week-view-event-item.c \
e-week-view-event-item.h \
e-week-view-layout.c \
diff --git a/calendar/gui/e-cal-model.c b/calendar/gui/e-cal-model.c
index 7476359..c87674f 100644
--- a/calendar/gui/e-cal-model.c
+++ b/calendar/gui/e-cal-model.c
@@ -38,6 +38,14 @@
#include "calendar-config.h"
#include "e-util/e-util.h"
+#define E_CAL_MODEL_GET_PRIVATE(obj) \
+ (G_TYPE_INSTANCE_GET_PRIVATE \
+ ((obj), E_TYPE_CAL_MODEL, ECalModelPrivate))
+
+#define E_CAL_MODEL_COMPONENT_GET_PRIVATE(obj) \
+ (G_TYPE_INSTANCE_GET_PRIVATE \
+ ((obj), E_TYPE_CAL_MODEL_COMPONENT, ECalModelComponentPrivate))
+
typedef struct {
ECal *client;
ECalView *query;
@@ -83,13 +91,6 @@ struct _ECalModelPrivate {
gpointer get_default_time_user_data;
};
-#define E_CAL_MODEL_COMPONENT_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE \
- ((obj), E_TYPE_CAL_MODEL_COMPONENT, ECalModelComponentPrivate))
-
-static void e_cal_model_dispose (GObject *object);
-static void e_cal_model_finalize (GObject *object);
-
static gint ecm_column_count (ETableModel *etm);
static gint ecm_row_count (ETableModel *etm);
static gpointer ecm_value_at (ETableModel *etm, gint col, gint row);
@@ -109,7 +110,11 @@ static ECalModelClient *find_client_data (ECalModel *model, ECal *client);
static void remove_client_objects (ECalModel *model, ECalModelClient *client_data);
static void remove_client (ECalModel *model, ECalModelClient *client_data);
-/* Signal IDs */
+enum {
+ PROP_0,
+ PROP_USE_24_HOUR_FORMAT
+};
+
enum {
TIME_RANGE_CHANGED,
ROW_APPENDED,
@@ -119,19 +124,124 @@ enum {
LAST_SIGNAL
};
-static guint signals[LAST_SIGNAL] = { 0 };
+static gpointer parent_class;
+static guint signals[LAST_SIGNAL];
G_DEFINE_TYPE (ECalModel, e_cal_model, E_TABLE_MODEL_TYPE)
static void
-e_cal_model_class_init (ECalModelClass *klass)
+cal_model_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ switch (property_id) {
+ case PROP_USE_24_HOUR_FORMAT:
+ e_cal_model_set_use_24_hour_format (
+ E_CAL_MODEL (object),
+ g_value_get_boolean (value));
+ return;
+ }
+
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+cal_model_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ switch (property_id) {
+ case PROP_USE_24_HOUR_FORMAT:
+ g_value_set_boolean (
+ value,
+ e_cal_model_get_use_24_hour_format (
+ E_CAL_MODEL (object)));
+ return;
+ }
+
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+cal_model_dispose (GObject *object)
+{
+ ECalModelPrivate *priv;
+
+ priv = E_CAL_MODEL_GET_PRIVATE (object);
+
+ if (priv->clients) {
+ while (priv->clients != NULL) {
+ ECalModelClient *client_data = (ECalModelClient *) priv->clients->data;
+
+ g_signal_handlers_disconnect_matched (client_data->client, G_SIGNAL_MATCH_DATA,
+ 0, 0, NULL, NULL, object);
+ if (client_data->query)
+ g_signal_handlers_disconnect_matched (client_data->query, G_SIGNAL_MATCH_DATA,
+ 0, 0, NULL, NULL, object);
+
+ priv->clients = g_list_remove (priv->clients, client_data);
+
+ g_object_unref (client_data->client);
+ if (client_data->query)
+ g_object_unref (client_data->query);
+ g_free (client_data);
+ }
+
+ priv->clients = NULL;
+ priv->default_client = NULL;
+ }
+
+ /* Chain up to parent's dispose() method. */
+ G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static void
+cal_model_finalize (GObject *object)
+{
+ ECalModelPrivate *priv;
+ gint ii;
+
+ priv = E_CAL_MODEL_GET_PRIVATE (object);
+
+ g_free (priv->search_sexp);
+ g_free (priv->full_sexp);
+
+ g_free (priv->default_category);
+
+ for (ii = 0; ii < priv->objects->len; ii++) {
+ ECalModelComponent *comp_data;
+
+ comp_data = g_ptr_array_index (priv->objects, ii);
+ if (comp_data == NULL) {
+ g_warning ("comp_data is null\n");
+ continue;
+ }
+ e_cal_model_free_component_data (comp_data);
+ }
+ g_ptr_array_free (priv->objects, FALSE);
+
+ /* Chain up to parent's finalize() method. */
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+e_cal_model_class_init (ECalModelClass *class)
{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- ETableModelClass *etm_class = E_TABLE_MODEL_CLASS (klass);
+ GObjectClass *object_class;
+ ETableModelClass *etm_class;
+
+ parent_class = g_type_class_peek_parent (class);
+ g_type_class_add_private (class, sizeof (ECalModelPrivate));
- object_class->dispose = e_cal_model_dispose;
- object_class->finalize = e_cal_model_finalize;
+ object_class = G_OBJECT_CLASS (class);
+ object_class->set_property = cal_model_set_property;
+ object_class->get_property = cal_model_get_property;
+ object_class->dispose = cal_model_dispose;
+ object_class->finalize = cal_model_finalize;
+ etm_class = E_TABLE_MODEL_CLASS (class);
etm_class->column_count = ecm_column_count;
etm_class->row_count = ecm_row_count;
etm_class->value_at = ecm_value_at;
@@ -144,12 +254,22 @@ e_cal_model_class_init (ECalModelClass *klass)
etm_class->value_is_empty = ecm_value_is_empty;
etm_class->value_to_string = ecm_value_to_string;
- klass->get_color_for_component = ecm_get_color_for_component;
- klass->fill_component_from_model = NULL;
+ class->get_color_for_component = ecm_get_color_for_component;
+ class->fill_component_from_model = NULL;
+
+ g_object_class_install_property (
+ object_class,
+ PROP_USE_24_HOUR_FORMAT,
+ g_param_spec_boolean (
+ "use-24-hour-format",
+ "Use 24-Hour Format",
+ NULL,
+ TRUE,
+ G_PARAM_READWRITE));
signals[TIME_RANGE_CHANGED] =
g_signal_new ("time_range_changed",
- G_TYPE_FROM_CLASS (klass),
+ G_TYPE_FROM_CLASS (class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (ECalModelClass, time_range_changed),
NULL, NULL,
@@ -158,7 +278,7 @@ e_cal_model_class_init (ECalModelClass *klass)
signals[ROW_APPENDED] =
g_signal_new ("row_appended",
- G_TYPE_FROM_CLASS (klass),
+ G_TYPE_FROM_CLASS (class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (ECalModelClass, row_appended),
NULL, NULL,
@@ -167,7 +287,7 @@ e_cal_model_class_init (ECalModelClass *klass)
signals[COMPS_DELETED] =
g_signal_new ("comps_deleted",
- G_TYPE_FROM_CLASS (klass),
+ G_TYPE_FROM_CLASS (class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (ECalModelClass, comps_deleted),
NULL, NULL,
@@ -176,7 +296,7 @@ e_cal_model_class_init (ECalModelClass *klass)
signals[CAL_VIEW_PROGRESS] =
g_signal_new ("cal_view_progress",
- G_TYPE_FROM_CLASS (klass),
+ G_TYPE_FROM_CLASS (class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (ECalModelClass, cal_view_progress),
NULL, NULL,
@@ -184,7 +304,7 @@ e_cal_model_class_init (ECalModelClass *klass)
G_TYPE_NONE, 3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT);
signals[CAL_VIEW_DONE] =
g_signal_new ("cal_view_done",
- G_TYPE_FROM_CLASS (klass),
+ G_TYPE_FROM_CLASS (class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (ECalModelClass, cal_view_done),
NULL, NULL,
@@ -198,101 +318,21 @@ e_cal_model_init (ECalModel *model)
{
ECalModelPrivate *priv;
- priv = g_new0 (ECalModelPrivate, 1);
- model->priv = priv;
+ model->priv = E_CAL_MODEL_GET_PRIVATE (model);
/* match none by default */
- priv->start = -1;
- priv->end = -1;
- priv->search_sexp = NULL;
- priv->full_sexp = g_strdup ("#f");
-
- priv->objects = g_ptr_array_new ();
- priv->kind = ICAL_NO_COMPONENT;
- priv->flags = 0;
-
- priv->accounts = itip_addresses_get ();
-
- priv->use_24_hour_format = TRUE;
-}
-
-static void
-clear_objects_array (ECalModelPrivate *priv)
-{
- gint i;
-
- for (i = 0; i < priv->objects->len; i++) {
- ECalModelComponent *comp_data;
-
- comp_data = g_ptr_array_index (priv->objects, i);
- if (comp_data == NULL) {
- g_warning ("comp_data is null\n");
- continue;
- }
- e_cal_model_free_component_data (comp_data);
- }
-
- g_ptr_array_set_size (priv->objects, 0);
-}
-
-static void
-e_cal_model_dispose (GObject *object)
-{
- ECalModelPrivate *priv;
- ECalModel *model = (ECalModel *) object;
-
- g_return_if_fail (E_IS_CAL_MODEL (model));
-
- priv = model->priv;
+ model->priv->start = -1;
+ model->priv->end = -1;
+ model->priv->search_sexp = NULL;
+ model->priv->full_sexp = g_strdup ("#f");
- if (priv->clients) {
- while (priv->clients != NULL) {
- ECalModelClient *client_data = (ECalModelClient *) priv->clients->data;
-
- g_signal_handlers_disconnect_matched (client_data->client, G_SIGNAL_MATCH_DATA,
- 0, 0, NULL, NULL, model);
- if (client_data->query)
- g_signal_handlers_disconnect_matched (client_data->query, G_SIGNAL_MATCH_DATA,
- 0, 0, NULL, NULL, model);
-
- priv->clients = g_list_remove (priv->clients, client_data);
-
- g_object_unref (client_data->client);
- if (client_data->query)
- g_object_unref (client_data->query);
- g_free (client_data);
- }
-
- priv->clients = NULL;
- priv->default_client = NULL;
- }
-
- if (G_OBJECT_CLASS (e_cal_model_parent_class)->dispose)
- G_OBJECT_CLASS (e_cal_model_parent_class)->dispose (object);
-}
-
-static void
-e_cal_model_finalize (GObject *object)
-{
- ECalModelPrivate *priv;
- ECalModel *model = (ECalModel *) object;
-
- g_return_if_fail (E_IS_CAL_MODEL (model));
-
- priv = model->priv;
-
- g_free (priv->search_sexp);
- g_free (priv->full_sexp);
-
- g_free (priv->default_category);
-
- clear_objects_array (priv);
- g_ptr_array_free (priv->objects, FALSE);
+ model->priv->objects = g_ptr_array_new ();
+ model->priv->kind = ICAL_NO_COMPONENT;
+ model->priv->flags = 0;
- g_free (priv);
+ model->priv->accounts = itip_addresses_get ();
- if (G_OBJECT_CLASS (e_cal_model_parent_class)->finalize)
- G_OBJECT_CLASS (e_cal_model_parent_class)->finalize (object);
+ model->priv->use_24_hour_format = TRUE;
}
/* ETableModel methods */
@@ -2327,17 +2367,17 @@ struct _ECalModelComponentPrivate {
static void e_cal_model_component_finalize (GObject *object);
-static GObjectClass *parent_class;
+static GObjectClass *component_parent_class;
/* Class initialization function for the calendar component object */
static void
-e_cal_model_component_class_init (ECalModelComponentClass *klass)
+e_cal_model_component_class_init (ECalModelComponentClass *class)
{
GObjectClass *object_class;
- object_class = (GObjectClass *) klass;
+ object_class = (GObjectClass *) class;
- parent_class = g_type_class_peek_parent (klass);
+ component_parent_class = g_type_class_peek_parent (class);
object_class->finalize = e_cal_model_component_finalize;
}
@@ -2384,8 +2424,8 @@ e_cal_model_component_finalize (GObject *object)
comp_data->color = NULL;
}
- if (G_OBJECT_CLASS (parent_class)->finalize)
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
+ if (G_OBJECT_CLASS (component_parent_class)->finalize)
+ (* G_OBJECT_CLASS (component_parent_class)->finalize) (object);
}
/* Object initialization function for the calendar component object */
diff --git a/calendar/gui/e-calendar-view.c b/calendar/gui/e-calendar-view.c
index a9b717f..543623b 100644
--- a/calendar/gui/e-calendar-view.c
+++ b/calendar/gui/e-calendar-view.c
@@ -503,59 +503,72 @@ e_calendar_view_set_default_category (ECalendarView *cal_view, const gchar *cate
GList *
e_calendar_view_get_selected_events (ECalendarView *cal_view)
{
+ ECalendarViewClass *class;
+
g_return_val_if_fail (E_IS_CALENDAR_VIEW (cal_view), NULL);
- if (E_CALENDAR_VIEW_CLASS (G_OBJECT_GET_CLASS (cal_view))->get_selected_events)
- return E_CALENDAR_VIEW_CLASS (G_OBJECT_GET_CLASS (cal_view))->get_selected_events (cal_view);
+ class = E_CALENDAR_VIEW_GET_CLASS (cal_view);
+ g_return_val_if_fail (class->get_selected_events != NULL, NULL);
- return NULL;
+ return class->get_selected_events (cal_view);
}
gboolean
-e_calendar_view_get_selected_time_range (ECalendarView *cal_view, time_t *start_time, time_t *end_time)
+e_calendar_view_get_selected_time_range (ECalendarView *cal_view,
+ time_t *start_time,
+ time_t *end_time)
{
+ ECalendarViewClass *class;
+
g_return_val_if_fail (E_IS_CALENDAR_VIEW (cal_view), FALSE);
- if (E_CALENDAR_VIEW_CLASS (G_OBJECT_GET_CLASS (cal_view))->get_selected_time_range) {
- return E_CALENDAR_VIEW_CLASS (G_OBJECT_GET_CLASS (cal_view))->get_selected_time_range (
- cal_view, start_time, end_time);
- }
+ class = E_CALENDAR_VIEW_GET_CLASS (cal_view);
+ g_return_val_if_fail (class->get_selected_time_range != NULL, FALSE);
- return FALSE;
+ return class->get_selected_time_range (cal_view, start_time, end_time);
}
void
-e_calendar_view_set_selected_time_range (ECalendarView *cal_view, time_t start_time, time_t end_time)
+e_calendar_view_set_selected_time_range (ECalendarView *cal_view,
+ time_t start_time,
+ time_t end_time)
{
+ ECalendarViewClass *class;
+
g_return_if_fail (E_IS_CALENDAR_VIEW (cal_view));
- if (E_CALENDAR_VIEW_CLASS (G_OBJECT_GET_CLASS (cal_view))->set_selected_time_range) {
- E_CALENDAR_VIEW_CLASS (G_OBJECT_GET_CLASS (cal_view))->set_selected_time_range (
- cal_view, start_time, end_time);
- }
+ class = E_CALENDAR_VIEW_GET_CLASS (cal_view);
+ g_return_if_fail (class->set_selected_time_range != NULL);
+
+ class->set_selected_time_range (cal_view, start_time, end_time);
}
gboolean
-e_calendar_view_get_visible_time_range (ECalendarView *cal_view, time_t *start_time, time_t *end_time)
+e_calendar_view_get_visible_time_range (ECalendarView *cal_view,
+ time_t *start_time,
+ time_t *end_time)
{
+ ECalendarViewClass *class;
+
g_return_val_if_fail (E_IS_CALENDAR_VIEW (cal_view), FALSE);
- if (E_CALENDAR_VIEW_CLASS (G_OBJECT_GET_CLASS (cal_view))->get_visible_time_range) {
- return E_CALENDAR_VIEW_CLASS (G_OBJECT_GET_CLASS (cal_view))->get_visible_time_range (
- cal_view, start_time, end_time);
- }
+ class = E_CALENDAR_VIEW_GET_CLASS (cal_view);
+ g_return_val_if_fail (class->get_visible_time_range != NULL, FALSE);
- return FALSE;
+ class->get_visible_time_range (cal_view, start_time, end_time);
}
void
e_calendar_view_update_query (ECalendarView *cal_view)
{
+ ECalendarViewClass *class;
+
g_return_if_fail (E_IS_CALENDAR_VIEW (cal_view));
- if (E_CALENDAR_VIEW_CLASS (G_OBJECT_GET_CLASS (cal_view))->update_query) {
- E_CALENDAR_VIEW_CLASS (G_OBJECT_GET_CLASS (cal_view))->update_query (cal_view);
- }
+ class = E_CALENDAR_VIEW_GET_CLASS (cal_view);
+ g_return_if_fail (class->update_query != NULL);
+
+ class->update_query (cal_view);
}
void
@@ -846,10 +859,14 @@ clipboard_get_calendar_data (ECalendarView *cal_view, const gchar *text)
static void
e_calendar_view_paste_text (ECalendarView *cal_view)
{
+ ECalendarViewClass *class;
+
g_return_if_fail (E_IS_CALENDAR_VIEW (cal_view));
- if (E_CALENDAR_VIEW_CLASS (G_OBJECT_GET_CLASS (cal_view))->paste_text)
- E_CALENDAR_VIEW_CLASS (G_OBJECT_GET_CLASS (cal_view))->paste_text (cal_view);
+ class = E_CALENDAR_VIEW_GET_CLASS (cal_view);
+ g_return_if_fail (class->paste_text != NULL);
+
+ class->paste_text (cal_view);
}
static void
diff --git a/calendar/gui/e-day-view-main-item.c b/calendar/gui/e-day-view-main-item.c
index 9f63d25..afa4e8b 100644
--- a/calendar/gui/e-day-view-main-item.c
+++ b/calendar/gui/e-day-view-main-item.c
@@ -367,7 +367,7 @@ e_day_view_main_item_draw (GnomeCanvasItem *canvas_item, GdkDrawable *drawable,
day);
}
- if (e_day_view_get_show_marcus_bains (day_view)) {
+ if (e_day_view_marcus_bains_get_show_line (day_view)) {
icaltimezone *zone;
struct icaltimetype time_now, day_start;
gint marcus_bains_y;
diff --git a/calendar/gui/e-day-view-time-item.c b/calendar/gui/e-day-view-time-item.c
index 6d5f800..c3129b6 100644
--- a/calendar/gui/e-day-view-time-item.c
+++ b/calendar/gui/e-day-view-time-item.c
@@ -413,7 +413,7 @@ edvti_draw_zone (GnomeCanvasItem *canvas_item,
E_DVTMI_LARGE_HOUR_Y_PAD);
/* Draw the Marcus Bains Line first, so it appears under other elements. */
- if (e_day_view_get_show_marcus_bains (day_view)) {
+ if (e_day_view_marcus_bains_get_show_line (day_view)) {
struct icaltimetype time_now;
gint marcus_bains_y;
diff --git a/calendar/gui/e-day-view.c b/calendar/gui/e-day-view.c
index 42fe3f4..117e69d 100644
--- a/calendar/gui/e-day-view.c
+++ b/calendar/gui/e-day-view.c
@@ -431,38 +431,324 @@ static void e_day_view_queue_layout (EDayView *day_view);
static void e_day_view_cancel_layout (EDayView *day_view);
static gboolean e_day_view_layout_timeout_cb (gpointer data);
+enum {
+ PROP_0,
+ PROP_MARCUS_BAINS_SHOW_LINE,
+ PROP_MARCUS_BAINS_DAY_VIEW_COLOR,
+ PROP_MARCUS_BAINS_TIME_BAR_COLOR,
+ PROP_MINS_PER_ROW,
+ PROP_WEEK_START_DAY,
+ PROP_WORK_DAY_END_HOUR,
+ PROP_WORK_DAY_END_MINUTE,
+ PROP_WORK_DAY_START_HOUR,
+ PROP_WORK_DAY_START_MINUTE,
+ PROP_WORKING_DAYS
+};
+
G_DEFINE_TYPE (EDayView, e_day_view, E_TYPE_CALENDAR_VIEW)
static void
+day_view_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ switch (property_id) {
+ case PROP_MARCUS_BAINS_SHOW_LINE:
+ e_day_view_marcus_bains_set_show_line (
+ E_DAY_VIEW (object),
+ g_value_get_boolean (value));
+ return;
+
+ case PROP_MARCUS_BAINS_DAY_VIEW_COLOR:
+ e_day_view_marcus_bains_set_day_view_color (
+ E_DAY_VIEW (object),
+ g_value_get_string (value));
+ return;
+
+ case PROP_MARCUS_BAINS_TIME_BAR_COLOR:
+ e_day_view_marcus_bains_set_time_bar_color (
+ E_DAY_VIEW (object),
+ g_value_get_string (value));
+ return;
+
+ case PROP_MINS_PER_ROW:
+ e_day_view_set_mins_per_row (
+ E_DAY_VIEW (object),
+ g_value_get_int (value));
+ return;
+
+ case PROP_WEEK_START_DAY:
+ e_day_view_set_week_start_day (
+ E_DAY_VIEW (object),
+ g_value_get_int (value));
+ return;
+
+ case PROP_WORK_DAY_END_HOUR:
+ e_day_view_set_work_day_end_hour (
+ E_DAY_VIEW (object),
+ g_value_get_int (value));
+ return;
+
+ case PROP_WORK_DAY_END_MINUTE:
+ e_day_view_set_work_day_end_minute (
+ E_DAY_VIEW (object),
+ g_value_get_int (value));
+ return;
+
+ case PROP_WORK_DAY_START_HOUR:
+ e_day_view_set_work_day_start_hour (
+ E_DAY_VIEW (object),
+ g_value_get_int (value));
+ return;
+
+ case PROP_WORK_DAY_START_MINUTE:
+ e_day_view_set_work_day_start_minute (
+ E_DAY_VIEW (object),
+ g_value_get_int (value));
+ return;
+
+ case PROP_WORKING_DAYS:
+ e_day_view_set_working_days (
+ E_DAY_VIEW (object),
+ g_value_get_int (value));
+ return;
+ }
+
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+day_view_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ switch (property_id) {
+ case PROP_MARCUS_BAINS_SHOW_LINE:
+ g_value_set_boolean (
+ value,
+ e_day_view_marcus_bains_get_show_line (
+ E_DAY_VIEW (object)));
+ return;
+
+ case PROP_MARCUS_BAINS_DAY_VIEW_COLOR:
+ g_value_set_string (
+ value,
+ e_day_view_marcus_bains_get_day_view_color (
+ E_DAY_VIEW (object)));
+ return;
+
+ case PROP_MARCUS_BAINS_TIME_BAR_COLOR:
+ g_value_set_string (
+ value,
+ e_day_view_marcus_bains_get_time_bar_color (
+ E_DAY_VIEW (object)));
+ return;
+
+ case PROP_MINS_PER_ROW:
+ g_value_set_int (
+ value,
+ e_day_view_get_mins_per_row (
+ E_DAY_VIEW (object)));
+ return;
+
+ case PROP_WEEK_START_DAY:
+ g_value_set_int (
+ value,
+ e_day_view_get_week_start_day (
+ E_DAY_VIEW (object)));
+ return;
+
+ case PROP_WORK_DAY_END_HOUR:
+ g_value_set_int (
+ value,
+ e_day_view_get_work_day_end_hour (
+ E_DAY_VIEW (object)));
+ return;
+
+ case PROP_WORK_DAY_END_MINUTE:
+ g_value_set_int (
+ value,
+ e_day_view_get_work_day_end_minute (
+ E_DAY_VIEW (object)));
+ return;
+
+ case PROP_WORK_DAY_START_HOUR:
+ g_value_set_int (
+ value,
+ e_day_view_get_work_day_start_hour (
+ E_DAY_VIEW (object)));
+ return;
+
+ case PROP_WORK_DAY_START_MINUTE:
+ g_value_set_int (
+ value,
+ e_day_view_get_work_day_start_minute (
+ E_DAY_VIEW (object)));
+ return;
+
+ case PROP_WORKING_DAYS:
+ g_value_set_int (
+ value,
+ e_day_view_get_working_days (
+ E_DAY_VIEW (object)));
+ return;
+ }
+
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
e_day_view_class_init (EDayViewClass *class)
{
- GtkObjectClass *object_class;
+ GObjectClass *object_class;
+ GtkObjectClass *gtk_object_class;
GtkWidgetClass *widget_class;
ECalendarViewClass *view_class;
- object_class = (GtkObjectClass *) class;
- widget_class = (GtkWidgetClass *) class;
- view_class = (ECalendarViewClass *) class;
-
- /* Method override */
- object_class->destroy = e_day_view_destroy;
-
- widget_class->realize = e_day_view_realize;
- widget_class->unrealize = e_day_view_unrealize;
- widget_class->style_set = e_day_view_style_set;
- widget_class->size_allocate = e_day_view_size_allocate;
- widget_class->focus_in_event = e_day_view_focus_in;
- widget_class->focus_out_event = e_day_view_focus_out;
- widget_class->key_press_event = e_day_view_key_press;
- widget_class->focus = e_day_view_focus;
- widget_class->popup_menu = e_day_view_popup_menu;
-
+ object_class = G_OBJECT_CLASS (class);
+ object_class->set_property = day_view_set_property;
+ object_class->get_property = day_view_get_property;
+
+ gtk_object_class = GTK_OBJECT_CLASS (class);
+ gtk_object_class->destroy = e_day_view_destroy;
+
+ widget_class = GTK_WIDGET_CLASS (class);
+ widget_class->realize = e_day_view_realize;
+ widget_class->unrealize = e_day_view_unrealize;
+ widget_class->style_set = e_day_view_style_set;
+ widget_class->size_allocate = e_day_view_size_allocate;
+ widget_class->focus_in_event = e_day_view_focus_in;
+ widget_class->focus_out_event = e_day_view_focus_out;
+ widget_class->key_press_event = e_day_view_key_press;
+ widget_class->focus = e_day_view_focus;
+ widget_class->popup_menu = e_day_view_popup_menu;
+
+ view_class = E_CALENDAR_VIEW_CLASS (class);
view_class->get_selected_events = e_day_view_get_selected_events;
view_class->get_selected_time_range = e_day_view_get_selected_time_range;
view_class->set_selected_time_range = e_day_view_set_selected_time_range;
view_class->get_visible_time_range = e_day_view_get_visible_time_range;
view_class->paste_text = e_day_view_paste_text;
+ /* XXX Should these be constructor properties? */
+
+ g_object_class_install_property (
+ object_class,
+ PROP_MARCUS_BAINS_SHOW_LINE,
+ g_param_spec_boolean (
+ "marcus-bains-show-line",
+ "Marcus Bains Show Line",
+ NULL,
+ TRUE,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_MARCUS_BAINS_DAY_VIEW_COLOR,
+ g_param_spec_string (
+ "marcus-bains-day-view-color",
+ "Marcus Bains Day View Color",
+ NULL,
+ NULL,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_MARCUS_BAINS_TIME_BAR_COLOR,
+ g_param_spec_string (
+ "marcus-bains-time-bar-color",
+ "Marcus Bains Time Bar Color",
+ NULL,
+ NULL,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_MINS_PER_ROW,
+ g_param_spec_int (
+ "mins-per-row",
+ "Minutes Per Row",
+ NULL,
+ 5, /* not a continuous range */
+ 60, /* valid values: 5, 10, 15, 30, 60 */
+ 30,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_WEEK_START_DAY,
+ g_param_spec_int (
+ "week-start-day",
+ "Week Start Day",
+ NULL,
+ 0, /* Monday */
+ 6, /* Sunday */
+ 0,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_WORK_DAY_END_HOUR,
+ g_param_spec_int (
+ "work-day-end-hour",
+ "Work Day End Hour",
+ NULL,
+ G_MININT,
+ G_MAXINT,
+ 0,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_WORK_DAY_END_MINUTE,
+ g_param_spec_int (
+ "work-day-end-minute",
+ "Work Day End Minute",
+ NULL,
+ G_MININT,
+ G_MAXINT,
+ 0,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_WORK_DAY_START_HOUR,
+ g_param_spec_int (
+ "work-day-start-hour",
+ "Work Day Start Hour",
+ NULL,
+ G_MININT,
+ G_MAXINT,
+ 0,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_WORK_DAY_START_MINUTE,
+ g_param_spec_int (
+ "work-day-start-minute",
+ "Work Day Start Minute",
+ NULL,
+ G_MININT,
+ G_MAXINT,
+ 0,
+ G_PARAM_READWRITE));
+
+ /* FIXME Make this a real GFlags type. */
+ g_object_class_install_property (
+ object_class,
+ PROP_WORKING_DAYS,
+ g_param_spec_int (
+ "working-days",
+ "Working Days",
+ NULL,
+ 0x00,
+ 0x7f,
+ 0,
+ G_PARAM_READWRITE));
+
#if 0 /* KILL-BONOBO */
/* init the accessibility support for e_day_view */
e_day_view_a11y_init ();
@@ -762,7 +1048,7 @@ e_day_view_init (EDayView *day_view)
day_view->week_start_day = 0;
day_view->scroll_to_work_day = TRUE;
- day_view->show_marcus_bains_line = TRUE;
+ day_view->marcus_bains_show_line = TRUE;
day_view->marcus_bains_day_view_color = NULL;
day_view->marcus_bains_time_bar_color = NULL;
@@ -2382,7 +2668,7 @@ e_day_view_set_days_shown (EDayView *day_view,
}
gint
-e_day_view_get_mins_per_row (EDayView *day_view)
+e_day_view_get_mins_per_row (EDayView *day_view)
{
g_return_val_if_fail (E_IS_DAY_VIEW (day_view), -1);
@@ -2390,8 +2676,8 @@ e_day_view_get_mins_per_row (EDayView *day_view)
}
void
-e_day_view_set_mins_per_row (EDayView *day_view,
- gint mins_per_row)
+e_day_view_set_mins_per_row (EDayView *day_view,
+ gint mins_per_row)
{
gint day;
@@ -2409,6 +2695,8 @@ e_day_view_set_mins_per_row (EDayView *day_view,
day_view->mins_per_row = mins_per_row;
e_day_view_recalc_num_rows (day_view);
+ g_object_notify (G_OBJECT (day_view), "mins-per-row");
+
/* If we aren't visible, we'll sort it out later. */
if (!E_CALENDAR_VIEW (day_view)->in_focus)
return;
@@ -2433,7 +2721,7 @@ e_day_view_set_mins_per_row (EDayView *day_view,
/* This specifies the working days in the week. The value is a bitwise
combination of day flags. Defaults to Mon-Fri. */
EDayViewDays
-e_day_view_get_working_days (EDayView *day_view)
+e_day_view_get_working_days (EDayView *day_view)
{
g_return_val_if_fail (E_IS_DAY_VIEW (day_view), 0);
@@ -2441,8 +2729,8 @@ e_day_view_get_working_days (EDayView *day_view)
}
void
-e_day_view_set_working_days (EDayView *day_view,
- EDayViewDays days)
+e_day_view_set_working_days (EDayView *day_view,
+ EDayViewDays days)
{
g_return_if_fail (E_IS_DAY_VIEW (day_view));
@@ -2457,6 +2745,8 @@ e_day_view_set_working_days (EDayView *day_view,
/* We have to do this, as the new working days may have no effect on
the days shown, but we still want the background color to change. */
gtk_widget_queue_draw (day_view->main_canvas);
+
+ g_object_notify (G_OBJECT (day_view), "working-days");
}
static void
@@ -2496,86 +2786,162 @@ e_day_view_recalc_work_week_days_shown (EDayView *day_view)
/* The start and end time of the working day. This only affects the background
colors. */
+gint
+e_day_view_get_work_day_start_hour (EDayView *day_view)
+{
+ g_return_val_if_fail (E_IS_DAY_VIEW (day_view), -1);
+
+ return day_view->work_day_start_hour;
+}
+
+void
+e_day_view_set_work_day_start_hour (EDayView *day_view,
+ gint work_day_start_hour)
+{
+ g_return_if_fail (E_IS_DAY_VIEW (day_view));
+
+ day_view->work_day_start_hour = work_day_start_hour;
+
+ gtk_widget_queue_draw (day_view->main_canvas);
+
+ g_object_notify (G_OBJECT (day_view), "work-day-start-hour");
+}
+
+gint
+e_day_view_get_work_day_start_minute (EDayView *day_view)
+{
+ g_return_val_if_fail (E_IS_DAY_VIEW (day_view), -1);
+
+ return day_view->work_day_start_minute;
+}
+
void
-e_day_view_get_working_day (EDayView *day_view,
- gint *start_hour,
- gint *start_minute,
- gint *end_hour,
- gint *end_minute)
+e_day_view_set_work_day_start_minute (EDayView *day_view,
+ gint work_day_start_minute)
{
g_return_if_fail (E_IS_DAY_VIEW (day_view));
- *start_hour = day_view->work_day_start_hour;
- *start_minute = day_view->work_day_start_minute;
- *end_hour = day_view->work_day_end_hour;
- *end_minute = day_view->work_day_end_minute;
+ day_view->work_day_start_minute = work_day_start_minute;
+
+ gtk_widget_queue_draw (day_view->main_canvas);
+
+ g_object_notify (G_OBJECT (day_view), "work-day-start-minute");
+}
+
+gint
+e_day_view_get_work_day_end_hour (EDayView *day_view)
+{
+ g_return_val_if_fail (E_IS_DAY_VIEW (day_view), -1);
+
+ return day_view->work_day_end_hour;
}
void
-e_day_view_set_working_day (EDayView *day_view,
- gint start_hour,
- gint start_minute,
- gint end_hour,
- gint end_minute)
+e_day_view_set_work_day_end_hour (EDayView *day_view,
+ gint work_day_end_hour)
{
g_return_if_fail (E_IS_DAY_VIEW (day_view));
- day_view->work_day_start_hour = start_hour;
- day_view->work_day_start_minute = start_minute;
- day_view->work_day_end_hour = end_hour;
- day_view->work_day_end_minute = end_minute;
+ day_view->work_day_end_hour = work_day_end_hour;
gtk_widget_queue_draw (day_view->main_canvas);
+
+ g_object_notify (G_OBJECT (day_view), "work-day-end-hour");
}
-/* Whether we display the Marcus Bains Line in the main canvas and time canvas. */
-gboolean
-e_day_view_get_show_marcus_bains (EDayView *day_view)
+gint
+e_day_view_get_work_day_end_minute (EDayView *day_view)
{
- g_return_val_if_fail (E_IS_DAY_VIEW (day_view), TRUE);
- return day_view->show_marcus_bains_line;
+ g_return_val_if_fail (E_IS_DAY_VIEW (day_view), -1);
+
+ return day_view->work_day_end_minute;
+}
+
+void
+e_day_view_set_work_day_end_minute (EDayView *day_view,
+ gint work_day_end_minute)
+{
+ g_return_if_fail (E_IS_DAY_VIEW (day_view));
+
+ day_view->work_day_end_minute = work_day_end_minute;
+
+ gtk_widget_queue_draw (day_view->main_canvas);
+
+ g_object_notify (G_OBJECT (day_view), "work-day-end-minute");
}
/* Force a redraw of the Marcus Bains Lines */
void
-e_day_view_update_marcus_bains (EDayView *day_view)
+e_day_view_marcus_bains_update (EDayView *day_view)
{
g_return_if_fail (E_IS_DAY_VIEW (day_view));
gtk_widget_queue_draw (day_view->main_canvas);
gtk_widget_queue_draw (day_view->time_canvas);
}
-/* Update the variables controlling the Marcus Bains Line (display toggle, and colors). */
+gboolean
+e_day_view_marcus_bains_get_show_line (EDayView *day_view)
+{
+ g_return_val_if_fail (E_IS_DAY_VIEW (day_view), FALSE);
+
+ return day_view->marcus_bains_show_line;
+}
+
void
-e_day_view_set_marcus_bains (EDayView *day_view,
- gboolean show_line,
- const gchar *dayview_color,
- const gchar *timebar_color)
+e_day_view_marcus_bains_set_show_line (EDayView *day_view,
+ gboolean show_line)
{
g_return_if_fail (E_IS_DAY_VIEW (day_view));
- if ((day_view->show_marcus_bains_line != show_line) |
- (day_view->marcus_bains_day_view_color != dayview_color) |
- (day_view->marcus_bains_time_bar_color != timebar_color)) {
+ day_view->marcus_bains_show_line = show_line;
- if (day_view->marcus_bains_day_view_color)
- g_free (day_view->marcus_bains_day_view_color);
- if (day_view->marcus_bains_time_bar_color)
- g_free (day_view->marcus_bains_time_bar_color);
+ e_day_view_marcus_bains_update (day_view);
- day_view->show_marcus_bains_line = show_line;
- if (dayview_color)
- day_view->marcus_bains_day_view_color = g_strdup (dayview_color);
- else
- day_view->marcus_bains_day_view_color = NULL;
+ g_object_notify (G_OBJECT (day_view), "marcus-bains-show-line");
+}
- if (timebar_color)
- day_view->marcus_bains_time_bar_color = g_strdup (timebar_color);
- else
- day_view->marcus_bains_time_bar_color = NULL;
+const gchar *
+e_day_view_marcus_bains_get_day_view_color (EDayView *day_view)
+{
+ g_return_val_if_fail (E_IS_DAY_VIEW (day_view), NULL);
- e_day_view_update_marcus_bains (day_view);
- }
+ return day_view->marcus_bains_day_view_color;
+}
+
+void
+e_day_view_marcus_bains_set_day_view_color (EDayView *day_view,
+ const gchar *day_view_color)
+{
+ g_return_if_fail (E_IS_DAY_VIEW (day_view));
+
+ g_free (day_view->marcus_bains_day_view_color);
+ day_view->marcus_bains_day_view_color = g_strdup (day_view_color);
+
+ e_day_view_marcus_bains_update (day_view);
+
+ g_object_notify (G_OBJECT (day_view), "marcus-bains-day-view-color");
+}
+
+const gchar *
+e_day_view_marcus_bains_get_time_bar_color (EDayView *day_view)
+{
+ g_return_val_if_fail (E_IS_DAY_VIEW (day_view), NULL);
+
+ return day_view->marcus_bains_time_bar_color;
+}
+
+void
+e_day_view_marcus_bains_set_time_bar_color (EDayView *day_view,
+ const gchar *time_bar_color)
+{
+ g_return_if_fail (E_IS_DAY_VIEW (day_view));
+
+ g_free (day_view->marcus_bains_time_bar_color);
+ day_view->marcus_bains_time_bar_color = g_strdup (time_bar_color);
+
+ e_day_view_marcus_bains_update (day_view);
+
+ g_object_notify (G_OBJECT (day_view), "marcus-bains-time-bar-color");
}
/* Whether we display event end times in the main canvas. */
@@ -2616,7 +2982,7 @@ e_day_view_set_show_times_cb (EDayView *day_view,
/* The first day of the week, 0 (Monday) to 6 (Sunday). */
gint
-e_day_view_get_week_start_day (EDayView *day_view)
+e_day_view_get_week_start_day (EDayView *day_view)
{
g_return_val_if_fail (E_IS_DAY_VIEW (day_view), 0);
@@ -2624,8 +2990,8 @@ e_day_view_get_week_start_day (EDayView *day_view)
}
void
-e_day_view_set_week_start_day (EDayView *day_view,
- gint week_start_day)
+e_day_view_set_week_start_day (EDayView *day_view,
+ gint week_start_day)
{
g_return_if_fail (E_IS_DAY_VIEW (day_view));
g_return_if_fail (week_start_day >= 0);
@@ -2638,6 +3004,8 @@ e_day_view_set_week_start_day (EDayView *day_view,
if (day_view->work_week_view)
e_day_view_recalc_work_week (day_view);
+
+ g_object_notify (G_OBJECT (day_view), "week-start-day");
}
static void
diff --git a/calendar/gui/e-day-view.h b/calendar/gui/e-day-view.h
index 663252b..8d778fa 100644
--- a/calendar/gui/e-day-view.h
+++ b/calendar/gui/e-day-view.h
@@ -309,7 +309,7 @@ struct _EDayView {
gint work_day_end_minute;
/* Whether we show the Marcus Bains Line in the main canvas and time canvas. */
- gboolean show_marcus_bains_line;
+ gboolean marcus_bains_show_line;
gchar *marcus_bains_day_view_color;
gchar *marcus_bains_time_bar_color;
@@ -525,23 +525,36 @@ void e_day_view_set_working_days (EDayView *day_view,
/* The start and end time of the working day. This only affects the background
colors. */
-void e_day_view_get_working_day (EDayView *day_view,
- gint *start_hour,
- gint *start_minute,
- gint *end_hour,
- gint *end_minute);
-void e_day_view_set_working_day (EDayView *day_view,
- gint start_hour,
- gint start_minute,
- gint end_hour,
- gint end_minute);
+gint e_day_view_get_work_day_start_hour (EDayView *day_view);
+void e_day_view_set_work_day_start_hour (EDayView *day_view,
+ gint work_day_start_hour);
+gint e_day_view_get_work_day_start_minute (EDayView *day_view);
+void e_day_view_set_work_day_start_minute (EDayView *day_view,
+ gint work_day_start_minute);
+gint e_day_view_get_work_day_end_hour (EDayView *day_view);
+void e_day_view_set_work_day_end_hour (EDayView *day_view,
+ gint work_day_end_hour);
+gint e_day_view_get_work_day_end_minute (EDayView *day_view);
+void e_day_view_set_work_day_end_minute (EDayView *day_view,
+ gint work_day_end_minute);
/* Whether we display the Marcus Bains Line in the main canvas and time canvas. */
-gboolean e_day_view_get_show_marcus_bains (EDayView *day_view);
-void e_day_view_set_marcus_bains (EDayView *day_view,
- gboolean show_line,
- const gchar *dayview_color,
- const gchar *timebar_color);
+void e_day_view_marcus_bains_update (EDayView *day_view);
+gboolean e_day_view_marcus_bains_get_show_line(EDayView *day_view);
+void e_day_view_marcus_bains_set_show_line(EDayView *day_view,
+ gboolean show_line);
+const gchar *
+ e_day_view_marcus_bains_get_day_view_color
+ (EDayView *day_view);
+void e_day_view_marcus_bains_set_day_view_color
+ (EDayView *day_view,
+ const gchar *day_view_color);
+const gchar *
+ e_day_view_marcus_bains_get_time_bar_color
+ (EDayView *day_view);
+void e_day_view_marcus_bains_set_time_bar_color
+ (EDayView *day_view,
+ const gchar *time_bar_color);
/* Whether we display event end times in the main canvas. */
gboolean e_day_view_get_show_event_end_times (EDayView *day_view);
@@ -621,8 +634,6 @@ void e_day_view_ensure_rows_visible (EDayView *day_view,
gint start_row,
gint end_row);
-void e_day_view_update_marcus_bains (EDayView *day_view);
-
/* Week number in upper-left corner of the day view widget */
gboolean e_day_view_get_show_week_number (EDayView *day_view);
void e_day_view_set_show_week_number (EDayView *day_view, gboolean show);
diff --git a/calendar/gui/e-week-view.c b/calendar/gui/e-week-view.c
index b671abb..397bb02 100644
--- a/calendar/gui/e-week-view.c
+++ b/calendar/gui/e-week-view.c
@@ -193,10 +193,109 @@ static gboolean e_week_view_layout_timeout_cb (gpointer data);
G_DEFINE_TYPE (EWeekView, e_week_view, E_TYPE_CALENDAR_VIEW)
+enum {
+ PROP_0,
+ PROP_COMPRESS_WEEKEND,
+ PROP_SHOW_EVENT_END_TIMES,
+ PROP_WEEK_START_DAY
+};
+
static gint map_left[] = {0, 1, 2, 0, 1, 2, 2};
static gint map_right[] = {3, 4, 5, 3, 4, 5, 6};
static void
+timezone_changed_cb (ECalendarView *cal_view,
+ icaltimezone *old_zone,
+ icaltimezone *new_zone,
+ gpointer user_data)
+{
+ struct icaltimetype tt = icaltime_null_time ();
+ time_t lower;
+ EWeekView *week_view = (EWeekView *) cal_view;
+
+ g_return_if_fail (E_IS_WEEK_VIEW (week_view));
+
+ if (!cal_view->in_focus)
+ return;
+
+ /* If we don't have a valid date set yet, just return. */
+ if (!g_date_valid (&week_view->first_day_shown))
+ return;
+
+ /* Recalculate the new start of the first week. We just use exactly
+ the same time, but with the new timezone. */
+ tt.year = g_date_get_year (&week_view->first_day_shown);
+ tt.month = g_date_get_month (&week_view->first_day_shown);
+ tt.day = g_date_get_day (&week_view->first_day_shown);
+
+ lower = icaltime_as_timet_with_zone (tt, new_zone);
+
+ e_week_view_recalc_day_starts (week_view, lower);
+ e_week_view_update_query (week_view);
+}
+
+static void
+week_view_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ switch (property_id) {
+ case PROP_COMPRESS_WEEKEND:
+ e_week_view_set_compress_weekend (
+ E_WEEK_VIEW (object),
+ g_value_get_boolean (value));
+ return;
+
+ case PROP_SHOW_EVENT_END_TIMES:
+ e_week_view_set_show_event_end_times (
+ E_WEEK_VIEW (object),
+ g_value_get_boolean (value));
+ return;
+
+ case PROP_WEEK_START_DAY:
+ e_week_view_set_week_start_day (
+ E_WEEK_VIEW (object),
+ g_value_get_int (value));
+ return;
+ }
+
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+week_view_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ switch (property_id) {
+ case PROP_COMPRESS_WEEKEND:
+ g_value_set_boolean (
+ value,
+ e_week_view_get_compress_weekend (
+ E_WEEK_VIEW (object)));
+ return;
+
+ case PROP_SHOW_EVENT_END_TIMES:
+ g_value_set_boolean (
+ value,
+ e_week_view_get_show_event_end_times (
+ E_WEEK_VIEW (object)));
+ return;
+
+ case PROP_WEEK_START_DAY:
+ g_value_set_int (
+ value,
+ e_week_view_get_week_start_day (
+ E_WEEK_VIEW (object)));
+ return;
+ }
+
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
week_view_cursor_key_up (EWeekView *week_view)
{
if (week_view->selection_start_day == -1)
@@ -259,28 +358,31 @@ week_view_cursor_key_right (EWeekView *week_view)
static void
e_week_view_class_init (EWeekViewClass *class)
{
- GtkObjectClass *object_class;
+ GObjectClass *object_class;
+ GtkObjectClass *gtk_object_class;
GtkWidgetClass *widget_class;
ECalendarViewClass *view_class;
- object_class = (GtkObjectClass *) class;
- widget_class = (GtkWidgetClass *) class;
- view_class = (ECalendarViewClass *) class;
-
- /* Method override */
- object_class->destroy = e_week_view_destroy;
-
- widget_class->realize = e_week_view_realize;
- widget_class->unrealize = e_week_view_unrealize;
- widget_class->style_set = e_week_view_style_set;
- widget_class->size_allocate = e_week_view_size_allocate;
- widget_class->focus_in_event = e_week_view_focus_in;
- widget_class->focus_out_event = e_week_view_focus_out;
- widget_class->key_press_event = e_week_view_key_press;
- widget_class->popup_menu = e_week_view_popup_menu;
- widget_class->expose_event = e_week_view_expose_event;
- widget_class->focus = e_week_view_focus;
-
+ object_class = G_OBJECT_CLASS (class);
+ object_class->set_property = week_view_set_property;
+ object_class->get_property = week_view_get_property;
+
+ gtk_object_class = GTK_OBJECT_CLASS (class);
+ gtk_object_class->destroy = e_week_view_destroy;
+
+ widget_class = GTK_WIDGET_CLASS (class);
+ widget_class->realize = e_week_view_realize;
+ widget_class->unrealize = e_week_view_unrealize;
+ widget_class->style_set = e_week_view_style_set;
+ widget_class->size_allocate = e_week_view_size_allocate;
+ widget_class->focus_in_event = e_week_view_focus_in;
+ widget_class->focus_out_event = e_week_view_focus_out;
+ widget_class->key_press_event = e_week_view_key_press;
+ widget_class->popup_menu = e_week_view_popup_menu;
+ widget_class->expose_event = e_week_view_expose_event;
+ widget_class->focus = e_week_view_focus;
+
+ view_class = E_CALENDAR_VIEW_CLASS (class);
view_class->get_selected_events = e_week_view_get_selected_events;
view_class->get_selected_time_range = e_week_view_get_selected_time_range;
view_class->set_selected_time_range = e_week_view_set_selected_time_range;
@@ -292,6 +394,40 @@ e_week_view_class_init (EWeekViewClass *class)
class->cursor_key_left = week_view_cursor_key_left;
class->cursor_key_right = week_view_cursor_key_right;
+ /* XXX This property really belongs in EMonthView,
+ * but too much drawing code is tied to it. */
+ g_object_class_install_property (
+ object_class,
+ PROP_COMPRESS_WEEKEND,
+ g_param_spec_boolean (
+ "compress-weekend",
+ "Compress Weekend",
+ NULL,
+ TRUE,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_SHOW_EVENT_END_TIMES,
+ g_param_spec_boolean (
+ "show-event-end-times",
+ "Show Event End Times",
+ NULL,
+ TRUE,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_WEEK_START_DAY,
+ g_param_spec_int (
+ "week-start-day",
+ "Week Start Day",
+ NULL,
+ 0, /* Monday */
+ 6, /* Sunday */
+ 0,
+ G_PARAM_READWRITE));
+
#if 0 /* KILL-BONOBO */
/* init the accessibility support for e_week_view */
e_week_view_a11y_init ();
@@ -299,6 +435,154 @@ e_week_view_class_init (EWeekViewClass *class)
}
static void
+e_week_view_init (EWeekView *week_view)
+{
+ GnomeCanvasGroup *canvas_group;
+ GtkObject *adjustment;
+ GdkPixbuf *pixbuf;
+ gint i;
+
+ GTK_WIDGET_SET_FLAGS (week_view, GTK_CAN_FOCUS);
+
+ week_view->query = NULL;
+ week_view->event_destroyed = FALSE;
+ week_view->events = g_array_new (FALSE, FALSE,
+ sizeof (EWeekViewEvent));
+ week_view->events_sorted = TRUE;
+ week_view->events_need_layout = FALSE;
+ week_view->events_need_reshape = FALSE;
+
+ week_view->layout_timeout_id = 0;
+
+ week_view->spans = NULL;
+
+ week_view->multi_week_view = FALSE;
+ week_view->month_scroll_by_week = FALSE;
+ week_view->scroll_by_week_notif_id = 0;
+ week_view->update_base_date = TRUE;
+ week_view->weeks_shown = 6;
+ week_view->rows = 6;
+ week_view->columns = 2;
+ week_view->compress_weekend = TRUE;
+ week_view->show_event_end_times = TRUE;
+ week_view->week_start_day = 0; /* Monday. */
+ week_view->display_start_day = 0; /* Monday. */
+
+ g_date_clear (&week_view->base_date, 1);
+ g_date_clear (&week_view->first_day_shown, 1);
+
+ week_view->row_height = 10;
+ week_view->rows_per_cell = 1;
+
+ week_view->selection_start_day = -1;
+ week_view->selection_drag_pos = E_WEEK_VIEW_DRAG_NONE;
+
+ week_view->pressed_event_num = -1;
+ week_view->editing_event_num = -1;
+
+ week_view->last_edited_comp_string = NULL;
+
+ week_view->main_gc = NULL;
+
+ /* Create the small font. */
+ week_view->use_small_font = TRUE;
+
+ week_view->small_font_desc =
+ pango_font_description_copy (gtk_widget_get_style (GTK_WIDGET (week_view))->font_desc);
+ pango_font_description_set_size (week_view->small_font_desc,
+ E_WEEK_VIEW_SMALL_FONT_PTSIZE * PANGO_SCALE);
+
+ /* String to use in 12-hour time format for times in the morning. */
+ week_view->am_string = _("am");
+
+ /* String to use in 12-hour time format for times in the afternoon. */
+ week_view->pm_string = _("pm");
+
+ week_view->bc_event_time = 0;
+ week_view->before_click_dtstart = 0;
+ week_view->before_click_dtend = 0;
+
+ /*
+ * Titles Canvas. Note that we don't show it is only shown in the
+ * Month view.
+ */
+ week_view->titles_canvas = e_canvas_new ();
+ gtk_table_attach (GTK_TABLE (week_view), week_view->titles_canvas,
+ 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+
+ canvas_group = GNOME_CANVAS_GROUP (GNOME_CANVAS (week_view->titles_canvas)->root);
+
+ week_view->titles_canvas_item =
+ gnome_canvas_item_new (canvas_group,
+ e_week_view_titles_item_get_type (),
+ "EWeekViewTitlesItem::week_view", week_view,
+ NULL);
+
+ /*
+ * Main Canvas
+ */
+ week_view->main_canvas = e_canvas_new ();
+ gtk_table_attach (GTK_TABLE (week_view), week_view->main_canvas,
+ 1, 2, 1, 2,
+ GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 1, 1);
+ gtk_widget_show (week_view->main_canvas);
+
+ canvas_group = GNOME_CANVAS_GROUP (GNOME_CANVAS (week_view->main_canvas)->root);
+
+ week_view->main_canvas_item =
+ gnome_canvas_item_new (canvas_group,
+ e_week_view_main_item_get_type (),
+ "EWeekViewMainItem::week_view", week_view,
+ NULL);
+
+ g_signal_connect_after (week_view->main_canvas, "button_press_event",
+ G_CALLBACK (e_week_view_on_button_press), week_view);
+ g_signal_connect (week_view->main_canvas, "button_release_event",
+ G_CALLBACK (e_week_view_on_button_release), week_view);
+ g_signal_connect (week_view->main_canvas, "scroll_event",
+ G_CALLBACK (e_week_view_on_scroll), week_view);
+ g_signal_connect (week_view->main_canvas, "motion_notify_event",
+ G_CALLBACK (e_week_view_on_motion), week_view);
+
+ /* Create the buttons to jump to each days. */
+ pixbuf = gdk_pixbuf_new_from_xpm_data ((const gchar **) jump_xpm);
+
+ for (i = 0; i < E_WEEK_VIEW_MAX_WEEKS * 7; i++) {
+ week_view->jump_buttons[i] = gnome_canvas_item_new
+ (canvas_group,
+ gnome_canvas_pixbuf_get_type (),
+ "GnomeCanvasPixbuf::pixbuf", pixbuf,
+ NULL);
+
+ g_signal_connect (week_view->jump_buttons[i], "event",
+ G_CALLBACK (e_week_view_on_jump_button_event), week_view);
+ }
+ week_view->focused_jump_button = E_WEEK_VIEW_JUMP_BUTTON_NO_FOCUS;
+
+ g_object_unref (pixbuf);
+
+ /*
+ * Scrollbar.
+ */
+ adjustment = gtk_adjustment_new (0, -52, 52, 1, 1, 1);
+
+ week_view->vscrollbar = gtk_vscrollbar_new (GTK_ADJUSTMENT (adjustment));
+ gtk_table_attach (GTK_TABLE (week_view), week_view->vscrollbar,
+ 2, 3, 1, 2, 0, GTK_EXPAND | GTK_FILL, 0, 0);
+ gtk_widget_show (week_view->vscrollbar);
+
+ /* Create the cursors. */
+ week_view->normal_cursor = gdk_cursor_new (GDK_LEFT_PTR);
+ week_view->move_cursor = gdk_cursor_new (GDK_FLEUR);
+ week_view->resize_width_cursor = gdk_cursor_new (GDK_SB_H_DOUBLE_ARROW);
+ week_view->last_cursor_set = NULL;
+
+ /* connect to ECalendarView's signals */
+ g_signal_connect (G_OBJECT (week_view), "timezone_changed",
+ G_CALLBACK (timezone_changed_cb), NULL);
+}
+
+static void
time_range_changed_cb (ECalModel *model, time_t start_time, time_t end_time, gpointer user_data)
{
EWeekView *week_view = E_WEEK_VIEW (user_data);
@@ -519,183 +803,6 @@ model_comps_deleted_cb (ETableModel *etm, gpointer data, gpointer user_data)
}
static void
-timezone_changed_cb (ECalendarView *cal_view, icaltimezone *old_zone,
- icaltimezone *new_zone, gpointer user_data)
-{
- struct icaltimetype tt = icaltime_null_time ();
- time_t lower;
- EWeekView *week_view = (EWeekView *) cal_view;
-
- g_return_if_fail (E_IS_WEEK_VIEW (week_view));
-
- if (!cal_view->in_focus)
- return;
-
- /* If we don't have a valid date set yet, just return. */
- if (!g_date_valid (&week_view->first_day_shown))
- return;
-
- /* Recalculate the new start of the first week. We just use exactly
- the same time, but with the new timezone. */
- tt.year = g_date_get_year (&week_view->first_day_shown);
- tt.month = g_date_get_month (&week_view->first_day_shown);
- tt.day = g_date_get_day (&week_view->first_day_shown);
-
- lower = icaltime_as_timet_with_zone (tt, new_zone);
-
- e_week_view_recalc_day_starts (week_view, lower);
- e_week_view_update_query (week_view);
-}
-
-static void
-e_week_view_init (EWeekView *week_view)
-{
- GnomeCanvasGroup *canvas_group;
- GtkObject *adjustment;
- GdkPixbuf *pixbuf;
- gint i;
-
- GTK_WIDGET_SET_FLAGS (week_view, GTK_CAN_FOCUS);
-
- week_view->query = NULL;
- week_view->event_destroyed = FALSE;
- week_view->events = g_array_new (FALSE, FALSE,
- sizeof (EWeekViewEvent));
- week_view->events_sorted = TRUE;
- week_view->events_need_layout = FALSE;
- week_view->events_need_reshape = FALSE;
-
- week_view->layout_timeout_id = 0;
-
- week_view->spans = NULL;
-
- week_view->multi_week_view = FALSE;
- week_view->month_scroll_by_week = FALSE;
- week_view->scroll_by_week_notif_id = 0;
- week_view->update_base_date = TRUE;
- week_view->weeks_shown = 6;
- week_view->rows = 6;
- week_view->columns = 2;
- week_view->compress_weekend = TRUE;
- week_view->show_event_end_times = TRUE;
- week_view->week_start_day = 0; /* Monday. */
- week_view->display_start_day = 0; /* Monday. */
-
- g_date_clear (&week_view->base_date, 1);
- g_date_clear (&week_view->first_day_shown, 1);
-
- week_view->row_height = 10;
- week_view->rows_per_cell = 1;
-
- week_view->selection_start_day = -1;
- week_view->selection_drag_pos = E_WEEK_VIEW_DRAG_NONE;
-
- week_view->pressed_event_num = -1;
- week_view->editing_event_num = -1;
-
- week_view->last_edited_comp_string = NULL;
-
- week_view->main_gc = NULL;
-
- /* Create the small font. */
- week_view->use_small_font = TRUE;
-
- week_view->small_font_desc =
- pango_font_description_copy (gtk_widget_get_style (GTK_WIDGET (week_view))->font_desc);
- pango_font_description_set_size (week_view->small_font_desc,
- E_WEEK_VIEW_SMALL_FONT_PTSIZE * PANGO_SCALE);
-
- /* String to use in 12-hour time format for times in the morning. */
- week_view->am_string = _("am");
-
- /* String to use in 12-hour time format for times in the afternoon. */
- week_view->pm_string = _("pm");
-
- week_view->bc_event_time = 0;
- week_view->before_click_dtstart = 0;
- week_view->before_click_dtend = 0;
-
- /*
- * Titles Canvas. Note that we don't show it is only shown in the
- * Month view.
- */
- week_view->titles_canvas = e_canvas_new ();
- gtk_table_attach (GTK_TABLE (week_view), week_view->titles_canvas,
- 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
-
- canvas_group = GNOME_CANVAS_GROUP (GNOME_CANVAS (week_view->titles_canvas)->root);
-
- week_view->titles_canvas_item =
- gnome_canvas_item_new (canvas_group,
- e_week_view_titles_item_get_type (),
- "EWeekViewTitlesItem::week_view", week_view,
- NULL);
-
- /*
- * Main Canvas
- */
- week_view->main_canvas = e_canvas_new ();
- gtk_table_attach (GTK_TABLE (week_view), week_view->main_canvas,
- 1, 2, 1, 2,
- GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 1, 1);
- gtk_widget_show (week_view->main_canvas);
-
- canvas_group = GNOME_CANVAS_GROUP (GNOME_CANVAS (week_view->main_canvas)->root);
-
- week_view->main_canvas_item =
- gnome_canvas_item_new (canvas_group,
- e_week_view_main_item_get_type (),
- "EWeekViewMainItem::week_view", week_view,
- NULL);
-
- g_signal_connect_after (week_view->main_canvas, "button_press_event",
- G_CALLBACK (e_week_view_on_button_press), week_view);
- g_signal_connect (week_view->main_canvas, "button_release_event",
- G_CALLBACK (e_week_view_on_button_release), week_view);
- g_signal_connect (week_view->main_canvas, "scroll_event",
- G_CALLBACK (e_week_view_on_scroll), week_view);
- g_signal_connect (week_view->main_canvas, "motion_notify_event",
- G_CALLBACK (e_week_view_on_motion), week_view);
-
- /* Create the buttons to jump to each days. */
- pixbuf = gdk_pixbuf_new_from_xpm_data ((const gchar **) jump_xpm);
-
- for (i = 0; i < E_WEEK_VIEW_MAX_WEEKS * 7; i++) {
- week_view->jump_buttons[i] = gnome_canvas_item_new
- (canvas_group,
- gnome_canvas_pixbuf_get_type (),
- "GnomeCanvasPixbuf::pixbuf", pixbuf,
- NULL);
-
- g_signal_connect (week_view->jump_buttons[i], "event",
- G_CALLBACK (e_week_view_on_jump_button_event), week_view);
- }
- week_view->focused_jump_button = E_WEEK_VIEW_JUMP_BUTTON_NO_FOCUS;
-
- g_object_unref (pixbuf);
-
- /*
- * Scrollbar.
- */
- adjustment = gtk_adjustment_new (0, -52, 52, 1, 1, 1);
-
- week_view->vscrollbar = gtk_vscrollbar_new (GTK_ADJUSTMENT (adjustment));
- gtk_table_attach (GTK_TABLE (week_view), week_view->vscrollbar,
- 2, 3, 1, 2, 0, GTK_EXPAND | GTK_FILL, 0, 0);
- gtk_widget_show (week_view->vscrollbar);
-
- /* Create the cursors. */
- week_view->normal_cursor = gdk_cursor_new (GDK_LEFT_PTR);
- week_view->move_cursor = gdk_cursor_new (GDK_FLEUR);
- week_view->resize_width_cursor = gdk_cursor_new (GDK_SB_H_DOUBLE_ARROW);
- week_view->last_cursor_set = NULL;
-
- /* connect to ECalendarView's signals */
- g_signal_connect (G_OBJECT (week_view), "timezone_changed",
- G_CALLBACK (timezone_changed_cb), NULL);
-}
-
-static void
init_model (EWeekView *week_view, ECalModel *model)
{
/* connect to ECalModel's signals */
@@ -1861,7 +1968,7 @@ e_week_view_set_weeks_shown (EWeekView *week_view,
}
gboolean
-e_week_view_get_compress_weekend (EWeekView *week_view)
+e_week_view_get_compress_weekend (EWeekView *week_view)
{
g_return_val_if_fail (E_IS_WEEK_VIEW (week_view), FALSE);
@@ -1869,17 +1976,17 @@ e_week_view_get_compress_weekend (EWeekView *week_view)
}
void
-e_week_view_set_compress_weekend (EWeekView *week_view,
- gboolean compress)
+e_week_view_set_compress_weekend (EWeekView *week_view,
+ gboolean compress_weekend)
{
gboolean need_reload = FALSE;
g_return_if_fail (E_IS_WEEK_VIEW (week_view));
- if (week_view->compress_weekend == compress)
+ if (week_view->compress_weekend == compress_weekend)
return;
- week_view->compress_weekend = compress;
+ week_view->compress_weekend = compress_weekend;
/* The option only affects the month view. */
if (!week_view->multi_week_view)
@@ -1903,11 +2010,13 @@ e_week_view_set_compress_weekend (EWeekView *week_view,
gtk_widget_queue_draw (week_view->titles_canvas);
gtk_widget_queue_draw (week_view->main_canvas);
+
+ g_object_notify (G_OBJECT (week_view), "compress-weekend");
}
/* Whether we display event end times. */
gboolean
-e_week_view_get_show_event_end_times (EWeekView *week_view)
+e_week_view_get_show_event_end_times (EWeekView *week_view)
{
g_return_val_if_fail (E_IS_WEEK_VIEW (week_view), TRUE);
@@ -1915,22 +2024,25 @@ e_week_view_get_show_event_end_times (EWeekView *week_view)
}
void
-e_week_view_set_show_event_end_times (EWeekView *week_view,
- gboolean show)
+e_week_view_set_show_event_end_times (EWeekView *week_view,
+ gboolean show_event_end_times)
{
g_return_if_fail (E_IS_WEEK_VIEW (week_view));
- if (week_view->show_event_end_times != show) {
- week_view->show_event_end_times = show;
- e_week_view_recalc_cell_sizes (week_view);
- week_view->events_need_reshape = TRUE;
- e_week_view_check_layout (week_view);
- }
+ if (week_view->show_event_end_times != show_event_end_times)
+ return;
+
+ week_view->show_event_end_times = show_event_end_times;
+ e_week_view_recalc_cell_sizes (week_view);
+ week_view->events_need_reshape = TRUE;
+ e_week_view_check_layout (week_view);
+
+ g_object_notify (G_OBJECT (week_view), "show-event-end-times");
}
/* The first day of the week, 0 (Monday) to 6 (Sunday). */
gint
-e_week_view_get_week_start_day (EWeekView *week_view)
+e_week_view_get_week_start_day (EWeekView *week_view)
{
g_return_val_if_fail (E_IS_WEEK_VIEW (week_view), 0);
@@ -1938,8 +2050,8 @@ e_week_view_get_week_start_day (EWeekView *week_view)
}
void
-e_week_view_set_week_start_day (EWeekView *week_view,
- gint week_start_day)
+e_week_view_set_week_start_day (EWeekView *week_view,
+ gint week_start_day)
{
g_return_if_fail (E_IS_WEEK_VIEW (week_view));
g_return_if_fail (week_start_day >= 0);
@@ -1959,6 +2071,8 @@ e_week_view_set_week_start_day (EWeekView *week_view,
gtk_widget_queue_draw (week_view->titles_canvas);
gtk_widget_queue_draw (week_view->main_canvas);
+
+ g_object_notify (G_OBJECT (week_view), "week-start-day");
}
static gboolean
diff --git a/calendar/gui/e-week-view.h b/calendar/gui/e-week-view.h
index 0589dee..ef4a5c0 100644
--- a/calendar/gui/e-week-view.h
+++ b/calendar/gui/e-week-view.h
@@ -403,14 +403,14 @@ void e_week_view_set_weeks_shown (EWeekView *week_view,
view. In the Week view they are always compressed. */
gboolean e_week_view_get_compress_weekend(EWeekView *week_view);
void e_week_view_set_compress_weekend(EWeekView *week_view,
- gboolean compress);
+ gboolean compress_weekend);
/* Whether we display event end times. */
gboolean e_week_view_get_show_event_end_times
(EWeekView *week_view);
void e_week_view_set_show_event_end_times
(EWeekView *week_view,
- gboolean show);
+ gboolean show_event_end_times);
/* The first day of the week, 0 (Monday) to 6 (Sunday). */
gint e_week_view_get_week_start_day (EWeekView *week_view);
diff --git a/calendar/gui/gnome-cal.c b/calendar/gui/gnome-cal.c
index 8714c01..6befd21 100644
--- a/calendar/gui/gnome-cal.c
+++ b/calendar/gui/gnome-cal.c
@@ -54,13 +54,10 @@
#include "comp-util.h"
#include "e-cal-model-calendar.h"
#include "e-day-view.h"
-#include "e-day-view-config.h"
#include "e-day-view-time-item.h"
#include "e-month-view.h"
#include "e-week-view.h"
-#include "e-week-view-config.h"
#include "e-cal-list-view.h"
-#include "e-cal-list-view-config.h"
#include "e-mini-calendar-config.h"
#include "e-calendar-table-config.h"
#include "gnome-cal.h"
@@ -116,7 +113,6 @@ struct _GnomeCalendarPrivate {
positions of the panes. range_selected is TRUE if a range of dates
was selected in the date navigator to show the view. */
ECalendarView *views[GNOME_CAL_LAST_VIEW];
- GObject *configs[GNOME_CAL_LAST_VIEW];
GnomeCalendarViewType current_view_type;
GList *notifications;
@@ -1087,7 +1083,7 @@ update_marcus_bains_line_cb (GnomeCalendar *gcal)
view = gnome_calendar_get_calendar_view (gcal, view_type);
if (E_IS_DAY_VIEW (view))
- e_day_view_update_marcus_bains (E_DAY_VIEW (view));
+ e_day_view_marcus_bains_update (E_DAY_VIEW (view));
time (&now);
day_begin = time_day_begin (now);
@@ -1316,8 +1312,6 @@ setup_widgets (GnomeCalendar *gcal)
e_calendar_view_set_calendar (calendar_view, gcal);
e_calendar_view_set_timezone (calendar_view, priv->zone);
priv->views[GNOME_CAL_DAY_VIEW] = calendar_view;
- priv->configs[GNOME_CAL_DAY_VIEW] =
- G_OBJECT (e_day_view_config_new (E_DAY_VIEW (calendar_view)));
g_signal_connect (
calendar_view, "selection-changed",
@@ -1330,8 +1324,6 @@ setup_widgets (GnomeCalendar *gcal)
e_calendar_view_set_calendar (calendar_view, gcal);
e_calendar_view_set_timezone (calendar_view, priv->zone);
priv->views[GNOME_CAL_WORK_WEEK_VIEW] = calendar_view;
- priv->configs[GNOME_CAL_WORK_WEEK_VIEW] =
- G_OBJECT (e_day_view_config_new (E_DAY_VIEW (calendar_view)));
/* The Marcus Bains line */
priv->update_marcus_bains_line_timeout = g_timeout_add_full (G_PRIORITY_LOW, 60000, (GSourceFunc) update_marcus_bains_line_cb, gcal, NULL);
@@ -1341,8 +1333,6 @@ setup_widgets (GnomeCalendar *gcal)
e_calendar_view_set_calendar (calendar_view, gcal);
e_calendar_view_set_timezone (calendar_view, priv->zone);
priv->views[GNOME_CAL_WEEK_VIEW] = calendar_view;
- priv->configs[GNOME_CAL_WEEK_VIEW] =
- G_OBJECT (e_week_view_config_new (E_WEEK_VIEW (calendar_view)));
g_signal_connect (
calendar_view, "selection-changed",
@@ -1367,8 +1357,6 @@ setup_widgets (GnomeCalendar *gcal)
e_week_view_set_multi_week_view (E_WEEK_VIEW (calendar_view), TRUE);
e_week_view_set_weeks_shown (E_WEEK_VIEW (calendar_view), 6);
priv->views[GNOME_CAL_MONTH_VIEW] = calendar_view;
- priv->configs[GNOME_CAL_MONTH_VIEW] =
- G_OBJECT (e_week_view_config_new (E_WEEK_VIEW (calendar_view)));
g_signal_connect (
calendar_view, "selection-changed",
@@ -1385,8 +1373,6 @@ setup_widgets (GnomeCalendar *gcal)
e_calendar_view_set_calendar (calendar_view, gcal);
e_calendar_view_set_timezone (calendar_view, priv->zone);
priv->views[GNOME_CAL_LIST_VIEW] = calendar_view;
- priv->configs[GNOME_CAL_LIST_VIEW] =
- G_OBJECT (e_cal_list_view_config_new (E_CAL_LIST_VIEW (calendar_view)));
g_signal_connect (
calendar_view, "selection-changed",
@@ -1472,11 +1458,6 @@ gnome_calendar_destroy (GtkObject *object)
}
priv->default_client = NULL;
- for (i = 0; i < GNOME_CAL_LAST_VIEW; i++) {
- if (priv->configs[i])
- g_object_unref (priv->configs[i]);
- priv->configs[i] = NULL;
- }
g_object_unref (priv->date_navigator_config);
for (l = priv->notifications; l; l = l->next)
diff --git a/modules/calendar/e-cal-shell-content.c b/modules/calendar/e-cal-shell-content.c
index 1a55c74..4e6f871 100644
--- a/modules/calendar/e-cal-shell-content.c
+++ b/modules/calendar/e-cal-shell-content.c
@@ -24,6 +24,7 @@
#include <string.h>
#include <glib/gi18n.h>
+#include "e-util/e-binding.h"
#include "e-util/gconf-bridge.h"
#include "calendar/gui/calendar-config.h"
@@ -73,6 +74,19 @@ typedef enum {
static gpointer parent_class;
static GType cal_shell_content_type;
+static gboolean
+transform_week_start_day (const GValue *src_value,
+ GValue *dst_value)
+{
+ gint v_int;
+
+ /* Transform day numbering from 0 = Sunday to 0 = Monday. */
+ v_int = g_value_get_int (src_value);
+ g_value_set_int (dst_value, (v_int + 6) % 7);
+
+ return TRUE;
+}
+
static void
cal_shell_content_display_view_cb (ECalShellContent *cal_shell_content,
GalView *gal_view)
@@ -297,15 +311,20 @@ static void
cal_shell_content_constructed (GObject *object)
{
ECalShellContentPrivate *priv;
- ECalModelCalendar *cal_model;
+ ECalendarView *calendar_view;
+ ECalModel *calendar_model;
ECalModel *memo_model;
ECalModel *task_model;
+ EShell *shell;
EShellContent *shell_content;
EShellBackend *shell_backend;
+ EShellSettings *shell_settings;
EShellView *shell_view;
EShellWindow *shell_window;
EShellContent *foreign_content;
EShellView *foreign_view;
+ GnomeCalendar *calendar;
+ GnomeCalendarViewType view_type;
GalViewInstance *view_instance;
GConfBridge *bridge;
GtkWidget *container;
@@ -329,11 +348,8 @@ cal_shell_content_constructed (GObject *object)
shell_backend = e_shell_view_get_shell_backend (shell_view);
config_dir = e_shell_backend_get_config_dir (shell_backend);
- /* Calendar model for the views. */
- cal_model = e_cal_model_calendar_new ();
- e_cal_model_set_flags (
- E_CAL_MODEL (cal_model),
- E_CAL_MODEL_FLAGS_EXPAND_RECURRENCES);
+ shell = e_shell_window_get_shell (shell_window);
+ shell_settings = e_shell_get_shell_settings (shell);
/* We borrow the memopad and taskpad models from the memo
* and task views, loading the views if necessary. */
@@ -378,16 +394,15 @@ cal_shell_content_constructed (GObject *object)
/* Add views in the order defined by GnomeCalendarViewType, such
* that the notebook page number corresponds to the view type. */
- for (ii = 0; ii < GNOME_CAL_LAST_VIEW; ii++) {
- GnomeCalendar *calendar;
- ECalendarView *view;
+ calendar = GNOME_CALENDAR (priv->calendar);
- calendar = GNOME_CALENDAR (priv->calendar);
- view = gnome_calendar_get_calendar_view (calendar, ii);
+ for (ii = 0; ii < GNOME_CAL_LAST_VIEW; ii++) {
+ calendar_view = gnome_calendar_get_calendar_view (calendar, ii);
gtk_notebook_append_page (
- GTK_NOTEBOOK (container), GTK_WIDGET (view), NULL);
- gtk_widget_show (GTK_WIDGET (view));
+ GTK_NOTEBOOK (container),
+ GTK_WIDGET (calendar_view), NULL);
+ gtk_widget_show (GTK_WIDGET (calendar_view));
}
container = priv->vpaned;
@@ -471,6 +486,148 @@ cal_shell_content_constructed (GObject *object)
key = "/apps/evolution/calendar/display/vpane_position";
gconf_bridge_bind_property_delayed (bridge, key, object, "position");
+ /* Bind day view properties to EShellSettings. */
+
+ view_type = GNOME_CAL_DAY_VIEW;
+ calendar_view = gnome_calendar_get_calendar_view (calendar, view_type);
+
+ e_binding_new (
+ G_OBJECT (shell_settings), "cal-marcus-bains-show-line",
+ G_OBJECT (calendar_view), "marcus-bains-show-line");
+
+ e_binding_new (
+ G_OBJECT (shell_settings), "cal-marcus-bains-day-view-color",
+ G_OBJECT (calendar_view), "marcus-bains-day-view-color");
+
+ e_binding_new (
+ G_OBJECT (shell_settings), "cal-marcus-bains-time-bar-color",
+ G_OBJECT (calendar_view), "marcus-bains-time-bar-color");
+
+ e_binding_new (
+ G_OBJECT (shell_settings), "cal-time-divisions",
+ G_OBJECT (calendar_view), "mins-per-row");
+
+ e_binding_new_full (
+ G_OBJECT (shell_settings), "cal-week-start-day",
+ G_OBJECT (calendar_view), "week-start-day",
+ (EBindingTransform) transform_week_start_day,
+ (GDestroyNotify) NULL, NULL);
+
+ e_binding_new (
+ G_OBJECT (shell_settings), "cal-work-day-end-hour",
+ G_OBJECT (calendar_view), "work-day-end-hour");
+
+ e_binding_new (
+ G_OBJECT (shell_settings), "cal-work-day-end-minute",
+ G_OBJECT (calendar_view), "work-day-end-minute");
+
+ e_binding_new (
+ G_OBJECT (shell_settings), "cal-work-day-start-hour",
+ G_OBJECT (calendar_view), "work-day-start-hour");
+
+ e_binding_new (
+ G_OBJECT (shell_settings), "cal-work-day-start-minute",
+ G_OBJECT (calendar_view), "work-day-start-minute");
+
+ e_binding_new (
+ G_OBJECT (shell_settings), "cal-working-days",
+ G_OBJECT (calendar_view), "working-days");
+
+ /* Bind work week view properties to EShellSettings. */
+
+ view_type = GNOME_CAL_WORK_WEEK_VIEW;
+ calendar_view = gnome_calendar_get_calendar_view (calendar, view_type);
+
+ e_binding_new (
+ G_OBJECT (shell_settings), "cal-marcus-bains-show-line",
+ G_OBJECT (calendar_view), "marcus-bains-show-line");
+
+ e_binding_new (
+ G_OBJECT (shell_settings), "cal-marcus-bains-day-view-color",
+ G_OBJECT (calendar_view), "marcus-bains-day-view-color");
+
+ e_binding_new (
+ G_OBJECT (shell_settings), "cal-marcus-bains-time-bar-color",
+ G_OBJECT (calendar_view), "marcus-bains-time-bar-color");
+
+ e_binding_new (
+ G_OBJECT (shell_settings), "cal-time-divisions",
+ G_OBJECT (calendar_view), "mins-per-row");
+
+ e_binding_new_full (
+ G_OBJECT (shell_settings), "cal-week-start-day",
+ G_OBJECT (calendar_view), "week-start-day",
+ (EBindingTransform) transform_week_start_day,
+ (GDestroyNotify) NULL, NULL);
+
+ e_binding_new (
+ G_OBJECT (shell_settings), "cal-work-day-end-hour",
+ G_OBJECT (calendar_view), "work-day-end-hour");
+
+ e_binding_new (
+ G_OBJECT (shell_settings), "cal-work-day-end-minute",
+ G_OBJECT (calendar_view), "work-day-end-minute");
+
+ e_binding_new (
+ G_OBJECT (shell_settings), "cal-work-day-start-hour",
+ G_OBJECT (calendar_view), "work-day-start-hour");
+
+ e_binding_new (
+ G_OBJECT (shell_settings), "cal-work-day-start-minute",
+ G_OBJECT (calendar_view), "work-day-start-minute");
+
+ e_binding_new (
+ G_OBJECT (shell_settings), "cal-working-days",
+ G_OBJECT (calendar_view), "working-days");
+
+ /* Bind week view properties to EShellSettings. */
+
+ view_type = GNOME_CAL_WEEK_VIEW;
+ calendar_view = gnome_calendar_get_calendar_view (calendar, view_type);
+
+ e_binding_new (
+ G_OBJECT (shell_settings), "cal-compress-weekend",
+ G_OBJECT (calendar_view), "compress-weekend");
+
+ e_binding_new (
+ G_OBJECT (shell_settings), "cal-show-event-end-times",
+ G_OBJECT (calendar_view), "show-event-end-times");
+
+ e_binding_new_full (
+ G_OBJECT (shell_settings), "cal-week-start-day",
+ G_OBJECT (calendar_view), "week-start-day",
+ (EBindingTransform) transform_week_start_day,
+ (GDestroyNotify) NULL, NULL);
+
+ /* Bind month view properties to EShellSettings. */
+
+ view_type = GNOME_CAL_MONTH_VIEW;
+ calendar_view = gnome_calendar_get_calendar_view (calendar, view_type);
+
+ e_binding_new (
+ G_OBJECT (shell_settings), "cal-compress-weekend",
+ G_OBJECT (calendar_view), "compress-weekend");
+
+ e_binding_new (
+ G_OBJECT (shell_settings), "cal-show-event-end-times",
+ G_OBJECT (calendar_view), "show-event-end-times");
+
+ e_binding_new_full (
+ G_OBJECT (shell_settings), "cal-week-start-day",
+ G_OBJECT (calendar_view), "week-start-day",
+ (EBindingTransform) transform_week_start_day,
+ (GDestroyNotify) NULL, NULL);
+
+ /* Bind calendar model properties to EShellSettings.
+ * Note, does not matter from which view we get the
+ * model, since it's shared across all of them. */
+
+ calendar_model = e_calendar_view_get_model (calendar_view);
+
+ e_binding_new (
+ G_OBJECT (shell_settings), "cal-use-24-hour-format",
+ G_OBJECT (calendar_view), "use-24-hour-format");
+
g_object_unref (memo_model);
g_object_unref (task_model);
}
diff --git a/modules/calendar/e-cal-shell-settings.c b/modules/calendar/e-cal-shell-settings.c
index 03af4ae..0379a65 100644
--- a/modules/calendar/e-cal-shell-settings.c
+++ b/modules/calendar/e-cal-shell-settings.c
@@ -34,6 +34,54 @@ e_cal_shell_backend_init_settings (EShell *shell)
* Yes it's redundant, but we're stuck with GConf. */
e_shell_settings_install_property (
+ g_param_spec_boolean (
+ "cal-compress-weekend",
+ NULL,
+ NULL,
+ FALSE,
+ G_PARAM_READWRITE));
+
+ e_shell_settings_bind_to_gconf (
+ shell_settings, "cal-compress-weekend",
+ "/apps/evolution/calendar/display/compress_weekend");
+
+ e_shell_settings_install_property (
+ g_param_spec_string (
+ "cal-marcus-bains-day-view-color",
+ NULL,
+ NULL,
+ NULL,
+ G_PARAM_READWRITE));
+
+ e_shell_settings_bind_to_gconf (
+ shell_settings, "cal-marcus-bains-day-view-color",
+ "/apps/evolution/calendar/display/marcus_bains_color_dayview");
+
+ e_shell_settings_install_property (
+ g_param_spec_string (
+ "cal-marcus-bains-time-bar-color",
+ NULL,
+ NULL,
+ NULL,
+ G_PARAM_READWRITE));
+
+ e_shell_settings_bind_to_gconf (
+ shell_settings, "cal-marcus-bains-time-bar-color",
+ "/apps/evolution/calendar/display/marcus_bains_color_timebar");
+
+ e_shell_settings_install_property (
+ g_param_spec_boolean (
+ "cal-marcus-bains-show-line",
+ NULL,
+ NULL,
+ TRUE,
+ G_PARAM_READWRITE));
+
+ e_shell_settings_bind_to_gconf (
+ shell_settings, "cal-marcus-bains-show-line",
+ "/apps/evolution/calendar/display/marcus_bains_line");
+
+ e_shell_settings_install_property (
g_param_spec_string (
"cal-primary-calendar",
NULL,
@@ -47,6 +95,44 @@ e_cal_shell_backend_init_settings (EShell *shell)
e_shell_settings_install_property (
g_param_spec_boolean (
+ "cal-show-event-end-times",
+ NULL,
+ NULL,
+ FALSE,
+ G_PARAM_READWRITE));
+
+ e_shell_settings_bind_to_gconf (
+ shell_settings, "cal-show-event-end-times",
+ "/apps/evolution/calendar/display/show_event_end");
+
+ e_shell_settings_install_property (
+ g_param_spec_int (
+ "cal-time-divisions",
+ NULL,
+ NULL,
+ 5,
+ 60,
+ 30,
+ G_PARAM_READWRITE));
+
+ e_shell_settings_bind_to_gconf (
+ shell_settings, "cal-time-divisions",
+ "/apps/evolution/calendar/display/time_divisions");
+
+ e_shell_settings_install_property (
+ g_param_spec_boolean (
+ "cal-use-24-hour-format",
+ NULL,
+ NULL,
+ TRUE,
+ G_PARAM_READWRITE));
+
+ e_shell_settings_bind_to_gconf (
+ shell_settings, "cal-use-24-hour-format",
+ "/apps/evolution/calendar/display/use_24hour_format");
+
+ e_shell_settings_install_property (
+ g_param_spec_boolean (
"cal-use-system-timezone",
NULL,
NULL,
@@ -56,4 +142,88 @@ e_cal_shell_backend_init_settings (EShell *shell)
e_shell_settings_bind_to_gconf (
shell_settings, "cal-use-system-timezone",
"/apps/evolution/calendar/display/use_system_timezone");
+
+ e_shell_settings_install_property (
+ g_param_spec_int (
+ "cal-week-start-day",
+ NULL,
+ NULL,
+ 0, /* Sunday */
+ 6, /* Saturday */
+ 0,
+ G_PARAM_READWRITE));
+
+ e_shell_settings_bind_to_gconf (
+ shell_settings, "cal-week-start-day",
+ "/apps/evolution/calendar/display/week_start_day");
+
+ e_shell_settings_install_property (
+ g_param_spec_int (
+ "cal-work-day-end-hour",
+ NULL,
+ NULL,
+ G_MININT,
+ G_MAXINT,
+ 0,
+ G_PARAM_READWRITE));
+
+ e_shell_settings_bind_to_gconf (
+ shell_settings, "cal-work-day-end-hour",
+ "/apps/evolution/calendar/display/day_end_hour");
+
+ e_shell_settings_install_property (
+ g_param_spec_int (
+ "cal-work-day-end-minute",
+ NULL,
+ NULL,
+ G_MININT,
+ G_MAXINT,
+ 0,
+ G_PARAM_READWRITE));
+
+ e_shell_settings_bind_to_gconf (
+ shell_settings, "cal-work-day-end-minute",
+ "/apps/evolution/calendar/display/day_end_minute");
+
+ e_shell_settings_install_property (
+ g_param_spec_int (
+ "cal-work-day-start-hour",
+ NULL,
+ NULL,
+ G_MININT,
+ G_MAXINT,
+ 0,
+ G_PARAM_READWRITE));
+
+ e_shell_settings_bind_to_gconf (
+ shell_settings, "cal-work-day-start-hour",
+ "/apps/evolution/calendar/display/day_start_hour");
+
+ e_shell_settings_install_property (
+ g_param_spec_int (
+ "cal-work-day-start-minute",
+ NULL,
+ NULL,
+ G_MININT,
+ G_MAXINT,
+ 0,
+ G_PARAM_READWRITE));
+
+ e_shell_settings_bind_to_gconf (
+ shell_settings, "cal-work-day-start-minute",
+ "/apps/evolution/calendar/display/day_start_minute");
+
+ e_shell_settings_install_property (
+ g_param_spec_int (
+ "cal-working-days",
+ NULL,
+ NULL,
+ G_MININT,
+ G_MAXINT,
+ 0,
+ G_PARAM_READWRITE));
+
+ e_shell_settings_bind_to_gconf (
+ shell_settings, "cal-working-days",
+ "/apps/evolution/calendar/display/working_days");
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]