From a2973972ef7ccdab3e438350cb85507d11e8d695 Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Fri, 26 Jul 2019 16:52:36 -0300 Subject: [PATCH] Implementing save dialog. --- src/dialogs/save/save.c | 55 ++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 42 insertions(+), 13 deletions(-) diff --git a/src/dialogs/save/save.c b/src/dialogs/save/save.c index 6a50b0a..953a6e1 100644 --- a/src/dialogs/save/save.c +++ b/src/dialogs/save/save.c @@ -27,6 +27,7 @@ * */ + #include "private.h" #include @@ -51,13 +52,26 @@ } + static void cancel_operation(GtkButton G_GNUC_UNUSED(*button), GtkDialog *dialog) + { + gtk_dialog_response(dialog,GTK_RESPONSE_CANCEL); + } + + static void apply_operation(GtkButton G_GNUC_UNUSED(*button), GtkDialog *dialog) + { + gtk_dialog_response(dialog,GTK_RESPONSE_APPLY); + } + static void V3270SaveDialog_init(V3270SaveDialog *dialog) { dialog->mode = LIB3270_CONTENT_ALL; + gtk_window_set_deletable(GTK_WINDOW(dialog),FALSE); + // Setup visual elements // https://developer.gnome.org/hig/stable/visual-layout.html.en GtkWidget *widget; + GtkWidget *button; GtkBox * box = GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))); gtk_window_set_resizable(GTK_WINDOW(dialog),FALSE); @@ -68,7 +82,7 @@ gtk_grid_set_column_spacing(GTK_GRID(grid),12); gtk_box_pack_start(box,GTK_WIDGET(grid),TRUE,TRUE,2); - dialog->filename = GTK_ENTRY(gtk_entry_new()); + dialog->filename = gtk_entry_new(); gtk_widget_set_hexpand(GTK_WIDGET(dialog->filename),TRUE); widget = gtk_label_new_with_mnemonic("_Filename:"); @@ -82,22 +96,43 @@ //g_signal_connect(G_OBJECT(widget),"clicked",G_CALLBACK(select_local_file),dialog); gtk_grid_attach(grid,widget,2,0,1,1); #else - gtk_entry_set_icon_from_icon_name(dialog->filename,GTK_ENTRY_ICON_SECONDARY,"document-open"); - gtk_entry_set_icon_activatable(dialog->filename,GTK_ENTRY_ICON_SECONDARY,TRUE); - gtk_entry_set_icon_tooltip_text(dialog->filename,GTK_ENTRY_ICON_SECONDARY,_("Select file")); + gtk_entry_set_icon_from_icon_name(GTK_ENTRY(dialog->filename),GTK_ENTRY_ICON_SECONDARY,"document-open"); + gtk_entry_set_icon_activatable(GTK_ENTRY(dialog->filename),GTK_ENTRY_ICON_SECONDARY,TRUE); + gtk_entry_set_icon_tooltip_text(GTK_ENTRY(dialog->filename),GTK_ENTRY_ICON_SECONDARY,_("Select file")); // g_signal_connect(G_OBJECT(dialog->filename),"icon-press",G_CALLBACK(icon_press),dialog); #endif // WIN32 - gtk_entry_set_width_chars(dialog->filename,60); - gtk_entry_set_max_length(dialog->filename,PATH_MAX); + gtk_entry_set_width_chars(GTK_ENTRY(dialog->filename),60); + gtk_entry_set_max_length(GTK_ENTRY(dialog->filename),PATH_MAX); gtk_grid_attach(grid,GTK_WIDGET(dialog->filename),1,0,1,1); + // Buttons + // https://developer.gnome.org/icon-naming-spec/ +#if GTK_CHECK_VERSION(3,14,0) + + widget = gtk_dialog_get_header_bar(GTK_DIALOG(dialog)); + + button = gtk_button_new_with_mnemonic(_("_Cancel")); + gtk_widget_set_tooltip_markup(button,_("Click to cancel operation")); + gtk_header_bar_pack_start(GTK_HEADER_BAR(widget),button); + g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(cancel_operation),dialog); + + button = gtk_button_new_with_mnemonic(_("_Save")); + gtk_widget_set_tooltip_markup(button,_("Click to save file")); + gtk_header_bar_pack_end(GTK_HEADER_BAR(widget),button); + g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(apply_operation),dialog); + +#else + + #error TODO! + +#endif // GTK(3,14,0) } GtkWidget * v3270_save_dialog_new(GtkWidget *widget, LIB3270_CONTENT_OPTION mode, const gchar *filename) { - V3270SaveDialog * dialog = V3270_SAVE_DIALOG(g_object_new(GTK_TYPE_V3270SaveDialog, NULL)); + V3270SaveDialog * dialog = V3270_SAVE_DIALOG(g_object_new(GTK_TYPE_V3270SaveDialog,"use-header-bar", (gint) 1, NULL)); dialog->mode = mode; if(filename) @@ -107,12 +142,6 @@ gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE); - // https://developer.gnome.org/hig/stable/visual-layout.html.en - GtkGrid * grid = GTK_GRID(gtk_grid_new()); - gtk_grid_set_row_spacing(GTK_GRID(grid),6); - gtk_grid_set_column_spacing(GTK_GRID(grid),12); - - return GTK_WIDGET(dialog); } -- libgit2 0.21.2