Commit a83ae34f20cb8ff53b4b1f0b0d6d6298ccf5a47c

Authored by Perry Werneck
1 parent 84c61cc4

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