Commit b0c918c602767ad95ee02cf6a4233e3099220c11

Authored by Perry Werneck
1 parent c6991dd1

Implementing add/remove from header bar blocks.

src/objects/actions/view.c
@@ -411,8 +411,31 @@ @@ -411,8 +411,31 @@
411 return g_string_free(str,FALSE); 411 return g_string_free(str,FALSE);
412 } 412 }
413 413
  414 + static void check_4_sensitive(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gboolean *sensitive) {
  415 +
  416 + GValue value = { 0, };
  417 + gtk_tree_model_get_value(model,iter,COLUMN_FLAGS,&value);
  418 +
  419 + if(!(g_value_get_int(&value) & PW3270_ACTION_VIEW_FLAG_ALLOW_ADD))
  420 + *sensitive = FALSE;
  421 +
  422 + g_value_unset(&value);
  423 +
  424 + }
  425 +
414 static void selection_changed(GtkTreeSelection *selection, GtkWidget *button) { 426 static void selection_changed(GtkTreeSelection *selection, GtkWidget *button) {
415 - gtk_widget_set_sensitive(button,gtk_tree_selection_count_selected_rows(selection) > 0); 427 +
  428 + if(!gtk_tree_selection_count_selected_rows(selection)) {
  429 + gtk_widget_set_sensitive(button,FALSE);
  430 + return;
  431 + }
  432 +
  433 + gboolean sensitive = TRUE;
  434 +
  435 + // Scan selected rows
  436 + gtk_tree_selection_selected_foreach(selection,(GtkTreeSelectionForeachFunc) check_4_sensitive,&sensitive);
  437 + gtk_widget_set_sensitive(button,sensitive);
  438 +
416 } 439 }
417 440
418 GtkWidget * pw3270_action_view_extract_button_new(GtkWidget *widget, const gchar *icon_name) { 441 GtkWidget * pw3270_action_view_extract_button_new(GtkWidget *widget, const gchar *icon_name) {
src/objects/toolbar/settings.c
@@ -146,30 +146,12 @@ @@ -146,30 +146,12 @@
146 gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(gtk_tree_view_get_model(GTK_TREE_VIEW(page->views[1]))), GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID, GTK_SORT_ASCENDING); 146 gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(gtk_tree_view_get_model(GTK_TREE_VIEW(page->views[1]))), GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID, GTK_SORT_ASCENDING);
147 147
148 // Create buttons 148 // Create buttons
149 - static const gchar * icon_names[G_N_ELEMENTS(page->buttons)] = {  
150 - "go-next",  
151 - "go-previous"  
152 - };  
153 -  
154 GtkWidget * box = gtk_button_box_new(GTK_ORIENTATION_VERTICAL); 149 GtkWidget * box = gtk_button_box_new(GTK_ORIENTATION_VERTICAL);
155 gtk_widget_set_hexpand(box,FALSE); 150 gtk_widget_set_hexpand(box,FALSE);
156 gtk_widget_set_vexpand(box,FALSE); 151 gtk_widget_set_vexpand(box,FALSE);
157 152
158 - for(ix = 0; ix < G_N_ELEMENTS(icon_names); ix++) {  
159 - page->buttons[ix] = gtk_button_new_from_icon_name(icon_names[ix],GTK_ICON_SIZE_DND);  
160 -  
161 - gtk_widget_set_focus_on_click(page->buttons[ix],FALSE);  
162 - gtk_button_set_relief(GTK_BUTTON(page->buttons[ix]),GTK_RELIEF_NONE);  
163 - gtk_widget_set_sensitive(page->buttons[ix],FALSE);  
164 -  
165 - g_signal_connect(  
166 - gtk_tree_view_get_selection(GTK_TREE_VIEW(page->views[ix])),  
167 - "changed",  
168 - G_CALLBACK(selection_changed),  
169 - page->buttons[ix]  
170 - );  
171 -  
172 - } 153 + page->buttons[0] = pw3270_action_view_extract_button_new(page->views[0],"go-next"),
  154 + page->buttons[1] = pw3270_action_view_extract_button_new(page->views[1],"go-previous"),
173 155
174 gtk_box_pack_start(GTK_BOX(box),page->buttons[0],FALSE,FALSE,0); 156 gtk_box_pack_start(GTK_BOX(box),page->buttons[0],FALSE,FALSE,0);
175 gtk_box_pack_end(GTK_BOX(box),page->buttons[1],FALSE,FALSE,0); 157 gtk_box_pack_end(GTK_BOX(box),page->buttons[1],FALSE,FALSE,0);
src/objects/window/header-settings.c
@@ -72,6 +72,26 @@ @@ -72,6 +72,26 @@
72 72
73 /*--[ Implement ]------------------------------------------------------------------------------------*/ 73 /*--[ Implement ]------------------------------------------------------------------------------------*/
74 74
  75 + static void remove_from_left(GtkButton G_GNUC_UNUSED(*button), PW3270SettingsPrivate *settings) {
  76 + debug("%s(%p)",__FUNCTION__,settings);
  77 + pw3270_action_view_move_selected(settings->views[0],settings->views[2]);
  78 + }
  79 +
  80 + static void add_to_left(GtkButton G_GNUC_UNUSED(*button), PW3270SettingsPrivate *settings) {
  81 + debug("%s(%p)",__FUNCTION__,settings);
  82 + pw3270_action_view_move_selected(settings->views[2],settings->views[0]);
  83 + }
  84 +
  85 + static void remove_from_right(GtkButton G_GNUC_UNUSED(*button), PW3270SettingsPrivate *settings) {
  86 + debug("%s(%p)",__FUNCTION__,settings);
  87 + pw3270_action_view_move_selected(settings->views[1],settings->views[2]);
  88 + }
  89 +
  90 + static void add_to_right(GtkButton G_GNUC_UNUSED(*button), PW3270SettingsPrivate *settings) {
  91 + debug("%s(%p)",__FUNCTION__,settings);
  92 + pw3270_action_view_move_selected(settings->views[2],settings->views[1]);
  93 + }
  94 +
75 GtkWidget * pw3270_header_settings_new() { 95 GtkWidget * pw3270_header_settings_new() {
76 96
77 size_t ix; 97 size_t ix;
@@ -152,6 +172,35 @@ @@ -152,6 +172,35 @@
152 pw3270_action_view_extract_button_new(page->views[2],"go-previous") 172 pw3270_action_view_extract_button_new(page->views[2],"go-previous")
153 }; 173 };
154 174
  175 + g_signal_connect(
  176 + buttons[0],
  177 + "clicked",
  178 + G_CALLBACK(remove_from_left),
  179 + page
  180 + );
  181 +
  182 + g_signal_connect(
  183 + buttons[1],
  184 + "clicked",
  185 + G_CALLBACK(add_to_left),
  186 + page
  187 + );
  188 +
  189 + g_signal_connect(
  190 + buttons[2],
  191 + "clicked",
  192 + G_CALLBACK(remove_from_right),
  193 + page
  194 + );
  195 +
  196 + g_signal_connect(
  197 + buttons[3],
  198 + "clicked",
  199 + G_CALLBACK(add_to_right),
  200 + page
  201 + );
  202 +
  203 +
155 for(ix = 0; ix < 2; ix++) { 204 for(ix = 0; ix < 2; ix++) {
156 GtkWidget * box = gtk_button_box_new(GTK_ORIENTATION_VERTICAL); 205 GtkWidget * box = gtk_button_box_new(GTK_ORIENTATION_VERTICAL);
157 gtk_widget_set_hexpand(box,FALSE); 206 gtk_widget_set_hexpand(box,FALSE);