Commit a2973972ef7ccdab3e438350cb85507d11e8d695

Authored by Perry Werneck
1 parent ac8313da
Exists in master and in 1 other branch develop

Implementing save dialog.

Showing 1 changed file with 42 additions and 13 deletions   Show diff stats
src/dialogs/save/save.c
@@ -27,6 +27,7 @@ @@ -27,6 +27,7 @@
27 * 27 *
28 */ 28 */
29 29
  30 +
30 #include "private.h" 31 #include "private.h"
31 #include <limits.h> 32 #include <limits.h>
32 33
@@ -51,13 +52,26 @@ @@ -51,13 +52,26 @@
51 52
52 } 53 }
53 54
  55 + static void cancel_operation(GtkButton G_GNUC_UNUSED(*button), GtkDialog *dialog)
  56 + {
  57 + gtk_dialog_response(dialog,GTK_RESPONSE_CANCEL);
  58 + }
  59 +
  60 + static void apply_operation(GtkButton G_GNUC_UNUSED(*button), GtkDialog *dialog)
  61 + {
  62 + gtk_dialog_response(dialog,GTK_RESPONSE_APPLY);
  63 + }
  64 +
54 static void V3270SaveDialog_init(V3270SaveDialog *dialog) 65 static void V3270SaveDialog_init(V3270SaveDialog *dialog)
55 { 66 {
56 dialog->mode = LIB3270_CONTENT_ALL; 67 dialog->mode = LIB3270_CONTENT_ALL;
57 68
  69 + gtk_window_set_deletable(GTK_WINDOW(dialog),FALSE);
  70 +
58 // Setup visual elements 71 // Setup visual elements
59 // https://developer.gnome.org/hig/stable/visual-layout.html.en 72 // https://developer.gnome.org/hig/stable/visual-layout.html.en
60 GtkWidget *widget; 73 GtkWidget *widget;
  74 + GtkWidget *button;
61 75
62 GtkBox * box = GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))); 76 GtkBox * box = GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog)));
63 gtk_window_set_resizable(GTK_WINDOW(dialog),FALSE); 77 gtk_window_set_resizable(GTK_WINDOW(dialog),FALSE);
@@ -68,7 +82,7 @@ @@ -68,7 +82,7 @@
68 gtk_grid_set_column_spacing(GTK_GRID(grid),12); 82 gtk_grid_set_column_spacing(GTK_GRID(grid),12);
69 gtk_box_pack_start(box,GTK_WIDGET(grid),TRUE,TRUE,2); 83 gtk_box_pack_start(box,GTK_WIDGET(grid),TRUE,TRUE,2);
70 84
71 - dialog->filename = GTK_ENTRY(gtk_entry_new()); 85 + dialog->filename = gtk_entry_new();
72 gtk_widget_set_hexpand(GTK_WIDGET(dialog->filename),TRUE); 86 gtk_widget_set_hexpand(GTK_WIDGET(dialog->filename),TRUE);
73 87
74 widget = gtk_label_new_with_mnemonic("_Filename:"); 88 widget = gtk_label_new_with_mnemonic("_Filename:");
@@ -82,22 +96,43 @@ @@ -82,22 +96,43 @@
82 //g_signal_connect(G_OBJECT(widget),"clicked",G_CALLBACK(select_local_file),dialog); 96 //g_signal_connect(G_OBJECT(widget),"clicked",G_CALLBACK(select_local_file),dialog);
83 gtk_grid_attach(grid,widget,2,0,1,1); 97 gtk_grid_attach(grid,widget,2,0,1,1);
84 #else 98 #else
85 - gtk_entry_set_icon_from_icon_name(dialog->filename,GTK_ENTRY_ICON_SECONDARY,"document-open");  
86 - gtk_entry_set_icon_activatable(dialog->filename,GTK_ENTRY_ICON_SECONDARY,TRUE);  
87 - gtk_entry_set_icon_tooltip_text(dialog->filename,GTK_ENTRY_ICON_SECONDARY,_("Select file")); 99 + gtk_entry_set_icon_from_icon_name(GTK_ENTRY(dialog->filename),GTK_ENTRY_ICON_SECONDARY,"document-open");
  100 + gtk_entry_set_icon_activatable(GTK_ENTRY(dialog->filename),GTK_ENTRY_ICON_SECONDARY,TRUE);
  101 + gtk_entry_set_icon_tooltip_text(GTK_ENTRY(dialog->filename),GTK_ENTRY_ICON_SECONDARY,_("Select file"));
