Commit c03eb89e945b8e9a2ca1d94da4236e012f4f7977

Authored by perry.werneck@gmail.com
1 parent 4ac39648

Melhorando diálogo de configuração de servidor

pw3270.cbp
... ... @@ -263,6 +263,9 @@
263 263 <Option compilerVar="CC" />
264 264 </Unit>
265 265 <Unit filename="src/pw3270/globals.h" />
  266 + <Unit filename="src/pw3270/hostdialog.c">
  267 + <Option compilerVar="CC" />
  268 + </Unit>
266 269 <Unit filename="src/pw3270/macros.c">
267 270 <Option compilerVar="CC" />
268 271 </Unit>
... ...
src/include/lib3270.h
... ... @@ -241,12 +241,14 @@
241 241 */
242 242 typedef enum lib3270_option
243 243 {
244   - LIB3270_OPTION_COLOR8 = 0x0001, /**< If active, pw3270 will respond to a Query(Color) with a list of 8 supported colors. */
245   - LIB3270_OPTION_KYBD_AS400 = 0x0002, /**< Prefix every PF with PA1 */
246   - LIB3270_OPTION_TSO = 0x0004, /**< Host is TSO? */
  244 + LIB3270_OPTION_KYBD_AS400 = 0x0001, /**< Prefix every PF with PA1 */
  245 + LIB3270_OPTION_TSO = 0x0002, /**< Host is TSO? */
247 246  
248 247 } LIB3270_OPTION;
249 248  
  249 +
  250 +// LIB3270_OPTION_COLOR8 = 0x0001, /**< If active, pw3270 will respond to a Query(Color) with a list of 8 supported colors. */
  251 +
250 252 #define LIB3270_OPTION_DEFAULT 0
251 253 #define LIB3270_OPTION_COUNT 3
252 254  
... ... @@ -979,6 +981,7 @@
979 981  
980 982 LIB3270_EXPORT LIB3270_OPTION lib3270_get_options(H3270 *hSession);
981 983 LIB3270_EXPORT void lib3270_set_options(H3270 *hSession, LIB3270_OPTION opt);
  984 + LIB3270_EXPORT int lib3270_set_color_type(H3270 *hSession, unsigned short colortype);
982 985  
983 986 LIB3270_EXPORT const LIB3270_OPTION_ENTRY * lib3270_get_option_list(void);
984 987  
... ...
src/include/lib3270/session.h
... ... @@ -98,7 +98,7 @@
98 98 int oerr_lock : 1;
99 99 int unlock_delay : 1;
100 100 int auto_reconnect_inprogress : 1;
101   -// int color8 : 1;
  101 + int colors : 5;
102 102 int apl_mode : 1;
103 103 int icrnl : 1;
104 104 int inlcr : 1;
... ...
src/include/pw3270.h
... ... @@ -66,6 +66,7 @@
66 66 LIB3270_EXPORT const gchar * pw3270_get_session_name(GtkWidget *widget);
67 67 LIB3270_EXPORT void pw3270_set_session_name(GtkWidget *widget, const gchar *name);
68 68 LIB3270_EXPORT void pw3270_set_session_options(GtkWidget *widget, LIB3270_OPTION options);
  69 + LIB3270_EXPORT int pw3270_set_session_color_type(GtkWidget *widget, unsigned short color_type);
69 70  
70 71 LIB3270_EXPORT gint pw3270_get_integer(GtkWidget *widget, const gchar *group, const gchar *key, gint def);
71 72 LIB3270_EXPORT void pw3270_set_integer(GtkWidget *widget, const gchar *group, const gchar *key, gint val);
... ...
src/include/pw3270/v3270.h
... ... @@ -189,6 +189,7 @@
189 189 LIB3270_EXPORT int v3270_set_script(GtkWidget *widget, const gchar id, gboolean on);
190 190 LIB3270_EXPORT void v3270_set_scaled_fonts(GtkWidget *widget, gboolean on);
191 191 LIB3270_EXPORT void v3270_set_session_options(GtkWidget *widget, LIB3270_OPTION options);
  192 + LIB3270_EXPORT int v3270_set_session_color_type(GtkWidget *widget, unsigned short colortype);
