From d9cca6050941f08790b743abb367de02fa1c0e85 Mon Sep 17 00:00:00 2001 From: Travis Reitter Date: Tue, 29 Sep 2009 21:18:28 -0700 Subject: [PATCH 1/1] Move the placeholder list store into MilkListStore --- src/milk-list-store.c | 146 +++++++++++++++++++++++++++++++++++------------- src/milk-list-store.h | 5 +- src/milk-main-window.c | 72 ++++-------------------- 3 files changed, 119 insertions(+), 104 deletions(-) diff --git a/src/milk-list-store.c b/src/milk-list-store.c index 6badb83..f5dfefc 100644 --- a/src/milk-list-store.c +++ b/src/milk-list-store.c @@ -36,15 +36,28 @@ G_DEFINE_TYPE_EXTENDED (MilkListStore, G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_MODEL, milk_list_store_tree_model_init)); -#define MILK_LIST_STORE_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((o), MILK_TYPE_LIST_STORE, MilkListStorePrivate)) - -#define MILK_LIST_STORE_STAMP_INVALID 0 +/* less expensive than G_TYPE_INSTANCE_GET_PRIVATE */ +#define MILK_LIST_STORE_PRIVATE(o) ((MILK_LIST_STORE ((o)))->priv) struct _MilkListStorePrivate { - gint stamp; - gint node_count; + GtkListStore *store; +}; + +/* FIXME: relocate this to its own class */ +typedef struct { + gint id; + gint priority; + char *title; +} MilkTask; + +/* FIXME: don't hard-code this */ +static MilkTask tasks[] = { + { 0, 1, "Remember the milk"}, + { 2, 1, "Make a Maemo 5 RTM client"}, + { 6, 3, "Get a haircut"}, + { 9, 2, "Keep it real"}, + { 5, 3, "Invent smellovision"}, }; static GtkTreeModelFlags @@ -56,7 +69,7 @@ milk_list_store_get_flags (GtkTreeModel *model) static gint milk_list_store_get_n_columns (GtkTreeModel *model) { - return MILK_LIST_STORE_COLUMN_LAST; + return MILK_LIST_STORE_N_COLUMNS; } static GType @@ -64,12 +77,13 @@ milk_list_store_get_column_type (GtkTreeModel *model, gint column) { switch (column) { + case MILK_LIST_STORE_COLUMN_ID: + return G_TYPE_INT; + case MILK_LIST_STORE_COLUMN_PRIORITY: return G_TYPE_UINT; - case MILK_LIST_STORE_COLUMN_TASK: - /* FIXME: define the MilkTask class and use - * MILK_TYPE_TASK here */ + case MILK_LIST_STORE_COLUMN_TITLE: return G_TYPE_STRING; default: @@ -83,27 +97,30 @@ milk_list_store_get_iter (GtkTreeModel *model, GtkTreeIter *iter, GtkTreePath *path) { + MilkListStorePrivate *priv; + g_return_val_if_fail (MILK_IS_LIST_STORE (model), FALSE); g_return_val_if_fail (iter, FALSE); g_return_val_if_fail (gtk_tree_path_get_depth (path) == 1, FALSE); - /* FIXME: implement this */ - g_warning (G_STRLOC ": FIXME: not implemented"); + priv = MILK_LIST_STORE_PRIVATE (model); - return TRUE; + return gtk_tree_model_get_iter ( + GTK_TREE_MODEL (priv->store), iter, path); } static GtkTreePath* milk_list_store_get_path (GtkTreeModel *model, GtkTreeIter *iter) { + MilkListStorePrivate *priv; + g_return_val_if_fail (MILK_IS_LIST_STORE (model), NULL); g_return_val_if_fail (iter, NULL); - /* FIXME: implement this */ - g_warning (G_STRLOC ": FIXME: not implemented"); + priv = MILK_LIST_STORE_PRIVATE (model); - return NULL; + return gtk_tree_model_get_path (GTK_TREE_MODEL (priv->store), iter); } static void @@ -112,26 +129,31 @@ milk_list_store_get_value (GtkTreeModel *model, gint column, GValue *value) { + MilkListStorePrivate *priv; + g_return_if_fail (MILK_IS_LIST_STORE (model)); g_return_if_fail (iter); - g_return_if_fail (column < 0); + g_return_if_fail (column >= 0); g_return_if_fail (value); - /* FIXME: implement this */ - g_warning (G_STRLOC ": FIXME: not implemented"); + priv = MILK_LIST_STORE_PRIVATE (model); + + gtk_tree_model_get_value ( + GTK_TREE_MODEL (priv->store), iter, column, value); } static gboolean milk_list_store_iter_next (GtkTreeModel *model, GtkTreeIter *iter) { + MilkListStorePrivate *priv; + g_return_val_if_fail (MILK_IS_LIST_STORE (model), FALSE); g_return_val_if_fail (iter, FALSE); - /* FIXME: implement this */ - g_warning (G_STRLOC ": FIXME: not implemented"); + priv = MILK_LIST_STORE_PRIVATE (model); - return TRUE; + return gtk_tree_model_iter_next (GTK_TREE_MODEL (priv->store), iter); } static gboolean @@ -140,19 +162,18 @@ milk_list_store_iter_nth_child (GtkTreeModel *model, GtkTreeIter *parent, gint index) { - MilkListStorePrivate *priv = MILK_LIST_STORE_PRIVATE (model); + MilkListStorePrivate *priv; g_return_val_if_fail (MILK_IS_LIST_STORE (model), FALSE); g_return_val_if_fail (iter, FALSE); /* we're one-dimensional */ g_return_val_if_fail (!parent, FALSE); - g_return_val_if_fail (index < 0, FALSE); - g_return_val_if_fail (index >= priv->node_count, FALSE); + g_return_val_if_fail (index >= 0, FALSE); - /* FIXME: implement this */ - g_warning (G_STRLOC ": FIXME: not implemented"); + priv = MILK_LIST_STORE_PRIVATE (model); - return TRUE; + return gtk_tree_model_iter_nth_child ( + GTK_TREE_MODEL (priv->store), iter, parent, index); } static gboolean @@ -160,34 +181,51 @@ milk_list_store_iter_children (GtkTreeModel *model, GtkTreeIter *iter, GtkTreeIter *parent) { - /* we're one-dimensional, so this is a degenerate case */ - return milk_list_store_iter_nth_child (model, iter, parent, 0); + MilkListStorePrivate *priv; + + g_return_val_if_fail (MILK_IS_LIST_STORE (model), FALSE); + g_return_val_if_fail (iter, FALSE); + /* we're one-dimensional */ + g_return_val_if_fail (!parent, FALSE); + + priv = MILK_LIST_STORE_PRIVATE (model); + + return gtk_tree_model_iter_children ( + GTK_TREE_MODEL (priv->store), iter, parent); } static gboolean milk_list_store_iter_has_child (GtkTreeModel *model, GtkTreeIter *iter) { + MilkListStorePrivate *priv; + g_return_val_if_fail (MILK_IS_LIST_STORE (model), FALSE); g_return_val_if_fail (iter, FALSE); - return FALSE; + priv = MILK_LIST_STORE_PRIVATE (model); + + return gtk_tree_model_iter_has_child ( + GTK_TREE_MODEL (priv->store), iter); } static gint milk_list_store_iter_n_children (GtkTreeModel *model, GtkTreeIter *iter) { - MilkListStorePrivate *priv = MILK_LIST_STORE_PRIVATE (model); + MilkListStorePrivate *priv; g_return_val_if_fail (MILK_IS_LIST_STORE (model), -1); g_return_val_if_fail (iter, -1); + priv = MILK_LIST_STORE_PRIVATE (model); + /* we're one-dimensional */ if (iter) return 0; - return priv->node_count; + return gtk_tree_model_iter_n_children ( + GTK_TREE_MODEL (priv->store), iter); } static gboolean @@ -195,11 +233,16 @@ milk_list_store_iter_parent (GtkTreeModel *model, GtkTreeIter *iter, GtkTreeIter *child) { + MilkListStorePrivate *priv; + g_return_val_if_fail (MILK_IS_LIST_STORE (model), FALSE); g_return_val_if_fail (iter, FALSE); g_return_val_if_fail (child, FALSE); - return FALSE; + priv = MILK_LIST_STORE_PRIVATE (model); + + return gtk_tree_model_iter_parent ( + GTK_TREE_MODEL (priv->store), iter, child); } static void @@ -237,6 +280,11 @@ milk_list_store_dispose (GObject *object) { MilkListStorePrivate *priv = MILK_LIST_STORE_PRIVATE (object); + if (priv->store) { + g_object_unref (priv->store); + priv->store = NULL; + } + G_OBJECT_CLASS (milk_list_store_parent_class)->dispose (object); } @@ -245,8 +293,22 @@ milk_list_store_constructed (GObject* object) { MilkListStore *self = MILK_LIST_STORE (object); MilkListStorePrivate *priv = MILK_LIST_STORE_PRIVATE (object); - - priv->stamp = MILK_LIST_STORE_STAMP_INVALID + 1; + GtkTreeIter iter; + gint i; + + /* Populate model */ + for (i = 0; i < G_N_ELEMENTS (tasks); i++) { + gtk_list_store_append (priv->store, &iter); + gtk_list_store_set ( + priv->store, &iter, + MILK_LIST_STORE_COLUMN_ID, + tasks[i].id, + MILK_LIST_STORE_COLUMN_PRIORITY, + tasks[i].priority, + MILK_LIST_STORE_COLUMN_TITLE, + tasks[i].title, + -1); + } } static void @@ -260,15 +322,19 @@ milk_list_store_class_init (MilkListStoreClass *klass) object_class->set_property = milk_list_store_set_property; object_class->constructed = milk_list_store_constructed; object_class->dispose = milk_list_store_dispose; - - /* FIXME: trigger the signals with gtk_tree_model_row_inserted(), etc. - */ } static void milk_list_store_init (MilkListStore *self) { - self->priv = MILK_LIST_STORE_PRIVATE (self); + MilkListStorePrivate *priv; + + self->priv = priv = G_TYPE_INSTANCE_GET_PRIVATE ( + self, MILK_TYPE_LIST_STORE, MilkListStorePrivate); + + priv->store = gtk_list_store_new ( + MILK_LIST_STORE_N_COLUMNS, G_TYPE_INT, G_TYPE_UINT, + G_TYPE_STRING); } static void diff --git a/src/milk-list-store.h b/src/milk-list-store.h index 9dd0ca4..7155eda 100644 --- a/src/milk-list-store.h +++ b/src/milk-list-store.h @@ -49,9 +49,10 @@ typedef struct _MilkListStoreClass MilkListStoreClass; typedef struct _MilkListStorePrivate MilkListStorePrivate; typedef enum { + MILK_LIST_STORE_COLUMN_ID, MILK_LIST_STORE_COLUMN_PRIORITY, - MILK_LIST_STORE_COLUMN_TASK, - MILK_LIST_STORE_COLUMN_LAST, + MILK_LIST_STORE_COLUMN_TITLE, + MILK_LIST_STORE_N_COLUMNS } OssoABookListStoreColumn; struct _MilkListStore diff --git a/src/milk-main-window.c b/src/milk-main-window.c index 8e4d593..809c106 100644 --- a/src/milk-main-window.c +++ b/src/milk-main-window.c @@ -25,6 +25,7 @@ #include #include "milk-main-window.h" +#include "milk-list-store.h" G_DEFINE_TYPE (MilkMainWindow, milk_main_window, HILDON_TYPE_WINDOW) @@ -39,36 +40,11 @@ struct _MilkMainWindowPrivate GtkWidget *task_view; }; -/* FIXME: cut this */ -enum { - TASK_MODEL_COLUMN_ID, - TASK_MODEL_COLUMN_PRIORITY, - TASK_MODEL_COLUMN_TITLE, - N_MODEL_COLUMNS -}; - -/* FIXME: cut this */ enum { TASK_VIEW_COLUMN_TITLE, N_VIEW_COLUMNS }; -/* FIXME: relocate this */ -typedef struct { - gint id; - gint priority; - char *title; -} MilkTask; - -/* FIXME: don't hard-code this */ -static MilkTask tasks[] = { - { 0, 1, "Remember the milk"}, - { 2, 1, "File taxes"}, - { 6, 3, "Get a haircut"}, - { 9, 2, "Keep it real"}, - { 5, 3, "Invent smellovision"}, -}; - static void milk_main_window_get_property (GObject *object, guint property_id, @@ -326,32 +302,6 @@ contact_column_render_func (GtkCellLayout *cell_layout, g_object_unref (task); } -/* FIXME: set up a MilkListStore instead */ -static GtkTreeModel* -create_task_model () -{ - GtkListStore *list_store; - GtkTreeIter iter; - gint i; - - list_store = gtk_list_store_new (N_MODEL_COLUMNS, - G_TYPE_INT, - G_TYPE_INT, - G_TYPE_STRING); - - /* Populate model */ - for (i = 0; i < G_N_ELEMENTS (tasks); i++) { - gtk_list_store_append (list_store, &iter); - gtk_list_store_set (list_store, &iter, - TASK_MODEL_COLUMN_ID, tasks[i].id, - TASK_MODEL_COLUMN_PRIORITY, tasks[i].priority, - TASK_MODEL_COLUMN_TITLE, tasks[i].title, - -1); - } - - return GTK_TREE_MODEL (list_store); -} - static HildonAppMenu* create_menu (gpointer user_data) { @@ -400,7 +350,7 @@ create_menu (gpointer user_data) user_data); hildon_app_menu_append (menu, GTK_BUTTON (w)); - gtk_widget_show_all (menu); + gtk_widget_show_all (GTK_WIDGET (menu)); return menu; } @@ -434,9 +384,7 @@ milk_main_window_constructed (GObject* object) /* * Task List */ - /* FIXME: create a new MilkTaskModel class that syncs with the cached - * tasks */ - model = create_task_model (); + model = GTK_TREE_MODEL (milk_list_store_new ()); w = hildon_touch_selector_new (); renderer = gtk_cell_renderer_text_new (); @@ -445,19 +393,19 @@ milk_main_window_constructed (GObject* object) NULL); col = hildon_touch_selector_append_column (HILDON_TOUCH_SELECTOR (w), model, renderer, - "text", TASK_MODEL_COLUMN_TITLE, + "text", MILK_LIST_STORE_COLUMN_TITLE, NULL); g_object_unref (model); - hildon_touch_selector_column_set_text_column (col, - TASK_MODEL_COLUMN_TITLE); + hildon_touch_selector_column_set_text_column ( + col, MILK_LIST_STORE_COLUMN_TITLE); hildon_touch_selector_set_column_selection_mode ( HILDON_TOUCH_SELECTOR (w), HILDON_TOUCH_SELECTOR_SELECTION_MODE_MULTIPLE); - hildon_touch_selector_set_hildon_ui_mode (HILDON_TOUCH_SELECTOR (w), - HILDON_UI_MODE_EDIT); - hildon_touch_selector_unselect_all (HILDON_TOUCH_SELECTOR (w), - TASK_VIEW_COLUMN_TITLE); + hildon_touch_selector_set_hildon_ui_mode ( + HILDON_TOUCH_SELECTOR (w), HILDON_UI_MODE_EDIT); + hildon_touch_selector_unselect_all ( + HILDON_TOUCH_SELECTOR (w), TASK_VIEW_COLUMN_TITLE); gtk_box_pack_start (GTK_BOX (priv->main_vbox), w, TRUE, TRUE, 0); g_object_set (w, "can-focus", TRUE, NULL); -- 1.7.9.5