Commit a83ae34f20cb8ff53b4b1f0b0d6d6298ccf5a47c
1 parent
84c61cc4
Exists in
master
and in
4 other branches
Implementing action list editor.
Showing
1 changed file
with
50 additions
and
9 deletions
Show diff stats
src/objects/actions/view.c
... | ... | @@ -40,7 +40,8 @@ |
40 | 40 | enum { |
41 | 41 | COLUMN_PIXBUF, |
42 | 42 | COLUMN_LABEL, |
43 | - COLUMN_ACTION_NAME | |
43 | + COLUMN_ACTION_NAME, | |
44 | + COLUMN_FLAGS | |
44 | 45 | }; |
45 | 46 | |
46 | 47 | struct ListElement { |
... | ... | @@ -70,7 +71,7 @@ |
70 | 71 | |
71 | 72 | GtkWidget * pw3270_action_view_new() { |
72 | 73 | |
73 | - GtkTreeModel * model = GTK_TREE_MODEL(gtk_list_store_new(3,G_TYPE_OBJECT,G_TYPE_STRING,G_TYPE_STRING)); | |
74 | + GtkTreeModel * model = GTK_TREE_MODEL(gtk_list_store_new(4,G_TYPE_OBJECT,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_INT)); | |
74 | 75 | GtkWidget * view = GTK_WIDGET(gtk_tree_view_new_with_model(model)); |
75 | 76 | |
76 | 77 | gtk_widget_set_hexpand(view,TRUE); |
... | ... | @@ -151,6 +152,7 @@ |
151 | 152 | &iter, |
152 | 153 | COLUMN_PIXBUF, element->pixbuf, |
153 | 154 | COLUMN_LABEL, (label ? label : g_action_get_name(element->action)), |
155 | + COLUMN_FLAGS, 3, | |
154 | 156 | -1 |
155 | 157 | ); |
156 | 158 | |
... | ... | @@ -307,18 +309,57 @@ |
307 | 309 | GtkTreePath * path = gtk_tree_row_reference_get_path(rows[ix]); |
308 | 310 | |
309 | 311 | if(path) { |
310 | - GtkTreeIter iter; | |
312 | + GtkTreeIter iter; | |
311 | 313 | |
312 | - // Add on target widget. | |
314 | + if (gtk_tree_model_get_iter(GTK_TREE_MODEL(fromModel), &iter, path)) { | |
313 | 315 | |
316 | + GValue vFlags = G_VALUE_INIT; | |
317 | + gtk_tree_model_get_value(fromModel,&iter,COLUMN_FLAGS,&vFlags); | |
318 | + gint flags = g_value_get_int(&vFlags); | |
319 | + g_value_unset(&vFlags); | |
314 | 320 | |
315 | - // Remove from source widget. | |
316 | - if (gtk_tree_model_get_iter(GTK_TREE_MODEL(fromModel), &iter, path)) { | |
317 | - gtk_list_store_remove(GTK_LIST_STORE(fromModel), &iter); | |
318 | - } | |
321 | + if(flags & 1) { | |
319 | 322 | |
320 | - } | |
323 | + // Add on target widget. | |
324 | + GValue pixbuf = G_VALUE_INIT; | |
325 | + GValue label = G_VALUE_INIT; | |
326 | + GValue action_name = G_VALUE_INIT; | |
327 | + | |
328 | + gtk_tree_model_get_value(fromModel,&iter,COLUMN_PIXBUF,&pixbuf); | |
329 | + gtk_tree_model_get_value(fromModel,&iter,COLUMN_LABEL,&label); | |
330 | + gtk_tree_model_get_value(fromModel,&iter,COLUMN_ACTION_NAME,&action_name); | |
331 | + | |
332 | + GtkListStore * store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(to))); | |
333 | + | |
334 | + GtkTreeIter ins; | |
335 | + gtk_list_store_append(store, &ins); | |
336 | + gtk_list_store_set( | |
337 | + store, | |
338 | + &ins, | |
339 | + COLUMN_PIXBUF, g_value_get_object(&pixbuf), | |
340 | + COLUMN_LABEL, g_value_get_string(&label), | |
341 | + COLUMN_ACTION_NAME, g_value_get_string(&action_name), | |
342 | + COLUMN_FLAGS, (flags == 3 ? 3 : 2), | |
343 | + -1 | |
344 | + ); | |
345 | + | |
346 | + g_value_unset(&pixbuf); | |
347 | + g_value_unset(&label); | |
348 | + g_value_unset(&action_name); | |
349 | + | |
350 | + } | |
351 | + | |
352 | + if(flags & 2) { | |
321 | 353 | |
354 | + // Remove from source widget. | |
355 | + gtk_list_store_remove(GTK_LIST_STORE(fromModel), &iter); | |
356 | + | |
357 | + } | |
358 | + | |
359 | + | |
360 | + } | |
361 | + | |
362 | + } | |
322 | 363 | |
323 | 364 | } |
324 | 365 | ... | ... |