Commit 2ce8f403343a6465c576be54065d10bb6bf07cc6

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

Refactoring host settings dialog.

src/dialogs/settings/host.c
... ... @@ -38,6 +38,7 @@
38 38 #include <lib3270/log.h>
39 39 #include <lib3270/toggle.h>
40 40 #include <lib3270/properties.h>
  41 + #include <v3270/settings/url.h>
41 42  
42 43 /*--[ Globals ]--------------------------------------------------------------------------------------*/
43 44  
... ... @@ -52,21 +53,21 @@
52 53 {
53 54 {
54 55 .left = 2,
55   - .top = 2,
  56 + .top = 3,
56 57 .width = 2,
57 58 .grid = CONNECTION,
58 59 .id = LIB3270_TOGGLE_CONNECT_ON_STARTUP,
59 60 },
60 61 {
61 62 .left = 4,
62   - .top = 2,
  63 + .top = 3,
63 64 .width = 1,
64 65 .grid = CONNECTION,
65 66 .id = LIB3270_TOGGLE_RECONNECT,
66 67 },
67 68 {
68 69 .left = 5,
69   - .top = 2,
  70 + .top = 3,
70 71 .width = 1,
71 72 .grid = CONNECTION,
72 73 .id = LIB3270_TOGGLE_KEEP_ALIVE,
... ... @@ -94,8 +95,6 @@
94 95  
95 96 enum _entry
96 97 {
97   - ENTRY_HOSTNAME,
98   - ENTRY_SRVCNAME,
99 98 ENTRY_OVERSIZE,
100 99 ENTRY_REMAP_FILE,
101 100 ENTRY_LU_NAMES,
... ... @@ -206,32 +205,6 @@
206 205  
207 206 static const struct EntryFieldDefinition entryfields[] = {
208 207 {
209   - .left = 0,
210   - .top = 0,
211   - .width = 5,
212   - .height = 1,
213   - .grid = CONNECTION,
214   -
215   - .label = N_( "_Host" ),
216   - .tooltip = N_("Address or name of the host to connect."),
217   - .max_length = 0xFF,
218   - .width_chars = 50,
219   -
220   - },
221   - {
222   - .left = 0,
223   - .top = 1,
224   - .width = 1,
225   - .height = 1,
226   - .grid = CONNECTION,
227   -
228   - .label = N_( "_Service" ),
229   - .tooltip = N_("Port or service name."),
230   - .max_length = 6,
231   - .width_chars = 7,
232   - },
233   -
234   - {
235 208 .top = 1,
236 209 .left = 3,
237 210 .width = 2,
... ... @@ -258,9 +231,9 @@
258 231 },
259 232  
260 233 {
261   - .left = 2,
262   - .top = 1,
263   - .width = 3,
  234 + .left = 0,
  235 + .top = 2,
  236 + .width = 5,
264 237 .height = 1,
265 238 .grid = CONNECTION,
266 239  
... ... @@ -279,12 +252,12 @@
279 252 struct
280 253 {
281 254 GtkEntry * entry[G_N_ELEMENTS(entryfields)]; ///< @brief Entry fields for host & service name.
282   - GtkComboBox * ssl; ///< @brief SSL Connection?
283 255 GtkComboBox * combos[G_N_ELEMENTS(combos)]; ///< @brief Combo-boxes.
284 256 GtkComboBox * charset; ///< @brief Charset combo box.
285 257 GtkToggleButton * toggles[G_N_ELEMENTS(toggleList)]; ///< @brief Toggle checks.
286 258 GtkSpinButton * auto_disconnect; ///< @brief Auto disconnect.
287 259 GtkSpinButton * unlock_delay; ///< @brief Unlock delay.
  260 + GtkWidget * url; ///< @brief The URL entry widget.
288 261  
289 262 } input;
290 263  
... ... @@ -339,19 +312,7 @@ static gboolean oversize_validate(GtkEditable *editable) {
339 312 static void update_valid(V3270HostSelectWidget *settings, gboolean valid) {
340 313  
341 314 if(valid) {
342   -
343   - // Check required inputs.
344   -
345   - static const int required[] = { ENTRY_HOSTNAME, ENTRY_SRVCNAME };
346   - size_t ix;
347   -
348   - for(ix = 0; ix < G_N_ELEMENTS(required); ix++) {
349   - const gchar * chars = gtk_editable_get_chars(GTK_EDITABLE(settings->input.entry[required[ix]]),0,-1);
350   - if(!*chars) {
351   - valid = FALSE;
352   - break;
353   - }
354   - }
  315 + valid = v3270_url_edit_is_valid(settings->input.url);
355 316 }
356 317  
357 318 if(valid) {
... ... @@ -362,12 +323,14 @@ static void update_valid(V3270HostSelectWidget *settings, gboolean valid) {
362 323  
363 324 }
364 325  
  326 +/*
365 327 static void required_changed(GtkEditable *editable, GtkWidget *settings) {
366 328  
367 329 const gchar * chars = gtk_editable_get_chars(editable,0,-1);
368 330 update_valid(GTK_V3270HostSelectWidget(settings),(*chars ? TRUE : FALSE));
369 331  
370 332 }
  333 +*/
371 334  
372 335 static void oversize_changed(GtkEditable *editable, GtkWidget *settings) {
373 336 update_valid(GTK_V3270HostSelectWidget(settings), oversize_validate(editable));
... ... @@ -454,18 +417,10 @@ static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget)
454 417 {
455 418 GtkWidget *grids[GRID_COUNT];
456 419  
457   - {
458   - size_t grid;
459   -
460   - for(grid = 0; grid < G_N_ELEMENTS(grids); grid++)
461   - grids[grid] = gtk_grid_new();
462   -
463   - }
  420 + grids[CONNECTION] = v3270_url_edit_new();
  421 + grids[EMULATION] = gtk_grid_new();
464 422  
465 423 // Connection properties
466   - gtk_grid_set_row_spacing(GTK_GRID(grids[CONNECTION]),6);
467   - gtk_grid_set_column_spacing(GTK_GRID(grids[CONNECTION]),12);
468   -
469 424 gtk_grid_attach(
470 425 GTK_GRID(widget),
471 426 v3270_dialog_section_new(_("Connection"),_("Network connection settings"),grids[CONNECTION]),
... ... @@ -486,10 +441,6 @@ static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget)
486 441 {
487 442 v3270_settings_create_entry_fields(entryfields, G_N_ELEMENTS(entryfields), grids, widget->input.entry);
488 443  
489   - // Custom settings
490   - // gtk_entry_set_placeholder_text(widget->input.entry[ENTRY_SRVCNAME],"telnet");
491   -
492   - gtk_widget_set_hexpand(GTK_WIDGET(widget->input.entry[ENTRY_HOSTNAME]),TRUE);
493 444 gtk_widget_set_hexpand(GTK_WIDGET(widget->input.entry[ENTRY_REMAP_FILE]),TRUE);
494 445  
495 446 gtk_entry_set_icon_from_icon_name(widget->input.entry[ENTRY_REMAP_FILE],GTK_ENTRY_ICON_SECONDARY,"document-open");
... ... @@ -500,8 +451,6 @@ static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget)
500 451 g_signal_connect(G_OBJECT(widget->input.entry[ENTRY_REMAP_FILE]),"changed",G_CALLBACK(remap_file_changed),widget);
501 452  
502 453 g_signal_connect(G_OBJECT(widget->input.entry[ENTRY_OVERSIZE]),"changed",G_CALLBACK(oversize_changed),widget);
503   - g_signal_connect(G_OBJECT(widget->input.entry[ENTRY_HOSTNAME]),"changed",G_CALLBACK(required_changed),widget);
504   - g_signal_connect(G_OBJECT(widget->input.entry[ENTRY_SRVCNAME]),"changed",G_CALLBACK(required_changed),widget);
505 454  
506 455 }
507 456  
... ... @@ -516,8 +465,8 @@ static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget)
516 465  
517 466 gtk_spin_button_set_increments(widget->input.auto_disconnect,1,1);
518 467  
519   - gtk_grid_attach(GTK_GRID(grids[CONNECTION]),label,0,2,1,1);
520   - gtk_grid_attach(GTK_GRID(grids[CONNECTION]),GTK_WIDGET(widget->input.auto_disconnect),1,2,1,1);
  468 + gtk_grid_attach(GTK_GRID(grids[CONNECTION]),label,0,3,1,1);
  469 + gtk_grid_attach(GTK_GRID(grids[CONNECTION]),GTK_WIDGET(widget->input.auto_disconnect),1,3,1,1);
521 470 g_signal_connect(G_OBJECT(widget->input.auto_disconnect),"output",G_CALLBACK(spin_format),widget);
522 471 }
523 472  
... ... @@ -540,43 +489,6 @@ static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget)
540 489  
541 490 }
542 491  
543   - // SSL input
544   - {
545   - GtkWidget *label = gtk_label_new_with_mnemonic(_( "_Security" ));
546   - gtk_widget_set_halign(label,GTK_ALIGN_END);
547   - gtk_grid_attach(GTK_GRID(grids[CONNECTION]),label,0,3,1,1);
548   -
549   - GtkTreeModel * model = (GtkTreeModel *) gtk_list_store_new(1,G_TYPE_STRING);
550   -
551   - widget->input.ssl = GTK_COMBO_BOX(gtk_combo_box_new_with_model(model));
552   -
553   - GtkCellRenderer * text_renderer = gtk_cell_renderer_text_new();
554   - gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget->input.ssl), text_renderer, TRUE);
555   - gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(widget->input.ssl), text_renderer, "text", 0, NULL);
556   -
557   - static const gchar * levels[] =
558   - {
559   - N_("Unsecure"),
560   - N_("SSL/TLS")
561   - };
562   -
563   - size_t level;
564   - for(level = 0; level < G_N_ELEMENTS(levels); level++)
565   - {
566   - GtkTreeIter iter;
567   - gtk_list_store_append((GtkListStore *) model, &iter);
568   - gtk_list_store_set((GtkListStore *) model, &iter, 0, levels[level], -1);
569   - };
570   -
571   - /*
572   - widget->input.ssl = GTK_TOGGLE_BUTTON(gtk_check_button_new_with_mnemonic(_( "_Secure connection." )));
573   - gtk_widget_set_tooltip_text(GTK_WIDGET(widget->input.ssl),_( "Check for SSL secure connection." ));
574   - gtk_widget_set_halign(GTK_WIDGET(widget->input.ssl),GTK_ALIGN_START);
575   - */
576   -
577   - gtk_grid_attach(GTK_GRID(grids[CONNECTION]),GTK_WIDGET(widget->input.ssl),1,3,2,1);
578   - }
579   -
580 492 // Toggle checkboxes
581 493 v3270_settings_create_toggle_buttons(toggleList, G_N_ELEMENTS(toggleList), grids, widget->input.toggles);
582 494  
... ... @@ -725,20 +637,7 @@ static void apply(GtkWidget *w, GtkWidget *terminal)
725 637 H3270 *hSession = v3270_get_session(terminal);
726 638  
727 639 // Apply URL
728   - {
729   - g_autofree gchar * url =
730   - g_strconcat(
731   - (gtk_combo_box_get_active(widget->input.ssl) > 0 ? "tn3270s://" : "tn3270://"),
732   - gtk_entry_get_text(widget->input.entry[ENTRY_HOSTNAME]),
733   - ":",
734   - gtk_entry_get_text(widget->input.entry[ENTRY_SRVCNAME]),
735   - NULL
736   - );
737   -
738   - debug("URL=[%s]",url);
739   - lib3270_set_url(hSession,url);
740   -
741   - }
  640 + lib3270_set_url(hSession,v3270_url_edit_get_url(widget->input.url));
742 641  
743 642 // Apply LU names
744 643 v3270_set_lunames(terminal,gtk_entry_get_text(widget->input.entry[ENTRY_LU_NAMES]));
... ... @@ -801,42 +700,7 @@ static void load(GtkWidget *w, GtkWidget *terminal)
801 700 H3270 *hSession = v3270_get_session(terminal);
802 701 V3270HostSelectWidget *widget = GTK_V3270HostSelectWidget(w);
803 702  
804   - const gchar * u = lib3270_get_url(hSession);
805   -
806   - if(u)
807   - {
808   -
809   - g_autofree gchar * url = g_strdup(u);
810   -
811   - gtk_combo_box_set_active(widget->input.ssl,(g_str_has_prefix(u,"tn3270s") ? 1 : 0));
812   -// gtk_toggle_button_set_active(widget->input.ssl,g_str_has_prefix(u,"tn3270s"));
813   -
814   - gchar *hostname = strstr(url,"://");
815   - if(!hostname)
816   - {
817   - g_message("Invalid URL: \"%s\" (no scheme)",url);
818   - }
819   - else
820   - {
821   - hostname += 3;
822   -
823   - gchar *srvcname = strchr(hostname,':');
824   -
825   - if(srvcname)
826   - {
827   - *(srvcname++) = 0;
828   - }
829   - else
830   - {
831   - srvcname = "23";
832   - }
833   -
834   - gtk_entry_set_text(widget->input.entry[ENTRY_HOSTNAME],hostname);
835   - gtk_entry_set_text(widget->input.entry[ENTRY_SRVCNAME],srvcname);
836   -
837   - }
838   -
839   - }
  703 + v3270_url_edit_set_url(widget->input.url,lib3270_get_url(hSession));
840 704  
841 705 // Load LU names
842 706 g_autofree gchar * lunames = v3270_get_lunames(terminal);
... ...
src/dialogs/settings/url.c
... ... @@ -122,7 +122,7 @@
122 122 gtk_entry_set_width_chars(GTK_ENTRY(widget->entry.host),50);
123 123 gtk_entry_set_placeholder_text(GTK_ENTRY(widget->entry.host),_("The tn3270 host name"));
124 124 gtk_widget_set_tooltip_text(widget->entry.host,g_dgettext(GETTEXT_PACKAGE,labels[0].tooltip));
125   - gtk_grid_attach(GTK_GRID(widget),widget->entry.host,1,0,4,1);
  125 + gtk_grid_attach(GTK_GRID(widget),widget->entry.host,1,0,5,1);
126 126 }
127 127  
128 128 // Create the service/port field.
... ... @@ -160,7 +160,7 @@
160 160 };
161 161  
162 162 gtk_widget_set_tooltip_text(widget->entry.ssl,g_dgettext(GETTEXT_PACKAGE,labels[2].tooltip));
163   - gtk_grid_attach(GTK_GRID(widget),widget->entry.ssl,3,1,2,1);
  163 + gtk_grid_attach(GTK_GRID(widget),widget->entry.ssl,3,1,3,1);
