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,7 +40,8 @@ | ||
40 | enum { | 40 | enum { |
41 | COLUMN_PIXBUF, | 41 | COLUMN_PIXBUF, |
42 | COLUMN_LABEL, | 42 | COLUMN_LABEL, |
43 | - COLUMN_ACTION_NAME | 43 | + COLUMN_ACTION_NAME, |
44 | + COLUMN_FLAGS | ||
44 | }; | 45 | }; |
45 | 46 | ||
46 | struct ListElement { | 47 | struct ListElement { |
@@ -70,7 +71,7 @@ | @@ -70,7 +71,7 @@ | ||
70 | 71 | ||
71 | GtkWidget * pw3270_action_view_new() { | 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 | GtkWidget * view = GTK_WIDGET(gtk_tree_view_new_with_model(model)); | 75 | GtkWidget * view = GTK_WIDGET(gtk_tree_view_new_with_model(model)); |
75 | 76 | ||
76 | gtk_widget_set_hexpand(view,TRUE); | 77 | gtk_widget_set_hexpand(view,TRUE); |
@@ -151,6 +152,7 @@ | @@ -151,6 +152,7 @@ | ||
151 | &iter, | 152 | &iter, |
152 | COLUMN_PIXBUF, element->pixbuf, | 153 | COLUMN_PIXBUF, element->pixbuf, |
153 | COLUMN_LABEL, (label ? label : g_action_get_name(element->action)), | 154 | COLUMN_LABEL, (label ? label : g_action_get_name(element->action)), |
155 | + COLUMN_FLAGS, 3, | ||
154 | -1 | 156 | -1 |
155 | ); | 157 | ); |
156 | 158 | ||
@@ -307,18 +309,57 @@ | @@ -307,18 +309,57 @@ | ||
307 | GtkTreePath * path = gtk_tree_row_reference_get_path(rows[ix]); | 309 | GtkTreePath * path = gtk_tree_row_reference_get_path(rows[ix]); |
308 | 310 | ||
309 | if(path) { | 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 |