Commit 0c06052f3c10589b288c136f256e3f0de7c961e7

Authored by perry.werneck@gmail.com
1 parent 8a5df265

Implementando options na caixa de diálogo de host

src/include/lib3270.h
@@ -236,6 +236,17 @@ @@ -236,6 +236,17 @@
236 236
237 237
238 /** 238 /**
  239 + * Connect options
  240 + *
  241 + */
  242 + typedef enum lib3270_option
  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_AS400 = 0x0002, /**< Host is AS400? */
  246 +
  247 + } LIB3270_OPTION;
  248 +
  249 + /**
239 * SSL state 250 * SSL state
240 * 251 *
241 */ 252 */
@@ -954,6 +965,10 @@ @@ -954,6 +965,10 @@
954 LIB3270_EXPORT void lib3270_set_trace_handler( void (*handler)(H3270 *session, const char *fmt, va_list args) ); 965 LIB3270_EXPORT void lib3270_set_trace_handler( void (*handler)(H3270 *session, const char *fmt, va_list args) );
955 LIB3270_EXPORT void lib3270_write_dstrace(H3270 *session, const char *fmt, ...) LIB3270_GNUC_FORMAT(2,3); 966 LIB3270_EXPORT void lib3270_write_dstrace(H3270 *session, const char *fmt, ...) LIB3270_GNUC_FORMAT(2,3);
956 967
  968 + LIB3270_EXPORT LIB3270_OPTION lib3270_get_options(H3270 *hSession);
  969 + LIB3270_EXPORT void lib3270_set_options(H3270 *hSession, LIB3270_OPTION opt);
  970 +
  971 +
957 #ifdef __cplusplus 972 #ifdef __cplusplus
958 } 973 }
959 #endif 974 #endif
src/include/lib3270/session.h
@@ -83,6 +83,8 @@ @@ -83,6 +83,8 @@
83 LIB3270_CSTATE cstate; /**< Connection state */ 83 LIB3270_CSTATE cstate; /**< Connection state */
84 84
85 // flags 85 // flags
  86 + LIB3270_OPTION options; /**< Session options */
  87 +
86 int bgthread : 1; /**< Running on a background thread ? */ 88 int bgthread : 1; /**< Running on a background thread ? */
87 int selected : 1; /**< Has selected region? */ 89 int selected : 1; /**< Has selected region? */
88 int rectsel : 1; /**< Selected region is a rectangle ? */ 90 int rectsel : 1; /**< Selected region is a rectangle ? */
@@ -96,7 +98,7 @@ @@ -96,7 +98,7 @@
96 int oerr_lock : 1; 98 int oerr_lock : 1;
97 int unlock_delay : 1; 99 int unlock_delay : 1;
98 int auto_reconnect_inprogress : 1; 100 int auto_reconnect_inprogress : 1;
99 - int color8 : 1; 101 +// int color8 : 1;
100 int apl_mode : 1; 102 int apl_mode : 1;
101 int icrnl : 1; 103 int icrnl : 1;
102 int inlcr : 1; 104 int inlcr : 1;
src/lib3270/api.h
@@ -299,7 +299,8 @@ @@ -299,7 +299,8 @@
299 299
300 #define CHAR_ATTR_UNCONVERTED LIB3270_ATTR_CG 300 #define CHAR_ATTR_UNCONVERTED LIB3270_ATTR_CG
301 301
302 - struct lib3270_option 302 +/*
  303 + struct _lib3270_option
303 { 304 {
304 const char *name; 305 const char *name;
305 enum 306 enum
@@ -320,7 +321,8 @@ @@ -320,7 +321,8 @@
320 321
321 #define new_3270_session(m) lib3270_session_new(m) 322 #define new_3270_session(m) lib3270_session_new(m)
322 323
323 - LOCAL_EXTERN const struct lib3270_option * get_3270_option_table(int sz); 324 + LOCAL_EXTERN const struct _lib3270_option * get_3270_option_table(int sz);
  325 +*/
