Commit 9bb3294a9b31e4a9772f88d21f579f2164a1c534

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

Color scheme widget is now a v3270_settings widget.

src/dialogs/colors.c
@@ -29,6 +29,8 @@ @@ -29,6 +29,8 @@
29 29
30 #include "private.h" 30 #include "private.h"
31 #include <v3270/colorscheme.h> 31 #include <v3270/colorscheme.h>
  32 + #include <v3270/settings.h>
  33 + #include <v3270/dialogs.h>
32 #include <lib3270/log.h> 34 #include <lib3270/log.h>
33 35
34 #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 36 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
@@ -37,15 +39,14 @@ @@ -37,15 +39,14 @@
37 39
38 struct _V3270ColorSelectionClass 40 struct _V3270ColorSelectionClass
39 { 41 {
40 - GtkGridClass parent_class; 42 + V3270SettingsClass parent_class;
41 43
42 }; 44 };
43 45
44 struct _V3270ColorSelection 46 struct _V3270ColorSelection
45 { 47 {
46 - GtkGrid parent; 48 + V3270Settings parent;
47 49
48 - GtkWidget * terminal;  
49 int selected; 50 int selected;
50 51
51 struct { 52 struct {
@@ -64,16 +65,10 @@ @@ -64,16 +65,10 @@
64 65
65 }; 66 };
66 67
67 - G_DEFINE_TYPE(V3270ColorSelection, V3270ColorSelection, GTK_TYPE_GRID); 68 + G_DEFINE_TYPE(V3270ColorSelection, V3270ColorSelection, GTK_TYPE_V3270_SETTINGS);
68 69
69 /*--[ Implement ]------------------------------------------------------------------------------------*/ 70 /*--[ Implement ]------------------------------------------------------------------------------------*/
70 71
71 - static void V3270ColorSelection_class_init(G_GNUC_UNUSED V3270ColorSelectionClass *klass)  
72 - {  
73 -  
74 -  
75 - }  
76 -  
77 static void update_color_chooser(V3270ColorSelection *widget, int id) 72 static void update_color_chooser(V3270ColorSelection *widget, int id)
78 { 73 {
79 widget->selected = id; 74 widget->selected = id;
@@ -88,7 +83,7 @@ @@ -88,7 +83,7 @@
88 return; 83 return;
89 } 84 }
90 85
91 - GdkRGBA * clr = v3270_get_color(widget->terminal,id); 86 + GdkRGBA * clr = v3270_get_color(GTK_V3270_SETTINGS(widget)->terminal,id);
92 87
93 #if USE_GTK_COLOR_CHOOSER 88 #if USE_GTK_COLOR_CHOOSER
94 { 89 {
@@ -111,39 +106,135 @@ @@ -111,39 +106,135 @@
111 gtk_widget_set_sensitive(widget->colors.editor,TRUE); 106 gtk_widget_set_sensitive(widget->colors.editor,TRUE);
112 #endif // GTK_CHECK_VERSION 107 #endif // GTK_CHECK_VERSION
113 108
114 - } 109 +}
115 110
116 - static void color_scheme_changed(GtkWidget G_GNUC_UNUSED(*dunno), const GdkRGBA *colors, V3270ColorSelection *widget) { 111 +static void cancel(GtkWidget *widget, GtkWidget *terminal)
  112 +{
  113 + debug("V3270ColorSelection::%s",__FUNCTION__);
117 114
118 - debug("%s=%p",__FUNCTION__,colors); 115 + V3270ColorSelection * sel = GTK_V3270_COLOR_SELECTION(widget);
119 116
120 int f; 117 int f;
121 for(f=0;f<V3270_COLOR_COUNT;f++) 118 for(f=0;f<V3270_COLOR_COUNT;f++)
122 - v3270_set_color(widget->terminal,f,colors+f); 119 + v3270_set_color(terminal,f,sel->saved+f);
123 120
124 - update_color_chooser(widget,widget->selected); 121 + update_color_chooser(sel,sel->selected);
125 122
126 - v3270_reload(widget->terminal);  
127 - gtk_widget_queue_draw(widget->terminal); 123 + v3270_reload(terminal);
  124 + gtk_widget_queue_draw(terminal);
128 125
129 - } 126 +}
  127 +
  128 +static void load(GtkWidget G_GNUC_UNUSED(*w), GtkWidget *terminal)
  129 +{
  130 + debug("V3270ColorSelection::%s",__FUNCTION__);
  131 +
  132 + V3270ColorSelection * widget = GTK_V3270_COLOR_SELECTION(w);
  133 +
  134 + // Load colors
  135 + {
  136 + static const struct _node
  137 + {
  138 + int id;
  139 + const char *text;
  140 + } node[] =
  141 + {
  142 + { V3270_COLOR_BACKGROUND, N_( "Terminal colors" ) },
  143 + { V3270_COLOR_FIELD, N_( "Field colors" ) },
  144 + { V3270_COLOR_SELECTED_BG, N_( "Misc colors" ) },
  145 + };
  146 +
  147 + static const gchar *color_name[V3270_COLOR_COUNT] =
  148 + {
  149 + N_( "Background" ), // V3270_COLOR_BACKGROUND
  150 + N_( "Blue" ), // V3270_COLOR_BLUE
  151 + N_( "Red" ), // V3270_COLOR_RED
  152 + N_( "Pink" ), // V3270_COLOR_PINK
  153 + N_( "Green" ), // V3270_COLOR_GREEN
  154 + N_( "Turquoise" ), // V3270_COLOR_TURQUOISE
  155 + N_( "Yellow" ), // V3270_COLOR_YELLOW
  156 + N_( "White" ), // V3270_COLOR_WHITE
  157 + N_( "Black" ), // V3270_COLOR_BLACK
  158 + N_( "Dark Blue" ), // V3270_COLOR_DARK_BLUE
  159 + N_( "Orange" ), // V3270_COLOR_ORANGE
  160 + N_( "Purple" ), // V3270_COLOR_PURPLE
  161 + N_( "Dark Green" ), // V3270_COLOR_DARK_GREEN
  162 + N_( "Dark Turquoise" ), // V3270_COLOR_DARK_TURQUOISE
  163 + N_( "Mustard" ), // V3270_COLOR_MUSTARD
  164 + N_( "Gray" ), // V3270_COLOR_GRAY
  165 +
  166 + N_( "Normal/Unprotected" ), // V3270_COLOR_FIELD
  167 + N_( "Intensified/Unprotected" ), // V3270_COLOR_FIELD_INTENSIFIED
  168 + N_( "Normal/Protected" ), // V3270_COLOR_FIELD_PROTECTED
  169 + N_( "Intensified/Protected" ), // V3270_COLOR_FIELD_PROTECTED_INTENSIFIED
  170 +
  171 + N_( "Selection background" ), // TERMINAL_COLOR_SELECTED_BG
  172 + N_( "Selection foreground" ), // TERMINAL_COLOR_SELECTED_FG
  173 +
  174 + N_( "Cross hair cursor" ), // TERMINAL_COLOR_CROSS_HAIR
  175 +
  176 + // Oia Colors
  177 + N_( "OIA background" ), // TERMINAL_COLOR_OIA_BACKGROUND
  178 + N_( "OIA foreground" ), // TERMINAL_COLOR_OIA_FOREGROUND
  179 + N_( "OIA separator" ), // TERMINAL_COLOR_OIA_SEPARATOR
  180 + N_( "OIA status ok" ), // TERMINAL_COLOR_OIA_STATUS_OK
  181 + N_( "OIA Warning" ), // V3270_COLOR_OIA_STATUS_WARNING
  182 + N_( "OIA status invalid" ), // TERMINAL_COLOR_OIA_STATUS_INVALID
  183 +
  184 + };
  185 +
  186 + GtkTreeIter iter;
  187 + GtkTreeIter parent;
  188 + int title = 0;
  189 + int f;
  190 +
  191 + gtk_tree_store_append(GTK_TREE_STORE(widget->colors.list),&parent,NULL);
  192 + gtk_tree_store_set(GTK_TREE_STORE(widget->colors.list), &parent, 0, gettext(node[title++].text), 1, V3270_COLOR_COUNT, -1);
  193 +
  194 + for(f=0;f<V3270_COLOR_COUNT;f++)
  195 + {
  196 + widget->saved[f] = *(v3270_get_color(terminal,f));
  197 +
  198 + if(f == node[title].id)
  199 + {
  200 + gtk_tree_store_append(GTK_TREE_STORE(widget->colors.list),&parent,NULL);
  201 + gtk_tree_store_set(GTK_TREE_STORE(widget->colors.list), &parent, 0, gettext(node[title++].text), 1, V3270_COLOR_COUNT, -1);
  202 + }
  203 + gtk_tree_store_append(GTK_TREE_STORE(widget->colors.list),&iter,&parent);
  204 + gtk_tree_store_set(GTK_TREE_STORE(widget->colors.list), &iter, 0, gettext(color_name[f]), 1, f, -1);
  205 + }
  206 +
  207 + gtk_tree_view_expand_all(GTK_TREE_VIEW(widget->colors.view));
  208 +
  209 + }
  210 +
  211 + v3270_color_scheme_set_rgba(widget->colors.scheme,v3270_get_color_table(terminal));
130 212
131 - LIB3270_EXPORT void v3270_color_selection_reset(GtkWidget *widget) 213 +}
  214 +
  215 + static void V3270ColorSelection_class_init(G_GNUC_UNUSED V3270ColorSelectionClass *klass)
132 { 216 {
133 - V3270ColorSelection * sel = GTK_V3270_COLOR_SELECTION(widget); 217 + GTK_V3270_SETTINGS_CLASS(klass)->load = load;
  218 + GTK_V3270_SETTINGS_CLASS(klass)->cancel = cancel;
  219 + }
  220 +
  221 + static void color_scheme_changed(GtkWidget G_GNUC_UNUSED(*dunno), const GdkRGBA *colors, V3270ColorSelection *widget) {
  222 +
  223 + GtkWidget * terminal = GTK_V3270_SETTINGS(widget)->terminal;
134 224
135 int f; 225 int f;
136 for(f=0;f<V3270_COLOR_COUNT;f++) 226 for(f=0;f<V3270_COLOR_COUNT;f++)
137 - v3270_set_color(sel->terminal,f,sel->saved+f); 227 + v3270_set_color(terminal,f,colors+f);
138 228
139 - update_color_chooser(sel,sel->selected); 229 + update_color_chooser(widget,widget->selected);
140 230
141 - v3270_reload(sel->terminal);  
142 - gtk_widget_queue_draw(sel->terminal); 231 + v3270_reload(terminal);
  232 + gtk_widget_queue_draw(terminal);
143 233
144 } 234 }
145 235
146 236
  237 +
147 #if USE_GTK_COLOR_CHOOSER 238 #if USE_GTK_COLOR_CHOOSER
148 static void color_activated(GtkColorChooser *chooser, GdkRGBA *clr, V3270ColorSelection *widget) 239 static void color_activated(GtkColorChooser *chooser, GdkRGBA *clr, V3270ColorSelection *widget)
149 { 240 {
@@ -162,16 +253,17 @@ @@ -162,16 +253,17 @@
162 static void color_changed(GtkWidget *colorselection, V3270ColorSelection *widget) 253 static void color_changed(GtkWidget *colorselection, V3270ColorSelection *widget)
163 { 254 {
164 GdkRGBA clr; 255 GdkRGBA clr;
  256 + GtkWidget * terminal = GTK_V3270_SETTINGS(widget)->terminal;
165 257
166 if(widget->selected < 0 || widget->selected >= V3270_COLOR_COUNT) 258 if(widget->selected < 0 || widget->selected >= V3270_COLOR_COUNT)
167 return; 259 return;
168 260
169 gtk_color_selection_get_current_rgba(GTK_COLOR_SELECTION(colorselection),&clr); 261 gtk_color_selection_get_current_rgba(GTK_COLOR_SELECTION(colorselection),&clr);
170 262
171 - v3270_set_color(widget->terminal,widget->selected,&clr);  
172 - v3270_reload(widget->terminal);  
173 - v3270_color_scheme_set_rgba(widget->colors.scheme,v3270_get_color_table(widget->terminal));  
174 - gtk_widget_queue_draw(widget->terminal); 263 + v3270_set_color(terminal,widget->selected,&clr);
  264 + v3270_reload(terminal);
  265 + v3270_color_scheme_set_rgba(widget->colors.scheme,v3270_get_color_table(terminal));
  266 + gtk_widget_queue_draw(terminal);
175 267
176 } 268 }
177 #endif // GTK_CHECK_VERSION 269 #endif // GTK_CHECK_VERSION
@@ -195,10 +287,6 @@ @@ -195,10 +287,6 @@
195 287
196 static void V3270ColorSelection_init(V3270ColorSelection *widget) 288 static void V3270ColorSelection_init(V3270ColorSelection *widget)
197 { 289 {
198 - // https://developer.gnome.org/hig/stable/visual-layout.html.en  
199 - gtk_grid_set_row_spacing(GTK_GRID(widget),6);  
200 - gtk_grid_set_column_spacing(GTK_GRID(widget),12);  
201 -  
202 { 290 {
203 // Create colors list view. 291 // Create colors list view.
204 widget->colors.list = (GtkTreeModel *) gtk_tree_store_new(2,G_TYPE_STRING,G_TYPE_INT); 292 widget->colors.list = (GtkTreeModel *) gtk_tree_store_new(2,G_TYPE_STRING,G_TYPE_INT);
@@ -265,94 +353,21 @@ @@ -265,94 +353,21 @@
265 353
266 } 354 }
267 355
268 - LIB3270_EXPORT GtkWidget * v3270_color_selection_new(GtkWidget *terminal) 356 + LIB3270_EXPORT GtkWidget * v3270_color_selection_new()
269 { 357 {
270 - g_return_val_if_fail(GTK_IS_V3270(terminal),NULL);  
271 -  
272 - V3270ColorSelection * widget = GTK_V3270_COLOR_SELECTION(g_object_new(GTK_TYPE_V3270_COLOR_SELECTION, NULL));  
273 -  
274 - widget->terminal = terminal;  
275 -  
276 - // Load colors  
277 - {  
278 - static const struct _node  
279 - {  
280 - int id;  
281 - const char *text;  
282 - } node[] =  
283 - {  
284 - { V3270_COLOR_BACKGROUND, N_( "Terminal colors" ) },  
285 - { V3270_COLOR_FIELD, N_( "Field colors" ) },  
286 - { V3270_COLOR_SELECTED_BG, N_( "Misc colors" ) },  
287 - };  
288 -  
289 - static const gchar *color_name[V3270_COLOR_COUNT] =  
290 - {  
291 - N_( "Background" ), // V3270_COLOR_BACKGROUND  
292 - N_( "Blue" ), // V3270_COLOR_BLUE  
293 - N_( "Red" ), // V3270_COLOR_RED  
294 - N_( "Pink" ), // V3270_COLOR_PINK  
295 - N_( "Green" ), // V3270_COLOR_GREEN  
296 - N_( "Turquoise" ), // V3270_COLOR_TURQUOISE  
297 - N_( "Yellow" ), // V3270_COLOR_YELLOW  
298 - N_( "White" ), // V3270_COLOR_WHITE  
299 - N_( "Black" ), // V3270_COLOR_BLACK  
300 - N_( "Dark Blue" ), // V3270_COLOR_DARK_BLUE  
301 - N_( "Orange" ), // V3270_COLOR_ORANGE  
302 - N_( "Purple" ), // V3270_COLOR_PURPLE  
303 - N_( "Dark Green" ), // V3270_COLOR_DARK_GREEN  
304 - N_( "Dark Turquoise" ), // V3270_COLOR_DARK_TURQUOISE  
305 - N_( "Mustard" ), // V3270_COLOR_MUSTARD  
306 - N_( "Gray" ), // V3270_COLOR_GRAY  
307 -  
308 - N_( "Normal/Unprotected" ), // V3270_COLOR_FIELD  
309 - N_( "Intensified/Unprotected" ), // V3270_COLOR_FIELD_INTENSIFIED  
310 - N_( "Normal/Protected" ), // V3270_COLOR_FIELD_PROTECTED  
311 - N_( "Intensified/Protected" ), // V3270_COLOR_FIELD_PROTECTED_INTENSIFIED  
312 -  
313 - N_( "Selection background" ), // TERMINAL_COLOR_SELECTED_BG  
314 - N_( "Selection foreground" ), // TERMINAL_COLOR_SELECTED_FG  
315 -  
316 - N_( "Cross hair cursor" ), // TERMINAL_COLOR_CROSS_HAIR  
317 -  
318 - // Oia Colors  
319 - N_( "OIA background" ), // TERMINAL_COLOR_OIA_BACKGROUND  
320 - N_( "OIA foreground" ), // TERMINAL_COLOR_OIA_FOREGROUND  
321 - N_( "OIA separator" ), // TERMINAL_COLOR_OIA_SEPARATOR  
322 - N_( "OIA status ok" ), // TERMINAL_COLOR_OIA_STATUS_OK  
323 - N_( "OIA Warning" ), // V3270_COLOR_OIA_STATUS_WARNING  
324 - N_( "OIA status invalid" ), // TERMINAL_COLOR_OIA_STATUS_INVALID  
325 -  
326 - };  
327 -  
328 - GtkTreeIter iter;  
329 - GtkTreeIter parent;  
330 - int title = 0;  
331 - int f;  
332 -  
333 - gtk_tree_store_append(GTK_TREE_STORE(widget->colors.list),&parent,NULL);  
334 - gtk_tree_store_set(GTK_TREE_STORE(widget->colors.list), &parent, 0, gettext(node[title++].text), 1, V3270_COLOR_COUNT, -1);  
335 -  
336 - for(f=0;f<V3270_COLOR_COUNT;f++)  
337 - {  
338 - widget->saved[f] = *(v3270_get_color(terminal,f)); 358 + return GTK_WIDGET(g_object_new(GTK_TYPE_V3270_COLOR_SELECTION, NULL));
  359 + }
339 360
340 - if(f == node[title].id)  
341 - {  
342 - gtk_tree_store_append(GTK_TREE_STORE(widget->colors.list),&parent,NULL);  
343 - gtk_tree_store_set(GTK_TREE_STORE(widget->colors.list), &parent, 0, gettext(node[title++].text), 1, V3270_COLOR_COUNT, -1);  
344 - }  
345 - gtk_tree_store_append(GTK_TREE_STORE(widget->colors.list),&iter,&parent);  
346 - gtk_tree_store_set(GTK_TREE_STORE(widget->colors.list), &iter, 0, gettext(color_name[f]), 1, f, -1);  
347 - } 361 + LIB3270_EXPORT void v3270_edit_color_table(GtkWidget *terminal)
  362 + {
  363 + g_return_if_fail(GTK_IS_V3270(terminal));
348 364
349 - gtk_tree_view_expand_all(GTK_TREE_VIEW(widget->colors.view)); 365 + GtkWidget * dialog = v3270_settings_dialog_new(terminal, v3270_color_selection_new());
350 366
351 - } 367 + v3270_dialog_setup(dialog,_("Color setup"),_("_Save"));
352 368
353 - v3270_color_scheme_set_rgba(widget->colors.scheme,v3270_get_color_table(terminal)); 369 + gtk_widget_show_all(dialog);
  370 + gtk_dialog_run(GTK_DIALOG(dialog));
  371 + gtk_widget_destroy(dialog);
354 372
355 - gtk_widget_show_all(GTK_WIDGET(widget));  
356 - return GTK_WIDGET(widget);  
357 } 373 }
358 -  
src/dialogs/print/settingsdialog.c 0 → 100644
@@ -0,0 +1,503 @@ @@ -0,0 +1,503 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como - e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + *
  28 + */
  29 +
  30 +/**
  31 + * SECTION:V3270FTSettingsDialog
  32 + * @Short_description: A dialog for define/edit file transfer.
  33 + * @Title: V3270FTSettingsDialog
  34 + *
  35 + * The #V3270FTSettingsDialog is a complete dialog box for managing a V3270
  36 + * file transfer queue.
  37 + *
  38 + */
  39 +
  40 + #include <internals.h>
  41 + #include <v3270/filetransfer.h>
  42 + #include "private.h"
  43 +
  44 +/*--[ Widget definition ]----------------------------------------------------------------------------*/
  45 +
  46 + struct _V3270FTSettingsDialog
  47 + {
  48 + GtkDialog parent;
  49 +
  50 + GtkWidget * settings;
  51 +
  52 + H3270 * hSession;
  53 + const void * stHandle;
  54 +
  55 + struct
  56 + {
  57 + GtkWidget * insert;
  58 + GtkWidget * update;
  59 + GtkWidget * remove;
  60 + GtkWidget * reset;
  61 + GtkWidget * begin;
  62 + } button;
  63 +
  64 + struct
  65 + {
  66 + GtkWidget * view;
  67 + GtkWidget * load;
  68 + GtkWidget * save;
  69 + GtkWidget * saveAs;
  70 + } queue;
  71 +
  72 + };
  73 +
  74 + struct _V3270FTSettingsDialogClass
  75 + {
  76 + GtkDialogClass parent_class;
  77 + };
  78 +
  79 + G_DEFINE_TYPE(V3270FTSettingsDialog, V3270FTSettingsDialog, GTK_TYPE_DIALOG);
  80 +
  81 +/*--[ Implement ]------------------------------------------------------------------------------------*/
  82 +
  83 +static void finalize(GObject *object)
  84 +{
  85 + debug("%s",__FUNCTION__);
  86 +
  87 + V3270FTSettingsDialog * dialog = GTK_V3270_FT_DIALOG(object);
  88 +
  89 + if(dialog->hSession && dialog->stHandle)
  90 + {
  91 + lib3270_unregister_schange(dialog->hSession,LIB3270_STATE_CONNECT,dialog->stHandle);
  92 + dialog->stHandle = NULL;
  93 + }
  94 +
  95 + G_OBJECT_CLASS(V3270FTSettingsDialog_parent_class)->finalize(object);
  96 +}
  97 +
  98 +static void V3270FTSettingsDialog_class_init(G_GNUC_UNUSED V3270FTSettingsDialogClass *klass)
  99 +{
  100 + G_OBJECT_CLASS(klass)->finalize = finalize;
  101 +}
  102 +
  103 +void activity_selected(GtkWidget G_GNUC_UNUSED(*view), GObject * activity, V3270FTSettingsDialog *widget)
  104 +{
  105 + debug("%s(widget=%p activity=%p",__FUNCTION__,widget,activity);
  106 +
  107 + v3270_ft_settings_set_activity(widget->settings,activity);
  108 +
  109 + if(activity)
  110 + {
  111 + gtk_widget_set_sensitive(widget->button.update,TRUE);
  112 + gtk_widget_set_sensitive(widget->button.remove,TRUE);
  113 + gtk_widget_set_sensitive(widget->button.reset,TRUE);
  114 + }
  115 + else
  116 + {
  117 + gtk_widget_set_sensitive(widget->button.update,FALSE);
  118 + gtk_widget_set_sensitive(widget->button.remove,FALSE);
  119 + gtk_widget_set_sensitive(widget->button.reset,FALSE);
  120 + }
  121 +
  122 +
  123 +}
  124 +
  125 +static void validity_changed(GtkWidget G_GNUC_UNUSED(*settings), gboolean valid, V3270FTSettingsDialog *widget)
  126 +{
  127 + debug("The file transfer settings are now %s",valid ? "valid" : "invalid");
  128 + gtk_widget_set_sensitive(widget->button.insert,valid);
  129 + gtk_widget_set_sensitive(widget->button.update,valid);
  130 +}
  131 +
  132 +static void has_activity_changed(GtkWidget G_GNUC_UNUSED(*settings), gboolean have_activity, V3270FTSettingsDialog *widget)
  133 +{
  134 + gtk_widget_set_sensitive(widget->button.reset,have_activity);
  135 + gtk_widget_set_sensitive(widget->button.update,have_activity);
  136 + gtk_widget_set_sensitive(widget->button.remove,have_activity);
  137 +}
  138 +
  139 +static void reset_clicked(GtkButton G_GNUC_UNUSED(*button), V3270FTSettingsDialog *widget)
  140 +{
  141 + v3270_ft_settings_reset(widget->settings);
  142 +}
  143 +
  144 +static void update_clicked(GtkButton G_GNUC_UNUSED(*button), V3270FTSettingsDialog *widget)
  145 +{
  146 + v3270_ft_settings_update(widget->settings);
  147 + gtk_tree_view_columns_autosize(GTK_TREE_VIEW(widget->queue.view));
  148 +}
  149 +
  150 +static void load_queue_clicked(GtkButton G_GNUC_UNUSED(*button), V3270FTSettingsDialog *widget)
  151 +{
  152 + v3270_activity_list_load(widget->queue.view);
  153 +}
  154 +
  155 +static void save_queue_clicked(GtkButton G_GNUC_UNUSED(*button), V3270FTSettingsDialog *widget)
  156 +{
  157 + debug("%s",__FUNCTION__);
  158 + v3270_activity_list_save(widget->queue.view);
  159 +}
  160 +
  161 +static void save_queue_as_clicked(GtkButton G_GNUC_UNUSED(*button), V3270FTSettingsDialog *widget)
  162 +{
  163 + v3270_activity_list_save_as(widget->queue.view);
  164 +}
  165 +
  166 +static void begin_clicked(GtkButton G_GNUC_UNUSED(*button), V3270FTSettingsDialog *widget)
  167 +{
  168 + gtk_dialog_response(GTK_DIALOG(widget),GTK_RESPONSE_ACCEPT);
  169 +}
  170 +
  171 +static gboolean v3270_activity_compare_filenames(const GObject *a, const GObject *b)
  172 +{
  173 + if(strcmp(v3270_ft_activity_get_local_filename(a),v3270_ft_activity_get_local_filename(b)))
  174 + return FALSE;
  175 +
  176 + if(strcmp(v3270_ft_activity_get_remote_filename(a),v3270_ft_activity_get_remote_filename(b)))
  177 + return FALSE;
  178 +
  179 + return TRUE;
  180 +}
  181 +
  182 +int v3270_ft_settings_dialog_append_activity(GtkWidget *widget, GObject *activity, GError **error)
  183 +{
  184 + V3270FTSettingsDialog *dialog = GTK_V3270_FT_DIALOG(widget);
  185 +
  186 + GtkTreeIter iter;
  187 + GtkTreeModel * model = gtk_tree_view_get_model(GTK_TREE_VIEW(dialog->queue.view));
  188 +
  189 + if(gtk_tree_model_get_iter_first(model,&iter))
  190 + {
  191 + do
  192 + {
  193 + GObject * a = NULL;
  194 + gtk_tree_model_get(model, &iter, 0, &a, -1);
  195 +
  196 + if(a && v3270_activity_compare_filenames(activity, a))
  197 + {
  198 + // Activity already exist
  199 + if(error && !*error)
  200 + *error = g_error_new_literal(g_quark_from_static_string(PACKAGE_NAME),EPERM,_("Activity already on the queue"));
  201 +
  202 + return -1;
  203 + }
  204 +
  205 + }
  206 + while(gtk_tree_model_iter_next(model,&iter));
  207 + }
  208 +
  209 + // Not found, insert it.
  210 + v3270_activity_list_append(dialog->queue.view,activity,FALSE);
  211 +
  212 + return 0;
  213 +}
  214 +
  215 +static void insert_clicked(GtkWidget *button, V3270FTSettingsDialog *widget)
  216 +{
  217 + GtkTreeIter iter;
  218 + GtkTreeModel * model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget->queue.view));
  219 +
  220 + if(gtk_tree_model_get_iter_first(model,&iter))
  221 + {
  222 + do
  223 + {
  224 + GObject * activity = NULL;
  225 + gtk_tree_model_get(model, &iter, 0, &activity, -1);
  226 +
  227 + if(activity && v3270_ft_settings_equals(widget->settings,activity))
  228 + {
  229 + // Activity already exist
  230 + GtkWidget * dialog =
  231 + gtk_message_dialog_new(
  232 + GTK_WINDOW(gtk_widget_get_toplevel(button)),
  233 + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
  234 + GTK_MESSAGE_ERROR,
  235 + GTK_BUTTONS_CLOSE,
  236 + _("Activity already on the queue")
  237 + );
  238 +
  239 + gtk_message_dialog_format_secondary_text(
  240 + GTK_MESSAGE_DIALOG(dialog),
  241 + _( "You can't add more than one acitivity with the same files.")
  242 + );
  243 +
  244 + gtk_window_set_title(GTK_WINDOW(dialog),_("Can't add activity"));
  245 +
  246 + gtk_dialog_run(GTK_DIALOG(dialog));
  247 + gtk_widget_destroy(dialog);
  248 +
  249 + return;
  250 + }
  251 +
  252 + }
  253 + while(gtk_tree_model_iter_next(model,&iter));
  254 + }
  255 +
  256 + // Not found, insert it.
  257 + v3270_activity_list_append(widget->queue.view,v3270_ft_settings_create_activity(widget->settings),FALSE);
  258 +
  259 +}
  260 +
  261 +static void remove_clicked(GtkWidget G_GNUC_UNUSED(*button), V3270FTSettingsDialog *widget)
  262 +{
  263 + v3270_activity_list_remove(widget->queue.view,v3270_ft_settings_get_activity(widget->settings));
  264 + v3270_ft_settings_set_activity(widget->settings,NULL);
  265 +}
  266 +
  267 +static void enable_queue_save(GtkWidget G_GNUC_UNUSED(*save), gboolean enabled, V3270FTSettingsDialog *widget)
  268 +{
  269 + debug("%s: %s",__FUNCTION__,(enabled ? "Enable" : "Disable"));
  270 + gtk_widget_set_sensitive(widget->queue.save,enabled);
  271 +}
  272 +
  273 +static void V3270FTSettingsDialog_init(V3270FTSettingsDialog *widget)
  274 +{
  275 + widget->settings = v3270_ft_settings_new();
  276 + g_signal_connect(G_OBJECT(widget->settings),"validity",G_CALLBACK(validity_changed),widget);
  277 + g_signal_connect(G_OBJECT(widget->settings),"has-activity",G_CALLBACK(has_activity_changed),widget);
  278 +
  279 +#if GTK_CHECK_VERSION(3,12,0)
  280 + // Does the dialog have header bar?
  281 + GtkHeaderBar * header = v3270_dialog_get_header_bar(GTK_WIDGET(widget));
  282 +
  283 + if(header)
  284 + gtk_header_bar_set_title(header,_( "3270 File transfer"));
  285 + else
  286 + gtk_window_set_title(GTK_WINDOW(widget),_( "3270 File transfer"));
  287 +#else
  288 + gtk_window_set_title(GTK_WINDOW(widget),_( "3270 File transfer"));
  289 +#endif // GTK 3.12
  290 +
  291 + // https://developer.gnome.org/hig/stable/visual-layout.html.en
  292 + gtk_container_set_border_width(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(widget))),18);
  293 +
  294 + // Create box
  295 + GtkWidget * container = gtk_box_new(GTK_ORIENTATION_VERTICAL,6);
  296 + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(widget))),container,TRUE,TRUE,0);
  297 +
  298 + // Pack settings widget
  299 + gtk_widget_set_halign(GTK_WIDGET(widget->settings),GTK_ALIGN_START);
  300 + gtk_widget_set_hexpand(GTK_WIDGET(widget->settings),FALSE);
  301 + gtk_widget_set_vexpand(GTK_WIDGET(widget->settings),FALSE);
  302 + gtk_box_pack_start(GTK_BOX(container),widget->settings,FALSE,FALSE,0);
  303 +
  304 + // Create action buttons
  305 + {
  306 + GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,6);
  307 +
  308 + g_object_set(G_OBJECT(box),"margin-top",6,NULL);
  309 + g_object_set(G_OBJECT(box),"margin-end",6,NULL);
  310 +
  311 + widget->button.reset = v3270_box_pack_end(box,gtk_button_new_with_mnemonic("_Reset"),FALSE,FALSE,0);
  312 + g_signal_connect(widget->button.reset,"clicked",G_CALLBACK(reset_clicked),widget);
  313 +
  314 + widget->button.update = v3270_box_pack_end(box,gtk_button_new_with_mnemonic("_Update"),FALSE,FALSE,0);
  315 + g_signal_connect(widget->button.update,"clicked",G_CALLBACK(update_clicked),widget);
  316 +
  317 + widget->button.remove = v3270_box_pack_end(box,gtk_button_new_with_mnemonic("_Delete"),FALSE,FALSE,0);
  318 + g_signal_connect(widget->button.remove,"clicked",G_CALLBACK(remove_clicked),widget);
  319 +
  320 + widget->button.insert = v3270_box_pack_end(box,gtk_button_new_with_mnemonic("_Insert"),FALSE,FALSE,0);
  321 + g_signal_connect(widget->button.insert,"clicked",G_CALLBACK(insert_clicked),widget);
  322 +
  323 + gtk_widget_set_sensitive(widget->button.update,FALSE);
  324 + gtk_widget_set_sensitive(widget->button.remove,FALSE);
  325 + gtk_widget_set_sensitive(widget->button.insert,FALSE);
  326 + gtk_widget_set_sensitive(widget->button.reset,FALSE);
  327 +
  328 + gtk_box_pack_start(GTK_BOX(container),box,FALSE,FALSE,0);
  329 +
  330 + }
  331 +
  332 + // Create Transfer queue buttons
  333 + {
  334 +#if GTK_CHECK_VERSION(3,10,0)
  335 + // https://specifications.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html
  336 + widget->queue.load = gtk_button_new_from_icon_name("document-open",GTK_ICON_SIZE_SMALL_TOOLBAR);
  337 + widget->queue.save = gtk_button_new_from_icon_name("document-save",GTK_ICON_SIZE_SMALL_TOOLBAR);
  338 + widget->queue.saveAs = gtk_button_new_from_icon_name("document-save-as",GTK_ICON_SIZE_SMALL_TOOLBAR);
  339 +#else
  340 + // https://specifications.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html
  341 + widget->queue.load = gtk_button_new_from_stock(GTK_STOCK_OPEN);
  342 + widget->queue.save = gtk_button_new_from_stock(GTK_STOCK_SAVE);
  343 + widget->queue.saveAs = gtk_button_new_from_stock(GTK_STOCK_SAVE_AS);
  344 +#endif // GTK_CHECK_VERSION
  345 +
  346 + gtk_widget_set_tooltip_markup(widget->queue.load,_("Get transfer queue from file"));
  347 + g_signal_connect(widget->queue.load,"clicked",G_CALLBACK(load_queue_clicked),widget);
  348 +
  349 + gtk_widget_set_tooltip_markup(widget->queue.save,_("Save transfer queue"));
  350 + g_signal_connect(widget->queue.save,"clicked",G_CALLBACK(save_queue_clicked),widget);
  351 + gtk_widget_set_sensitive(widget->queue.save,FALSE);
  352 +
  353 + gtk_widget_set_tooltip_markup(widget->queue.saveAs,_("Save transfer queue to file"));
  354 + g_signal_connect(widget->queue.saveAs,"clicked",G_CALLBACK(save_queue_as_clicked),widget);
  355 +
  356 + }
  357 +
  358 + // Create file list view
  359 + {
  360 + widget->queue.view = v3270_activity_list_new();
  361 + gtk_widget_set_tooltip_markup(widget->queue.view,_("Files to transfer"));
  362 + g_signal_connect(G_OBJECT(widget->queue.view),"has-file",G_CALLBACK(enable_queue_save),widget);
  363 + g_signal_connect(G_OBJECT(widget->queue.view),"changed",G_CALLBACK(activity_selected),widget);
  364 +
  365 + // Put the view inside a scrolled window.
  366 + GtkWidget * scrolled = gtk_scrolled_window_new(NULL,NULL);
  367 + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
  368 + gtk_container_add(GTK_CONTAINER(scrolled),widget->queue.view);
  369 + gtk_widget_set_size_request(scrolled,50,150);
  370 +
  371 + gtk_widget_set_vexpand(scrolled,TRUE);
  372 + gtk_widget_set_hexpand(scrolled,TRUE);
  373 +
  374 +#if GTK_CHECK_VERSION(3,12,0)
  375 + if(header)
  376 + {
  377 + debug("Dialog %s header bar","have");
  378 +
  379 + GtkWidget * frame = v3270_dialog_create_frame(scrolled,_("Transfer queue"));
  380 + gtk_box_pack_start(GTK_BOX(container),frame,TRUE,TRUE,0);
  381 +
  382 + widget->button.begin = gtk_button_new_from_icon_name("network-transmit",GTK_ICON_SIZE_SMALL_TOOLBAR);
  383 +
  384 + g_object_set(G_OBJECT(widget->button.begin),"margin-end",12,NULL);
  385 + g_signal_connect(widget->button.begin,"clicked",G_CALLBACK(begin_clicked),widget);
  386 +
  387 + gtk_header_bar_pack_start(header,widget->button.begin);
  388 + gtk_header_bar_pack_start(header,widget->queue.load);
  389 + gtk_header_bar_pack_start(header,widget->queue.save);
  390 + gtk_header_bar_pack_start(header,widget->queue.saveAs);
  391 +
  392 + }
  393 + else
  394 + {
  395 + debug("Dialog %s header bar","don't have");
  396 +
  397 + GtkWidget * hBox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,6);
  398 + GtkWidget * frame = v3270_dialog_create_frame(hBox,_("Transfer queue"));
  399 + gtk_box_pack_start(GTK_BOX(container),frame,TRUE,TRUE,0);
  400 +
  401 + GtkBox * box = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL,6));
  402 + gtk_box_pack_start(GTK_BOX(hBox),GTK_WIDGET(box),FALSE,FALSE,0);
  403 +
  404 + gtk_box_pack_start(box,widget->queue.load,FALSE,FALSE,0);
  405 + gtk_box_pack_start(box,widget->queue.save,FALSE,FALSE,0);
  406 + gtk_box_pack_start(box,widget->queue.saveAs,FALSE,FALSE,0);
  407 +
  408 + gtk_box_pack_start(GTK_BOX(hBox),GTK_WIDGET(scrolled),TRUE,TRUE,0);
  409 +
  410 + gtk_dialog_add_button(GTK_DIALOG (widget),_("_Cancel"),GTK_RESPONSE_CANCEL);
  411 + widget->button.begin = gtk_dialog_add_button(GTK_DIALOG (widget),_("B_egin transfer"),GTK_RESPONSE_ACCEPT);
  412 +
  413 + }
  414 +#else
  415 +
  416 + GtkWidget * hBox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,6);
  417 + GtkWidget * frame = v3270_dialog_create_frame(hBox,_("Transfer queue"));
  418 + gtk_box_pack_start(GTK_BOX(container),frame,TRUE,TRUE,0);
  419 +
  420 + GtkBox * box = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL,6));
  421 + gtk_box_pack_start(GTK_BOX(hBox),GTK_WIDGET(box),FALSE,FALSE,0);
  422 +
  423 + gtk_box_pack_start(box,widget->queue.load,FALSE,FALSE,0);
  424 + gtk_box_pack_start(box,widget->queue.save,FALSE,FALSE,0);
  425 + gtk_box_pack_start(box,widget->queue.saveAs,FALSE,FALSE,0);
  426 +
  427 + gtk_box_pack_start(GTK_BOX(hBox),GTK_WIDGET(scrolled),TRUE,TRUE,0);
  428 +
  429 + gtk_dialog_add_button(GTK_DIALOG (widget),_("_Cancel"),GTK_RESPONSE_CANCEL);
  430 + widget->button.begin = gtk_dialog_add_button(GTK_DIALOG (widget),_("B_egin transfer"),GTK_RESPONSE_ACCEPT);
  431 +
  432 +#endif // GTK_CHECK_VERSION(3,12,0)
  433 +
  434 + // gtk_widget_set_sensitive(widget->button.begin,FALSE);
  435 + gtk_widget_set_tooltip_markup(widget->button.begin,_("Start transfer"));
  436 + gtk_widget_set_sensitive(widget->button.begin,FALSE);
  437 +
  438 +/*
  439 +#ifdef DEBUG
  440 + GObject * activity = v3270_ft_activity_new();
  441 +
  442 + v3270_ft_activity_set_local_filename(activity,"local---");
  443 + v3270_ft_activity_set_remote_filename(activity,"remote---");
  444 + v3270_ft_activity_set_options(activity,LIB3270_FT_OPTION_SEND|LIB3270_FT_OPTION_ASCII|LIB3270_FT_OPTION_CRLF|LIB3270_FT_OPTION_REMAP|LIB3270_FT_OPTION_APPEND|LIB3270_FT_RECORD_FORMAT_VARIABLE);
  445 +
  446 + v3270_activity_list_append(widget->queue.view,activity,FALSE);
  447 +#endif // DEBUG
  448 +*/
  449 +
  450 + }
  451 +
  452 +
  453 +}
  454 +
  455 +LIB3270_EXPORT GtkWidget * v3270_ft_settings_dialog_new(GtkWidget *parent)
  456 +{
  457 + gboolean use_header;
  458 + g_object_get(gtk_settings_get_default(), "gtk-dialogs-use-header", &use_header, NULL);
  459 +
  460 + GtkWidget * dialog =
  461 + GTK_WIDGET(g_object_new(
  462 + GTK_TYPE_V3270_FT_DIALOG,
  463 + "use-header-bar", (use_header ? 1 : 0),
  464 + NULL
  465 + ));
  466 +
  467 + if(parent)
  468 + {
  469 + gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(gtk_widget_get_toplevel(parent)));
  470 + gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
  471 + gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE);
  472 + }
  473 +
  474 + if(GTK_IS_V3270(parent))
  475 + v3270_ft_settings_dialog_set_session(dialog,v3270_get_session(parent));
  476 +
  477 + return dialog;
  478 +}
  479 +
  480 +static void connect_changed(H3270 G_GNUC_UNUSED(*hSession), int state, void *widget)
  481 +{
  482 + V3270FTSettingsDialog * dialog = GTK_V3270_FT_DIALOG( ((GtkWidget *) widget) );
  483 + gtk_widget_set_sensitive(dialog->button.begin,state ? TRUE : FALSE);
  484 +}
  485 +
  486 +LIB3270_EXPORT void v3270_ft_settings_dialog_set_session(GtkWidget *widget, H3270 *hSession)
  487 +{
  488 + V3270FTSettingsDialog * dialog = GTK_V3270_FT_DIALOG(widget);
  489 +
  490 + if(dialog->hSession && dialog->stHandle)
  491 + {
  492 + lib3270_unregister_schange(dialog->hSession,LIB3270_STATE_CONNECT,dialog->stHandle);
  493 + dialog->stHandle = NULL;
  494 + }
  495 +
  496 + dialog->hSession = hSession;
  497 + dialog->stHandle = lib3270_register_schange(hSession,LIB3270_STATE_CONNECT,connect_changed,(void *) widget);
  498 +
  499 + gtk_widget_set_sensitive(dialog->button.begin,lib3270_is_connected(hSession) ? TRUE : FALSE);
  500 +
  501 + v3270_ft_settings_set_tso(dialog->settings,lib3270_is_tso(hSession));
  502 +
  503 +}
