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-auth.h"
29 #include "milk-task.h"
32 milk_task_model_tree_model_init (GtkTreeModelIface *iface);
34 G_DEFINE_TYPE_EXTENDED (MilkTaskModel,
38 G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_MODEL,
39 milk_task_model_tree_model_init));
41 /* less expensive than G_TYPE_INSTANCE_GET_PRIVATE */
42 #define MILK_TASK_MODEL_PRIVATE(o) ((MILK_TASK_MODEL ((o)))->priv)
44 struct _MilkTaskModelPrivate
54 static GtkTreeModelFlags
55 milk_task_model_get_flags (GtkTreeModel *model)
57 return GTK_TREE_MODEL_LIST_ONLY;
61 milk_task_model_get_n_columns (GtkTreeModel *model)
63 return MILK_TASK_MODEL_N_COLUMNS;
67 milk_task_model_get_column_type (GtkTreeModel *model,
71 case MILK_TASK_MODEL_COLUMN_TASK:
72 return MILK_TYPE_TASK;
75 g_warning (G_STRLOC ": invalid column: %d", column);
76 return G_TYPE_INVALID;
81 milk_task_model_get_iter (GtkTreeModel *model,
85 MilkTaskModelPrivate *priv;
87 g_return_val_if_fail (MILK_IS_TASK_MODEL (model), FALSE);
88 g_return_val_if_fail (iter, FALSE);
89 g_return_val_if_fail (gtk_tree_path_get_depth (path) == 1, FALSE);
91 priv = MILK_TASK_MODEL_PRIVATE (model);
93 return gtk_tree_model_get_iter (
94 GTK_TREE_MODEL (priv->store), iter, path);
98 milk_task_model_get_path (GtkTreeModel *model,
101 MilkTaskModelPrivate *priv;
103 g_return_val_if_fail (MILK_IS_TASK_MODEL (model), NULL);
104 g_return_val_if_fail (iter, NULL);
106 priv = MILK_TASK_MODEL_PRIVATE (model);
108 return gtk_tree_model_get_path (GTK_TREE_MODEL (priv->store), iter);
112 milk_task_model_get_value (GtkTreeModel *model,
117 MilkTaskModelPrivate *priv;
119 g_return_if_fail (MILK_IS_TASK_MODEL (model));
120 g_return_if_fail (iter);
121 g_return_if_fail (value);
123 priv = MILK_TASK_MODEL_PRIVATE (model);
125 gtk_tree_model_get_value (
126 GTK_TREE_MODEL (priv->store), iter, column, value);
130 milk_task_model_iter_next (GtkTreeModel *model,
133 MilkTaskModelPrivate *priv;
135 g_return_val_if_fail (MILK_IS_TASK_MODEL (model), FALSE);
136 g_return_val_if_fail (iter, FALSE);
138 priv = MILK_TASK_MODEL_PRIVATE (model);
140 return gtk_tree_model_iter_next (GTK_TREE_MODEL (priv->store), iter);
144 milk_task_model_iter_nth_child (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);
153 /* we're one-dimensional */
154 g_return_val_if_fail (!parent, FALSE);
155 g_return_val_if_fail (index >= 0, FALSE);
157 priv = MILK_TASK_MODEL_PRIVATE (model);
159 return gtk_tree_model_iter_nth_child (
160 GTK_TREE_MODEL (priv->store), iter, parent, index);
164 milk_task_model_iter_children (GtkTreeModel *model,
168 MilkTaskModelPrivate *priv;
170 g_return_val_if_fail (MILK_IS_TASK_MODEL (model), FALSE);
171 g_return_val_if_fail (iter, FALSE);
172 /* we're one-dimensional */
173 g_return_val_if_fail (!parent, FALSE);
175 priv = MILK_TASK_MODEL_PRIVATE (model);
177 return gtk_tree_model_iter_children (
178 GTK_TREE_MODEL (priv->store), iter, parent);
182 milk_task_model_iter_has_child (GtkTreeModel *model,
185 MilkTaskModelPrivate *priv;
187 g_return_val_if_fail (MILK_IS_TASK_MODEL (model), FALSE);
188 g_return_val_if_fail (iter, FALSE);
190 priv = MILK_TASK_MODEL_PRIVATE (model);
192 return gtk_tree_model_iter_has_child (
193 GTK_TREE_MODEL (priv->store), iter);
197 milk_task_model_iter_n_children (GtkTreeModel *model,
200 MilkTaskModelPrivate *priv;
202 g_return_val_if_fail (MILK_IS_TASK_MODEL (model), -1);
203 g_return_val_if_fail (iter, -1);
205 priv = MILK_TASK_MODEL_PRIVATE (model);
207 /* we're one-dimensional */
211 return gtk_tree_model_iter_n_children (
212 GTK_TREE_MODEL (priv->store), iter);
216 milk_task_model_iter_parent (GtkTreeModel *model,
220 MilkTaskModelPrivate *priv;
222 g_return_val_if_fail (MILK_IS_TASK_MODEL (model), FALSE);
223 g_return_val_if_fail (iter, FALSE);
224 g_return_val_if_fail (child, FALSE);
226 priv = MILK_TASK_MODEL_PRIVATE (model);
228 return gtk_tree_model_iter_parent (
229 GTK_TREE_MODEL (priv->store), iter, child);
233 populate_model (MilkTaskModel *model)
241 /* FIXME: don't hard-code this */
242 static MilkTask_args tasks[] = {
243 { "0", "Walk the dog", 1},
244 { "2", "Make a Maemo 5 RTM client", 1},
245 { "6", "Stand on one foot", 3},
246 { "9", "Pick up some DVX ('cause it's so crisp)", 2},
247 { "5", "Finalize Halloween costume", 3},
250 MilkTaskModelPrivate *priv = MILK_TASK_MODEL_PRIVATE (model);
254 /* FIXME: remove all existing rows */
255 /* FIXME: use the tasks from the auth */
258 for (i = 0; i < G_N_ELEMENTS (tasks); i++) {
261 task = milk_task_new (
262 tasks[i].id, tasks[i].title, tasks[i].priority);
264 gtk_list_store_append (priv->store, &iter);
267 MILK_TASK_MODEL_COLUMN_TASK, task,
273 milk_task_model_set_auth (MilkTaskModel *model,
276 MilkTaskModelPrivate *priv;
278 g_return_if_fail (model);
279 g_return_if_fail (MILK_IS_TASK_MODEL (model));
280 g_return_if_fail (auth);
281 g_return_if_fail (MILK_IS_AUTH (auth));
283 priv = MILK_TASK_MODEL_PRIVATE (model);
285 /* FIXME: cut this */
286 g_debug ("authorizing and populating model with %p", auth);
289 g_object_unref (priv->auth);
290 priv->auth = g_object_ref (auth);
293 populate_model (model);
297 milk_task_model_get_property (GObject *object,
302 MilkTaskModelPrivate *priv = MILK_TASK_MODEL_PRIVATE (object);
307 g_value_set_object (value, priv->auth);
311 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id,
317 milk_task_model_set_property (GObject *object,
325 milk_task_model_set_auth (MILK_TASK_MODEL (object),
326 g_value_get_object (value));
330 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id,
336 milk_task_model_dispose (GObject *object)
338 MilkTaskModelPrivate *priv = MILK_TASK_MODEL_PRIVATE (object);
341 g_object_unref (priv->auth);
346 g_object_unref (priv->store);
350 G_OBJECT_CLASS (milk_task_model_parent_class)->dispose (object);
354 milk_task_model_class_init (MilkTaskModelClass *klass)
356 GObjectClass *object_class = G_OBJECT_CLASS (klass);
358 g_type_class_add_private (klass, sizeof (MilkTaskModelPrivate));
360 object_class->get_property = milk_task_model_get_property;
361 object_class->set_property = milk_task_model_set_property;
362 object_class->dispose = milk_task_model_dispose;
364 g_object_class_install_property
369 "Authentication proxy",
370 "Remember The Milk authentication proxy.",
372 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
373 G_PARAM_STATIC_STRINGS));
377 milk_task_model_init (MilkTaskModel *self)
379 MilkTaskModelPrivate *priv;
381 self->priv = priv = G_TYPE_INSTANCE_GET_PRIVATE (
382 self, MILK_TYPE_TASK_MODEL, MilkTaskModelPrivate);
384 priv->store = gtk_list_store_new (
385 MILK_TASK_MODEL_N_COLUMNS, MILK_TYPE_TASK);
389 milk_task_model_tree_model_init (GtkTreeModelIface *iface)
391 iface->get_flags = milk_task_model_get_flags;
392 iface->get_n_columns = milk_task_model_get_n_columns;
393 iface->get_column_type = milk_task_model_get_column_type;
394 iface->get_iter = milk_task_model_get_iter;
395 iface->get_path = milk_task_model_get_path;
396 iface->get_value = milk_task_model_get_value;
397 iface->iter_next = milk_task_model_iter_next;
398 iface->iter_children = milk_task_model_iter_children;
399 iface->iter_has_child = milk_task_model_iter_has_child;
400 iface->iter_n_children = milk_task_model_iter_n_children;
401 iface->iter_nth_child = milk_task_model_iter_nth_child;
402 iface->iter_parent = milk_task_model_iter_parent;
406 milk_task_model_new (MilkAuth *auth)
408 return g_object_new (MILK_TYPE_TASK_MODEL, "auth", auth, NULL);