bin_PROGRAMS = milk
milk_SOURCES = \
- milk-list-store.c \
- milk-list-store.h \
milk-main.c \
milk-main.h \
milk-main-window.c \
- milk-main-window.h
+ milk-main-window.h \
+ milk-task-model.c \
+ milk-task-model.h
milk_LDADD = $(MILK_LIBS)
+++ /dev/null
-/*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Travis Reitter <treitter@gmail.com>
- */
-
-#include <config.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-#include <hildon/hildon.h>
-
-#include "milk-list-store.h"
-
-static void
-milk_list_store_tree_model_init (GtkTreeModelIface *iface);
-
-G_DEFINE_TYPE_EXTENDED (MilkListStore,
- milk_list_store,
- G_TYPE_OBJECT,
- 0,
- G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_MODEL,
- milk_list_store_tree_model_init));
-
-/* less expensive than G_TYPE_INSTANCE_GET_PRIVATE */
-#define MILK_LIST_STORE_PRIVATE(o) ((MILK_LIST_STORE ((o)))->priv)
-
-struct _MilkListStorePrivate
-{
- 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
-milk_list_store_get_flags (GtkTreeModel *model)
-{
- return GTK_TREE_MODEL_LIST_ONLY;
-}
-
-static gint
-milk_list_store_get_n_columns (GtkTreeModel *model)
-{
- return MILK_LIST_STORE_N_COLUMNS;
-}
-
-static GType
-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_TITLE:
- return G_TYPE_STRING;
-
- default:
- g_warning (G_STRLOC ": invalid column: %d", column);
- return G_TYPE_INVALID;
- }
-}
-
-static gboolean
-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);
-
- priv = MILK_LIST_STORE_PRIVATE (model);
-
- 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);
-
- priv = MILK_LIST_STORE_PRIVATE (model);
-
- return gtk_tree_model_get_path (GTK_TREE_MODEL (priv->store), iter);
-}
-
-static void
-milk_list_store_get_value (GtkTreeModel *model,
- GtkTreeIter *iter,
- 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 (value);
-
- 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);
-
- priv = MILK_LIST_STORE_PRIVATE (model);
-
- return gtk_tree_model_iter_next (GTK_TREE_MODEL (priv->store), iter);
-}
-
-static gboolean
-milk_list_store_iter_nth_child (GtkTreeModel *model,
- GtkTreeIter *iter,
- GtkTreeIter *parent,
- gint index)
-{
- 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);
-
- priv = MILK_LIST_STORE_PRIVATE (model);
-
- return gtk_tree_model_iter_nth_child (
- GTK_TREE_MODEL (priv->store), iter, parent, index);
-}
-
-static gboolean
-milk_list_store_iter_children (GtkTreeModel *model,
- GtkTreeIter *iter,
- GtkTreeIter *parent)
-{
- 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);
-
- 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;
-
- 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 gtk_tree_model_iter_n_children (
- GTK_TREE_MODEL (priv->store), iter);
-}
-
-static gboolean
-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);
-
- priv = MILK_LIST_STORE_PRIVATE (model);
-
- return gtk_tree_model_iter_parent (
- GTK_TREE_MODEL (priv->store), iter, child);
-}
-
-static void
-milk_list_store_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- MilkListStorePrivate *priv = MILK_LIST_STORE_PRIVATE (object);
- switch (property_id)
- {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id,
- pspec);
- }
-}
-
-static void
-milk_list_store_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- MilkListStorePrivate *priv = MILK_LIST_STORE_PRIVATE (object);
- switch (property_id)
- {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id,
- pspec);
- }
-}
-
-static void
-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);
-}
-
-static void
-milk_list_store_constructed (GObject* object)
-{
- MilkListStore *self = MILK_LIST_STORE (object);
- MilkListStorePrivate *priv = MILK_LIST_STORE_PRIVATE (object);
- 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
-milk_list_store_class_init (MilkListStoreClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- g_type_class_add_private (klass, sizeof (MilkListStorePrivate));
-
- object_class->get_property = milk_list_store_get_property;
- object_class->set_property = milk_list_store_set_property;
- object_class->constructed = milk_list_store_constructed;
- object_class->dispose = milk_list_store_dispose;
-}
-
-static void
-milk_list_store_init (MilkListStore *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
-milk_list_store_tree_model_init (GtkTreeModelIface *iface)
-{
- iface->get_flags = milk_list_store_get_flags;
- iface->get_n_columns = milk_list_store_get_n_columns;
- iface->get_column_type = milk_list_store_get_column_type;
- iface->get_iter = milk_list_store_get_iter;
- iface->get_path = milk_list_store_get_path;
- iface->get_value = milk_list_store_get_value;
- iface->iter_next = milk_list_store_iter_next;
- iface->iter_children = milk_list_store_iter_children;
- iface->iter_has_child = milk_list_store_iter_has_child;
- iface->iter_n_children = milk_list_store_iter_n_children;
- iface->iter_nth_child = milk_list_store_iter_nth_child;
- iface->iter_parent = milk_list_store_iter_parent;
-}
-
-MilkListStore*
-milk_list_store_new ()
-{
- return g_object_new (MILK_TYPE_LIST_STORE,
- NULL);
-}
+++ /dev/null
-/*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Travis Reitter <treitter@gmail.com>
- */
-
-#ifndef _MILK_LIST_STORE_H
-#define _MILK_LIST_STORE_H
-
-G_BEGIN_DECLS
-
-#define MILK_TYPE_LIST_STORE milk_list_store_get_type()
-
-#define MILK_LIST_STORE(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
- MILK_TYPE_LIST_STORE, MilkListStore))
-
-#define MILK_LIST_STORE_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), \
- MILK_TYPE_LIST_STORE, MilkListStoreClass))
-
-#define MILK_IS_LIST_STORE(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
- MILK_TYPE_LIST_STORE))
-
-#define MILK_IS_LIST_STORE_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), \
- MILK_TYPE_LIST_STORE))
-
-#define MILK_LIST_STORE_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), \
- MILK_TYPE_LIST_STORE, MilkListStoreClass))
-
-typedef struct _MilkListStore MilkListStore;
-typedef struct _MilkListStoreClass MilkListStoreClass;
-typedef struct _MilkListStorePrivate MilkListStorePrivate;
-
-typedef enum {
- MILK_LIST_STORE_COLUMN_ID,
- MILK_LIST_STORE_COLUMN_PRIORITY,
- MILK_LIST_STORE_COLUMN_TITLE,
- MILK_LIST_STORE_N_COLUMNS
-} OssoABookListStoreColumn;
-
-struct _MilkListStore
-{
- GObject parent;
- MilkListStorePrivate *priv;
-};
-
-struct _MilkListStoreClass
-{
- GObjectClass parent_class;
-};
-
-GType milk_list_store_get_type (void);
-
-
-MilkListStore* milk_list_store_new ();
-
-#endif /* _MILK_LIST_STORE_H */
#include <hildon/hildon.h>
#include "milk-main-window.h"
-#include "milk-list-store.h"
+#include "milk-task-model.h"
G_DEFINE_TYPE (MilkMainWindow, milk_main_window, HILDON_TYPE_WINDOW)
/*
* Task List
*/
- model = GTK_TREE_MODEL (milk_list_store_new ());
+ model = GTK_TREE_MODEL (milk_task_model_new ());
w = hildon_touch_selector_new ();
renderer = gtk_cell_renderer_text_new ();
NULL);
col = hildon_touch_selector_append_column (HILDON_TOUCH_SELECTOR (w),
model, renderer,
- "text", MILK_LIST_STORE_COLUMN_TITLE,
+ "text", MILK_TASK_MODEL_COLUMN_TITLE,
NULL);
g_object_unref (model);
hildon_touch_selector_column_set_text_column (
- col, MILK_LIST_STORE_COLUMN_TITLE);
+ col, MILK_TASK_MODEL_COLUMN_TITLE);
hildon_touch_selector_set_column_selection_mode (
HILDON_TOUCH_SELECTOR (w),
HILDON_TOUCH_SELECTOR_SELECTION_MODE_MULTIPLE);
--- /dev/null
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ *
+ * Authors: Travis Reitter <treitter@gmail.com>
+ */
+
+#include <config.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <hildon/hildon.h>
+
+#include "milk-task-model.h"
+
+static void
+milk_task_model_tree_model_init (GtkTreeModelIface *iface);
+
+G_DEFINE_TYPE_EXTENDED (MilkTaskModel,
+ milk_task_model,
+ G_TYPE_OBJECT,
+ 0,
+ G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_MODEL,
+ milk_task_model_tree_model_init));
+
+/* less expensive than G_TYPE_INSTANCE_GET_PRIVATE */
+#define MILK_TASK_MODEL_PRIVATE(o) ((MILK_TASK_MODEL ((o)))->priv)
+
+struct _MilkTaskModelPrivate
+{
+ 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
+milk_task_model_get_flags (GtkTreeModel *model)
+{
+ return GTK_TREE_MODEL_LIST_ONLY;
+}
+
+static gint
+milk_task_model_get_n_columns (GtkTreeModel *model)
+{
+ return MILK_TASK_MODEL_N_COLUMNS;
+}
+
+static GType
+milk_task_model_get_column_type (GtkTreeModel *model,
+ gint column)
+{
+ switch (column) {
+ case MILK_TASK_MODEL_COLUMN_ID:
+ return G_TYPE_INT;
+
+ case MILK_TASK_MODEL_COLUMN_PRIORITY:
+ return G_TYPE_UINT;
+
+ case MILK_TASK_MODEL_COLUMN_TITLE:
+ return G_TYPE_STRING;
+
+ default:
+ g_warning (G_STRLOC ": invalid column: %d", column);
+ return G_TYPE_INVALID;
+ }
+}
+
+static gboolean
+milk_task_model_get_iter (GtkTreeModel *model,
+ GtkTreeIter *iter,
+ GtkTreePath *path)
+{
+ MilkTaskModelPrivate *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);
+
+ priv = MILK_TASK_MODEL_PRIVATE (model);
+
+ return gtk_tree_model_get_iter (
+ GTK_TREE_MODEL (priv->store), iter, path);
+}
+
+static GtkTreePath*
+milk_task_model_get_path (GtkTreeModel *model,
+ GtkTreeIter *iter)
+{
+ MilkTaskModelPrivate *priv;
+
+ g_return_val_if_fail (MILK_IS_LIST_STORE (model), NULL);
+ g_return_val_if_fail (iter, NULL);
+
+ priv = MILK_TASK_MODEL_PRIVATE (model);
+
+ return gtk_tree_model_get_path (GTK_TREE_MODEL (priv->store), iter);
+}
+
+static void
+milk_task_model_get_value (GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gint column,
+ GValue *value)
+{
+ MilkTaskModelPrivate *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 (value);
+
+ priv = MILK_TASK_MODEL_PRIVATE (model);
+
+ gtk_tree_model_get_value (
+ GTK_TREE_MODEL (priv->store), iter, column, value);
+}
+
+static gboolean
+milk_task_model_iter_next (GtkTreeModel *model,
+ GtkTreeIter *iter)
+{
+ MilkTaskModelPrivate *priv;
+
+ g_return_val_if_fail (MILK_IS_LIST_STORE (model), FALSE);
+ g_return_val_if_fail (iter, FALSE);
+
+ priv = MILK_TASK_MODEL_PRIVATE (model);
+
+ return gtk_tree_model_iter_next (GTK_TREE_MODEL (priv->store), iter);
+}
+
+static gboolean
+milk_task_model_iter_nth_child (GtkTreeModel *model,
+ GtkTreeIter *iter,
+ GtkTreeIter *parent,
+ gint index)
+{
+ MilkTaskModelPrivate *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);
+
+ priv = MILK_TASK_MODEL_PRIVATE (model);
+
+ return gtk_tree_model_iter_nth_child (
+ GTK_TREE_MODEL (priv->store), iter, parent, index);
+}
+
+static gboolean
+milk_task_model_iter_children (GtkTreeModel *model,
+ GtkTreeIter *iter,
+ GtkTreeIter *parent)
+{
+ MilkTaskModelPrivate *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_TASK_MODEL_PRIVATE (model);
+
+ return gtk_tree_model_iter_children (
+ GTK_TREE_MODEL (priv->store), iter, parent);
+}
+
+static gboolean
+milk_task_model_iter_has_child (GtkTreeModel *model,
+ GtkTreeIter *iter)
+{
+ MilkTaskModelPrivate *priv;
+
+ g_return_val_if_fail (MILK_IS_LIST_STORE (model), FALSE);
+ g_return_val_if_fail (iter, FALSE);
+
+ priv = MILK_TASK_MODEL_PRIVATE (model);
+
+ return gtk_tree_model_iter_has_child (
+ GTK_TREE_MODEL (priv->store), iter);
+}
+
+static gint
+milk_task_model_iter_n_children (GtkTreeModel *model,
+ GtkTreeIter *iter)
+{
+ MilkTaskModelPrivate *priv;
+
+ g_return_val_if_fail (MILK_IS_LIST_STORE (model), -1);
+ g_return_val_if_fail (iter, -1);
+
+ priv = MILK_TASK_MODEL_PRIVATE (model);
+
+ /* we're one-dimensional */
+ if (iter)
+ return 0;
+
+ return gtk_tree_model_iter_n_children (
+ GTK_TREE_MODEL (priv->store), iter);
+}
+
+static gboolean
+milk_task_model_iter_parent (GtkTreeModel *model,
+ GtkTreeIter *iter,
+ GtkTreeIter *child)
+{
+ MilkTaskModelPrivate *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);
+
+ priv = MILK_TASK_MODEL_PRIVATE (model);
+
+ return gtk_tree_model_iter_parent (
+ GTK_TREE_MODEL (priv->store), iter, child);
+}
+
+static void
+milk_task_model_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ switch (property_id)
+ {
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id,
+ pspec);
+ }
+}
+
+static void
+milk_task_model_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ switch (property_id)
+ {
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id,
+ pspec);
+ }
+}
+
+static void
+milk_task_model_dispose (GObject *object)
+{
+ MilkTaskModelPrivate *priv = MILK_TASK_MODEL_PRIVATE (object);
+
+ if (priv->store) {
+ g_object_unref (priv->store);
+ priv->store = NULL;
+ }
+
+ G_OBJECT_CLASS (milk_task_model_parent_class)->dispose (object);
+}
+
+static void
+milk_task_model_constructed (GObject* object)
+{
+ typedef struct {
+ const char *id;
+ const char *title;
+ gint priority;
+ } MilkTask_args;
+
+ /* FIXME: don't hard-code this */
+ static MilkTask_args tasks[] = {
+ { "0", "Walk the dog", 1},
+ { "2", "Make a Maemo 5 RTM client", 1},
+ { "6", "Stand on one foot", 3},
+ { "9", "Pick up some DVX ('cause it's so crisp)", 2},
+ { "5", "Finalize Halloween costume", 3},
+ };
+
+ MilkTaskModelPrivate *priv = MILK_TASK_MODEL_PRIVATE (object);
+ 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_TASK_MODEL_COLUMN_ID,
+ tasks[i].id,
+ MILK_TASK_MODEL_COLUMN_PRIORITY,
+ tasks[i].priority,
+ MILK_TASK_MODEL_COLUMN_TITLE,
+ tasks[i].title,
+ -1);
+ }
+}
+
+static void
+milk_task_model_class_init (MilkTaskModelClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (MilkTaskModelPrivate));
+
+ object_class->get_property = milk_task_model_get_property;
+ object_class->set_property = milk_task_model_set_property;
+ object_class->constructed = milk_task_model_constructed;
+ object_class->dispose = milk_task_model_dispose;
+}
+
+static void
+milk_task_model_init (MilkTaskModel *self)
+{
+ MilkTaskModelPrivate *priv;
+
+ self->priv = priv = G_TYPE_INSTANCE_GET_PRIVATE (
+ self, MILK_TYPE_LIST_STORE, MilkTaskModelPrivate);
+
+ priv->store = gtk_list_store_new (
+ MILK_TASK_MODEL_N_COLUMNS, G_TYPE_INT, G_TYPE_UINT,
+ G_TYPE_STRING);
+}
+
+static void
+milk_task_model_tree_model_init (GtkTreeModelIface *iface)
+{
+ iface->get_flags = milk_task_model_get_flags;
+ iface->get_n_columns = milk_task_model_get_n_columns;
+ iface->get_column_type = milk_task_model_get_column_type;
+ iface->get_iter = milk_task_model_get_iter;
+ iface->get_path = milk_task_model_get_path;
+ iface->get_value = milk_task_model_get_value;
+ iface->iter_next = milk_task_model_iter_next;
+ iface->iter_children = milk_task_model_iter_children;
+ iface->iter_has_child = milk_task_model_iter_has_child;
+ iface->iter_n_children = milk_task_model_iter_n_children;
+ iface->iter_nth_child = milk_task_model_iter_nth_child;
+ iface->iter_parent = milk_task_model_iter_parent;
+}
+
+MilkTaskModel*
+milk_task_model_new ()
+{
+ return g_object_new (MILK_TYPE_LIST_STORE,
+ NULL);
+}