src/dialogs/settings.c
@@ -142,7 +142,7 @@ LIB3270_EXPORT void v3270_settings_set_terminal_widget(GtkWidget *widget, GtkWid @@ -142,7 +142,7 @@ LIB3270_EXPORT void v3270_settings_set_terminal_widget(GtkWidget *widget, GtkWid
142 gtk_container_set_border_width(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),18); 142 gtk_container_set_border_width(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),18);
143 143
144 gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(gtk_widget_get_toplevel(terminal))); 144 gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(gtk_widget_get_toplevel(terminal)));
145 - gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); 145 + //gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
146 gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE); 146 gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE);
147 147
148 return dialog; 148 return dialog;
src/dialogs/settingsdialog.c
@@ -1,503 +0,0 @@ @@ -1,503 +0,0 @@
1 -/*  
2 - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270  
3 - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a  
4 - * aplicativos mainframe. Registro no INPI sob o nome G3270.  
5 - *  
6 - * Copyright (C) <2008> <Banco do Brasil S.A.>  
7 - *  
8 - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob  
9 - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela  
10 - * Free Software Foundation.  
11 - *  
12 - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER  
13 - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO  
14 - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para  
15 - * obter mais detalhes.  
16 - *  
17 - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este  
18 - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin  
19 - * St, Fifth Floor, Boston, MA 02110-1301 USA  
20 - *  
21 - * Este programa está nomeado como - e possui - linhas de código.  
22 - *  
23 - * Contatos:  
24 - *  
25 - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)  
26 - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)  
27 - *  
28 - */  
29 -  
30 -/**  
31 - * SECTION:V3270FTSettingsDialog  
32 - * @Short_description: A dialog for define/edit file transfer.  
33 - * @Title: V3270FTSettingsDialog  
34 - *  
35 - * The #V3270FTSettingsDialog is a complete dialog box for managing a V3270  
36 - * file transfer queue.  
37 - *  
38 - */  
39 -  
40 - #include <internals.h>  
41 - #include <v3270/filetransfer.h>  
42 - #include "private.h"  
43 -  
44 -/*--[ Widget definition ]----------------------------------------------------------------------------*/  
45 -  
46 - struct _V3270FTSettingsDialog  
47 - {  
48 - GtkDialog parent;  
49 -  
50 - GtkWidget * settings;  
51 -  
52 - H3270 * hSession;  
53 - const void * stHandle;  
54 -  
55 - struct  
56 - {  
57 - GtkWidget * insert;  
58 - GtkWidget * update;  
59 - GtkWidget * remove;  
60 - GtkWidget * reset;  
61 - GtkWidget * begin;  
62 - } button;  
63 -  
64 - struct  
65 - {  
66 - GtkWidget * view;  
67 - GtkWidget * load;  
68 - GtkWidget * save;  
69 - GtkWidget * saveAs;  
70 - } queue;  
71 -  
72 - };  
73 -  
74 - struct _V3270FTSettingsDialogClass  
75 - {  
76 - GtkDialogClass parent_class;  
77 - };  
78 -  
79 - G_DEFINE_TYPE(V3270FTSettingsDialog, V3270FTSettingsDialog, GTK_TYPE_DIALOG);  
80 -  
81 -/*--[ Implement ]------------------------------------------------------------------------------------*/  
82 -  
83 -static void finalize(GObject *object)  
84 -{  
85 - debug("%s",__FUNCTION__);  
86 -  
87 - V3270FTSettingsDialog * dialog = GTK_V3270_FT_DIALOG(object);  
88 -  
89 - if(dialog->hSession && dialog->stHandle)  
90 - {  
91 - lib3270_unregister_schange(dialog->hSession,LIB3270_STATE_CONNECT,dialog->stHandle);  
92 - dialog->stHandle = NULL;  
93 - }  
94 -  
95 - G_OBJECT_CLASS(V3270FTSettingsDialog_parent_class)->finalize(object);  
96 -}  
97 -  
98 -static void V3270FTSettingsDialog_class_init(G_GNUC_UNUSED V3270FTSettingsDialogClass *klass)  
99 -{  
100 - G_OBJECT_CLASS(klass)->finalize = finalize;  
101 -}  
102 -  
103 -void activity_selected(GtkWidget G_GNUC_UNUSED(*view), GObject * activity, V3270FTSettingsDialog *widget)  
104 -{  
105 - debug("%s(widget=%p activity=%p",__FUNCTION__,widget,activity);  
106 -  
107 - v3270_ft_settings_set_activity(widget->settings,activity);  
108 -  
109 - if(activity)  
110 - {  
111 - gtk_widget_set_sensitive(widget->button.update,TRUE);  
112 - gtk_widget_set_sensitive(widget->button.remove,TRUE);  
113 - gtk_widget_set_sensitive(widget->button.reset,TRUE);  
114 - }  
115 - else  
116 - {  
117 - gtk_widget_set_sensitive(widget->button.update,FALSE);  
118 - gtk_widget_set_sensitive(widget->button.remove,FALSE);  
119 - gtk_widget_set_sensitive(widget->button.reset,FALSE);  
120 - }  
121 -  
122 -  
123 -}  
124 -  
125 -static void validity_changed(GtkWidget G_GNUC_UNUSED(*settings), gboolean valid, V3270FTSettingsDialog *widget)  
126 -{  
127 - debug("The file transfer settings are now %s",valid ? "valid" : "invalid");  
128 - gtk_widget_set_sensitive(widget->button.insert,valid);  
129 - gtk_widget_set_sensitive(widget->button.update,valid);  
130 -}  
131 -  
132 -static void has_activity_changed(GtkWidget G_GNUC_UNUSED(*settings), gboolean have_activity, V3270FTSettingsDialog *widget)  
133 -{  
134 - gtk_widget_set_sensitive(widget->button.reset,have_activity);  
135 - gtk_widget_set_sensitive(widget->button.update,have_activity);  
136 - gtk_widget_set_sensitive(widget->button.remove,have_activity);  
137 -}  
138 -  
139 -static void reset_clicked(GtkButton G_GNUC_UNUSED(*button), V3270FTSettingsDialog *widget)  
140 -{  
141 - v3270_ft_settings_reset(widget->settings);  
142 -}  
143 -  
144 -static void update_clicked(GtkButton G_GNUC_UNUSED(*button), V3270FTSettingsDialog *widget)  
145 -{  
146 - v3270_ft_settings_update(widget->settings);  
147 - gtk_tree_view_columns_autosize(GTK_TREE_VIEW(widget->queue.view));  
148 -}  
149 -  
150 -static void load_queue_clicked(GtkButton G_GNUC_UNUSED(*button), V3270FTSettingsDialog *widget)  
151 -{  
152 - v3270_activity_list_load(widget->queue.view);  
153 -}  
154 -  
155 -static void save_queue_clicked(GtkButton G_GNUC_UNUSED(*button), V3270FTSettingsDialog *widget)  
156 -{  
157 - debug("%s",__FUNCTION__);  
158 - v3270_activity_list_save(widget->queue.view);  
159 -}  
160 -  
161 -static void save_queue_as_clicked(GtkButton G_GNUC_UNUSED(*button), V3270FTSettingsDialog *widget)  
162 -{  
163 - v3270_activity_list_save_as(widget->queue.view);  
164 -}  
165 -  
166 -static void begin_clicked(GtkButton G_GNUC_UNUSED(*button), V3270FTSettingsDialog *widget)  
167 -{  
168 - gtk_dialog_response(GTK_DIALOG(widget),GTK_RESPONSE_ACCEPT);  
169 -}  
170 -  
171 -static gboolean v3270_activity_compare_filenames(const GObject *a, const GObject *b)  
172 -{  
173 - if(strcmp(v3270_ft_activity_get_local_filename(a),v3270_ft_activity_get_local_filename(b)))  
174 - return FALSE;  
175 -  
176 - if(strcmp(v3270_ft_activity_get_remote_filename(a),v3270_ft_activity_get_remote_filename(b)))  
177 - return FALSE;  
178 -  
179 - return TRUE;  
180 -}  
181 -  
182 -int v3270_ft_settings_dialog_append_activity(GtkWidget *widget, GObject *activity, GError **error)  
183 -{  
184 - V3270FTSettingsDialog *dialog = GTK_V3270_FT_DIALOG(widget);  
185 -  
186 - GtkTreeIter iter;  
187 - GtkTreeModel * model = gtk_tree_view_get_model(GTK_TREE_VIEW(dialog->queue.view));  
188 -  
189 - if(gtk_tree_model_get_iter_first(model,&iter))  
190 - {  
191 - do  
192 - {  
193 - GObject * a = NULL;  
194 - gtk_tree_model_get(model, &iter, 0, &a, -1);  
195 -  
196 - if(a && v3270_activity_compare_filenames(activity, a))  
197 - {  
198 - // Activity already exist  
199 - if(error && !*error)  
200 - *error = g_error_new_literal(g_quark_from_static_string(PACKAGE_NAME),EPERM,_("Activity already on the queue"));  
201 -  
202 - return -1;  
203 - }  
204 -  
205 - }  
206 - while(gtk_tree_model_iter_next(model,&iter));  
207 - }  
208 -  
209 - // Not found, insert it.  
210 - v3270_activity_list_append(dialog->queue.view,activity,FALSE);  
211 -  
212 - return 0;  
213 -}  
214 -  
215 -static void insert_clicked(GtkWidget *button, V3270FTSettingsDialog *widget)  
216 -{  
217 - GtkTreeIter iter;  
218 - GtkTreeModel * model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget->queue.view));  
219 -  
220 - if(gtk_tree_model_get_iter_first(model,&iter))  
221 - {  
222 - do  
223 - {  
224 - GObject * activity = NULL;  
225 - gtk_tree_model_get(model, &iter, 0, &activity, -1);  
226 -  
227 - if(activity && v3270_ft_settings_equals(widget->settings,activity))  
228 - {  
229 - // Activity already exist  
230 - GtkWidget * dialog =  
231 - gtk_message_dialog_new(  
232 - GTK_WINDOW(gtk_widget_get_toplevel(button)),  
233 - GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,  
234 - GTK_MESSAGE_ERROR,  
235 - GTK_BUTTONS_CLOSE,  
236 - _("Activity already on the queue")  
237 - );  
238 -  
239 - gtk_message_dialog_format_secondary_text(  
240 - GTK_MESSAGE_DIALOG(dialog),  
241 - _( "You can't add more than one acitivity with the same files.")  
242 - );  
243 -  
244 - gtk_window_set_title(GTK_WINDOW(dialog),_("Can't add activity"));  
245 -  
246 - gtk_dialog_run(GTK_DIALOG(dialog));  
247 - gtk_widget_destroy(dialog);  
248 -  
249 - return;  
250 - }  
251 -  
252 - }  
253 - while(gtk_tree_model_iter_next(model,&iter));  
254 - }  
255 -  
256 - // Not found, insert it.  
257 - v3270_activity_list_append(widget->queue.view,v3270_ft_settings_create_activity(widget->settings),FALSE);  
258 -  
259 -}  
260 -  
261 -static void remove_clicked(GtkWidget G_GNUC_UNUSED(*button), V3270FTSettingsDialog *widget)  
262 -{  
263 - v3270_activity_list_remove(widget->queue.view,v3270_ft_settings_get_activity(widget->settings));  
264 - v3270_ft_settings_set_activity(widget->settings,NULL);  
265 -}  
266 -  
267 -static void enable_queue_save(GtkWidget G_GNUC_UNUSED(*save), gboolean enabled, V3270FTSettingsDialog *widget)  
268 -{  
269 - debug("%s: %s",__FUNCTION__,(enabled ? "Enable" : "Disable"));  
270 - gtk_widget_set_sensitive(widget->queue.save,enabled);  
271 -}  
272 -  
273 -static void V3270FTSettingsDialog_init(V3270FTSettingsDialog *widget)  
274 -{  
275 - widget->settings = v3270_ft_settings_new();  
276 - g_signal_connect(G_OBJECT(widget->settings),"validity",G_CALLBACK(validity_changed),widget);  
277 - g_signal_connect(G_OBJECT(widget->settings),"has-activity",G_CALLBACK(has_activity_changed),widget);  
278 -  
279 -#if GTK_CHECK_VERSION(3,12,0)  
280 - // Does the dialog have header bar?  
281 - GtkHeaderBar * header = v3270_dialog_get_header_bar(GTK_WIDGET(widget));  
282 -  
283 - if(header)  
284 - gtk_header_bar_set_title(header,_( "3270 File transfer"));  
285 - else  
286 - gtk_window_set_title(GTK_WINDOW(widget),_( "3270 File transfer"));  
287 -#else  
288 - gtk_window_set_title(GTK_WINDOW(widget),_( "3270 File transfer"));  
289 -#endif // GTK 3.12  
290 -  
291 - // https://developer.gnome.org/hig/stable/visual-layout.html.en  
292 - gtk_container_set_border_width(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(widget))),18);  
293 -  
294 - // Create box  
295 - GtkWidget * container = gtk_box_new(GTK_ORIENTATION_VERTICAL,6);  
296 - gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(widget))),container,TRUE,TRUE,0);  
297 -  
298 - // Pack settings widget  
299 - gtk_widget_set_halign(GTK_WIDGET(widget->settings),GTK_ALIGN_START);  
300 - gtk_widget_set_hexpand(GTK_WIDGET(widget->settings),FALSE);  
301 - gtk_widget_set_vexpand(GTK_WIDGET(widget->settings),FALSE);  
302 - gtk_box_pack_start(GTK_BOX(container),widget->settings,FALSE,FALSE,0);  
303 -  
304 - // Create action buttons  
305 - {  
306 - GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,6);  
307 -  
308 - g_object_set(G_OBJECT(box),"margin-top",6,NULL);  
309 - g_object_set(G_OBJECT(box),"margin-end",6,NULL);  
310 -  
311 - widget->button.reset = v3270_box_pack_end(box,gtk_button_new_with_mnemonic("_Reset"),FALSE,FALSE,0);  
312 - g_signal_connect(widget->button.reset,"clicked",G_CALLBACK(reset_clicked),widget);  
313 -  
314 - widget->button.update = v3270_box_pack_end(box,gtk_button_new_with_mnemonic("_Update"),FALSE,FALSE,0);  
315 - g_signal_connect(widget->button.update,"clicked",G_CALLBACK(update_clicked),widget);  
316 -  
317 - widget->button.remove = v3270_box_pack_end(box,gtk_button_new_with_mnemonic("_Delete"),FALSE,FALSE,0);  
318 - g_signal_connect(widget->button.remove,"clicked",G_CALLBACK(remove_clicked),widget);  
319 -  
320 - widget->button.insert = v3270_box_pack_end(box,gtk_button_new_with_mnemonic("_Insert"),FALSE,FALSE,0);  
321 - g_signal_connect(widget->button.insert,"clicked",G_CALLBACK(insert_clicked),widget);  
322 -  
323 - gtk_widget_set_sensitive(widget->button.update,FALSE);  
324 - gtk_widget_set_sensitive(widget->button.remove,FALSE);  
325 - gtk_widget_set_sensitive(widget->button.insert,FALSE);  
326 - gtk_widget_set_sensitive(widget->button.reset,FALSE);  
327 -  
328 - gtk_box_pack_start(GTK_BOX(container),box,FALSE,FALSE,0);  
329 -  
330 - }  
331 -  
332 - // Create Transfer queue buttons  
333 - {  
334 -#if GTK_CHECK_VERSION(3,10,0)  
335 - // https://specifications.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html  
336 - widget->queue.load = gtk_button_new_from_icon_name("document-open",GTK_ICON_SIZE_SMALL_TOOLBAR);  
337 - widget->queue.save = gtk_button_new_from_icon_name("document-save",GTK_ICON_SIZE_SMALL_TOOLBAR);  
338 - widget->queue.saveAs = gtk_button_new_from_icon_name("document-save-as",GTK_ICON_SIZE_SMALL_TOOLBAR);  
339 -#else  
340 - // https://specifications.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html  
341 - widget->queue.load = gtk_button_new_from_stock(GTK_STOCK_OPEN);  
342 - widget->queue.save = gtk_button_new_from_stock(GTK_STOCK_SAVE);  
343 - widget->queue.saveAs = gtk_button_new_from_stock(GTK_STOCK_SAVE_AS);  
344 -#endif // GTK_CHECK_VERSION  
345 -  
346 - gtk_widget_set_tooltip_markup(widget->queue.load,_("Get transfer queue from file"));  
347 - g_signal_connect(widget->queue.load,"clicked",G_CALLBACK(load_queue_clicked),widget);  
348 -  
349 - gtk_widget_set_tooltip_markup(widget->queue.save,_("Save transfer queue"));  
350 - g_signal_connect(widget->queue.save,"clicked",G_CALLBACK(save_queue_clicked),widget);  
351 - gtk_widget_set_sensitive(widget->queue.save,FALSE);  
352 -  
353 - gtk_widget_set_tooltip_markup(widget->queue.saveAs,_("Save transfer queue to file"));  
354 - g_signal_connect(widget->queue.saveAs,"clicked",G_CALLBACK(save_queue_as_clicked),widget);  
355 -  
356 - }  
357 -  
358 - // Create file list view  
359 - {  
360 - widget->queue.view = v3270_activity_list_new();  
361 - gtk_widget_set_tooltip_markup(widget->queue.view,_("Files to transfer"));  
362 - g_signal_connect(G_OBJECT(widget->queue.view),"has-file",G_CALLBACK(enable_queue_save),widget);  
363 - g_signal_connect(G_OBJECT(widget->queue.view),"changed",G_CALLBACK(activity_selected),widget);  
364 -  
365 - // Put the view inside a scrolled window.  
366 - GtkWidget * scrolled = gtk_scrolled_window_new(NULL,NULL);  
367 - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);  
368 - gtk_container_add(GTK_CONTAINER(scrolled),widget->queue.view);  
369 - gtk_widget_set_size_request(scrolled,50,150);  
370 -  
371 - gtk_widget_set_vexpand(scrolled,TRUE);  
372 - gtk_widget_set_hexpand(scrolled,TRUE);  
373 -  
374 -#if GTK_CHECK_VERSION(3,12,0)  
375 - if(header)  
376 - {  
377 - debug("Dialog %s header bar","have");  
378 -  
379 - GtkWidget * frame = v3270_dialog_create_frame(scrolled,_("Transfer queue"));  
380 - gtk_box_pack_start(GTK_BOX(container),frame,TRUE,TRUE,0);  
381 -  
382 - widget->button.begin = gtk_button_new_from_icon_name("network-transmit",GTK_ICON_SIZE_SMALL_TOOLBAR);  
383 -  
384 - g_object_set(G_OBJECT(widget->button.begin),"margin-end",12,NULL);  
385 - g_signal_connect(widget->button.begin,"clicked",G_CALLBACK(begin_clicked),widget);  
386 -  
387 - gtk_header_bar_pack_start(header,widget->button.begin);  
388 - gtk_header_bar_pack_start(header,widget->queue.load);  
389 - gtk_header_bar_pack_start(header,widget->queue.save);  
390 - gtk_header_bar_pack_start(header,widget->queue.saveAs);  
391 -  
392 - }  
393 - else  
394 - {  
395 - debug("Dialog %s header bar","don't have");  
396 -  
397 - GtkWidget * hBox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,6);  
398 - GtkWidget * frame = v3270_dialog_create_frame(hBox,_("Transfer queue"));  
399 - gtk_box_pack_start(GTK_BOX(container),frame,TRUE,TRUE,0);  
400 -  
401 - GtkBox * box = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL,6));  
402 - gtk_box_pack_start(GTK_BOX(hBox),GTK_WIDGET(box),FALSE,FALSE,0);  
403 -  
404 - gtk_box_pack_start(box,widget->queue.load,FALSE,FALSE,0);  
405 - gtk_box_pack_start(box,widget->queue.save,FALSE,FALSE,0);  
406 - gtk_box_pack_start(box,widget->queue.saveAs,FALSE,FALSE,0);  
407 -  
408 - gtk_box_pack_start(GTK_BOX(hBox),GTK_WIDGET(scrolled),TRUE,TRUE,0);  
409 -  
410 - gtk_dialog_add_button(GTK_DIALOG (widget),_("_Cancel"),GTK_RESPONSE_CANCEL);  
411 - widget->button.begin = gtk_dialog_add_button(GTK_DIALOG (widget),_("B_egin transfer"),GTK_RESPONSE_ACCEPT);  
412 -  
413 - }  
414 -#else  
415 -  
416 - GtkWidget * hBox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,6);  
417 - GtkWidget * frame = v3270_dialog_create_frame(hBox,_("Transfer queue"));  
418 - gtk_box_pack_start(GTK_BOX(container),frame,TRUE,TRUE,0);  
419 -  
420 - GtkBox * box = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL,6));  
421 - gtk_box_pack_start(GTK_BOX(hBox),GTK_WIDGET(box),FALSE,FALSE,0);  
422 -  
423 - gtk_box_pack_start(box,widget->queue.load,FALSE,FALSE,0);  
424 - gtk_box_pack_start(box,widget->queue.save,FALSE,FALSE,0);  
425 - gtk_box_pack_start(box,widget->queue.saveAs,FALSE,FALSE,0);  
426 -  
427 - gtk_box_pack_start(GTK_BOX(hBox),GTK_WIDGET(scrolled),TRUE,TRUE,0);  
428 -  
429 - gtk_dialog_add_button(GTK_DIALOG (widget),_("_Cancel"),GTK_RESPONSE_CANCEL);  
430 - widget->button.begin = gtk_dialog_add_button(GTK_DIALOG (widget),_("B_egin transfer"),GTK_RESPONSE_ACCEPT);  
431 -  
432 -#endif // GTK_CHECK_VERSION(3,12,0)  
433 -  
434 - // gtk_widget_set_sensitive(widget->button.begin,FALSE);  
435 - gtk_widget_set_tooltip_markup(widget->button.begin,_("Start transfer"));  
436 - gtk_widget_set_sensitive(widget->button.begin,FALSE);  
437 -  
438 -/*  
439 -#ifdef DEBUG  
440 - GObject * activity = v3270_ft_activity_new();  
441 -  
442 - v3270_ft_activity_set_local_filename(activity,"local---");  
443 - v3270_ft_activity_set_remote_filename(activity,"remote---");  
444 - v3270_ft_activity_set_options(activity,LIB3270_FT_OPTION_SEND|LIB3270_FT_OPTION_ASCII|LIB3270_FT_OPTION_CRLF|LIB3270_FT_OPTION_REMAP|LIB3270_FT_OPTION_APPEND|LIB3270_FT_RECORD_FORMAT_VARIABLE);  
445 -  
446 - v3270_activity_list_append(widget->queue.view,activity,FALSE);  
447 -#endif // DEBUG  
448 -*/  
449 -  
450 - }  
451 -  
452 -  
453 -}  
454 -  
455 -LIB3270_EXPORT GtkWidget * v3270_ft_settings_dialog_new(GtkWidget *parent)  
456 -{  
457 - gboolean use_header;  
458 - g_object_get(gtk_settings_get_default(), "gtk-dialogs-use-header", &use_header, NULL);  
459 -  
460 - GtkWidget * dialog =  
461 - GTK_WIDGET(g_object_new(  
462 - GTK_TYPE_V3270_FT_DIALOG,  
463 - "use-header-bar", (use_header ? 1 : 0),  
464 - NULL  
465 - ));  
466 -  
467 - if(parent)  
468 - {  
469 - gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(gtk_widget_get_toplevel(parent)));  
470 - gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);  
471 - gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE);  
472 - }  
473 -  
474 - if(GTK_IS_V3270(parent))  
475 - v3270_ft_settings_dialog_set_session(dialog,v3270_get_session(parent));  
476 -  
477 - return dialog;  
478 -}  
479 -  
480 -static void connect_changed(H3270 G_GNUC_UNUSED(*hSession), int state, void *widget)  
481 -{  
482 - V3270FTSettingsDialog * dialog = GTK_V3270_FT_DIALOG( ((GtkWidget *) widget) );  
483 - gtk_widget_set_sensitive(dialog->button.begin,state ? TRUE : FALSE);  
484 -}  
485 -  
486 -LIB3270_EXPORT void v3270_ft_settings_dialog_set_session(GtkWidget *widget, H3270 *hSession)  
487 -{  
488 - V3270FTSettingsDialog * dialog = GTK_V3270_FT_DIALOG(widget);  
489 -  
490 - if(dialog->hSession && dialog->stHandle)  
491 - {  
492 - lib3270_unregister_schange(dialog->hSession,LIB3270_STATE_CONNECT,dialog->stHandle);  
493 - dialog->stHandle = NULL;  
494 - }  
495 -  
496 - dialog->hSession = hSession;  
497 - dialog->stHandle = lib3270_register_schange(hSession,LIB3270_STATE_CONNECT,connect_changed,(void *) widget);  
498 -  
499 - gtk_widget_set_sensitive(dialog->button.begin,lib3270_is_connected(hSession) ? TRUE : FALSE);  
500 -  
501 - v3270_ft_settings_set_tso(dialog->settings,lib3270_is_tso(hSession));  
502 -  
503 -}  
src/include/v3270/colorscheme.h
@@ -65,8 +65,8 @@ @@ -65,8 +65,8 @@
65 LIB3270_EXPORT gchar * v3270_color_scheme_get_text(GtkWidget *widget); 65 LIB3270_EXPORT gchar * v3270_color_scheme_get_text(GtkWidget *widget);
66 LIB3270_EXPORT void v3270_color_scheme_set_text(GtkWidget *widget, const gchar *colors); 66 LIB3270_EXPORT void v3270_color_scheme_set_text(GtkWidget *widget, const gchar *colors);
67 67
68 - LIB3270_EXPORT GtkWidget * v3270_color_selection_new(GtkWidget *widget);  
69 - LIB3270_EXPORT void v3270_color_selection_reset(GtkWidget *widget); 68 + LIB3270_EXPORT GtkWidget * v3270_color_selection_new();
  69 + LIB3270_EXPORT void v3270_edit_color_table(GtkWidget *terminal);