192 193 LIB3270_EXPORT void v3270_set_host(GtkWidget *widget, const gchar *uri);
193 194  
194 195 // Keyboard & Mouse special actions
... ...
src/lib3270/options.c
... ... @@ -39,13 +39,6 @@
39 39 static const const LIB3270_OPTION_ENTRY options[LIB3270_OPTION_COUNT+1] =
40 40 {
41 41 {
42   - LIB3270_OPTION_COLOR8,
43   - "color8",
44   - N_( "_8 colors" ),
45   - N_( "If active, pw3270 will respond to a Query(Color) with a list of 8 supported colors." )
46   - },
47   -
48   - {
49 42 LIB3270_OPTION_KYBD_AS400,
50 43 "as400",
51 44 N_( "Host is AS/400" ),
... ... @@ -84,6 +77,37 @@ LIB3270_EXPORT void lib3270_set_options(H3270 *hSession, LIB3270_OPTION opt)
84 77 hSession->options = opt;
85 78 }
86 79  
  80 +LIB3270_EXPORT int lib3270_set_color_type(H3270 *hSession, unsigned short colortype)
  81 +{
  82 + CHECK_SESSION_HANDLE(hSession);
  83 +
  84 + switch(colortype)
  85 + {
  86 + case 0:
  87 + case 16:
  88 + hSession->colors = 16;
  89 + hSession->mono = 0;
  90 + break;
  91 +
  92 + case 8:
  93 + hSession->colors = 8;
  94 + hSession->mono = 0;
  95 + break;
  96 +
  97 + case 2:
  98 + hSession->colors = 16;
  99 + hSession->mono = 1;
  100 + break;
  101 +
  102 + default:
  103 + return EINVAL;
  104 + }
  105 +
  106 +
  107 + return 0;
  108 +}
  109 +
  110 +
87 111 LIB3270_EXPORT const LIB3270_OPTION_ENTRY * lib3270_get_option_list(void)
88 112 {
89 113 return options;
... ...
src/lib3270/sf.c
... ... @@ -820,13 +820,13 @@ static void do_qr_color(H3270 *hSession)
820 820  
821 821 trace_ds(hSession,"> QueryReply(Color)\n");
822 822  
823   - color_max = (hSession->options & LIB3270_OPTION_COLOR8) ? 8: 16; /* report on 8 or 16 colors */
  823 + color_max = (hSession->colors == 8) ? 8: 16; /* report on 8 or 16 colors */
824 824  
825 825 space3270out(hSession,4 + 2*15);
826   - *hSession->obptr++ = 0x00; /* no options */
827   - *hSession->obptr++ = color_max; /* report on 8 or 16 colors */
828   - *hSession->obptr++ = 0x00; /* default color: */
829   - *hSession->obptr++ = 0xf0 + COLOR_GREEN; /* green */
  826 + *hSession->obptr++ = 0x00; /* no options */
  827 + *hSession->obptr++ = color_max; /* report on 8 or 16 colors */
  828 + *hSession->obptr++ = 0x00; /* default color: */
  829 + *hSession->obptr++ = 0xf0 + COLOR_GREEN; /* green */
830 830 for (i = 0xf1; i < 0xf1 + color_max - 1; i++)
831 831 {
832 832 *hSession->obptr++ = i;
... ...
src/pw3270/Makefile.in
... ... @@ -58,7 +58,7 @@ include uiparser/sources.mak
58 58  
59 59 APP_SOURCES= main.c @APP_GUI_SRC@
60 60  
61   -LIB_SOURCES= window.c actions.c fonts.c dialog.c print.c colors.c \
  61 +LIB_SOURCES= window.c actions.c fonts.c dialog.c hostdialog.c print.c colors.c \
62 62 filetransfer.c tools.c plugin.c macros.c\
63 63 $(foreach SRC, $(UI_PARSER_SRC), uiparser/$(SRC)) \
64 64 $(foreach SRC, $(V3270_SRC), v3270/$(SRC)) \
... ...
src/pw3270/actions.c
... ... @@ -74,6 +74,7 @@ static void connect_action(GtkAction *action, GtkWidget *widget)
74 74 if(host)
75 75 {
76 76 v3270_set_session_options(widget,0);
  77 + v3270_set_session_color_type(widget,0);
77 78 v3270_connect(widget,host);
78 79 return;
79 80 }
... ...
src/pw3270/dialog.c
... ... @@ -34,19 +34,6 @@
34 34  
35 35 /*--[ Globals ]--------------------------------------------------------------------------------------*/
36 36  
37   - static const struct _host_type
38   - {
39   - const gchar * name;
40   - const gchar * description;
41   - LIB3270_OPTION option;
42   - } host_type[] =
43   - {
44   - { "S390", N_( "IBM S/390" ), LIB3270_OPTION_TSO },
45   - { "AS400", N_( "IBM AS/400" ), LIB3270_OPTION_KYBD_AS400 },
46   - { "TSO", N_( "Other (TSO)" ), LIB3270_OPTION_TSO },
47   - { "VM/CMS", N_( "Other (VM/CMS)" ), 0 }
48   - };
49   -
50 37 static const struct _charset
51 38 {
52 39 const gchar *name;
... ... @@ -317,193 +304,6 @@
317 304 return 0;
318 305 }
319 306  
320   -
321   - void hostname_action(GtkAction *action, GtkWidget *widget)
322   - {
323   -// const LIB3270_OPTION_ENTRY *options = lib3270_get_option_list();
324   -
325   - const gchar * title = g_object_get_data(G_OBJECT(action),"title");
326   - const gchar * systype = g_object_get_data(G_OBJECT(action),"type");
327   - gchar * cfghost = get_string_from_config("host","uri","");
328   - gchar * hostname;
329   - gchar * ptr;
330   - gboolean again = TRUE;
331   - GtkWidget * label;
332   - GtkTable * table = GTK_TABLE(gtk_table_new(3,4,FALSE));
333   - GtkEntry * host = GTK_ENTRY(gtk_entry_new());
334   - GtkEntry * port = GTK_ENTRY(gtk_entry_new());
335   - GtkToggleButton * sslcheck = GTK_TOGGLE_BUTTON(gtk_check_button_new_with_mnemonic( _( "_Secure connection" ) ));
336   -// GtkToggleButton * optcheck[LIB3270_OPTION_COUNT];
337   - GtkWidget * dialog = gtk_dialog_new_with_buttons( gettext(title ? title : N_( "Select hostname" )),
338   - GTK_WINDOW(gtk_widget_get_toplevel(widget)),
339   - GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
340   - GTK_STOCK_CONNECT, GTK_RESPONSE_ACCEPT,
341   - GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
342   - NULL );
343   -
344   - gtk_window_set_icon_name(GTK_WINDOW(dialog),GTK_STOCK_HOME);
345   - gtk_entry_set_max_length(host,0xFF);
346   - gtk_entry_set_width_chars(host,50);
347   -
348   - gtk_entry_set_max_length(port,6);
349   - gtk_entry_set_width_chars(port,7);
350   -
351   - label = gtk_label_new_with_mnemonic( _("_Hostname:") );
352   - gtk_label_set_mnemonic_widget(GTK_LABEL(label),GTK_WIDGET(host));
353   - gtk_table_attach(table,label,0,1,0,1,0,0,5,0);
354   - gtk_table_attach(table,GTK_WIDGET(host), 1,2,0,1,GTK_EXPAND|GTK_FILL,0,0,0);
355   -
356   - label = gtk_label_new_with_mnemonic( _( "_Port:" ) );
357   - gtk_label_set_mnemonic_widget(GTK_LABEL(label),GTK_WIDGET(port));
358   - gtk_table_attach(table, label, 2,3,0,1,0,0,5,0);
359   - gtk_table_attach(table,GTK_WIDGET(port), 3,4,0,1,GTK_FILL,0,0,0);
360   -
361   - gtk_table_attach(table,GTK_WIDGET(sslcheck), 1,2,1,2,GTK_EXPAND|GTK_FILL,0,0,0);
362   -
363   - {
364   - GtkWidget * expander = gtk_expander_new_with_mnemonic(_( "_Host options"));
365   - GtkBox * container = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL,0));
366   -
367   - // Host options
368   - if(!systype)
369   - {
370   - // No system type defined, ask user
371   - GtkTable * frame = GTK_TABLE(gtk_table_new(2,2,FALSE));
372   - GtkWidget * widget = gtk_combo_box_text_new();
373   - gchar * str = get_string_from_config("host","systype",host_type[0].name);
374   - int f;
375   -
376   - label = gtk_label_new_with_mnemonic( _("System _Type:") );
377   - gtk_table_attach(frame,label,0,1,0,1,0,0,5,0);
378   -
379   - for(f=0;f<G_N_ELEMENTS(host_type);f++)
380   - {
381   - gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widget),host_type[f].name,gettext(host_type[f].description));
382   - if(!g_strcasecmp(host_type[f].name,str))
383   - gtk_combo_box_set_active(GTK_COMBO_BOX(widget),f);
384   - }
385   -
386   - g_free(str);
387   -
388   -
389   - gtk_table_attach(frame,widget,1,2,0,1,GTK_EXPAND|GTK_FILL,0,0,0);
390   - gtk_label_set_mnemonic_widget(GTK_LABEL(label),GTK_WIDGET(widget));
391   -
392   - gtk_box_pack_start(container,GTK_WIDGET(frame),FALSE,TRUE,0);
393   - }
394   -
395   -/*
396   - GtkTable * frame = GTK_TABLE(gtk_table_new(2,2,FALSE));
397   -
398   - for(f=0;f<LIB3270_OPTION_COUNT;f++)
399   - {
400   - optcheck[f] = GTK_TOGGLE_BUTTON(gtk_check_button_new_with_mnemonic( gettext( options[f].text ) ));
401   -
402   - if(options[f].tooltip)
403   - gtk_widget_set_tooltip_markup(GTK_WIDGET(optcheck[f]),gettext(options[f].tooltip));
404   -
405   - gtk_table_attach(frame,GTK_WIDGET(optcheck[f]),col,col+1,row,row+1,GTK_EXPAND|GTK_FILL,0,0,0);
406   - gtk_toggle_button_set_active(optcheck[f],get_boolean_from_config("host", options[f].key, FALSE));
407   -
408   - if(col++ > 1)
409   - {
410   - col = 0;
411   - row++;
412   - }
413   -
414   - }
415   -
416   - gtk_container_add(GTK_CONTAINER(container),GTK_WIDGET(frame));
417   -
418   -*/
419   - gtk_container_add(GTK_CONTAINER(expander),GTK_WIDGET(container));
420   - gtk_table_attach(table,expander,1,2,2,3,GTK_EXPAND|GTK_FILL,0,0,0);
421   - }
422   -
423   -
424   - gtk_container_set_border_width(GTK_CONTAINER(table),5);
425   -
426   - gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),GTK_WIDGET(table),FALSE,FALSE,2);
427   -
428   - hostname = cfghost;
429   -
430   -#ifdef HAVE_LIBSSL
431   - if(!strncmp(hostname,"L:",2))
432   - {
433   - gtk_toggle_button_set_active(sslcheck,TRUE);
434   - hostname += 2;
435   - }
436   -#else
437   - gtk_toggle_button_set_active(sslcheck,FALSE);
438   - gtk_widget_set_sensitive(GTK_WIDGET(sslcheck),FALSE);
439   - if(!strncmp(hostname,"L:",2))
440   - hostname += 2;
441   -#endif
442   -
443   - ptr = strchr(hostname,':');
444   - if(ptr)
445   - {
446   - *(ptr++) = 0;
447   - gtk_entry_set_text(port,ptr);
448   - }
449   - else
450   - {
451   - gtk_entry_set_text(port,"23");
452   - }
453   -
454   - gtk_entry_set_text(host,hostname);
455   -
456   - gtk_widget_show_all(GTK_WIDGET(table));
457   -
458   - while(again)
459   - {
460   - gtk_widget_set_sensitive(dialog,TRUE);
461   - switch(gtk_dialog_run(GTK_DIALOG(dialog)))
462   - {
463   - case GTK_RESPONSE_ACCEPT:
464   - gtk_widget_set_sensitive(dialog,FALSE);
465   -
466   - hostname = g_strconcat( gtk_toggle_button_get_active(sslcheck) ? "L:" : "",
467   - gtk_entry_get_text(host),
468   - ":",
469   - gtk_entry_get_text(port),
470   - NULL
471   - );
472   -
473   - {
474   -// int f;
475   - LIB3270_OPTION opt = 0;
476   -
477   -/*
478   - for(f=0;f<LIB3270_OPTION_COUNT;f++)
479   - {
480   - gboolean val = gtk_toggle_button_get_active(optcheck[f]);
481   - if(val)
482   - opt |= options[f].value;
483   - set_boolean_to_config("host", options[f].key, val);
484   - }
485   -*/
486   - v3270_set_session_options(widget,opt);
487   -
488   - }
489   -
490   - if(!lib3270_connect(v3270_get_session(widget),hostname,1))
491   - again = FALSE;
492   -
493   - g_free(hostname);
494   - break;
495   -
496   - case GTK_RESPONSE_REJECT:
497   - again = FALSE;
498   - break;
499   - }
500   - }
501   -
502   - gtk_widget_destroy(dialog);
503   -
504   - g_free(cfghost);
505   - }
506   -
507 307 void save_all_action(GtkAction *action, GtkWidget *widget)
508 308 {
509 309 gchar *text = v3270_get_text(widget,0,-1);
... ...
src/pw3270/hostdialog.c 0 → 100644
... ... @@ -0,0 +1,268 @@
  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 hostdialog.c 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 + #include "globals.h"
  31 + #include <pw3270/v3270.h>
  32 +
  33 +/*--[ Globals ]--------------------------------------------------------------------------------------*/
  34 +
  35 + static const struct _host_type
  36 + {
  37 + const gchar * name;
  38 + const gchar * description;
  39 + LIB3270_OPTION option;
  40 + } host_type[] =
  41 + {
  42 + { "S390", N_( "IBM S/390" ), LIB3270_OPTION_TSO },
  43 + { "AS400", N_( "IBM AS/400" ), LIB3270_OPTION_KYBD_AS400 },
  44 + { "TSO", N_( "Other (TSO)" ), LIB3270_OPTION_TSO },
  45 + { "VM/CMS", N_( "Other (VM/CMS)" ), 0 }
  46 + };
  47 +
  48 + static const struct _colortable
  49 + {
  50 + unsigned short colors;
  51 + const gchar * description;
  52 + } colortable[] =
  53 + {
  54 + { 16, N_( "16 colors" ) },
  55 + { 8, N_( "8 colors" ) },
  56 + { 2, N_( "Monochrome" ) },
  57 + };
  58 +
  59 +/*--[ Implement ]------------------------------------------------------------------------------------*/
  60 +
  61 + static void set_row(int row, GtkWidget *widget, GtkTable *container, const gchar *text)
  62 + {
  63 + GtkWidget *label = gtk_label_new_with_mnemonic(text);
  64 +
  65 + gtk_misc_set_alignment(GTK_MISC(label),0,0.5);
  66 +
  67 + gtk_table_attach(container,label,0,1,row,row+1,GTK_FILL,0,5,0);
  68 + gtk_table_attach(container,widget,1,2,row,row+1,GTK_FILL,0,0,0);
  69 + gtk_label_set_mnemonic_widget(GTK_LABEL(label),widget);
  70 + }
  71 +
  72 + void hostname_action(GtkAction *action, GtkWidget *widget)
  73 + {
  74 + const gchar * title = g_object_get_data(G_OBJECT(action),"title");
  75 + gchar * cfghost = get_string_from_config("host","uri","");
  76 + gchar * hostname;
  77 + gchar * ptr;
  78 + gboolean again = TRUE;
  79 + int iHostType = 0;
  80 + int iColorTable = 0;
  81 + GtkTable * table = GTK_TABLE(gtk_table_new(3,4,FALSE));
  82 + GtkEntry * host = GTK_ENTRY(gtk_entry_new());
  83 + GtkEntry * port = GTK_ENTRY(gtk_entry_new());
  84 + GtkToggleButton * sslcheck = GTK_TOGGLE_BUTTON(gtk_check_button_new_with_mnemonic( _( "_Secure connection" ) ));
  85 + GtkWidget * dialog = gtk_dialog_new_with_buttons(
  86 + gettext(title ? title : N_( "Select hostname" )),
  87 + GTK_WINDOW(gtk_widget_get_toplevel(widget)),
  88 + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
  89 + GTK_STOCK_CONNECT, GTK_RESPONSE_ACCEPT,
  90 + GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
  91 + NULL );
  92 +
  93 + gtk_window_set_icon_name(GTK_WINDOW(dialog),GTK_STOCK_HOME);
  94 + gtk_entry_set_max_length(host,0xFF);
  95 + gtk_entry_set_width_chars(host,50);
  96 +
  97 + gtk_entry_set_max_length(port,6);
  98 + gtk_entry_set_width_chars(port,7);
  99 +
  100 +
  101 + {
  102 + GtkWidget * label;
  103 +
  104 + label = gtk_label_new_with_mnemonic( _("_Hostname:") );
  105 + gtk_label_set_mnemonic_widget(GTK_LABEL(label),GTK_WIDGET(host));
  106 + gtk_table_attach(table,label,0,1,0,1,0,0,5,0);
  107 + gtk_table_attach(table,GTK_WIDGET(host), 1,2,0,1,GTK_EXPAND|GTK_FILL,0,0,0);
  108 +
  109 + label = gtk_label_new_with_mnemonic( _( "_Port:" ) );
  110 + gtk_label_set_mnemonic_widget(GTK_LABEL(label),GTK_WIDGET(port));
  111 + gtk_table_attach(table, label, 2,3,0,1,0,0,5,0);
  112 + gtk_table_attach(table,GTK_WIDGET(port), 3,4,0,1,GTK_FILL,0,0,0);
  113 +
  114 + gtk_table_attach(table,GTK_WIDGET(sslcheck), 1,2,1,2,GTK_EXPAND|GTK_FILL,0,0,0);
  115 + }
  116 +
  117 + {
  118 + // Host options
  119 + const gchar * systype = g_object_get_data(G_OBJECT(action),"type");
  120 + const gchar * colortype = g_object_get_data(G_OBJECT(action),"colors");
  121 +
  122 + int row = 0;
  123 + GtkWidget * expander = gtk_expander_new_with_mnemonic(_( "_Host options"));
  124 + GtkTable * container = GTK_TABLE(gtk_table_new(3,2,FALSE));
  125 +
  126 + if(!systype)
  127 + {
  128 + // No system type defined, ask user
  129 + gchar * str = get_string_from_config("host","systype",host_type[0].name);
  130 + GtkTreeModel * model = (GtkTreeModel *) gtk_list_store_new(2,G_TYPE_STRING,G_TYPE_INT);
  131 + GtkWidget * widget = gtk_combo_box_new_with_model(model);
  132 + GtkCellRenderer * renderer = gtk_cell_renderer_text_new();
  133 +
  134 + int f;
  135 +
  136 + gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget), renderer, TRUE);
  137 + gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(widget), renderer, "text", 0, NULL);
  138 +
  139 + for(f=0;f<G_N_ELEMENTS(host_type);f++)
  140 + {
  141 + GtkTreeIter iter;
  142 +
  143 + gtk_list_store_append((GtkListStore *) model,&iter);
  144 + gtk_list_store_set((GtkListStore *) model, &iter, 0, gettext(host_type[f].description), 1, f, -1);
  145 +
  146 + if(!g_ascii_strcasecmp(host_type[f].name,str))
  147 + gtk_combo_box_set_active(GTK_COMBO_BOX(widget),f);
  148 + }
  149 +
  150 + g_free(str);
  151 +
  152 + set_row(row++,widget,container,_("System _type:"));
  153 +
  154 + }
  155 + else
  156 + {
  157 + #warning TODO: Configurar o tipo de host de acordo com systype
  158 + }
  159 +
  160 + if(!colortype)
  161 + {
  162 + // NO colortype defined, ask user
  163 + unsigned short colors = (unsigned short) get_integer_from_config("host","colortype",16);
  164 + GtkTreeModel * model = (GtkTreeModel *) gtk_list_store_new(2,G_TYPE_STRING,G_TYPE_INT);
  165 + GtkWidget * widget = gtk_combo_box_new_with_model(model);
  166 + GtkCellRenderer * renderer = gtk_cell_renderer_text_new();
  167 +
  168 + int f;
  169 +
  170 + gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget), renderer, TRUE);
  171 + gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(widget), renderer, "text", 0, NULL);
  172 +
  173 + for(f=0;f<G_N_ELEMENTS(colortable);f++)
  174 + {
  175 + GtkTreeIter iter;
  176 +
  177 + gtk_list_store_append((GtkListStore *) model,&iter);
  178 + gtk_list_store_set((GtkListStore *) model, &iter, 0, gettext(colortable[f].description), 1, (int) colortable[f].colors, -1);
  179 +
  180 + if(colortable[f].colors == colors)
  181 + gtk_combo_box_set_active(GTK_COMBO_BOX(widget),f);
  182 + }
  183 +
  184 + set_row(row++,widget,container,_("_Color table:"));
  185 +
  186 + }
  187 + else
  188 + {
  189 + #warning TODO: Configurar tabela de cores de acordo com systype
  190 + }
  191 +
  192 + gtk_container_add(GTK_CONTAINER(expander),GTK_WIDGET(container));
  193 + gtk_table_attach(table,expander,1,2,2,3,GTK_EXPAND|GTK_FILL,0,0,0);
  194 + }
  195 +
  196 + gtk_container_set_border_width(GTK_CONTAINER(table),5);
  197 +
  198 + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),GTK_WIDGET(table),FALSE,FALSE,2);
  199 +
  200 + hostname = cfghost;
  201 +
  202 +#ifdef HAVE_LIBSSL
  203 + if(!strncmp(hostname,"L:",2))
  204 + {
  205 + gtk_toggle_button_set_active(sslcheck,TRUE);
  206 + hostname += 2;
  207 + }
  208 +#else
  209 + gtk_toggle_button_set_active(sslcheck,FALSE);
  210 + gtk_widget_set_sensitive(GTK_WIDGET(sslcheck),FALSE);
  211 + if(!strncmp(hostname,"L:",2))
  212 + hostname += 2;
  213 +#endif
  214 +
  215 + ptr = strchr(hostname,':');
  216 + if(ptr)
  217 + {
  218 + *(ptr++) = 0;
  219 + gtk_entry_set_text(port,ptr);
  220 + }
  221 + else
  222 + {
  223 + gtk_entry_set_text(port,"23");
  224 + }
  225 +
  226 + gtk_entry_set_text(host,hostname);
  227 +
  228 + gtk_widget_show_all(GTK_WIDGET(table));
  229 +
  230 + while(again)
  231 + {
  232 + gtk_widget_set_sensitive(dialog,TRUE);
  233 + switch(gtk_dialog_run(GTK_DIALOG(dialog)))
  234 + {
  235 + case GTK_RESPONSE_ACCEPT:
  236 + gtk_widget_set_sensitive(dialog,FALSE);
  237 +
  238 + hostname = g_strconcat( gtk_toggle_button_get_active(sslcheck) ? "L:" : "",
  239 + gtk_entry_get_text(host),
  240 + ":",
  241 + gtk_entry_get_text(port),
  242 + NULL
  243 + );
  244 +
  245 + gtk_widget_set_visible(dialog,FALSE);
  246 +
  247 + v3270_set_session_options(widget,host_type[iHostType].option);
  248 + v3270_set_session_color_type(widget,colortable[iColorTable].colors);
  249 +
  250 + if(!lib3270_connect(v3270_get_session(widget),hostname,1))
  251 + again = FALSE;
  252 + else
  253 + gtk_widget_set_visible(dialog,TRUE);
  254 +
  255 + g_free(hostname);
  256 + break;
  257 +
  258 + case GTK_RESPONSE_REJECT:
  259 + again = FALSE;
  260 + break;
  261 + }
  262 + }
  263 +
  264 + gtk_widget_destroy(dialog);
  265 +
  266 + g_free(cfghost);
  267 + }
  268 +
