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 | ... | ... |