Commit c03eb89e945b8e9a2ca1d94da4236e012f4f7977

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

Melhorando diálogo de configuração de servidor

@@ -263,6 +263,9 @@ @@ -263,6 +263,9 @@
263 <Option compilerVar="CC" /> 263 <Option compilerVar="CC" />
264 </Unit> 264 </Unit>
265 <Unit filename="src/pw3270/globals.h" /> 265 <Unit filename="src/pw3270/globals.h" />
  266 + <Unit filename="src/pw3270/hostdialog.c">
  267 + <Option compilerVar="CC" />
  268 + </Unit>
266 <Unit filename="src/pw3270/macros.c"> 269 <Unit filename="src/pw3270/macros.c">
267 <Option compilerVar="CC" /> 270 <Option compilerVar="CC" />
268 </Unit> 271 </Unit>
src/include/lib3270.h
@@ -241,12 +241,14 @@ @@ -241,12 +241,14 @@
241 */ 241 */
242 typedef enum lib3270_option 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 } LIB3270_OPTION; 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 #define LIB3270_OPTION_DEFAULT 0 252 #define LIB3270_OPTION_DEFAULT 0
251 #define LIB3270_OPTION_COUNT 3 253 #define LIB3270_OPTION_COUNT 3
252 254
@@ -979,6 +981,7 @@ @@ -979,6 +981,7 @@
979 981
980 LIB3270_EXPORT LIB3270_OPTION lib3270_get_options(H3270 *hSession); 982 LIB3270_EXPORT LIB3270_OPTION lib3270_get_options(H3270 *hSession);
981 LIB3270_EXPORT void lib3270_set_options(H3270 *hSession, LIB3270_OPTION opt); 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 LIB3270_EXPORT const LIB3270_OPTION_ENTRY * lib3270_get_option_list(void); 986 LIB3270_EXPORT const LIB3270_OPTION_ENTRY * lib3270_get_option_list(void);
984 987
src/include/lib3270/session.h
@@ -98,7 +98,7 @@ @@ -98,7 +98,7 @@
98 int oerr_lock : 1; 98 int oerr_lock : 1;
99 int unlock_delay : 1; 99 int unlock_delay : 1;
100 int auto_reconnect_inprogress : 1; 100 int auto_reconnect_inprogress : 1;
101 -// int color8 : 1; 101 + int colors : 5;
102 int apl_mode : 1; 102 int apl_mode : 1;
103 int icrnl : 1; 103 int icrnl : 1;
104 int inlcr : 1; 104 int inlcr : 1;
src/include/pw3270.h
@@ -66,6 +66,7 @@ @@ -66,6 +66,7 @@
66 LIB3270_EXPORT const gchar * pw3270_get_session_name(GtkWidget *widget); 66 LIB3270_EXPORT const gchar * pw3270_get_session_name(GtkWidget *widget);
67 LIB3270_EXPORT void pw3270_set_session_name(GtkWidget *widget, const gchar *name); 67 LIB3270_EXPORT void pw3270_set_session_name(GtkWidget *widget, const gchar *name);
68 LIB3270_EXPORT void pw3270_set_session_options(GtkWidget *widget, LIB3270_OPTION options); 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 LIB3270_EXPORT gint pw3270_get_integer(GtkWidget *widget, const gchar *group, const gchar *key, gint def); 71 LIB3270_EXPORT gint pw3270_get_integer(GtkWidget *widget, const gchar *group, const gchar *key, gint def);
71 LIB3270_EXPORT void pw3270_set_integer(GtkWidget *widget, const gchar *group, const gchar *key, gint val); 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,6 +189,7 @@
189 LIB3270_EXPORT int v3270_set_script(GtkWidget *widget, const gchar id, gboolean on); 189 LIB3270_EXPORT int v3270_set_script(GtkWidget *widget, const gchar id, gboolean on);
190 LIB3270_EXPORT void v3270_set_scaled_fonts(GtkWidget *widget, gboolean on); 190 LIB3270_EXPORT void v3270_set_scaled_fonts(GtkWidget *widget, gboolean on);
191 LIB3270_EXPORT void v3270_set_session_options(GtkWidget *widget, LIB3270_OPTION options); 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 LIB3270_EXPORT void v3270_set_host(GtkWidget *widget, const gchar *uri); 193 LIB3270_EXPORT void v3270_set_host(GtkWidget *widget, const gchar *uri);
193 194
194 // Keyboard & Mouse special actions 195 // Keyboard & Mouse special actions
src/lib3270/options.c
@@ -39,13 +39,6 @@ @@ -39,13 +39,6 @@
39 static const const LIB3270_OPTION_ENTRY options[LIB3270_OPTION_COUNT+1] = 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 LIB3270_OPTION_KYBD_AS400, 42 LIB3270_OPTION_KYBD_AS400,
50 "as400", 43 "as400",
51 N_( "Host is AS/400" ), 44 N_( "Host is AS/400" ),
@@ -84,6 +77,37 @@ LIB3270_EXPORT void lib3270_set_options(H3270 *hSession, LIB3270_OPTION opt) @@ -84,6 +77,37 @@ LIB3270_EXPORT void lib3270_set_options(H3270 *hSession, LIB3270_OPTION opt)
84 hSession->options = opt; 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 LIB3270_EXPORT const LIB3270_OPTION_ENTRY * lib3270_get_option_list(void) 111 LIB3270_EXPORT const LIB3270_OPTION_ENTRY * lib3270_get_option_list(void)
88 { 112 {
89 return options; 113 return options;
src/lib3270/sf.c
@@ -820,13 +820,13 @@ static void do_qr_color(H3270 *hSession) @@ -820,13 +820,13 @@ static void do_qr_color(H3270 *hSession)
820 820
821 trace_ds(hSession,"> QueryReply(Color)\n"); 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 space3270out(hSession,4 + 2*15); 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 for (i = 0xf1; i < 0xf1 + color_max - 1; i++) 830 for (i = 0xf1; i < 0xf1 + color_max - 1; i++)
831 { 831 {
832 *hSession->obptr++ = i; 832 *hSession->obptr++ = i;
src/pw3270/Makefile.in
@@ -58,7 +58,7 @@ include uiparser/sources.mak @@ -58,7 +58,7 @@ include uiparser/sources.mak
58 58
59 APP_SOURCES= main.c @APP_GUI_SRC@ 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 filetransfer.c tools.c plugin.c macros.c\ 62 filetransfer.c tools.c plugin.c macros.c\
63 $(foreach SRC, $(UI_PARSER_SRC), uiparser/$(SRC)) \ 63 $(foreach SRC, $(UI_PARSER_SRC), uiparser/$(SRC)) \
64 $(foreach SRC, $(V3270_SRC), v3270/$(SRC)) \ 64 $(foreach SRC, $(V3270_SRC), v3270/$(SRC)) \
src/pw3270/actions.c
@@ -74,6 +74,7 @@ static void connect_action(GtkAction *action, GtkWidget *widget) @@ -74,6 +74,7 @@ static void connect_action(GtkAction *action, GtkWidget *widget)
74 if(host) 74 if(host)
75 { 75 {
76 v3270_set_session_options(widget,0); 76 v3270_set_session_options(widget,0);
  77 + v3270_set_session_color_type(widget,0);
77 v3270_connect(widget,host); 78 v3270_connect(widget,host);
78 return; 79 return;
79 } 80 }
src/pw3270/dialog.c
@@ -34,19 +34,6 @@ @@ -34,19 +34,6 @@
34 34
35 /*--[ Globals ]--------------------------------------------------------------------------------------*/ 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 static const struct _charset 37 static const struct _charset
51 { 38 {
52 const gchar *name; 39 const gchar *name;
@@ -317,193 +304,6 @@ @@ -317,193 +304,6 @@
317 return 0; 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 void save_all_action(GtkAction *action, GtkWidget *widget) 307 void save_all_action(GtkAction *action, GtkWidget *widget)
508 { 308 {
509 gchar *text = v3270_get_text(widget,0,-1); 309 gchar *text = v3270_get_text(widget,0,-1);
src/pw3270/hostdialog.c 0 → 100644
@@ -0,0 +1,268 @@ @@ -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,7 +44,7 @@
44 44
45 struct option 45 struct option
46 { 46 {
47 - LIB3270_OPTION host; 47 + int colors;
48 }; 48 };
49 49
50 #define ERROR_DOMAIN g_quark_from_static_string(PACKAGE_NAME) 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,21 +169,21 @@ static gboolean datadir(const gchar *option_name, const gchar *value, gpointer d
169 169
170 static gboolean optcolors(const gchar *option_name, const gchar *value, gpointer data, GError **error) 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 int main(int argc, char *argv[]) 189 int main(int argc, char *argv[])
@@ -344,7 +344,8 @@ int main(int argc, char *argv[]) @@ -344,7 +344,8 @@ int main(int argc, char *argv[])
344 344
345 toplevel = pw3270_new(host); 345 toplevel = pw3270_new(host);
346 pw3270_set_session_name(toplevel,session_name); 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 toplevel_setup(GTK_WINDOW(toplevel)); 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,6 +1444,12 @@ void v3270_set_session_options(GtkWidget *widget, LIB3270_OPTION options)
1444 lib3270_set_options(GTK_V3270(widget)->host,options); 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 gboolean v3270_is_connected(GtkWidget *widget) 1453 gboolean v3270_is_connected(GtkWidget *widget)
1448 { 1454 {
1449 g_return_val_if_fail(GTK_IS_V3270(widget),FALSE); 1455 g_return_val_if_fail(GTK_IS_V3270(widget),FALSE);
src/pw3270/window.c
@@ -239,6 +239,12 @@ @@ -239,6 +239,12 @@
239 v3270_set_session_options(GTK_PW3270(widget)->terminal,options); 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 static void chktoplevel(GtkWidget *window, GtkWidget **widget) 248 static void chktoplevel(GtkWidget *window, GtkWidget **widget)
243 { 249 {
244 if(*widget) 250 if(*widget)