From 78c9f356f97f0b40cbd3ad730b8931f75d0649a2 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 18 Jun 2013 11:54:15 -0400 Subject: Convert ETableModel to an interface. Similar to what was recently done to ETreeModel. --- calendar/gui/e-cal-model-calendar.c | 56 +++++++++++++++++++++------------- calendar/gui/e-cal-model-memos.c | 58 ++++++++++++++++++++++------------- calendar/gui/e-cal-model-tasks.c | 60 +++++++++++++++++++++++-------------- calendar/gui/e-cal-model.c | 46 ++++++++++++++++++---------- calendar/gui/e-cal-model.h | 4 +-- 5 files changed, 142 insertions(+), 82 deletions(-) (limited to 'calendar') diff --git a/calendar/gui/e-cal-model-calendar.c b/calendar/gui/e-cal-model-calendar.c index 114ffd4a7e..cc1e5a46e0 100644 --- a/calendar/gui/e-cal-model-calendar.c +++ b/calendar/gui/e-cal-model-calendar.c @@ -35,10 +35,19 @@ #include "dialogs/recur-comp.h" #include "dialogs/send-comp.h" -G_DEFINE_TYPE ( +/* Forward Declarations */ +static void e_cal_model_calendar_table_model_init + (ETableModelInterface *interface); + +static ETableModelInterface *table_model_parent_interface; + +G_DEFINE_TYPE_WITH_CODE ( ECalModelCalendar, e_cal_model_calendar, - E_TYPE_CAL_MODEL) + E_TYPE_CAL_MODEL, + G_IMPLEMENT_INTERFACE ( + E_TYPE_TABLE_MODEL, + e_cal_model_calendar_table_model_init)) static ECellDateEditValue * get_dtend (ECalModelCalendar *model, @@ -232,7 +241,7 @@ cal_model_calendar_value_at (ETableModel *etm, g_return_val_if_fail (row >= 0 && row < e_table_model_row_count (etm), NULL); if (col < E_CAL_MODEL_FIELD_LAST) - return E_TABLE_MODEL_CLASS (e_cal_model_calendar_parent_class)->value_at (etm, col, row); + return table_model_parent_interface->value_at (etm, col, row); comp_data = e_cal_model_get_component_at (E_CAL_MODEL (model), row); if (!comp_data) @@ -270,7 +279,7 @@ cal_model_calendar_set_value_at (ETableModel *etm, registry = e_cal_model_get_registry (E_CAL_MODEL (model)); if (col < E_CAL_MODEL_FIELD_LAST) { - E_TABLE_MODEL_CLASS (e_cal_model_calendar_parent_class)->set_value_at (etm, col, row, value); + table_model_parent_interface->set_value_at (etm, col, row, value); return; } @@ -362,7 +371,7 @@ cal_model_calendar_is_cell_editable (ETableModel *etm, g_return_val_if_fail (row >= -1 || (row >= 0 && row < e_table_model_row_count (etm)), FALSE); if (col < E_CAL_MODEL_FIELD_LAST) - return E_TABLE_MODEL_CLASS (e_cal_model_calendar_parent_class)->is_cell_editable (etm, col, row); + return table_model_parent_interface->is_cell_editable (etm, col, row); if (!e_cal_model_test_row_editable (E_CAL_MODEL (etm), row)) return FALSE; @@ -385,7 +394,7 @@ cal_model_calendar_duplicate_value (ETableModel *etm, g_return_val_if_fail (col >= 0 && col < E_CAL_MODEL_CALENDAR_FIELD_LAST, NULL); if (col < E_CAL_MODEL_FIELD_LAST) - return E_TABLE_MODEL_CLASS (e_cal_model_calendar_parent_class)->duplicate_value (etm, col, value); + return table_model_parent_interface->duplicate_value (etm, col, value); switch (col) { case E_CAL_MODEL_CALENDAR_FIELD_DTEND : @@ -415,7 +424,7 @@ cal_model_calendar_free_value (ETableModel *etm, g_return_if_fail (col >= 0 && col < E_CAL_MODEL_CALENDAR_FIELD_LAST); if (col < E_CAL_MODEL_FIELD_LAST) { - E_TABLE_MODEL_CLASS (e_cal_model_calendar_parent_class)->free_value (etm, col, value); + table_model_parent_interface->free_value (etm, col, value); return; } @@ -436,7 +445,7 @@ cal_model_calendar_initialize_value (ETableModel *etm, g_return_val_if_fail (col >= 0 && col < E_CAL_MODEL_CALENDAR_FIELD_LAST, NULL); if (col < E_CAL_MODEL_FIELD_LAST) - return E_TABLE_MODEL_CLASS (e_cal_model_calendar_parent_class)->initialize_value (etm, col); + return table_model_parent_interface->initialize_value (etm, col); switch (col) { case E_CAL_MODEL_CALENDAR_FIELD_DTEND : @@ -457,7 +466,7 @@ cal_model_calendar_value_is_empty (ETableModel *etm, g_return_val_if_fail (col >= 0 && col < E_CAL_MODEL_CALENDAR_FIELD_LAST, TRUE); if (col < E_CAL_MODEL_FIELD_LAST) - return E_TABLE_MODEL_CLASS (e_cal_model_calendar_parent_class)->value_is_empty (etm, col, value); + return table_model_parent_interface->value_is_empty (etm, col, value); switch (col) { case E_CAL_MODEL_CALENDAR_FIELD_DTEND : @@ -478,7 +487,7 @@ cal_model_calendar_value_to_string (ETableModel *etm, g_return_val_if_fail (col >= 0 && col < E_CAL_MODEL_CALENDAR_FIELD_LAST, g_strdup ("")); if (col < E_CAL_MODEL_FIELD_LAST) - return E_TABLE_MODEL_CLASS (e_cal_model_calendar_parent_class)->value_to_string (etm, col, value); + return table_model_parent_interface->value_to_string (etm, col, value); switch (col) { case E_CAL_MODEL_CALENDAR_FIELD_DTEND : @@ -495,21 +504,26 @@ static void e_cal_model_calendar_class_init (ECalModelCalendarClass *class) { ECalModelClass *model_class; - ETableModelClass *etm_class; model_class = E_CAL_MODEL_CLASS (class); model_class->fill_component_from_model = cal_model_calendar_fill_component_from_model; +} - etm_class = E_TABLE_MODEL_CLASS (class); - etm_class->column_count = cal_model_calendar_column_count; - etm_class->value_at = cal_model_calendar_value_at; - etm_class->set_value_at = cal_model_calendar_set_value_at; - etm_class->is_cell_editable = cal_model_calendar_is_cell_editable; - etm_class->duplicate_value = cal_model_calendar_duplicate_value; - etm_class->free_value = cal_model_calendar_free_value; - etm_class->initialize_value = cal_model_calendar_initialize_value; - etm_class->value_is_empty = cal_model_calendar_value_is_empty; - etm_class->value_to_string = cal_model_calendar_value_to_string; +static void +e_cal_model_calendar_table_model_init (ETableModelInterface *interface) +{ + table_model_parent_interface = + g_type_interface_peek_parent (interface); + + interface->column_count = cal_model_calendar_column_count; + interface->value_at = cal_model_calendar_value_at; + interface->set_value_at = cal_model_calendar_set_value_at; + interface->is_cell_editable = cal_model_calendar_is_cell_editable; + interface->duplicate_value = cal_model_calendar_duplicate_value; + interface->free_value = cal_model_calendar_free_value; + interface->initialize_value = cal_model_calendar_initialize_value; + interface->value_is_empty = cal_model_calendar_value_is_empty; + interface->value_to_string = cal_model_calendar_value_to_string; } static void diff --git a/calendar/gui/e-cal-model-memos.c b/calendar/gui/e-cal-model-memos.c index dc3440e54d..c6fecc2e4b 100644 --- a/calendar/gui/e-cal-model-memos.c +++ b/calendar/gui/e-cal-model-memos.c @@ -35,10 +35,19 @@ #define d(x) (x) -G_DEFINE_TYPE ( +/* Forward Declarations */ +static void e_cal_model_memos_table_model_init + (ETableModelInterface *interface); + +static ETableModelInterface *table_model_parent_interface; + +G_DEFINE_TYPE_WITH_CODE ( ECalModelMemos, e_cal_model_memos, - E_TYPE_CAL_MODEL) + E_TYPE_CAL_MODEL, + G_IMPLEMENT_INTERFACE ( + E_TYPE_TABLE_MODEL, + e_cal_model_memos_table_model_init)) static void cal_model_memos_fill_component_from_model (ECalModel *model, @@ -78,7 +87,7 @@ cal_model_memos_value_at (ETableModel *etm, g_return_val_if_fail (row >= 0 && row < e_table_model_row_count (etm), NULL); if (col < E_CAL_MODEL_FIELD_LAST) - return E_TABLE_MODEL_CLASS (e_cal_model_memos_parent_class)->value_at (etm, col, row); + return table_model_parent_interface->value_at (etm, col, row); comp_data = e_cal_model_get_component_at (E_CAL_MODEL (model), row); if (!comp_data) @@ -102,7 +111,7 @@ cal_model_memos_set_value_at (ETableModel *etm, g_return_if_fail (row >= 0 && row < e_table_model_row_count (etm)); if (col < E_CAL_MODEL_FIELD_LAST) { - E_TABLE_MODEL_CLASS (e_cal_model_memos_parent_class)->set_value_at (etm, col, row, value); + table_model_parent_interface->set_value_at (etm, col, row, value); return; } @@ -143,7 +152,7 @@ cal_model_memos_is_cell_editable (ETableModel *etm, return FALSE; if (col < E_CAL_MODEL_FIELD_LAST) - retval = E_TABLE_MODEL_CLASS (e_cal_model_memos_parent_class)->is_cell_editable (etm, col, row); + retval = table_model_parent_interface->is_cell_editable (etm, col, row); return retval; } @@ -156,7 +165,7 @@ cal_model_memos_duplicate_value (ETableModel *etm, g_return_val_if_fail (col >= 0 && col < E_CAL_MODEL_MEMOS_FIELD_LAST, NULL); if (col < E_CAL_MODEL_FIELD_LAST) - return E_TABLE_MODEL_CLASS (e_cal_model_memos_parent_class)->duplicate_value (etm, col, value); + return table_model_parent_interface->duplicate_value (etm, col, value); return NULL; } @@ -169,7 +178,7 @@ cal_model_memos_free_value (ETableModel *etm, g_return_if_fail (col >= 0 && col < E_CAL_MODEL_MEMOS_FIELD_LAST); if (col < E_CAL_MODEL_FIELD_LAST) { - E_TABLE_MODEL_CLASS (e_cal_model_memos_parent_class)->free_value (etm, col, value); + table_model_parent_interface->free_value (etm, col, value); return; } } @@ -181,7 +190,7 @@ cal_model_memos_initialize_value (ETableModel *etm, g_return_val_if_fail (col >= 0 && col < E_CAL_MODEL_MEMOS_FIELD_LAST, NULL); if (col < E_CAL_MODEL_FIELD_LAST) - return E_TABLE_MODEL_CLASS (e_cal_model_memos_parent_class)->initialize_value (etm, col); + return table_model_parent_interface->initialize_value (etm, col); return NULL; } @@ -194,7 +203,7 @@ cal_model_memos_value_is_empty (ETableModel *etm, g_return_val_if_fail (col >= 0 && col < E_CAL_MODEL_MEMOS_FIELD_LAST, TRUE); if (col < E_CAL_MODEL_FIELD_LAST) - return E_TABLE_MODEL_CLASS (e_cal_model_memos_parent_class)->value_is_empty (etm, col, value); + return table_model_parent_interface->value_is_empty (etm, col, value); return TRUE; } @@ -207,7 +216,7 @@ cal_model_memos_value_to_string (ETableModel *etm, g_return_val_if_fail (col >= 0 && col < E_CAL_MODEL_MEMOS_FIELD_LAST, g_strdup ("")); if (col < E_CAL_MODEL_FIELD_LAST) - return E_TABLE_MODEL_CLASS (e_cal_model_memos_parent_class)->value_to_string (etm, col, value); + return table_model_parent_interface->value_to_string (etm, col, value); return g_strdup (""); } @@ -216,21 +225,28 @@ static void e_cal_model_memos_class_init (ECalModelMemosClass *class) { ECalModelClass *model_class; - ETableModelClass *etm_class; model_class = E_CAL_MODEL_CLASS (class); model_class->fill_component_from_model = cal_model_memos_fill_component_from_model; +} + +static void +e_cal_model_memos_table_model_init (ETableModelInterface *interface) +{ + table_model_parent_interface = + g_type_interface_peek_parent (interface); + + interface->column_count = cal_model_memos_column_count; + + interface->value_at = cal_model_memos_value_at; + interface->set_value_at = cal_model_memos_set_value_at; + interface->is_cell_editable = cal_model_memos_is_cell_editable; - etm_class = E_TABLE_MODEL_CLASS (class); - etm_class->column_count = cal_model_memos_column_count; - etm_class->value_at = cal_model_memos_value_at; - etm_class->set_value_at = cal_model_memos_set_value_at; - etm_class->is_cell_editable = cal_model_memos_is_cell_editable; - etm_class->duplicate_value = cal_model_memos_duplicate_value; - etm_class->free_value = cal_model_memos_free_value; - etm_class->initialize_value = cal_model_memos_initialize_value; - etm_class->value_is_empty = cal_model_memos_value_is_empty; - etm_class->value_to_string = cal_model_memos_value_to_string; + interface->duplicate_value = cal_model_memos_duplicate_value; + interface->free_value = cal_model_memos_free_value; + interface->initialize_value = cal_model_memos_initialize_value; + interface->value_is_empty = cal_model_memos_value_is_empty; + interface->value_to_string = cal_model_memos_value_to_string; } static void diff --git a/calendar/gui/e-cal-model-tasks.c b/calendar/gui/e-cal-model-tasks.c index a3e6cb8107..bb9e8f4bbf 100644 --- a/calendar/gui/e-cal-model-tasks.c +++ b/calendar/gui/e-cal-model-tasks.c @@ -55,10 +55,19 @@ enum { PROP_COLOR_OVERDUE }; -G_DEFINE_TYPE ( +/* Forward Declarations */ +static void e_cal_model_tasks_table_model_init + (ETableModelInterface *interface); + +static ETableModelInterface *table_model_parent_interface; + +G_DEFINE_TYPE_WITH_CODE ( ECalModelTasks, e_cal_model_tasks, - E_TYPE_CAL_MODEL) + E_TYPE_CAL_MODEL, + G_IMPLEMENT_INTERFACE ( + E_TYPE_TABLE_MODEL, + e_cal_model_tasks_table_model_init)) /* This makes sure a task is marked as complete. * It makes sure the "Date Completed" property is set. If the completed_date @@ -878,7 +887,7 @@ cal_model_tasks_value_at (ETableModel *etm, g_return_val_if_fail (row >= 0 && row < e_table_model_row_count (etm), NULL); if (col < E_CAL_MODEL_FIELD_LAST) - return E_TABLE_MODEL_CLASS (e_cal_model_tasks_parent_class)->value_at (etm, col, row); + return table_model_parent_interface->value_at (etm, col, row); comp_data = e_cal_model_get_component_at (E_CAL_MODEL (model), row); if (!comp_data) @@ -925,7 +934,7 @@ cal_model_tasks_set_value_at (ETableModel *etm, g_return_if_fail (row >= 0 && row < e_table_model_row_count (etm)); if (col < E_CAL_MODEL_FIELD_LAST) { - E_TABLE_MODEL_CLASS (e_cal_model_tasks_parent_class)->set_value_at (etm, col, row, value); + table_model_parent_interface->set_value_at (etm, col, row, value); return; } @@ -976,7 +985,7 @@ cal_model_tasks_is_cell_editable (ETableModel *etm, g_return_val_if_fail (row >= -1 || (row >= 0 && row < e_table_model_row_count (etm)), FALSE); if (col < E_CAL_MODEL_FIELD_LAST) - return E_TABLE_MODEL_CLASS (e_cal_model_tasks_parent_class)->is_cell_editable (etm, col, row); + return table_model_parent_interface->is_cell_editable (etm, col, row); if (!e_cal_model_test_row_editable (E_CAL_MODEL (etm), row)) return FALSE; @@ -1004,7 +1013,7 @@ cal_model_tasks_duplicate_value (ETableModel *etm, g_return_val_if_fail (col >= 0 && col < E_CAL_MODEL_TASKS_FIELD_LAST, NULL); if (col < E_CAL_MODEL_FIELD_LAST) - return E_TABLE_MODEL_CLASS (e_cal_model_tasks_parent_class)->duplicate_value (etm, col, value); + return table_model_parent_interface->duplicate_value (etm, col, value); switch (col) { case E_CAL_MODEL_TASKS_FIELD_GEO : @@ -1042,7 +1051,7 @@ cal_model_tasks_free_value (ETableModel *etm, g_return_if_fail (col >= 0 && col < E_CAL_MODEL_TASKS_FIELD_LAST); if (col < E_CAL_MODEL_FIELD_LAST) { - E_TABLE_MODEL_CLASS (e_cal_model_tasks_parent_class)->free_value (etm, col, value); + table_model_parent_interface->free_value (etm, col, value); return; } @@ -1073,7 +1082,7 @@ cal_model_tasks_initialize_value (ETableModel *etm, g_return_val_if_fail (col >= 0 && col < E_CAL_MODEL_TASKS_FIELD_LAST, NULL); if (col < E_CAL_MODEL_FIELD_LAST) - return E_TABLE_MODEL_CLASS (e_cal_model_tasks_parent_class)->initialize_value (etm, col); + return table_model_parent_interface->initialize_value (etm, col); switch (col) { case E_CAL_MODEL_TASKS_FIELD_GEO : @@ -1104,7 +1113,7 @@ cal_model_tasks_value_is_empty (ETableModel *etm, g_return_val_if_fail (col >= 0 && col < E_CAL_MODEL_TASKS_FIELD_LAST, TRUE); if (col < E_CAL_MODEL_FIELD_LAST) - return E_TABLE_MODEL_CLASS (e_cal_model_tasks_parent_class)->value_is_empty (etm, col, value); + return table_model_parent_interface->value_is_empty (etm, col, value); switch (col) { case E_CAL_MODEL_TASKS_FIELD_GEO : @@ -1136,7 +1145,7 @@ cal_model_tasks_value_to_string (ETableModel *etm, g_return_val_if_fail (col >= 0 && col < E_CAL_MODEL_TASKS_FIELD_LAST, g_strdup ("")); if (col < E_CAL_MODEL_FIELD_LAST) - return E_TABLE_MODEL_CLASS (e_cal_model_tasks_parent_class)->value_to_string (etm, col, value); + return table_model_parent_interface->value_to_string (etm, col, value); switch (col) { case E_CAL_MODEL_TASKS_FIELD_GEO : @@ -1165,7 +1174,6 @@ e_cal_model_tasks_class_init (ECalModelTasksClass *class) { GObjectClass *object_class; ECalModelClass *cal_model_class; - ETableModelClass *table_model_class; g_type_class_add_private (class, sizeof (ECalModelTasksPrivate)); @@ -1178,17 +1186,6 @@ e_cal_model_tasks_class_init (ECalModelTasksClass *class) cal_model_class->get_color_for_component = cal_model_tasks_get_color_for_component; cal_model_class->fill_component_from_model = cal_model_tasks_fill_component_from_model; - table_model_class = E_TABLE_MODEL_CLASS (class); - table_model_class->column_count = cal_model_tasks_column_count; - table_model_class->value_at = cal_model_tasks_value_at; - table_model_class->set_value_at = cal_model_tasks_set_value_at; - table_model_class->is_cell_editable = cal_model_tasks_is_cell_editable; - table_model_class->duplicate_value = cal_model_tasks_duplicate_value; - table_model_class->free_value = cal_model_tasks_free_value; - table_model_class->initialize_value = cal_model_tasks_initialize_value; - table_model_class->value_is_empty = cal_model_tasks_value_is_empty; - table_model_class->value_to_string = cal_model_tasks_value_to_string; - g_object_class_install_property ( object_class, PROP_HIGHLIGHT_DUE_TODAY, @@ -1230,6 +1227,25 @@ e_cal_model_tasks_class_init (ECalModelTasksClass *class) G_PARAM_READWRITE)); } +static void +e_cal_model_tasks_table_model_init (ETableModelInterface *interface) +{ + table_model_parent_interface = + g_type_interface_peek_parent (interface); + + interface->column_count = cal_model_tasks_column_count; + + interface->value_at = cal_model_tasks_value_at; + interface->set_value_at = cal_model_tasks_set_value_at; + interface->is_cell_editable = cal_model_tasks_is_cell_editable; + + interface->duplicate_value = cal_model_tasks_duplicate_value; + interface->free_value = cal_model_tasks_free_value; + interface->initialize_value = cal_model_tasks_initialize_value; + interface->value_is_empty = cal_model_tasks_value_is_empty; + interface->value_to_string = cal_model_tasks_value_to_string; +} + static void e_cal_model_tasks_init (ECalModelTasks *model) { diff --git a/calendar/gui/e-cal-model.c b/calendar/gui/e-cal-model.c index 288a896f9d..02020ae2cf 100644 --- a/calendar/gui/e-cal-model.c +++ b/calendar/gui/e-cal-model.c @@ -193,11 +193,21 @@ enum { LAST_SIGNAL }; +/* Forward Declarations */ +static void e_cal_model_table_model_init + (ETableModelInterface *interface); + static guint signals[LAST_SIGNAL]; G_DEFINE_TYPE_WITH_CODE ( - ECalModel, e_cal_model, E_TYPE_TABLE_MODEL, - G_IMPLEMENT_INTERFACE (E_TYPE_EXTENSIBLE, NULL)) + ECalModel, + e_cal_model, + G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE ( + E_TYPE_EXTENSIBLE, NULL) + G_IMPLEMENT_INTERFACE ( + E_TYPE_TABLE_MODEL, + e_cal_model_table_model_init)) G_DEFINE_TYPE ( ECalModelComponent, @@ -1672,7 +1682,6 @@ static void e_cal_model_class_init (ECalModelClass *class) { GObjectClass *object_class; - ETableModelClass *etm_class; g_type_class_add_private (class, sizeof (ECalModelPrivate)); @@ -1686,19 +1695,6 @@ e_cal_model_class_init (ECalModelClass *class) class->get_color_for_component = cal_model_get_color_for_component; class->fill_component_from_model = NULL; - etm_class = E_TABLE_MODEL_CLASS (class); - etm_class->column_count = cal_model_column_count; - etm_class->row_count = cal_model_row_count; - etm_class->append_row = cal_model_append_row; - etm_class->value_at = cal_model_value_at; - etm_class->set_value_at = cal_model_set_value_at; - etm_class->is_cell_editable = cal_model_is_cell_editable; - etm_class->duplicate_value = cal_model_duplicate_value; - etm_class->free_value = cal_model_free_value; - etm_class->initialize_value = cal_model_initialize_value; - etm_class->value_is_empty = cal_model_value_is_empty; - etm_class->value_to_string = cal_model_value_to_string; - g_object_class_install_property ( object_class, PROP_COMPRESS_WEEKEND, @@ -2012,6 +2008,24 @@ e_cal_model_class_init (ECalModelClass *class) G_TYPE_POINTER); } +static void +e_cal_model_table_model_init (ETableModelInterface *interface) +{ + interface->column_count = cal_model_column_count; + interface->row_count = cal_model_row_count; + interface->append_row = cal_model_append_row; + + interface->value_at = cal_model_value_at; + interface->set_value_at = cal_model_set_value_at; + interface->is_cell_editable = cal_model_is_cell_editable; + + interface->duplicate_value = cal_model_duplicate_value; + interface->free_value = cal_model_free_value; + interface->initialize_value = cal_model_initialize_value; + interface->value_is_empty = cal_model_value_is_empty; + interface->value_to_string = cal_model_value_to_string; +} + static void e_cal_model_init (ECalModel *model) { diff --git a/calendar/gui/e-cal-model.h b/calendar/gui/e-cal-model.h index 602db1cae4..cebb09cf76 100644 --- a/calendar/gui/e-cal-model.h +++ b/calendar/gui/e-cal-model.h @@ -134,12 +134,12 @@ typedef struct { } ECalModelGenerateInstancesData; struct _ECalModel { - ETableModel model; + GObject parent; ECalModelPrivate *priv; }; struct _ECalModelClass { - ETableModelClass parent_class; + GObjectClass parent_class; /* virtual methods */ const gchar * (*get_color_for_component) -- cgit