88 // g_signal_connect(G_OBJECT(dialog->filename),"icon-press",G_CALLBACK(icon_press),dialog); 102 // g_signal_connect(G_OBJECT(dialog->filename),"icon-press",G_CALLBACK(icon_press),dialog);
89 #endif // WIN32 103 #endif // WIN32
90 104
91 - gtk_entry_set_width_chars(dialog->filename,60);  
92 - gtk_entry_set_max_length(dialog->filename,PATH_MAX); 105 + gtk_entry_set_width_chars(GTK_ENTRY(dialog->filename),60);
  106 + gtk_entry_set_max_length(GTK_ENTRY(dialog->filename),PATH_MAX);
93 gtk_grid_attach(grid,GTK_WIDGET(dialog->filename),1,0,1,1); 107 gtk_grid_attach(grid,GTK_WIDGET(dialog->filename),1,0,1,1);
94 108
  109 + // Buttons
  110 + // https://developer.gnome.org/icon-naming-spec/
  111 +#if GTK_CHECK_VERSION(3,14,0)
  112 +
  113 + widget = gtk_dialog_get_header_bar(GTK_DIALOG(dialog));
  114 +
  115 + button = gtk_button_new_with_mnemonic(_("_Cancel"));
  116 + gtk_widget_set_tooltip_markup(button,_("Click to cancel operation"));
  117 + gtk_header_bar_pack_start(GTK_HEADER_BAR(widget),button);
  118 + g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(cancel_operation),dialog);
  119 +
  120 + button = gtk_button_new_with_mnemonic(_("_Save"));
  121 + gtk_widget_set_tooltip_markup(button,_("Click to save file"));
  122 + gtk_header_bar_pack_end(GTK_HEADER_BAR(widget),button);
  123 + g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(apply_operation),dialog);
  124 +
  125 +#else
  126 +
  127 + #error TODO!
  128 +
  129 +#endif // GTK(3,14,0)
95 130
96 } 131 }
97 132
98 GtkWidget * v3270_save_dialog_new(GtkWidget *widget, LIB3270_CONTENT_OPTION mode, const gchar *filename) 133 GtkWidget * v3270_save_dialog_new(GtkWidget *widget, LIB3270_CONTENT_OPTION mode, const gchar *filename)
99 { 134 {
100 - V3270SaveDialog * dialog = V3270_SAVE_DIALOG(g_object_new(GTK_TYPE_V3270SaveDialog, NULL)); 135 + V3270SaveDialog * dialog = V3270_SAVE_DIALOG(g_object_new(GTK_TYPE_V3270SaveDialog,"use-header-bar", (gint) 1, NULL));
101 dialog->mode = mode; 136 dialog->mode = mode;
102 137
103 if(filename) 138 if(filename)
@@ -107,12 +142,6 @@ @@ -107,12 +142,6 @@
107 gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); 142 gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
108 gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE); 143 gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE);
109 144
110 - // https://developer.gnome.org/hig/stable/visual-layout.html.en  
111 - GtkGrid * grid = GTK_GRID(gtk_grid_new());  
112 - gtk_grid_set_row_spacing(GTK_GRID(grid),6);  
113 - gtk_grid_set_column_spacing(GTK_GRID(grid),12);  
114 -  
115 -  
116 return GTK_WIDGET(dialog); 145 return GTK_WIDGET(dialog);
117 } 146 }
118 147