324 326
325 327
326 /* Set/Get screen contents */ 328 /* Set/Get screen contents */
src/lib3270/host.c
@@ -607,7 +607,7 @@ static int do_connect(H3270 *hSession, const char *n) @@ -607,7 +607,7 @@ static int do_connect(H3270 *hSession, const char *n)
607 */ 607 */
608 int lib3270_connect(H3270 *hSession, const char *n, int wait) 608 int lib3270_connect(H3270 *hSession, const char *n, int wait)
609 { 609 {
610 - int rc; 610 + int rc;
611 611
612 CHECK_SESSION_HANDLE(hSession); 612 CHECK_SESSION_HANDLE(hSession);
613 613
src/lib3270/session.c
@@ -453,3 +453,15 @@ LIB3270_EXPORT void * lib3270_get_widget(H3270 *h) @@ -453,3 +453,15 @@ LIB3270_EXPORT void * lib3270_get_widget(H3270 *h)
453 CHECK_SESSION_HANDLE(h); 453 CHECK_SESSION_HANDLE(h);
454 return h->widget; 454 return h->widget;
455 } 455 }
  456 +
  457 +LIB3270_EXPORT LIB3270_OPTION lib3270_get_options(H3270 *hSession)
  458 +{
  459 + CHECK_SESSION_HANDLE(hSession);
  460 + return hSession->options;
  461 +}
  462 +
  463 +LIB3270_EXPORT void lib3270_set_options(H3270 *hSession, LIB3270_OPTION opt)
  464 +{
  465 + CHECK_SESSION_HANDLE(hSession);
  466 + hSession->options = opt;
  467 +}