70 70
71 G_END_DECLS 71 G_END_DECLS
72 72
src/terminal/font.c
@@ -107,6 +107,7 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, unsigned int width, @@ -107,6 +107,7 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, unsigned int width,
107 cairo_set_font_size(cr,s); 107 cairo_set_font_size(cr,s);
108 cairo_font_extents(cr,&extents); 108 cairo_font_extents(cr,&extents);
109 109
  110 + /*
110 debug("font_size=%lf x_advance=%lf y_advance=%lf font_extents=%u+%u font_height=%u view_height=%u view_width=%u", 111 debug("font_size=%lf x_advance=%lf y_advance=%lf font_extents=%u+%u font_height=%u view_height=%u view_width=%u",
111 s, 112 s,
112 extents.max_x_advance, 113 extents.max_x_advance,
@@ -116,6 +117,7 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, unsigned int width, @@ -116,6 +117,7 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, unsigned int width,
116 height, 117 height,
117 VIEW_WIDTH_FROM_FONT(extents.max_x_advance) 118 VIEW_WIDTH_FROM_FONT(extents.max_x_advance)
118 ); 119 );
  120 + */
119 121
120 } while( (VIEW_HEIGTH_FROM_FONT( (extents.height+extents.descent) ) < height) && (VIEW_WIDTH_FROM_FONT(extents.max_x_advance) < width) ); 122 } while( (VIEW_HEIGTH_FROM_FONT( (extents.height+extents.descent) ) < height) && (VIEW_WIDTH_FROM_FONT(extents.max_x_advance) < width) );
121 123
@@ -171,6 +173,7 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, unsigned int width, @@ -171,6 +173,7 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, unsigned int width,
171 terminal->minimum_height = ((rows+1) * (extents.height + extents.descent)) + (OIA_TOP_MARGIN+2); 173 terminal->minimum_height = ((rows+1) * (extents.height + extents.descent)) + (OIA_TOP_MARGIN+2);
172 } 174 }
173 175
  176 + /*
174 debug("font_size=%d x_advance=%lf y_advance=%lf font_extents=%u+%u font_height=%u view_height=%u view_width=%u", 177 debug("font_size=%d x_advance=%lf y_advance=%lf font_extents=%u+%u font_height=%u view_height=%u view_width=%u",
175 font_size[f], 178 font_size[f],
176 extents.max_x_advance, 179 extents.max_x_advance,
@@ -180,6 +183,7 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, unsigned int width, @@ -180,6 +183,7 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, unsigned int width,
180 height, 183 height,
181 VIEW_WIDTH_FROM_FONT(extents.max_x_advance) 184 VIEW_WIDTH_FROM_FONT(extents.max_x_advance)
182 ); 185 );
  186 + */