... ...
src/pw3270/main.c
... ... @@ -44,7 +44,7 @@
44 44  
45 45 struct option
46 46 {
47   - LIB3270_OPTION host;
  47 + int colors;
48 48 };
49 49  
50 50 #define ERROR_DOMAIN g_quark_from_static_string(PACKAGE_NAME)
... ... @@ -169,21 +169,21 @@ static gboolean datadir(const gchar *option_name, const gchar *value, gpointer d
169 169  
170 170 static gboolean optcolors(const gchar *option_name, const gchar *value, gpointer data, GError **error)
171 171 {
172   - switch(atoi(value))
173   - {
174   - case 8:
175   - ((struct option *) data)->host |= LIB3270_OPTION_COLOR8;
176   - break;
177   -
178   - case 16:
179   - break;
  172 + static const unsigned char valid[] = { 2,8,16 };
  173 + int f;
  174 + unsigned char optval = (unsigned char) atoi(value);
180 175  
181   - default:
182   - *error = g_error_new(ERROR_DOMAIN,EINVAL, _("Unexpected or invalid color value \"%s\""), value );
183   - return FALSE;
  176 + for(f=0;f<G_N_ELEMENTS(valid);f++)
  177 + {
  178 + if(optval == valid[f])
  179 + {
  180 + ((struct option *) data)->colors = optval;
  181 + return TRUE;
  182 + }
184 183 }
185 184  
186   - return TRUE;
  185 + *error = g_error_new(ERROR_DOMAIN,EINVAL, _("Unexpected or invalid color value \"%s\""), value );
  186 + return FALSE;
187 187 }
188 188  
189 189 int main(int argc, char *argv[])
... ... @@ -344,7 +344,8 @@ int main(int argc, char *argv[])
344 344  
345 345 toplevel = pw3270_new(host);
346 346 pw3270_set_session_name(toplevel,session_name);
347   - pw3270_set_session_options(toplevel,cmdline_opt.host);
  347 + pw3270_set_session_color_type(toplevel,cmdline_opt.colors);
  348 + // pw3270_set_session_options(toplevel,cmdline_opt.host);
348 349  
349 350 toplevel_setup(GTK_WINDOW(toplevel));
350 351  
... ...
src/pw3270/v3270/widget.c
... ... @@ -1444,6 +1444,12 @@ void v3270_set_session_options(GtkWidget *widget, LIB3270_OPTION options)
1444 1444 lib3270_set_options(GTK_V3270(widget)->host,options);
1445 1445 }
1446 1446  
  1447 +int v3270_set_session_color_type(GtkWidget *widget, unsigned short colortype)
  1448 +{
  1449 + g_return_val_if_fail(GTK_IS_V3270(widget),EFAULT);
  1450 + return lib3270_set_color_type(GTK_V3270(widget)->host,colortype);
  1451 +}
  1452 +
1447 1453 gboolean v3270_is_connected(GtkWidget *widget)
1448 1454 {
1449 1455 g_return_val_if_fail(GTK_IS_V3270(widget),FALSE);
... ...
src/pw3270/window.c
... ... @@ -239,6 +239,12 @@
239 239 v3270_set_session_options(GTK_PW3270(widget)->terminal,options);
240 240 }
241 241  
  242 + LIB3270_EXPORT int pw3270_set_session_color_type(GtkWidget *widget, unsigned short colortype)
  243 + {
  244 + g_return_val_if_fail(GTK_IS_PW3270(widget),EFAULT);
  245 + return v3270_set_session_color_type(GTK_PW3270(widget)->terminal,colortype);
  246 + }
  247 +
242 248 static void chktoplevel(GtkWidget *window, GtkWidget **widget)
243 249 {
244 250 if(*widget)
... ...