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-list-store.h"
30 milk_list_store_tree_model_init (GtkTreeModelIface *iface);
32 G_DEFINE_TYPE_EXTENDED (MilkListStore,
36 G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_MODEL,
37 milk_list_store_tree_model_init));
39 #define MILK_LIST_STORE_PRIVATE(o) \
40 (G_TYPE_INSTANCE_GET_PRIVATE ((o), MILK_TYPE_LIST_STORE, MilkListStorePrivate))
42 #define MILK_LIST_STORE_STAMP_INVALID 0
44 struct _MilkListStorePrivate
50 static GtkTreeModelFlags
51 milk_list_store_get_flags (GtkTreeModel *model)
53 return GTK_TREE_MODEL_LIST_ONLY;
57 milk_list_store_get_n_columns (GtkTreeModel *model)
59 return MILK_LIST_STORE_COLUMN_LAST;
63 milk_list_store_get_column_type (GtkTreeModel *model,
67 case MILK_LIST_STORE_COLUMN_PRIORITY:
70 case MILK_LIST_STORE_COLUMN_TASK:
71 /* FIXME: define the MilkTask class and use
72 * MILK_TYPE_TASK here */
76 g_warning (G_STRLOC ": invalid column: %d", column);
77 return G_TYPE_INVALID;
82 milk_list_store_get_iter (GtkTreeModel *model,
86 g_return_val_if_fail (MILK_IS_LIST_STORE (model), FALSE);
87 g_return_val_if_fail (iter, FALSE);
88 g_return_val_if_fail (gtk_tree_path_get_depth (path) == 1, FALSE);
90 /* FIXME: implement this */
91 g_warning (G_STRLOC ": FIXME: not implemented");
97 milk_list_store_get_path (GtkTreeModel *model,
100 g_return_val_if_fail (MILK_IS_LIST_STORE (model), NULL);
101 g_return_val_if_fail (iter, NULL);
103 /* FIXME: implement this */
104 g_warning (G_STRLOC ": FIXME: not implemented");
110 milk_list_store_get_value (GtkTreeModel *model,
115 g_return_if_fail (MILK_IS_LIST_STORE (model));
116 g_return_if_fail (iter);
117 g_return_if_fail (column < 0);
118 g_return_if_fail (value);
120 /* FIXME: implement this */
121 g_warning (G_STRLOC ": FIXME: not implemented");
125 milk_list_store_iter_next (GtkTreeModel *model,
128 g_return_val_if_fail (MILK_IS_LIST_STORE (model), FALSE);
129 g_return_val_if_fail (iter, FALSE);
131 /* FIXME: implement this */
132 g_warning (G_STRLOC ": FIXME: not implemented");
138 milk_list_store_iter_nth_child (GtkTreeModel *model,
143 MilkListStorePrivate *priv = MILK_LIST_STORE_PRIVATE (model);
145 g_return_val_if_fail (MILK_IS_LIST_STORE (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);
150 g_return_val_if_fail (index >= priv->node_count, FALSE);
152 /* FIXME: implement this */
153 g_warning (G_STRLOC ": FIXME: not implemented");
159 milk_list_store_iter_children (GtkTreeModel *model,
163 /* we're one-dimensional, so this is a degenerate case */
164 return milk_list_store_iter_nth_child (model, iter, parent, 0);
168 milk_list_store_iter_has_child (GtkTreeModel *model,
171 g_return_val_if_fail (MILK_IS_LIST_STORE (model), FALSE);
172 g_return_val_if_fail (iter, FALSE);
178 milk_list_store_iter_n_children (GtkTreeModel *model,
181 MilkListStorePrivate *priv = MILK_LIST_STORE_PRIVATE (model);
183 g_return_val_if_fail (MILK_IS_LIST_STORE (model), -1);
184 g_return_val_if_fail (iter, -1);
186 /* we're one-dimensional */
190 return priv->node_count;
194 milk_list_store_iter_parent (GtkTreeModel *model,
198 g_return_val_if_fail (MILK_IS_LIST_STORE (model), FALSE);
199 g_return_val_if_fail (iter, FALSE);
200 g_return_val_if_fail (child, FALSE);
206 milk_list_store_get_property (GObject *object,
211 MilkListStorePrivate *priv = MILK_LIST_STORE_PRIVATE (object);
215 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id,
221 milk_list_store_set_property (GObject *object,
226 MilkListStorePrivate *priv = MILK_LIST_STORE_PRIVATE (object);
230 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id,
236 milk_list_store_dispose (GObject *object)
238 MilkListStorePrivate *priv = MILK_LIST_STORE_PRIVATE (object);
240 G_OBJECT_CLASS (milk_list_store_parent_class)->dispose (object);
244 milk_list_store_constructed (GObject* object)
246 MilkListStore *self = MILK_LIST_STORE (object);
247 MilkListStorePrivate *priv = MILK_LIST_STORE_PRIVATE (object);
249 priv->stamp = MILK_LIST_STORE_STAMP_INVALID + 1;
253 milk_list_store_class_init (MilkListStoreClass *klass)
255 GObjectClass *object_class = G_OBJECT_CLASS (klass);
257 g_type_class_add_private (klass, sizeof (MilkListStorePrivate));
259 object_class->get_property = milk_list_store_get_property;
260 object_class->set_property = milk_list_store_set_property;
261 object_class->constructed = milk_list_store_constructed;
262 object_class->dispose = milk_list_store_dispose;
264 /* FIXME: trigger the signals with gtk_tree_model_row_inserted(), etc.
269 milk_list_store_init (MilkListStore *self)
271 self->priv = MILK_LIST_STORE_PRIVATE (self);
275 milk_list_store_tree_model_init (GtkTreeModelIface *iface)
277 iface->get_flags = milk_list_store_get_flags;
278 iface->get_n_columns = milk_list_store_get_n_columns;
279 iface->get_column_type = milk_list_store_get_column_type;
280 iface->get_iter = milk_list_store_get_iter;
281 iface->get_path = milk_list_store_get_path;
282 iface->get_value = milk_list_store_get_value;
283 iface->iter_next = milk_list_store_iter_next;
284 iface->iter_children = milk_list_store_iter_children;
285 iface->iter_has_child = milk_list_store_iter_has_child;
286 iface->iter_n_children = milk_list_store_iter_n_children;
287 iface->iter_nth_child = milk_list_store_iter_nth_child;
288 iface->iter_parent = milk_list_store_iter_parent;
292 milk_list_store_new ()
294 return g_object_new (MILK_TYPE_LIST_STORE,