src/lib3270/sf.c
@@ -820,7 +820,7 @@ static void do_qr_color(H3270 *hSession) @@ -820,7 +820,7 @@ 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->color8 ? 8: 16; /* report on 8 or 16 colors */ 823 + color_max = (hSession->options & LIB3270_OPTION_COLOR8) ? 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 */ 826 *hSession->obptr++ = 0x00; /* no options */
src/pw3270/dialog.c
@@ -288,6 +288,26 @@ @@ -288,6 +288,26 @@
288 288
289 void hostname_action(GtkAction *action, GtkWidget *widget) 289 void hostname_action(GtkAction *action, GtkWidget *widget)
290 { 290 {
  291 + static const struct _option
  292 + {
  293 + LIB3270_OPTION value;
  294 + const gchar * text;
  295 + const gchar * tooltip;
  296 + } option[] =
  297 + {
  298 + {
  299 + LIB3270_OPTION_COLOR8,
  300 + N_( "_8 colors" ),
  301 + N_( "If active, pw3270 will respond to a Query(Color) with a list of 8 supported colors." )
  302 + },
  303 +
  304 + {
  305 + LIB3270_OPTION_AS400,
  306 + N_( "Host is AS_400" ),
  307 + NULL
  308 + },
  309 + };
  310 +
291 const gchar * title = g_object_get_data(G_OBJECT(action),"title"); 311 const gchar * title = g_object_get_data(G_OBJECT(action),"title");
292 gchar * cfghost = get_string_from_config("host","uri",""); 312 gchar * cfghost = get_string_from_config("host","uri","");
293 gchar * hostname; 313 gchar * hostname;
@@ -297,7 +317,8 @@ @@ -297,7 +317,8 @@
297 GtkTable * table = GTK_TABLE(gtk_table_new(2,4,FALSE)); 317 GtkTable * table = GTK_TABLE(gtk_table_new(2,4,FALSE));
298 GtkEntry * host = GTK_ENTRY(gtk_entry_new()); 318 GtkEntry * host = GTK_ENTRY(gtk_entry_new());
299 GtkEntry * port = GTK_ENTRY(gtk_entry_new()); 319 GtkEntry * port = GTK_ENTRY(gtk_entry_new());
300 - GtkToggleButton * checkbox = GTK_TOGGLE_BUTTON(gtk_check_button_new_with_mnemonic( _( "_Secure connection" ) )); 320 + GtkToggleButton * sslcheck = GTK_TOGGLE_BUTTON(gtk_check_button_new_with_mnemonic( _( "_Secure connection" ) ));
  321 + GtkToggleButton * optcheck[G_N_ELEMENTS(option)];
301 GtkWidget * dialog = gtk_dialog_new_with_buttons( gettext(title ? title : N_( "Select hostname" )), 322 GtkWidget * dialog = gtk_dialog_new_with_buttons( gettext(title ? title : N_( "Select hostname" )),
302 GTK_WINDOW(gtk_widget_get_toplevel(widget)), 323 GTK_WINDOW(gtk_widget_get_toplevel(widget)),
303 GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, 324 GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
@@ -312,7 +333,6 @@ @@ -312,7 +333,6 @@
312 gtk_entry_set_max_length(port,6); 333 gtk_entry_set_max_length(port,6);
313 gtk_entry_set_width_chars(port,7); 334 gtk_entry_set_width_chars(port,7);
314 335
315 -  
316 label = gtk_label_new_with_mnemonic( _("_Hostname:") ); 336 label = gtk_label_new_with_mnemonic( _("_Hostname:") );
317 gtk_label_set_mnemonic_widget(GTK_LABEL(label),GTK_WIDGET(host)); 337 gtk_label_set_mnemonic_widget(GTK_LABEL(label),GTK_WIDGET(host));
318 gtk_table_attach(table,label,0,1,0,1,0,0,5,0); 338 gtk_table_attach(table,label,0,1,0,1,0,0,5,0);
@@ -323,7 +343,36 @@ @@ -323,7 +343,36 @@
323 gtk_table_attach(table, label, 2,3,0,1,0,0,5,0); 343 gtk_table_attach(table, label, 2,3,0,1,0,0,5,0);
324 gtk_table_attach(table,GTK_WIDGET(port), 3,4,0,1,GTK_FILL,0,0,0); 344 gtk_table_attach(table,GTK_WIDGET(port), 3,4,0,1,GTK_FILL,0,0,0);
325 345
326 - gtk_table_attach(table,GTK_WIDGET(checkbox), 1,2,1,2,GTK_EXPAND|GTK_FILL,0,0,0); 346 + {
  347 + int f;
  348 + int col = 1;
  349 + int row = 0;
  350 + LIB3270_OPTION optval = lib3270_get_options(v3270_get_session(widget));
  351 +
  352 + GtkTable * frame = GTK_TABLE(gtk_table_new(2,2,FALSE));
  353 + gtk_table_attach(frame,GTK_WIDGET(sslcheck), 0,1,0,1,GTK_EXPAND|GTK_FILL,0,0,0);
  354 +
  355 + for(f=0;f<G_N_ELEMENTS(option);f++)
  356 + {
  357 + optcheck[f] = GTK_TOGGLE_BUTTON(gtk_check_button_new_with_mnemonic( gettext( option[f].text ) ));
  358 +
  359 + if(option[f].tooltip)
  360 + gtk_widget_set_tooltip_markup(GTK_WIDGET(optcheck[f]),gettext(option[f].tooltip));
  361 +
  362 + gtk_table_attach(frame,GTK_WIDGET(optcheck[f]),col,col+1,row,row+1,GTK_EXPAND|GTK_FILL,0,0,0);
  363 + gtk_toggle_button_set_active(optcheck[f],optval & option[f].value ? TRUE : FALSE);
  364 +
  365 + if(++col > 1);
  366 + {
  367 + col = 0;
  368 + row++;
  369 + }
  370 +
  371 + }
  372 +
  373 + gtk_table_attach(table,GTK_WIDGET(frame),1,2,1,2,GTK_EXPAND|GTK_FILL,0,0,0);
  374 + }
  375 +
327 376
328 gtk_container_set_border_width(GTK_CONTAINER(table),5); 377 gtk_container_set_border_width(GTK_CONTAINER(table),5);
329 378
@@ -334,12 +383,12 @@ @@ -334,12 +383,12 @@
334 #ifdef HAVE_LIBSSL 383 #ifdef HAVE_LIBSSL
335 if(!strncmp(hostname,"L:",2)) 384 if(!strncmp(hostname,"L:",2))
336 { 385 {
337 - gtk_toggle_button_set_active(checkbox,TRUE); 386 + gtk_toggle_button_set_active(sslcheck,TRUE);
338 hostname += 2; 387 hostname += 2;
339 } 388 }
340 #else 389 #else
341 - gtk_toggle_button_set_active(checkbox,FALSE);  
342 - gtk_widget_set_sensitive(GTK_WIDGET(checkbox),FALSE); 390 + gtk_toggle_button_set_active(sslcheck,FALSE);
  391 + gtk_widget_set_sensitive(GTK_WIDGET(sslcheck),FALSE);
343 if(!strncmp(hostname,"L:",2)) 392 if(!strncmp(hostname,"L:",2))
344 hostname += 2; 393 hostname += 2;
345 #endif 394 #endif
@@ -367,7 +416,7 @@ @@ -367,7 +416,7 @@
367 case GTK_RESPONSE_ACCEPT: 416 case GTK_RESPONSE_ACCEPT:
368 gtk_widget_set_sensitive(dialog,FALSE); 417 gtk_widget_set_sensitive(dialog,FALSE);
369 418
370 - hostname = g_strconcat( gtk_toggle_button_get_active(checkbox) ? "L:" : "", 419 + hostname = g_strconcat( gtk_toggle_button_get_active(sslcheck) ? "L:" : "",
371 gtk_entry_get_text(host), 420 gtk_entry_get_text(host),
372 ":", 421 ":",
373 gtk_entry_get_text(port), 422 gtk_entry_get_text(port),