2 * This program is free software; you can redistribute it and/or
3 * modify it under the terms of the GNU General Public License as
4 * published by the Free Software Foundation; either version 2 of the
5 * License, or (at your option) any later version.
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
10 * General Public License for more details.
12 * You should have received a copy of the GNU General Public
13 * License along with this program; if not, write to the
14 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
15 * Boston, MA 02110-1301 USA
17 * Authors: Travis Reitter <treitter@gmail.com>
23 #include <glib/gi18n.h>
25 #include <hildon/hildon.h>
27 #include "milk-task-model.h"
30 milk_task_model_tree_model_init (GtkTreeModelIface *iface);
32 G_DEFINE_TYPE_EXTENDED (MilkTaskModel,
36 G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_MODEL,
37 milk_task_model_tree_model_init));
39 /* less expensive than G_TYPE_INSTANCE_GET_PRIVATE */
40 #define MILK_TASK_MODEL_PRIVATE(o) ((MILK_TASK_MODEL ((o)))->priv)
42 struct _MilkTaskModelPrivate
47 /* FIXME: relocate this to its own class */
54 /* FIXME: don't hard-code this */
55 static MilkTask tasks[] = {
56 { 0, 1, "Remember the milk"},
57 { 2, 1, "Make a Maemo 5 RTM client"},
58 { 6, 3, "Get a haircut"},
59 { 9, 2, "Keep it real"},
60 { 5, 3, "Invent smellovision"},
63 static GtkTreeModelFlags
64 milk_task_model_get_flags (GtkTreeModel *model)
66 return GTK_TREE_MODEL_LIST_ONLY;
70 milk_task_model_get_n_columns (GtkTreeModel *model)
72 return MILK_TASK_MODEL_N_COLUMNS;
76 milk_task_model_get_column_type (GtkTreeModel *model,
80 case MILK_TASK_MODEL_COLUMN_ID:
83 case MILK_TASK_MODEL_COLUMN_PRIORITY:
86 case MILK_TASK_MODEL_COLUMN_TITLE:
90 g_warning (G_STRLOC ": invalid column: %d", column);
91 return G_TYPE_INVALID;
96 milk_task_model_get_iter (GtkTreeModel *model,
100 MilkTaskModelPrivate *priv;
102 g_return_val_if_fail (MILK_IS_TASK_MODEL (model), FALSE);
103 g_return_val_if_fail (iter, FALSE);
104 g_return_val_if_fail (gtk_tree_path_get_depth (path) == 1, FALSE);
106 priv = MILK_TASK_MODEL_PRIVATE (model);
108 return gtk_tree_model_get_iter (
109 GTK_TREE_MODEL (priv->store), iter, path);
113 milk_task_model_get_path (GtkTreeModel *model,
116 MilkTaskModelPrivate *priv;
118 g_return_val_if_fail (MILK_IS_TASK_MODEL (model), NULL);
119 g_return_val_if_fail (iter, NULL);
121 priv = MILK_TASK_MODEL_PRIVATE (model);
123 return gtk_tree_model_get_path (GTK_TREE_MODEL (priv->store), iter);
127 milk_task_model_get_value (GtkTreeModel *model,
132 MilkTaskModelPrivate *priv;
134 g_return_if_fail (MILK_IS_TASK_MODEL (model));
135 g_return_if_fail (iter);
136 g_return_if_fail (column >= 0);
137 g_return_if_fail (value);
139 priv = MILK_TASK_MODEL_PRIVATE (model);
141 gtk_tree_model_get_value (
142 GTK_TREE_MODEL (priv->store), iter, column, value);
146 milk_task_model_iter_next (GtkTreeModel *model,
149 MilkTaskModelPrivate *priv;
151 g_return_val_if_fail (MILK_IS_TASK_MODEL (model), FALSE);
152 g_return_val_if_fail (iter, FALSE);
154 priv = MILK_TASK_MODEL_PRIVATE (model);
156 return gtk_tree_model_iter_next (GTK_TREE_MODEL (priv->store), iter);
160 milk_task_model_iter_nth_child (GtkTreeModel *model,
165 MilkTaskModelPrivate *priv;
167 g_return_val_if_fail (MILK_IS_TASK_MODEL (model), FALSE);
168 g_return_val_if_fail (iter, FALSE);
169 /* we're one-dimensional */
170 g_return_val_if_fail (!parent, FALSE);
171 g_return_val_if_fail (index >= 0, FALSE);
173 priv = MILK_TASK_MODEL_PRIVATE (model);
175 return gtk_tree_model_iter_nth_child (
176 GTK_TREE_MODEL (priv->store), iter, parent, index);
180 milk_task_model_iter_children (GtkTreeModel *model,
184 MilkTaskModelPrivate *priv;
186 g_return_val_if_fail (MILK_IS_TASK_MODEL (model), FALSE);
187 g_return_val_if_fail (iter, FALSE);
188 /* we're one-dimensional */
189 g_return_val_if_fail (!parent, FALSE);
191 priv = MILK_TASK_MODEL_PRIVATE (model);
193 return gtk_tree_model_iter_children (
194 GTK_TREE_MODEL (priv->store), iter, parent);
198 milk_task_model_iter_has_child (GtkTreeModel *model,
201 MilkTaskModelPrivate *priv;
203 g_return_val_if_fail (MILK_IS_TASK_MODEL (model), FALSE);
204 g_return_val_if_fail (iter, FALSE);
206 priv = MILK_TASK_MODEL_PRIVATE (model);
208 return gtk_tree_model_iter_has_child (
209 GTK_TREE_MODEL (priv->store), iter);
213 milk_task_model_iter_n_children (GtkTreeModel *model,
216 MilkTaskModelPrivate *priv;
218 g_return_val_if_fail (MILK_IS_TASK_MODEL (model), -1);
219 g_return_val_if_fail (iter, -1);
221 priv = MILK_TASK_MODEL_PRIVATE (model);
223 /* we're one-dimensional */
227 return gtk_tree_model_iter_n_children (
228 GTK_TREE_MODEL (priv->store), iter);
232 milk_task_model_iter_parent (GtkTreeModel *model,
236 MilkTaskModelPrivate *priv;
238 g_return_val_if_fail (MILK_IS_TASK_MODEL (model), FALSE);
239 g_return_val_if_fail (iter, FALSE);
240 g_return_val_if_fail (child, FALSE);
242 priv = MILK_TASK_MODEL_PRIVATE (model);
244 return gtk_tree_model_iter_parent (
245 GTK_TREE_MODEL (priv->store), iter, child);
249 milk_task_model_get_property (GObject *object,
257 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id,
263 milk_task_model_set_property (GObject *object,
271 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id,
277 milk_task_model_dispose (GObject *object)
279 MilkTaskModelPrivate *priv = MILK_TASK_MODEL_PRIVATE (object);
282 g_object_unref (priv->store);
286 G_OBJECT_CLASS (milk_task_model_parent_class)->dispose (object);
290 milk_task_model_constructed (GObject* object)
298 /* FIXME: don't hard-code this */
299 static MilkTask_args tasks[] = {
300 { "0", "Walk the dog", 1},
301 { "2", "Make a Maemo 5 RTM client", 1},
302 { "6", "Stand on one foot", 3},
303 { "9", "Pick up some DVX ('cause it's so crisp)", 2},
304 { "5", "Finalize Halloween costume", 3},
307 MilkTaskModelPrivate *priv = MILK_TASK_MODEL_PRIVATE (object);
312 for (i = 0; i < G_N_ELEMENTS (tasks); i++) {
313 gtk_list_store_append (priv->store, &iter);
316 MILK_TASK_MODEL_COLUMN_ID,
318 MILK_TASK_MODEL_COLUMN_PRIORITY,
320 MILK_TASK_MODEL_COLUMN_TITLE,
327 milk_task_model_class_init (MilkTaskModelClass *klass)
329 GObjectClass *object_class = G_OBJECT_CLASS (klass);
331 g_type_class_add_private (klass, sizeof (MilkTaskModelPrivate));
333 object_class->get_property = milk_task_model_get_property;
334 object_class->set_property = milk_task_model_set_property;
335 object_class->constructed = milk_task_model_constructed;
336 object_class->dispose = milk_task_model_dispose;
340 milk_task_model_init (MilkTaskModel *self)
342 MilkTaskModelPrivate *priv;
344 self->priv = priv = G_TYPE_INSTANCE_GET_PRIVATE (
345 self, MILK_TYPE_TASK_MODEL, MilkTaskModelPrivate);
347 priv->store = gtk_list_store_new (
348 MILK_TASK_MODEL_N_COLUMNS, G_TYPE_INT, G_TYPE_UINT,
353 milk_task_model_tree_model_init (GtkTreeModelIface *iface)
355 iface->get_flags = milk_task_model_get_flags;
356 iface->get_n_columns = milk_task_model_get_n_columns;
357 iface->get_column_type = milk_task_model_get_column_type;
358 iface->get_iter = milk_task_model_get_iter;
359 iface->get_path = milk_task_model_get_path;
360 iface->get_value = milk_task_model_get_value;
361 iface->iter_next = milk_task_model_iter_next;
362 iface->iter_children = milk_task_model_iter_children;
363 iface->iter_has_child = milk_task_model_iter_has_child;
364 iface->iter_n_children = milk_task_model_iter_n_children;
365 iface->iter_nth_child = milk_task_model_iter_nth_child;
366 iface->iter_parent = milk_task_model_iter_parent;
370 milk_task_model_new ()
372 return g_object_new (MILK_TYPE_TASK_MODEL,