diff --git a/pw3270.cbp b/pw3270.cbp index 54fc1aa..58974a9 100644 --- a/pw3270.cbp +++ b/pw3270.cbp @@ -166,6 +166,9 @@ + + diff --git a/src/include/pw3270/application.h b/src/include/pw3270/application.h index 0fdecd3..1c7e0d6 100644 --- a/src/include/pw3270/application.h +++ b/src/include/pw3270/application.h @@ -88,6 +88,10 @@ void pw3270_application_print_copy_activated(GAction *action, GVariant *parameter, GtkWidget *terminal); void pw3270_application_save_copy_activated(GAction *action, GVariant *parameter, GtkWidget *terminal); + // Settings + GtkWidget * pw3270_header_settings_new(); + + G_END_DECLS diff --git a/src/objects/application/actions/preferences.c b/src/objects/application/actions/preferences.c index 556d5a0..f094f56 100644 --- a/src/objects/application/actions/preferences.c +++ b/src/objects/application/actions/preferences.c @@ -34,9 +34,6 @@ #include #include - -// gtk_window_set_title(GTK_WINDOW(dialog),action->label); - static GtkWidget * factory(PW3270Action * action, GtkApplication *application) { size_t ix; @@ -48,7 +45,8 @@ gtk_window_set_transient_for(GTK_WINDOW(dialog),window); GtkWidget * pages[] = { - pw3270_toolbar_settings_new() + pw3270_toolbar_settings_new(), + pw3270_header_settings_new() }; for(ix = 0; ix < G_N_ELEMENTS(pages); ix++) { diff --git a/src/objects/settings/dialog.c b/src/objects/settings/dialog.c index 5ac13d8..a5d5db1 100644 --- a/src/objects/settings/dialog.c +++ b/src/objects/settings/dialog.c @@ -219,12 +219,7 @@ void switch_page(GtkNotebook *notebook, PW3270Settings *page, guint G_GNUC_UNUSE gtk_header_bar_set_subtitle(GTK_HEADER_BAR(header_bar),page->title); } - } else if(page->title) { - - gtk_window_set_title(GTK_WINDOW(dialog),page->title); - } - } diff --git a/src/objects/window/actions/sessionproperties.c b/src/objects/window/actions/sessionproperties.c index 8aaab87..9b90f4d 100644 --- a/src/objects/window/actions/sessionproperties.c +++ b/src/objects/window/actions/sessionproperties.c @@ -53,7 +53,6 @@ size_t ix; GtkWidget * dialog = v3270_settings_dialog_new(); - gtk_window_set_title(GTK_WINDOW(dialog), action->label); // Add settings pages. diff --git a/src/objects/window/header-settings.c b/src/objects/window/header-settings.c new file mode 100644 index 0000000..dc74b62 --- /dev/null +++ b/src/objects/window/header-settings.c @@ -0,0 +1,239 @@ +/* + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a + * aplicativos mainframe. Registro no INPI sob o nome G3270. + * + * Copyright (C) <2008> + * + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela + * Free Software Foundation. + * + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para + * obter mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin + * St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Este programa está nomeado como - e possui - linhas de código. + * + * Contatos: + * + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) + * + */ + + #include "private.h" + #include + #include + #include + #include + #include + + static void load(GtkWidget *widget, PW3270SettingsPrivate *settings); + static void apply(GtkWidget *widget, PW3270SettingsPrivate *settings); + +/*--[ Constants ]------------------------------------------------------------------------------------*/ + + struct _PW3270SettingsPrivate { + GtkWidget * views[3]; + GtkTreeModel * model; + }; + + static const struct _views { + const char * label; + gint left; + gint top; + gint height; + } views[] = { + { + .label = N_("Left"), + .left = 0, + .top = 0, + .height = 4 + }, + { + .label = N_("Right"), + .left = 0, + .top = 6, + .height = 4 + }, + { + .label = N_("Available"), + .left = 2, + .top = 0, + .height = 10 + } + }; + + /*--[ Implement ]------------------------------------------------------------------------------------*/ + + static void selection_changed(GtkTreeSelection *selection, GtkWidget *button) { + gtk_widget_set_sensitive(button,gtk_tree_selection_count_selected_rows(selection) > 0); + } + + GtkWidget * pw3270_header_settings_new() { + + size_t ix; + + // Create page widget. + PW3270Settings * settings = pw3270_settings_new(); + settings->label = _("Title bar"); + settings->title = _("Setup title bar icons"); + settings->apply = apply; + settings->load = load; + + // Create private data. + PW3270SettingsPrivate * page = settings->settings = g_new0(PW3270SettingsPrivate,1); + + // Create dialog grid + GtkGrid * grid = GTK_GRID(gtk_grid_new()); + gtk_grid_set_row_homogeneous(grid,FALSE); + + gtk_grid_attach( + GTK_GRID(settings), + v3270_dialog_section_new(_("Itens"), _("Select the title bar itens"), GTK_WIDGET(grid)), + 0,0,4,3 + ); + + // + // Create views + // + { + GtkTreeSelection * selection; + + for(ix = 0; ix < G_N_ELEMENTS(page->views); ix++) { + + GtkWidget * label = gtk_label_new(gettext(views[ix].label)); + gtk_label_set_xalign(GTK_LABEL(label),0); + + gtk_grid_attach( + grid, + label, + views[ix].left, + views[ix].top, + 1,1 + ); + + page->views[ix] = pw3270_action_view_new(); + + selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(page->views[ix])); + gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE); + + GtkWidget * box = gtk_scrolled_window_new(NULL,NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(box),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); + gtk_container_add(GTK_CONTAINER(box),page->views[ix]); + + gtk_grid_attach( + grid, + box, + views[ix].left, + views[ix].top+1, + 1, + views[ix].height + ); + + } + + gtk_tree_view_set_reorderable(GTK_TREE_VIEW(page->views[0]),TRUE); + gtk_tree_view_set_reorderable(GTK_TREE_VIEW(page->views[1]),TRUE); + 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); + + } + + // Create buttons + { + static const gchar * icon_names[] = { + "go-next", + "go-previous", + "go-next", + "go-previous" + }; + + GtkWidget *buttons[G_N_ELEMENTS(icon_names)]; + + for(ix = 0; ix < G_N_ELEMENTS(icon_names); ix++) { + buttons[ix] = gtk_button_new_from_icon_name(icon_names[ix],GTK_ICON_SIZE_DND); + + gtk_widget_set_focus_on_click(buttons[ix],FALSE); + gtk_button_set_relief(GTK_BUTTON(buttons[ix]),GTK_RELIEF_NONE); + gtk_widget_set_sensitive(buttons[ix],FALSE); + + } + + g_signal_connect( + gtk_tree_view_get_selection(GTK_TREE_VIEW(page->views[0])), + "changed", + G_CALLBACK(selection_changed), + buttons[0] + ); + + g_signal_connect( + gtk_tree_view_get_selection(GTK_TREE_VIEW(page->views[1])), + "changed", + G_CALLBACK(selection_changed), + buttons[2] + ); + + g_signal_connect( + gtk_tree_view_get_selection(GTK_TREE_VIEW(page->views[2])), + "changed", + G_CALLBACK(selection_changed), + buttons[1] + ); + + g_signal_connect( + gtk_tree_view_get_selection(GTK_TREE_VIEW(page->views[2])), + "changed", + G_CALLBACK(selection_changed), + buttons[3] + ); + + + for(ix = 0; ix < 2; ix++) { + GtkWidget * box = gtk_button_box_new(GTK_ORIENTATION_VERTICAL); + gtk_widget_set_hexpand(box,FALSE); + gtk_widget_set_vexpand(box,FALSE); + + gtk_box_pack_start(GTK_BOX(box),buttons[ix*2],FALSE,FALSE,0); + gtk_box_pack_end(GTK_BOX(box),buttons[(ix*2)+1],FALSE,FALSE,0); + + gtk_grid_attach( + grid, + box, + views[ix].left+1, + views[ix].top+2, + 1, + 2 + ); + + + } + + } + + + gtk_widget_show_all(GTK_WIDGET(settings)); + return GTK_WIDGET(settings); + } + + void load(GtkWidget *widget, PW3270SettingsPrivate *page) { + + // Populate views + Pw3270ActionList * action_list = pw3270_action_list_new(GTK_APPLICATION(g_application_get_default())); + + pw3270_action_view_set_actions(page->views[0], action_list); + pw3270_action_view_set_actions(page->views[1], action_list); + pw3270_action_view_set_actions(page->views[2], action_list); + + pw3270_action_list_free(action_list); + + } + + void apply(GtkWidget *widget, PW3270SettingsPrivate *settings) { + } + -- libgit2 0.21.2