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"
28 #include "milk-task.h"
31 milk_task_model_tree_model_init (GtkTreeModelIface *iface);
33 G_DEFINE_TYPE_EXTENDED (MilkTaskModel,
37 G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_MODEL,
38 milk_task_model_tree_model_init));
40 /* less expensive than G_TYPE_INSTANCE_GET_PRIVATE */
41 #define MILK_TASK_MODEL_PRIVATE(o) ((MILK_TASK_MODEL ((o)))->priv)
43 struct _MilkTaskModelPrivate
48 static GtkTreeModelFlags
49 milk_task_model_get_flags (GtkTreeModel *model)
51 return GTK_TREE_MODEL_LIST_ONLY;
55 milk_task_model_get_n_columns (GtkTreeModel *model)
57 return MILK_TASK_MODEL_N_COLUMNS;
61 milk_task_model_get_column_type (GtkTreeModel *model,
65 case MILK_TASK_MODEL_COLUMN_TASK:
66 return MILK_TYPE_TASK;
69 g_warning (G_STRLOC ": invalid column: %d", column);
70 return G_TYPE_INVALID;
75 milk_task_model_get_iter (GtkTreeModel *model,
79 MilkTaskModelPrivate *priv;
81 g_return_val_if_fail (MILK_IS_TASK_MODEL (model), FALSE);
82 g_return_val_if_fail (iter, FALSE);
83 g_return_val_if_fail (gtk_tree_path_get_depth (path) == 1, FALSE);
85 priv = MILK_TASK_MODEL_PRIVATE (model);
87 return gtk_tree_model_get_iter (
88 GTK_TREE_MODEL (priv->store), iter, path);
92 milk_task_model_get_path (GtkTreeModel *model,
95 MilkTaskModelPrivate *priv;
97 g_return_val_if_fail (MILK_IS_TASK_MODEL (model), NULL);
98 g_return_val_if_fail (iter, NULL);
100 priv = MILK_TASK_MODEL_PRIVATE (model);
102 return gtk_tree_model_get_path (GTK_TREE_MODEL (priv->store), iter);
106 milk_task_model_get_value (GtkTreeModel *model,
111 MilkTaskModelPrivate *priv;
113 g_return_if_fail (MILK_IS_TASK_MODEL (model));
114 g_return_if_fail (iter);
115 g_return_if_fail (value);
117 priv = MILK_TASK_MODEL_PRIVATE (model);
119 gtk_tree_model_get_value (
120 GTK_TREE_MODEL (priv->store), iter, column, value);
124 milk_task_model_iter_next (GtkTreeModel *model,
127 MilkTaskModelPrivate *priv;
129 g_return_val_if_fail (MILK_IS_TASK_MODEL (model), FALSE);
130 g_return_val_if_fail (iter, FALSE);
132 priv = MILK_TASK_MODEL_PRIVATE (model);
134 return gtk_tree_model_iter_next (GTK_TREE_MODEL (priv->store), iter);
138 milk_task_model_iter_nth_child (GtkTreeModel *model,
143 MilkTaskModelPrivate *priv;
145 g_return_val_if_fail (MILK_IS_TASK_MODEL (model), FALSE);
146 g_return_val_if_fail (iter, FALSE);
147 /* we're one-dimensional */
148 g_return_val_if_fail (!parent, FALSE);
149 g_return_val_if_fail (index >= 0, FALSE);
151 priv = MILK_TASK_MODEL_PRIVATE (model);
153 return gtk_tree_model_iter_nth_child (
154 GTK_TREE_MODEL (priv->store), iter, parent, index);
158 milk_task_model_iter_children (GtkTreeModel *model,
162 MilkTaskModelPrivate *priv;
164 g_return_val_if_fail (MILK_IS_TASK_MODEL (model), FALSE);
165 g_return_val_if_fail (iter, FALSE);
166 /* we're one-dimensional */
167 g_return_val_if_fail (!parent, FALSE);
169 priv = MILK_TASK_MODEL_PRIVATE (model);
171 return gtk_tree_model_iter_children (
172 GTK_TREE_MODEL (priv->store), iter, parent);
176 milk_task_model_iter_has_child (GtkTreeModel *model,
179 MilkTaskModelPrivate *priv;
181 g_return_val_if_fail (MILK_IS_TASK_MODEL (model), FALSE);
182 g_return_val_if_fail (iter, FALSE);
184 priv = MILK_TASK_MODEL_PRIVATE (model);
186 return gtk_tree_model_iter_has_child (
187 GTK_TREE_MODEL (priv->store), iter);
191 milk_task_model_iter_n_children (GtkTreeModel *model,
194 MilkTaskModelPrivate *priv;
196 g_return_val_if_fail (MILK_IS_TASK_MODEL (model), -1);
197 g_return_val_if_fail (iter, -1);
199 priv = MILK_TASK_MODEL_PRIVATE (model);
201 /* we're one-dimensional */
205 return gtk_tree_model_iter_n_children (
206 GTK_TREE_MODEL (priv->store), iter);
210 milk_task_model_iter_parent (GtkTreeModel *model,
214 MilkTaskModelPrivate *priv;
216 g_return_val_if_fail (MILK_IS_TASK_MODEL (model), FALSE);
217 g_return_val_if_fail (iter, FALSE);
218 g_return_val_if_fail (child, FALSE);
220 priv = MILK_TASK_MODEL_PRIVATE (model);
222 return gtk_tree_model_iter_parent (
223 GTK_TREE_MODEL (priv->store), iter, child);
227 milk_task_model_get_property (GObject *object,
235 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id,
241 milk_task_model_set_property (GObject *object,
249 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id,
255 milk_task_model_dispose (GObject *object)
257 MilkTaskModelPrivate *priv = MILK_TASK_MODEL_PRIVATE (object);
260 g_object_unref (priv->store);
264 G_OBJECT_CLASS (milk_task_model_parent_class)->dispose (object);
268 milk_task_model_constructed (GObject* object)
276 /* FIXME: don't hard-code this */
277 static MilkTask_args tasks[] = {
278 { "0", "Walk the dog", 1},
279 { "2", "Make a Maemo 5 RTM client", 1},
280 { "6", "Stand on one foot", 3},
281 { "9", "Pick up some DVX ('cause it's so crisp)", 2},
282 { "5", "Finalize Halloween costume", 3},
285 MilkTaskModelPrivate *priv = MILK_TASK_MODEL_PRIVATE (object);
290 for (i = 0; i < G_N_ELEMENTS (tasks); i++) {
293 task = milk_task_new (
294 tasks[i].id, tasks[i].title, tasks[i].priority);
296 gtk_list_store_append (priv->store, &iter);
299 MILK_TASK_MODEL_COLUMN_TASK, task,
305 milk_task_model_class_init (MilkTaskModelClass *klass)
307 GObjectClass *object_class = G_OBJECT_CLASS (klass);
309 g_type_class_add_private (klass, sizeof (MilkTaskModelPrivate));
311 object_class->get_property = milk_task_model_get_property;
312 object_class->set_property = milk_task_model_set_property;
313 object_class->constructed = milk_task_model_constructed;
314 object_class->dispose = milk_task_model_dispose;
318 milk_task_model_init (MilkTaskModel *self)
320 MilkTaskModelPrivate *priv;
322 self->priv = priv = G_TYPE_INSTANCE_GET_PRIVATE (
323 self, MILK_TYPE_TASK_MODEL, MilkTaskModelPrivate);
325 priv->store = gtk_list_store_new (
326 MILK_TASK_MODEL_N_COLUMNS, MILK_TYPE_TASK);
330 milk_task_model_tree_model_init (GtkTreeModelIface *iface)
332 iface->get_flags = milk_task_model_get_flags;
333 iface->get_n_columns = milk_task_model_get_n_columns;
334 iface->get_column_type = milk_task_model_get_column_type;
335 iface->get_iter = milk_task_model_get_iter;
336 iface->get_path = milk_task_model_get_path;
337 iface->get_value = milk_task_model_get_value;
338 iface->iter_next = milk_task_model_iter_next;
339 iface->iter_children = milk_task_model_iter_children;
340 iface->iter_has_child = milk_task_model_iter_has_child;
341 iface->iter_n_children = milk_task_model_iter_n_children;
342 iface->iter_nth_child = milk_task_model_iter_nth_child;
343 iface->iter_parent = milk_task_model_iter_parent;
347 milk_task_model_new ()
349 return g_object_new (MILK_TYPE_TASK_MODEL, NULL);