164 164 }
165 165  
166 166 // Create labels.
... ... @@ -256,3 +256,14 @@
256 256 return edit->url;
257 257 }
258 258  
  259 + gboolean v3270_url_edit_is_valid(GtkWidget *widget) {
  260 + g_return_val_if_fail(GTK_IS_V3270URLEdit(widget),FALSE);
  261 +
  262 + V3270URLEdit *edit = GTK_V3270URLEdit(widget);
  263 +
  264 + const gchar *host = gtk_entry_get_text(GTK_ENTRY(edit->entry.host));
  265 + if(!*host)
  266 + return FALSE;
  267 +
  268 + return TRUE;
  269 + }
... ...
src/include/v3270/settings/url.h
... ... @@ -52,6 +52,7 @@
52 52 GtkWidget * v3270_url_edit_new();
53 53 void v3270_url_edit_set_url(GtkWidget *widget, const gchar *url);
54 54 const gchar * v3270_url_edit_get_url(GtkWidget *widget);
  55 + gboolean v3270_url_edit_is_valid(GtkWidget *widget);
55 56  
56 57 G_END_DECLS
57 58  
... ...
src/testprogram/toolbar.c
... ... @@ -34,7 +34,6 @@
34 34 #include <v3270/colorscheme.h>
35 35 #include <v3270/dialogs.h>
36 36 #include <v3270/settings.h>
37   - #include <v3270/settings/url.h>
38 37 #include <v3270/selection.h>
39 38 #include <v3270/trace.h>
40 39 #include <lib3270/log.h>
... ... @@ -71,13 +70,6 @@
71 70  
72 71 static void preferences_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal)
73 72 {
74   - GtkWidget * dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL);
75   -
76   - gtk_container_add(GTK_CONTAINER(dialog),v3270_url_edit_new());
77   - gtk_widget_show_all(dialog);
78   -
79   -
80   - /*
81 73 size_t ix;
82 74 GtkWidget * dialog = v3270_settings_dialog_new();
83 75  
... ... @@ -103,7 +95,6 @@
103 95 g_signal_connect(dialog,"response",G_CALLBACK(v3270_setttings_dialog_response),NULL);
104 96  
105 97 gtk_widget_show_all(dialog);
106   - */
107 98  
108 99 }
109 100  
... ...