183 187
184 if( VIEW_HEIGTH_FROM_FONT((extents.height + extents.descent)) < height && VIEW_WIDTH_FROM_FONT(extents.max_x_advance) < width) 188 if( VIEW_HEIGTH_FROM_FONT((extents.height + extents.descent)) < height && VIEW_WIDTH_FROM_FONT(extents.max_x_advance) < width)
185 size = font_size[f]; 189 size = font_size[f];
src/testprogram/toolbar.c
@@ -153,6 +153,9 @@ @@ -153,6 +153,9 @@
153 153
154 static void color_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) 154 static void color_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal)
155 { 155 {
  156 + v3270_edit_color_table(terminal);
  157 +
  158 + /*
156 GtkWidget * dialog = v3270_dialog_new(terminal, _("Color setup"), _("_Save")); 159 GtkWidget * dialog = v3270_dialog_new(terminal, _("Color setup"), _("_Save"));
157 GtkWidget * colors = v3270_color_selection_new(terminal); 160 GtkWidget * colors = v3270_color_selection_new(terminal);
158 161
@@ -171,7 +174,7 @@ @@ -171,7 +174,7 @@
171 } 174 }
172 175
173 gtk_widget_destroy(dialog); 176 gtk_widget_destroy(dialog);
174 - 177 + */
175 178
176 } 179 }
177 180
@@ -79,6 +79,9 @@ @@ -79,6 +79,9 @@
79 <Unit filename="src/dialogs/print/settings.c"> 79 <Unit filename="src/dialogs/print/settings.c">
80 <Option compilerVar="CC" /> 80 <Option compilerVar="CC" />
81 </Unit> 81 </Unit>
  82 + <Unit filename="src/dialogs/print/settingsdialog.c">
  83 + <Option compilerVar="CC" />
  84 + </Unit>
82 <Unit filename="src/dialogs/private.h" /> 85 <Unit filename="src/dialogs/private.h" />
83 <Unit filename="src/dialogs/save/convenience.c"> 86 <Unit filename="src/dialogs/save/convenience.c">
84 <Option compilerVar="CC" /> 87 <Option compilerVar="CC" />
@@ -93,9 +96,6 @@ @@ -93,9 +96,6 @@
93 <Unit filename="src/dialogs/settings.c"> 96 <Unit filename="src/dialogs/settings.c">
94 <Option compilerVar="CC" /> 97 <Option compilerVar="CC" />
95 </Unit> 98 </Unit>
96 - <Unit filename="src/dialogs/settingsdialog.c">  
97 - <Option compilerVar="CC" />  
98 - </Unit>  
99 <Unit filename="src/dialogs/togglebutton.c"> 99 <Unit filename="src/dialogs/togglebutton.c">
100 <Option compilerVar="CC" /> 100 <Option compilerVar="CC" />
101 </Unit> 101 </Unit>