Hallo,
Ik ben een map-builder aan het maken voor een klein strategy spel wat ik maak in C++.
Ik probeer dus een boom bouwen met GTK, hierin heb je dus hoofdcategorien (zoals gebouwen, terrein, dieren) waar een pijltje voor staat en zodra je er op klikt er een lijst te voorschijn komt waar je een item uit kan selecteren. Nu lees ik deze tutorial:
http://scentric.net/tutorial/
En ben ik in de war met GtkCellRenderer en GtkTreeViewColumn, met de volgende code lukt het me niet om een item te selecteren in de boom:
Hoe komt dit? Waarom lukt dit niet? Wat moet ik doen waardoor ik wel een item in de lijst kan selecteren?
Ik zie wel in de tutorial staan hoe je moet controleren of een item geselecteerd is maar ik kan niet vinden hoe je er voor moet zorgen dat een item geselecteerd kan worden.
Alvast bedankt,
Peter.
Ik ben een map-builder aan het maken voor een klein strategy spel wat ik maak in C++.
Ik probeer dus een boom bouwen met GTK, hierin heb je dus hoofdcategorien (zoals gebouwen, terrein, dieren) waar een pijltje voor staat en zodra je er op klikt er een lijst te voorschijn komt waar je een item uit kan selecteren. Nu lees ik deze tutorial:
http://scentric.net/tutorial/
En ben ik in de war met GtkCellRenderer en GtkTreeViewColumn, met de volgende code lukt het me niet om een item te selecteren in de boom:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
| /* * Compile with: * gcc -o helloworld helloworld.c `pkg-config --cflags --libs gtk+-2.0` * */ #include <gtk/gtk.h> enum { COL_NAME = 0, COL_AGE, NUM_COLS } ; static GtkTreeModel * create_and_fill_model (void) { GtkTreeStore *treestore; GtkTreeIter toplevel, child; treestore = gtk_tree_store_new(NUM_COLS, G_TYPE_STRING, G_TYPE_INT); /* Append a top level row and leave it empty */ gtk_tree_store_append(treestore, &toplevel, NULL); gtk_tree_store_set(treestore, &toplevel, COL_NAME, "Maria", COL_AGE, 25, -1); /* Append a second top level row, and fill it with some data */ gtk_tree_store_append(treestore, &toplevel, NULL); gtk_tree_store_set(treestore, &toplevel, COL_NAME, "Jane", COL_AGE, 4, -1); /* Append a child to the second top level row, and fill in some data */ gtk_tree_store_append(treestore, &child, &toplevel); gtk_tree_store_set(treestore, &child, COL_NAME, "Janinita", COL_AGE, 3, -1); return GTK_TREE_MODEL (treestore); } static GtkWidget * create_view_and_model (void) { GtkTreeViewColumn *col; GtkCellRenderer *renderer; GtkWidget *view; GtkTreeModel *model; view = gtk_tree_view_new(); /* Setup the selection handler */ GtkTreeSelection *select; /* --- Column #1 --- */ col = gtk_tree_view_column_new(); gtk_tree_view_column_set_title(col, "First Name"); /* pack tree view column into tree view */ gtk_tree_view_append_column(GTK_TREE_VIEW(view), col); renderer = gtk_cell_renderer_text_new(); /* pack cell renderer into tree view column */ gtk_tree_view_column_pack_start(col, renderer, TRUE); /* connect 'text' property of the cell renderer to * model column that contains the first name */ gtk_tree_view_column_add_attribute(col, renderer, "text", COL_NAME); /* --- Column #2 --- */ col = gtk_tree_view_column_new(); gtk_tree_view_column_set_title(col, "Last Name"); /* pack tree view column into tree view */ gtk_tree_view_append_column(GTK_TREE_VIEW(view), col); renderer = gtk_cell_renderer_text_new(); /* pack cell renderer into tree view column */ gtk_tree_view_column_pack_start(col, renderer, TRUE); /* connect 'text' property of the cell renderer to * model column that contains the last name */ gtk_tree_view_column_add_attribute(col, renderer, "text", COL_AGE); /* set 'weight' property of the cell renderer to * bold print (we want all last names in bold) */ g_object_set(renderer, "weight", PANGO_WEIGHT_BOLD, "weight-set", TRUE, NULL); model = create_and_fill_model(); gtk_tree_view_set_model(GTK_TREE_VIEW(view), model); g_object_unref(model); /* destroy model automatically with view */ gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(view)), GTK_SELECTION_NONE); return view; } int main (int argc, char **argv) { GtkWidget *window; GtkWidget *view; gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); g_signal_connect (window, "delete_event", gtk_main_quit, NULL); /* dirty */ view = create_view_and_model (); gtk_container_add (GTK_CONTAINER (window), view); gtk_widget_show_all (window); gtk_main (); return 0; } |
Hoe komt dit? Waarom lukt dit niet? Wat moet ik doen waardoor ik wel een item in de lijst kan selecteren?
Ik zie wel in de tutorial staan hoe je moet controleren of een item geselecteerd is maar ik kan niet vinden hoe je er voor moet zorgen dat een item geselecteerd kan worden.
Alvast bedankt,
Peter.