ui/gtk/model.c

Mon, 23 May 2016 12:28:32 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Mon, 23 May 2016 12:28:32 +0200
changeset 124
80609f9675f1
parent 42
29b2821d1262
child 128
c284c15509a8
permissions
-rw-r--r--

added support for icons for the table widget (GTK)

35
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 /*
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 *
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
4 * Copyright 2014 Olaf Wintermann. All rights reserved.
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 *
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 *
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 *
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 *
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 */
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
29 #include <stdio.h>
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30 #include <stdlib.h>
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
31
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
32 #include "model.h"
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
33
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
34 #define IS_UI_LIST_MODEL(obj) \
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
35 (G_TYPE_CHECK_INSTANCE_TYPE((obj), list_model_type))
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
36 #define UI_LIST_MODEL(obj) \
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
37 (G_TYPE_CHECK_INSTANCE_CAST((obj), list_model_type, UiListModel))
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
38
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
39 static void list_model_class_init(GObjectClass *cl, gpointer data);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
40 static void list_model_interface_init(GtkTreeModelIface *i, gpointer data);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
41 static void list_model_init(UiListModel *instance, GObjectClass *cl);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
42
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
43 static GObjectClass list_model_class;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
44 static const GTypeInfo list_model_info = {
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
45 sizeof(GObjectClass),
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
46 NULL,
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
47 NULL,
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
48 (GClassInitFunc)list_model_class_init,
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
49 NULL,
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
50 NULL,
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
51 sizeof(UiListModel),
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
52 0,
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
53 (GInstanceInitFunc)list_model_init
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
54 };
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
55 static const GInterfaceInfo list_model_interface_info = {
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
56 (GInterfaceInitFunc)list_model_interface_init,
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
57 NULL,
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
58 NULL
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
59 };
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
60 static GType list_model_type;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
61
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
62 void ui_list_init() {
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
63 list_model_type = g_type_register_static(
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
64 G_TYPE_OBJECT,
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
65 "UiListModel",
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
66 &list_model_info,
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
67 (GTypeFlags)0);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
68 g_type_add_interface_static(
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
69 list_model_type,
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
70 GTK_TYPE_TREE_MODEL,
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
71 &list_model_interface_info);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
72 }
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
73
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
74 static void list_model_class_init(GObjectClass *cl, gpointer data) {
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
75 //cl->finalize = ...; // TODO
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
76 }
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
77
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
78 static void list_model_interface_init(GtkTreeModelIface *i, gpointer data) {
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
79 i->get_flags = ui_list_model_get_flags;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
80 i->get_n_columns = ui_list_model_get_n_columns;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
81 i->get_column_type = ui_list_model_get_column_type;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
82 i->get_iter = ui_list_model_get_iter;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
83 i->get_path = ui_list_model_get_path;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
84 i->get_value = ui_list_model_get_value;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
85 i->iter_next = ui_list_model_iter_next;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
86 i->iter_children = ui_list_model_iter_children;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
87 i->iter_has_child = ui_list_model_iter_has_child;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
88 i->iter_n_children = ui_list_model_iter_n_children;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
89 i->iter_nth_child = ui_list_model_iter_nth_child;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
90 i->iter_parent = ui_list_model_iter_parent;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
91 }
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
92
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
93 static void list_model_init(UiListModel *instance, GObjectClass *cl) {
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
94 instance->columntypes = NULL;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
95 instance->list = NULL;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
96 instance->numcolumns = 0;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
97 instance->stamp = g_random_int();
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
98 }
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
99
40
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
100 static GType ui_gtk_type(UiModelType type) {
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
101 switch(type) {
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
102 case UI_STRING: return G_TYPE_STRING;
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
103 case UI_INTEGER: return G_TYPE_INT;
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
104 }
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
105 return G_TYPE_INVALID;
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
106 }
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
107
124
80609f9675f1 added support for icons for the table widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 42
diff changeset
108 static void ui_model_set_value(GType type, void *data, GValue *value) {
40
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
109 switch(type) {
124
80609f9675f1 added support for icons for the table widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 42
diff changeset
110 case G_TYPE_STRING: {
40
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
111 value->g_type = G_TYPE_STRING;
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
112 g_value_set_string(value, data);
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
113 return;
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
114 }
124
80609f9675f1 added support for icons for the table widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 42
diff changeset
115 case G_TYPE_INT: {
40
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
116 value->g_type = G_TYPE_INT;
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
117 int *i = data;
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
118 g_value_set_int(value, *i);
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
119 return;
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
120 }
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
121 }
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
122 value->g_type = G_TYPE_INVALID;
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
123 }
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
124
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
125 UiListModel* ui_list_model_new(UiListPtr *list, UiModelInfo *info) {
35
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
126 UiListModel *model = g_object_new(list_model_type, NULL);
40
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
127 model->info = info;
35
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
128 model->list = list;
124
80609f9675f1 added support for icons for the table widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 42
diff changeset
129 model->columntypes = calloc(sizeof(GType), 2 * info->columns);
80609f9675f1 added support for icons for the table widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 42
diff changeset
130 int ncol = 0;
40
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
131 for(int i=0;i<info->columns;i++) {
124
80609f9675f1 added support for icons for the table widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 42
diff changeset
132 UiModelType type = info->types[i];
80609f9675f1 added support for icons for the table widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 42
diff changeset
133 if(type == UI_ICON_TEXT) {
80609f9675f1 added support for icons for the table widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 42
diff changeset
134 model->columntypes[ncol] = G_TYPE_STRING;
80609f9675f1 added support for icons for the table widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 42
diff changeset
135 ncol++;
80609f9675f1 added support for icons for the table widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 42
diff changeset
136 model->columntypes[ncol] = G_TYPE_STRING;
80609f9675f1 added support for icons for the table widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 42
diff changeset
137 } else {
80609f9675f1 added support for icons for the table widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 42
diff changeset
138 model->columntypes[ncol] = ui_gtk_type(info->types[i]);
80609f9675f1 added support for icons for the table widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 42
diff changeset
139 }
80609f9675f1 added support for icons for the table widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 42
diff changeset
140 ncol++;
40
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
141 }
124
80609f9675f1 added support for icons for the table widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 42
diff changeset
142 model->numcolumns = ncol;
35
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
143 return model;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
144 }
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
145
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
146
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
147 GtkTreeModelFlags ui_list_model_get_flags(GtkTreeModel *tree_model) {
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
148 return (GTK_TREE_MODEL_LIST_ONLY | GTK_TREE_MODEL_ITERS_PERSIST);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
149 }
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
150
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
151 gint ui_list_model_get_n_columns(GtkTreeModel *tree_model) {
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
152 g_return_val_if_fail(IS_UI_LIST_MODEL(tree_model), 0);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
153 UiListModel *model = UI_LIST_MODEL(tree_model);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
154 return model->numcolumns;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
155 }
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
156
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
157 GType ui_list_model_get_column_type(GtkTreeModel *tree_model, gint index) {
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
158 g_return_val_if_fail(IS_UI_LIST_MODEL(tree_model), G_TYPE_INVALID);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
159 UiListModel *model = UI_LIST_MODEL(tree_model);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
160 g_return_val_if_fail(index < model->numcolumns, G_TYPE_INVALID);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
161 return model->columntypes[index];
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
162 }
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
163
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
164 gboolean ui_list_model_get_iter(
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
165 GtkTreeModel *tree_model,
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
166 GtkTreeIter *iter,
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
167 GtkTreePath *path)
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
168 {
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
169 g_assert(IS_UI_LIST_MODEL(tree_model));
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
170 UiListModel *model = UI_LIST_MODEL(tree_model);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
171 UiList *list = model->list->list;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
172
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
173 // check the depth of the path
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
174 // a list must have a depth of 1
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
175 gint depth = gtk_tree_path_get_depth(path);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
176 g_assert(depth == 1);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
177
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
178 // get row
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
179 gint *indices = gtk_tree_path_get_indices(path);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
180 gint row = indices[0];
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
181
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
182 // check row
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
183 if(row == 0) {
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
184 // we don't need to count if the first element is requested
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
185 if(list->first(list) == NULL) {
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
186 return FALSE;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
187 }
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
188 } else if(row >= list->count(list)) {
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
189 return FALSE;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
190 }
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
191
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
192 // the UiList has an integrated iterator
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
193 // we only get a value to adjust it
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
194 void *val = NULL;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
195 if(row == 0) {
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
196 val = list->first(list);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
197 } else {
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
198 val = list->get(list, row);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
199 }
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
200
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
201 iter->stamp = model->stamp;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
202 iter->user_data = list->iter;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
203 iter->user_data2 = (gpointer)(intptr_t)row; // list->index
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
204 iter->user_data3 = val;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
205
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
206 return val ? TRUE : FALSE;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
207 }
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
208
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
209 GtkTreePath* ui_list_model_get_path(
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
210 GtkTreeModel *tree_model,
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
211 GtkTreeIter *iter)
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
212 {
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
213 g_return_val_if_fail(IS_UI_LIST_MODEL(tree_model), NULL);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
214 g_return_val_if_fail(iter != NULL, NULL);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
215 g_return_val_if_fail(iter->user_data != NULL, NULL);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
216
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
217 UiListModel *model = UI_LIST_MODEL(tree_model);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
218 UiList *list = model->list->list;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
219
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
220 GtkTreePath *path = gtk_tree_path_new();
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
221 gtk_tree_path_append_index(path, (int)(intptr_t)iter->user_data2); // list->index
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
222
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
223 return path;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
224 }
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
225
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
226 void ui_list_model_get_value(
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
227 GtkTreeModel *tree_model,
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
228 GtkTreeIter *iter,
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
229 gint column,
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
230 GValue *value)
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
231 {
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
232 g_return_if_fail(IS_UI_LIST_MODEL(tree_model));
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
233 g_return_if_fail(iter != NULL);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
234 g_return_if_fail(iter->user_data != NULL);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
235
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
236 UiListModel *model = UI_LIST_MODEL(tree_model);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
237 UiList *list = model->list->list;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
238
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
239 g_return_if_fail(column < model->numcolumns);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
240
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
241 // TODO: return correct value from column
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
242
40
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
243 //value->g_type = G_TYPE_STRING;
35
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
244 list->iter = iter->user_data;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
245 //list->index = (int)(intptr_t)iter->user_data2;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
246 //list->current = iter->user_data3;
40
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
247 if(model->info->getvalue) {
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
248 void *data = model->info->getvalue(iter->user_data3, column);
124
80609f9675f1 added support for icons for the table widget (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 42
diff changeset
249 ui_model_set_value(model->columntypes[column], data, value);
35
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
250 } else {
40
caa0df8ed095 added table view (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 35
diff changeset
251 value->g_type = G_TYPE_INVALID;
35
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
252 }
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
253 }
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
254
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
255 gboolean ui_list_model_iter_next(
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
256 GtkTreeModel *tree_model,
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
257 GtkTreeIter *iter)
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
258 {
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
259 g_return_val_if_fail(IS_UI_LIST_MODEL(tree_model), FALSE);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
260 g_return_val_if_fail(iter != NULL, FALSE);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
261 g_return_val_if_fail(iter->user_data != NULL, FALSE);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
262
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
263 UiListModel *model = UI_LIST_MODEL(tree_model);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
264 UiList *list = model->list->list;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
265 list->iter = iter->user_data;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
266 //list->index = (int)(intptr_t)iter->user_data2;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
267 void *val = list->next(list);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
268 iter->user_data = list->iter;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
269 intptr_t index = (intptr_t)iter->user_data2;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
270 index++;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
271 //iter->user_data2 = (gpointer)(intptr_t)list->index;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
272 iter->user_data2 = (gpointer)index;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
273 iter->user_data3 = val;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
274 return val ? TRUE : FALSE;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
275 }
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
276
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
277 gboolean ui_list_model_iter_children(
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
278 GtkTreeModel *tree_model,
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
279 GtkTreeIter *iter,
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
280 GtkTreeIter *parent)
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
281 {
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
282 g_return_val_if_fail(IS_UI_LIST_MODEL(tree_model), FALSE);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
283
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
284 UiListModel *model = UI_LIST_MODEL(tree_model);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
285 UiList *list = model->list->list;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
286
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
287 if(parent) {
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
288 return FALSE;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
289 }
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
290
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
291 /*
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
292 * a list element has no children
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
293 * we set the iter to the first element
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
294 */
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
295 void *val = list->first(list);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
296 iter->stamp = model->stamp;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
297 iter->user_data = list->iter;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
298 iter->user_data2 = (gpointer)0;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
299 iter->user_data3 = val;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
300
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
301 return val ? TRUE : FALSE;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
302 }
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
303
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
304 gboolean ui_list_model_iter_has_child(
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
305 GtkTreeModel *tree_model,
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
306 GtkTreeIter *iter)
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
307 {
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
308 return FALSE;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
309 }
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
310
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
311 gint ui_list_model_iter_n_children(
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
312 GtkTreeModel *tree_model,
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
313 GtkTreeIter *iter)
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
314 {
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
315 g_assert(IS_UI_LIST_MODEL(tree_model));
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
316
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
317 if(!iter) {
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
318 // return number of rows
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
319 UiListModel *model = UI_LIST_MODEL(tree_model);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
320 UiList *list = model->list->list;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
321 return list->count(list);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
322 }
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
323
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
324 return 0;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
325 }
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
326
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
327 gboolean ui_list_model_iter_nth_child(
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
328 GtkTreeModel *tree_model,
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
329 GtkTreeIter *iter,
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
330 GtkTreeIter *parent,
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
331 gint n)
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
332 {
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
333 g_return_val_if_fail(IS_UI_LIST_MODEL(tree_model), FALSE);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
334
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
335 if(parent) {
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
336 return FALSE;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
337 }
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
338
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
339 UiListModel *model = UI_LIST_MODEL(tree_model);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
340 UiList *list = model->list->list;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
341
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
342 // check n
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
343 if(n == 0) {
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
344 // we don't need to count if the first element is requested
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
345 if(list->first(list) == NULL) {
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
346 return FALSE;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
347 }
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
348 } else if(n >= list->count(list)) {
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
349 return FALSE;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
350 }
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
351
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
352 void *val = list->get(list, n);
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
353 iter->stamp = model->stamp;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
354 iter->user_data = list->iter;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
355 iter->user_data2 = (gpointer)(intptr_t)n; // list->index
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
356 iter->user_data3 = val;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
357
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
358 return val ? TRUE : FALSE;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
359 }
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
360
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
361 gboolean ui_list_model_iter_parent(
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
362 GtkTreeModel *tree_model,
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
363 GtkTreeIter *iter,
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
364 GtkTreeIter *child)
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
365 {
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
366 return FALSE;
3e8b5c9b4033 some fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
367 }

mercurial