Commit 5089e43f7462bb35226e829b9e2c612f2ba43b44
1 parent
913e6102
Exists in
master
and in
5 other branches
Implementando novo widget para seleção de servidor
Showing
12 changed files
with
584 additions
and
55 deletions
Show diff stats
pw3270.cbp
@@ -416,6 +416,9 @@ | @@ -416,6 +416,9 @@ | ||
416 | <Option compilerVar="CC" /> | 416 | <Option compilerVar="CC" /> |
417 | </Unit> | 417 | </Unit> |
418 | <Unit filename="src/pw3270/v3270/genmarshal" /> | 418 | <Unit filename="src/pw3270/v3270/genmarshal" /> |
419 | + <Unit filename="src/pw3270/v3270/hostselect.c"> | ||
420 | + <Option compilerVar="CC" /> | ||
421 | + </Unit> | ||
419 | <Unit filename="src/pw3270/v3270/iocallback.c"> | 422 | <Unit filename="src/pw3270/v3270/iocallback.c"> |
420 | <Option compilerVar="CC" /> | 423 | <Option compilerVar="CC" /> |
421 | </Unit> | 424 | </Unit> |
src/include/lib3270.h
@@ -415,6 +415,9 @@ | @@ -415,6 +415,9 @@ | ||
415 | */ | 415 | */ |
416 | LIB3270_EXPORT const char * lib3270_get_hostname(H3270 *h); | 416 | LIB3270_EXPORT const char * lib3270_get_hostname(H3270 *h); |
417 | 417 | ||
418 | + LIB3270_EXPORT void lib3270_set_hostname(H3270 *h, const char *hostname); | ||
419 | + | ||
420 | + | ||
418 | /** | 421 | /** |
419 | * Get servic or port for the connect/reconnect operations. | 422 | * Get servic or port for the connect/reconnect operations. |
420 | * | 423 | * |
@@ -425,6 +428,7 @@ | @@ -425,6 +428,7 @@ | ||
425 | */ | 428 | */ |
426 | LIB3270_EXPORT const char * lib3270_get_srvcname(H3270 *h); | 429 | LIB3270_EXPORT const char * lib3270_get_srvcname(H3270 *h); |
427 | 430 | ||
431 | + LIB3270_EXPORT void lib3270_set_srvcname(H3270 *h, const char *srvc); | ||
428 | 432 | ||
429 | /** | 433 | /** |
430 | * Get session options. | 434 | * Get session options. |
@@ -1055,6 +1059,8 @@ | @@ -1055,6 +1059,8 @@ | ||
1055 | LIB3270_EXPORT int lib3270_set_color_type(H3270 *hSession, unsigned short colortype); | 1059 | LIB3270_EXPORT int lib3270_set_color_type(H3270 *hSession, unsigned short colortype); |
1056 | LIB3270_EXPORT unsigned short lib3270_get_color_type(H3270 *hSession); | 1060 | LIB3270_EXPORT unsigned short lib3270_get_color_type(H3270 *hSession); |
1057 | 1061 | ||
1062 | + LIB3270_EXPORT int lib3270_set_host_type(H3270 *hSession, const char *name); | ||
1063 | + | ||
1058 | LIB3270_EXPORT const LIB3270_OPTION_ENTRY * lib3270_get_option_list(void); | 1064 | LIB3270_EXPORT const LIB3270_OPTION_ENTRY * lib3270_get_option_list(void); |
1059 | 1065 | ||
1060 | /** | 1066 | /** |
src/include/pw3270/v3270.h
@@ -232,6 +232,7 @@ | @@ -232,6 +232,7 @@ | ||
232 | 232 | ||
233 | // Auxiliary widgets | 233 | // Auxiliary widgets |
234 | LIB3270_EXPORT GtkWidget * v3270_host_select_new(GtkWidget *widget); | 234 | LIB3270_EXPORT GtkWidget * v3270_host_select_new(GtkWidget *widget); |
235 | + LIB3270_EXPORT void v3270_select_host(GtkWidget *widget); | ||
235 | 236 | ||
236 | 237 | ||
237 | G_END_DECLS | 238 | G_END_DECLS |
src/lib3270/host.c
@@ -492,6 +492,20 @@ void lib3270_st_changed(H3270 *h, LIB3270_STATE tx, int mode) | @@ -492,6 +492,20 @@ void lib3270_st_changed(H3270 *h, LIB3270_STATE tx, int mode) | ||
492 | trace("%s ends",__FUNCTION__); | 492 | trace("%s ends",__FUNCTION__); |
493 | } | 493 | } |
494 | 494 | ||
495 | +static void update_host(H3270 *h) | ||
496 | +{ | ||
497 | + Replace(h->host.full, | ||
498 | + lib3270_strdup_printf( | ||
499 | + "%s%s:%s", | ||
500 | + h->options&LIB3270_OPTION_SSL ? "tn3270s://" : "tn3270://", | ||
501 | + h->host.current, | ||
502 | + h->host.srvc | ||
503 | + )); | ||
504 | + | ||
505 | + trace("hosturl=[%s]",h->host.full); | ||
506 | + | ||
507 | +} | ||
508 | + | ||
495 | LIB3270_EXPORT const char * lib3270_set_host(H3270 *h, const char *n) | 509 | LIB3270_EXPORT const char * lib3270_set_host(H3270 *h, const char *n) |
496 | { | 510 | { |
497 | CHECK_SESSION_HANDLE(h); | 511 | CHECK_SESSION_HANDLE(h); |
@@ -558,17 +572,8 @@ LIB3270_EXPORT const char * lib3270_set_host(H3270 *h, const char *n) | @@ -558,17 +572,8 @@ LIB3270_EXPORT const char * lib3270_set_host(H3270 *h, const char *n) | ||
558 | 572 | ||
559 | Replace(h->host.current,strdup(hostname)); | 573 | Replace(h->host.current,strdup(hostname)); |
560 | Replace(h->host.srvc,strdup(srvc)); | 574 | Replace(h->host.srvc,strdup(srvc)); |
561 | - Replace(h->host.full, | ||
562 | - lib3270_strdup_printf( | ||
563 | - "%s%s:%s%s%s", | ||
564 | - h->options&LIB3270_OPTION_SSL ? "tn3270s://" : "tn3270://", | ||
565 | - hostname, | ||
566 | - srvc, | ||
567 | - *query ? "?" : "", | ||
568 | - query | ||
569 | - )); | ||
570 | - | ||
571 | - trace("hosturl=[%s]",h->host.full); | 575 | + |
576 | + update_host(h); | ||
572 | 577 | ||
573 | free(str); | 578 | free(str); |
574 | } | 579 | } |
@@ -586,6 +591,13 @@ LIB3270_EXPORT const char * lib3270_get_hostname(H3270 *h) | @@ -586,6 +591,13 @@ LIB3270_EXPORT const char * lib3270_get_hostname(H3270 *h) | ||
586 | return ""; | 591 | return ""; |
587 | } | 592 | } |
588 | 593 | ||
594 | +LIB3270_EXPORT void lib3270_set_hostname(H3270 *h, const char *hostname) | ||
595 | +{ | ||
596 | + CHECK_SESSION_HANDLE(h); | ||
597 | + Replace(h->host.current,strdup(hostname)); | ||
598 | + update_host(h); | ||
599 | +} | ||
600 | + | ||
589 | LIB3270_EXPORT const char * lib3270_get_srvcname(H3270 *h) | 601 | LIB3270_EXPORT const char * lib3270_get_srvcname(H3270 *h) |
590 | { | 602 | { |
591 | CHECK_SESSION_HANDLE(h); | 603 | CHECK_SESSION_HANDLE(h); |
@@ -594,6 +606,13 @@ LIB3270_EXPORT const char * lib3270_get_srvcname(H3270 *h) | @@ -594,6 +606,13 @@ LIB3270_EXPORT const char * lib3270_get_srvcname(H3270 *h) | ||
594 | return "telnet"; | 606 | return "telnet"; |
595 | } | 607 | } |
596 | 608 | ||
609 | +LIB3270_EXPORT void lib3270_set_srvcname(H3270 *h, const char *srvc) | ||
610 | +{ | ||
611 | + CHECK_SESSION_HANDLE(h); | ||
612 | + Replace(h->host.srvc,strdup(srvc)); | ||
613 | + update_host(h); | ||
614 | +} | ||
615 | + | ||
597 | LIB3270_EXPORT const char * lib3270_get_host(H3270 *h) | 616 | LIB3270_EXPORT const char * lib3270_get_host(H3270 *h) |
598 | { | 617 | { |
599 | CHECK_SESSION_HANDLE(h); | 618 | CHECK_SESSION_HANDLE(h); |
src/lib3270/options.c
@@ -134,3 +134,33 @@ LIB3270_EXPORT int lib3270_is_tso(H3270 *hSession) | @@ -134,3 +134,33 @@ LIB3270_EXPORT int lib3270_is_tso(H3270 *hSession) | ||
134 | CHECK_SESSION_HANDLE(hSession); | 134 | CHECK_SESSION_HANDLE(hSession); |
135 | return (hSession->options & LIB3270_OPTION_TSO) != 0; | 135 | return (hSession->options & LIB3270_OPTION_TSO) != 0; |
136 | } | 136 | } |
137 | + | ||
138 | +LIB3270_EXPORT int lib3270_set_host_type(H3270 *hSession, const char *name) | ||
139 | +{ | ||
140 | + static const struct _host_type | ||
141 | + { | ||
142 | + const char * name; | ||
143 | + LIB3270_OPTION option; | ||
144 | + } host_type[] = | ||
145 | + { | ||
146 | + { "S390", LIB3270_OPTION_S390 }, | ||
147 | + { "AS400", LIB3270_OPTION_AS400 }, | ||
148 | + { "TSO", LIB3270_OPTION_TSO }, | ||
149 | + { "VM/CMS", 0 } | ||
150 | + }; | ||
151 | + | ||
152 | + int f; | ||
153 | + | ||
154 | + for(f=0;f<(sizeof(host_type)/sizeof(host_type[0]));f++) | ||
155 | + { | ||
156 | + if(!strcasecmp(host_type[f].name,name)) | ||
157 | + { | ||
158 | + hSession->options &= ~LIB3270_OPTION_HOST_TYPE; | ||
159 | + hSession->options |= host_type[f].option; | ||
160 | + return 0; | ||
161 | + } | ||
162 | + } | ||
163 | + | ||
164 | + return EINVAL; | ||
165 | +} | ||
166 | + |
src/pw3270/actions.c
@@ -75,6 +75,9 @@ static void connect_action(GtkAction *action, GtkWidget *widget) | @@ -75,6 +75,9 @@ static void connect_action(GtkAction *action, GtkWidget *widget) | ||
75 | 75 | ||
76 | trace_action(action,widget); | 76 | trace_action(action,widget); |
77 | 77 | ||
78 | + #warning Reimplementar | ||
79 | + | ||
80 | + /* | ||
78 | if(!systype) | 81 | if(!systype) |
79 | systype = get_string_from_config("host","systype","S390"); | 82 | systype = get_string_from_config("host","systype","S390"); |
80 | 83 | ||
@@ -87,6 +90,7 @@ static void connect_action(GtkAction *action, GtkWidget *widget) | @@ -87,6 +90,7 @@ static void connect_action(GtkAction *action, GtkWidget *widget) | ||
87 | 90 | ||
88 | v3270_set_session_color_type(widget,colors); | 91 | v3270_set_session_color_type(widget,colors); |
89 | v3270_set_session_options(widget,pw3270_options_by_hosttype(systype)); | 92 | v3270_set_session_options(widget,pw3270_options_by_hosttype(systype)); |
93 | + */ | ||
90 | 94 | ||
91 | if(host) | 95 | if(host) |
92 | { | 96 | { |
src/pw3270/hostdialog.c
@@ -32,6 +32,7 @@ | @@ -32,6 +32,7 @@ | ||
32 | 32 | ||
33 | /*--[ Globals ]--------------------------------------------------------------------------------------*/ | 33 | /*--[ Globals ]--------------------------------------------------------------------------------------*/ |
34 | 34 | ||
35 | +/* | ||
35 | static const struct _host_type | 36 | static const struct _host_type |
36 | { | 37 | { |
37 | const gchar * name; | 38 | const gchar * name; |
@@ -55,9 +56,11 @@ | @@ -55,9 +56,11 @@ | ||
55 | { 8, N_( "8 colors" ) }, | 56 | { 8, N_( "8 colors" ) }, |
56 | { 2, N_( "Monochrome" ) }, | 57 | { 2, N_( "Monochrome" ) }, |
57 | }; | 58 | }; |
59 | +*/ | ||
58 | 60 | ||
59 | /*--[ Implement ]------------------------------------------------------------------------------------*/ | 61 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
60 | 62 | ||
63 | +/* | ||
61 | LIB3270_OPTION pw3270_options_by_hosttype(const gchar *systype) | 64 | LIB3270_OPTION pw3270_options_by_hosttype(const gchar *systype) |
62 | { | 65 | { |
63 | int f; | 66 | int f; |
@@ -129,12 +132,23 @@ | @@ -129,12 +132,23 @@ | ||
129 | trace("Selected color type: %d",(int) colortable[*iColorTable].colors); | 132 | trace("Selected color type: %d",(int) colortable[*iColorTable].colors); |
130 | 133 | ||
131 | } | 134 | } |
132 | - | 135 | +*/ |
133 | void hostname_action(GtkAction *action, GtkWidget *widget) | 136 | void hostname_action(GtkAction *action, GtkWidget *widget) |
134 | { | 137 | { |
138 | + H3270 * hSession = v3270_get_session(widget); | ||
139 | + gchar * ptr; | ||
140 | + | ||
141 | + lib3270_set_color_type(hSession,(unsigned short) get_integer_from_config("host","colortype",16)); | ||
142 | + | ||
143 | + ptr = get_string_from_config("host","systype","s390"); | ||
144 | + if(*ptr) | ||
145 | + lib3270_set_host_type(hSession,ptr); | ||
146 | + g_free(ptr); | ||
147 | + | ||
148 | + v3270_select_host(widget); | ||
149 | + | ||
150 | +/* | ||
135 | const gchar * title = g_object_get_data(G_OBJECT(action),"title"); | 151 | const gchar * title = g_object_get_data(G_OBJECT(action),"title"); |
136 | -// gchar * cfghost = get_string_from_config("host","uri",""); | ||
137 | -// gchar * hostname; | ||
138 | gchar * ptr; | 152 | gchar * ptr; |
139 | gboolean again = TRUE; | 153 | gboolean again = TRUE; |
140 | int iHostType = 0; | 154 | int iHostType = 0; |
@@ -367,37 +381,6 @@ | @@ -367,37 +381,6 @@ | ||
367 | gtk_toggle_button_set_active(sslcheck,(lib3270_get_options(hSession) & LIB3270_OPTION_SSL) ? TRUE : FALSE); | 381 | gtk_toggle_button_set_active(sslcheck,(lib3270_get_options(hSession) & LIB3270_OPTION_SSL) ? TRUE : FALSE); |
368 | } | 382 | } |
369 | 383 | ||
370 | -/* | ||
371 | - hostname = cfghost; | ||
372 | - | ||
373 | - trace("hostname=[%s]",hostname); | ||
374 | - | ||
375 | -#ifdef HAVE_LIBSSL | ||
376 | - if(!g_ascii_strncasecmp(hostname,"L:",2)) | ||
377 | - { | ||
378 | - gtk_toggle_button_set_active(sslcheck,TRUE); | ||
379 | - hostname += 2; | ||
380 | - } | ||
381 | -#else | ||
382 | - gtk_toggle_button_set_active(sslcheck,FALSE); | ||
383 | - gtk_widget_set_sensitive(GTK_WIDGET(sslcheck),FALSE); | ||
384 | - if(!g_ascii_strncasecmp(hostname,"L:",2)) | ||
385 | - hostname += 2; | ||
386 | -#endif | ||
387 | - | ||
388 | - trace("hostname=[%s]",hostname); | ||
389 | - | ||
390 | - ptr = strchr(hostname,':'); | ||
391 | - if(ptr) | ||
392 | - { | ||
393 | - *(ptr++) = 0; | ||
394 | - gtk_entry_set_text(port,ptr); | ||
395 | - } | ||
396 | - else | ||
397 | - { | ||
398 | - gtk_entry_set_text(port,"23"); | ||
399 | - } | ||
400 | -*/ | ||
401 | 384 | ||
402 | while(again) | 385 | while(again) |
403 | { | 386 | { |
@@ -407,15 +390,6 @@ | @@ -407,15 +390,6 @@ | ||
407 | case GTK_RESPONSE_ACCEPT: | 390 | case GTK_RESPONSE_ACCEPT: |
408 | gtk_widget_set_sensitive(dialog,FALSE); | 391 | gtk_widget_set_sensitive(dialog,FALSE); |
409 | 392 | ||
410 | - /* | ||
411 | - hostname = g_strconcat( gtk_toggle_button_get_active(sslcheck) ? "L:" : "", | ||
412 | - gtk_entry_get_text(host), | ||
413 | - ":", | ||
414 | - gtk_entry_get_text(port), | ||
415 | - NULL | ||
416 | - ); | ||
417 | - */ | ||
418 | - | ||
419 | #if GTK_CHECK_VERSION(2,18,0) | 393 | #if GTK_CHECK_VERSION(2,18,0) |
420 | gtk_widget_set_visible(dialog,FALSE); | 394 | gtk_widget_set_visible(dialog,FALSE); |
421 | #else | 395 | #else |
@@ -455,5 +429,6 @@ | @@ -455,5 +429,6 @@ | ||
455 | gtk_widget_destroy(dialog); | 429 | gtk_widget_destroy(dialog); |
456 | 430 | ||
457 | // g_free(cfghost); | 431 | // g_free(cfghost); |
432 | +*/ | ||
458 | } | 433 | } |
459 | 434 |
@@ -0,0 +1,417 @@ | @@ -0,0 +1,417 @@ | ||
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 "hostselect.h" | ||
31 | + #include <pw3270/v3270.h> | ||
32 | + | ||
33 | +/*--[ Widget definition ]----------------------------------------------------------------------------*/ | ||
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_S390 }, | ||
43 | + { "AS400", N_( "IBM AS/400" ), LIB3270_OPTION_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 | + enum _entry | ||
60 | + { | ||
61 | + ENTRY_HOSTNAME, | ||
62 | + ENTRY_SRVCNAME, | ||
63 | + | ||
64 | + ENTRY_COUNT | ||
65 | + }; | ||
66 | + | ||
67 | + static const gchar *comboLabel[] = { N_("System _type:"), N_("_Color table:") }; | ||
68 | + | ||
69 | + struct _V3270HostSelectWidget | ||
70 | + { | ||
71 | +#if GTK_CHECK_VERSION(3,0,0) | ||
72 | + GtkBin parent; | ||
73 | +#else | ||
74 | + GtkVBox parent; | ||
75 | +#endif // GTK_CHECK_VERSION | ||
76 | + | ||
77 | + LIB3270_OPTION options; /**< Connect option */ | ||
78 | + | ||
79 | + GtkEntry * entry[ENTRY_COUNT]; /**< Entry fields for host & service name */ | ||
80 | + GtkToggleButton * ssl; /**< SSL Connection? */ | ||
81 | + GtkComboBox * combo[G_N_ELEMENTS(comboLabel)]; /**< Model & Color combobox */ | ||
82 | + unsigned short colors; /**< Number of colors */ | ||
83 | + H3270 * hSession; /**< lib3270's session handle */ | ||
84 | + | ||
85 | + }; | ||
86 | + | ||
87 | + struct _V3270HostSelectWidgetClass | ||
88 | + { | ||
89 | +#if GTK_CHECK_VERSION(3,0,0) | ||
90 | + GtkBinClass parent_class; | ||
91 | +#else | ||
92 | + GtkVBoxClass parent_class; | ||
93 | +#endif // GTK_CHECK_VERSION | ||
94 | + }; | ||
95 | + | ||
96 | + | ||
97 | +#if GTK_CHECK_VERSION(3,0,0) | ||
98 | + G_DEFINE_TYPE(V3270HostSelectWidget, V3270HostSelectWidget, GTK_TYPE_BIN); | ||
99 | +#else | ||
100 | + G_DEFINE_TYPE(V3270HostSelectWidget, V3270HostSelectWidget, GTK_TYPE_VBOX); | ||
101 | +#endif // GTK_CHECK_VERSION | ||
102 | + | ||
103 | +/*--[ Implement ]------------------------------------------------------------------------------------*/ | ||
104 | + | ||
105 | +static void V3270HostSelectWidget_class_init(V3270HostSelectWidgetClass *klass) | ||
106 | +{ | ||
107 | +#if GTK_CHECK_VERSION(3,0,0) | ||
108 | +#else | ||
109 | +#endif // GTK_CHECK_VERSION | ||
110 | +} | ||
111 | + | ||
112 | +static void toggle_ssl(GtkToggleButton *button, V3270HostSelectWidget *dialog) | ||
113 | +{ | ||
114 | + if(gtk_toggle_button_get_active(button)) | ||
115 | + dialog->options |= LIB3270_OPTION_SSL; | ||
116 | + else | ||
117 | + dialog->options &= ~LIB3270_OPTION_SSL; | ||
118 | +} | ||
119 | + | ||
120 | +static void systype_changed(GtkComboBox *widget, V3270HostSelectWidget *dialog) | ||
121 | +{ | ||
122 | + GValue value = { 0, }; | ||
123 | + GtkTreeIter iter; | ||
124 | + | ||
125 | + if(!gtk_combo_box_get_active_iter(widget,&iter)) | ||
126 | + return; | ||
127 | + | ||
128 | + gtk_tree_model_get_value(gtk_combo_box_get_model(widget),&iter,1,&value); | ||
129 | + | ||
130 | + dialog->options &= ~(LIB3270_OPTION_HOST_TYPE); | ||
131 | + dialog->options |= g_value_get_int(&value); | ||
132 | + | ||
133 | +} | ||
134 | + | ||
135 | +static void colortable_changed(GtkComboBox *widget, V3270HostSelectWidget *dialog) | ||
136 | +{ | ||
137 | + GValue value = { 0, }; | ||
138 | + GtkTreeIter iter; | ||
139 | + | ||
140 | + if(!gtk_combo_box_get_active_iter(widget,&iter)) | ||
141 | + return; | ||
142 | + | ||
143 | + gtk_tree_model_get_value(gtk_combo_box_get_model(widget),&iter,1,&value); | ||
144 | + | ||
145 | + dialog->colors = g_value_get_int(&value); | ||
146 | + | ||
147 | +} | ||
148 | + | ||
149 | +static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget) | ||
150 | +{ | ||
151 | +#if GTK_CHECK_VERSION(3,0,0) | ||
152 | + GtkGrid * grid = GTK_GRID(gtk_grid_new()); | ||
153 | +#else | ||
154 | + GtkTable * grid = gtk_table_new(?,?,FALSE); | ||
155 | +#endif // GTK_CHECK_VERSION | ||
156 | + | ||
157 | + GtkWidget * label[ENTRY_COUNT] = | ||
158 | + { | ||
159 | + gtk_label_new_with_mnemonic( _( "_Host:" ) ), | ||
160 | + gtk_label_new_with_mnemonic( _( "_Service:" ) ) | ||
161 | + }; | ||
162 | + | ||
163 | + int f; | ||
164 | + | ||
165 | + gtk_container_set_border_width(GTK_CONTAINER(grid),3); | ||
166 | + | ||
167 | + for(f=0;f<ENTRY_COUNT;f++) | ||
168 | + { | ||
169 | + widget->entry[f] = GTK_ENTRY(gtk_entry_new()); | ||
170 | + gtk_misc_set_alignment(GTK_MISC(label[f]),0,0.5); | ||
171 | + gtk_label_set_mnemonic_widget(GTK_LABEL(label[f]),GTK_WIDGET(widget->entry[f])); | ||
172 | + } | ||
173 | + | ||
174 | + gtk_widget_set_tooltip_text(GTK_WIDGET(widget->entry[ENTRY_HOSTNAME]),_("Address or name of the host to connect.") ); | ||
175 | + gtk_widget_set_tooltip_text(GTK_WIDGET(widget->entry[ENTRY_SRVCNAME]),_("Port or service name (empty for \"telnet\").") ); | ||
176 | + | ||
177 | + // SSL checkbox | ||
178 | + widget->ssl = GTK_TOGGLE_BUTTON(gtk_check_button_new_with_mnemonic(_( "_Secure connection." ))); | ||
179 | + gtk_widget_set_tooltip_text(GTK_WIDGET(widget->ssl),_( "Check for SSL secure connection." )); | ||
180 | + g_signal_connect(G_OBJECT(widget->ssl),"toggled",G_CALLBACK(toggle_ssl),widget); | ||
181 | + | ||
182 | + // Extended options | ||
183 | + GtkWidget * expander = gtk_expander_new_with_mnemonic(_( "_Host options")); | ||
184 | + | ||
185 | + // Host type | ||
186 | + { | ||
187 | + GtkTreeModel * model = (GtkTreeModel *) gtk_list_store_new(2,G_TYPE_STRING,G_TYPE_INT); | ||
188 | + GtkCellRenderer * renderer = gtk_cell_renderer_text_new(); | ||
189 | + | ||
190 | + widget->combo[0] = GTK_COMBO_BOX(gtk_combo_box_new_with_model(model)); | ||
191 | + | ||
192 | + gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget->combo[0]), renderer, TRUE); | ||
193 | + gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(widget->combo[0]), renderer, "text", 0, NULL); | ||
194 | + | ||
195 | + for(f=0;f<G_N_ELEMENTS(host_type);f++) | ||
196 | + { | ||
197 | + GtkTreeIter iter; | ||
198 | + gtk_list_store_append((GtkListStore *) model,&iter); | ||
199 | + gtk_list_store_set((GtkListStore *) model, &iter, 0, gettext(host_type[f].description), 1, host_type[f].option, -1); | ||
200 | + } | ||
201 | + | ||
202 | + g_signal_connect(G_OBJECT(widget->combo[0]),"changed",G_CALLBACK(systype_changed),widget); | ||
203 | + | ||
204 | + } | ||
205 | + | ||
206 | + // Color table | ||
207 | + { | ||
208 | + GtkTreeModel * model = (GtkTreeModel *) gtk_list_store_new(2,G_TYPE_STRING,G_TYPE_INT); | ||
209 | + GtkCellRenderer * renderer = gtk_cell_renderer_text_new(); | ||
210 | + | ||
211 | + widget->combo[1] = GTK_COMBO_BOX(gtk_combo_box_new_with_model(model)); | ||
212 | + | ||
213 | + gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget->combo[1]), renderer, TRUE); | ||
214 | + gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(widget->combo[1]), renderer, "text", 0, NULL); | ||
215 | + | ||
216 | + for(f=0;f<G_N_ELEMENTS(colortable);f++) | ||
217 | + { | ||
218 | + GtkTreeIter iter; | ||
219 | + gtk_list_store_append((GtkListStore *) model,&iter); | ||
220 | + gtk_list_store_set((GtkListStore *) model, &iter, 0, gettext(colortable[f].description), 1, colortable[f].colors, -1); | ||
221 | + } | ||
222 | + | ||
223 | + g_signal_connect(G_OBJECT(widget->combo[1]),"changed",G_CALLBACK(colortable_changed),widget); | ||
224 | + | ||
225 | + } | ||
226 | + | ||
227 | + gtk_entry_set_max_length(widget->entry[ENTRY_HOSTNAME],0xFF); | ||
228 | + gtk_entry_set_width_chars(widget->entry[ENTRY_HOSTNAME],50); | ||
229 | + | ||
230 | + gtk_entry_set_max_length(widget->entry[ENTRY_SRVCNAME],6); | ||
231 | + gtk_entry_set_width_chars(widget->entry[ENTRY_SRVCNAME],7); | ||
232 | + | ||
233 | + gtk_entry_set_placeholder_text(widget->entry[ENTRY_SRVCNAME],"telnet"); | ||
234 | + | ||
235 | +#if GTK_CHECK_VERSION(3,0,0) | ||
236 | + | ||
237 | + gtk_widget_set_hexpand(GTK_WIDGET(widget->entry[ENTRY_HOSTNAME]),TRUE); | ||
238 | + gtk_widget_set_hexpand(GTK_WIDGET(widget->ssl),TRUE); | ||
239 | + gtk_widget_set_hexpand(GTK_WIDGET(expander),TRUE); | ||
240 | + | ||
241 | + gtk_grid_set_row_homogeneous(grid,FALSE); | ||
242 | + gtk_grid_set_column_homogeneous(grid,FALSE); | ||
243 | + gtk_grid_set_column_spacing(grid,5); | ||
244 | + gtk_grid_set_row_spacing(grid,5); | ||
245 | + | ||
246 | + gtk_grid_attach(grid,label[ENTRY_HOSTNAME],0,0,1,1); | ||
247 | + gtk_grid_attach(grid,GTK_WIDGET(widget->entry[ENTRY_HOSTNAME]),1,0,3,1); | ||
248 | + | ||
249 | + gtk_grid_attach(grid,label[ENTRY_SRVCNAME],4,0,1,1); | ||
250 | + gtk_grid_attach(grid,GTK_WIDGET(widget->entry[ENTRY_SRVCNAME]),5,0,1,1); | ||
251 | + | ||
252 | + gtk_grid_attach(grid,GTK_WIDGET(widget->ssl),1,1,3,1); | ||
253 | + | ||
254 | + | ||
255 | + // Host options | ||
256 | + { | ||
257 | + GtkGrid *opt = GTK_GRID(gtk_grid_new()); | ||
258 | + gtk_grid_set_column_spacing(opt,5); | ||
259 | + gtk_grid_set_row_spacing(opt,5); | ||
260 | + | ||
261 | + for(f=0;f<G_N_ELEMENTS(comboLabel);f++) | ||
262 | + { | ||
263 | + GtkWidget *label = gtk_label_new_with_mnemonic(gettext(comboLabel[f])); | ||
264 | + gtk_misc_set_alignment(GTK_MISC(label),0,0.5); | ||
265 | + gtk_grid_attach(opt,label,0,f+1,1,1); | ||
266 | + gtk_grid_attach(opt,GTK_WIDGET(widget->combo[f]),1,f+1,2,1); | ||
267 | + } | ||
268 | + | ||
269 | + gtk_container_add(GTK_CONTAINER(expander),GTK_WIDGET(opt)); | ||
270 | + } | ||
271 | + gtk_grid_attach(grid,GTK_WIDGET(expander),1,2,5,2); | ||
272 | + | ||
273 | + | ||
274 | +#else | ||
275 | + | ||
276 | + gtk_table_set_row_spacings(grid,5); | ||
277 | + gtk_table_set_col_spacings(grid,5); | ||
278 | + | ||
279 | + #error Implementar | ||
280 | + | ||
281 | +#endif // GTK_CHECK_VERSION | ||
282 | + | ||
283 | + | ||
284 | + gtk_widget_show_all(GTK_WIDGET(grid)); | ||
285 | + gtk_container_add(GTK_CONTAINER(widget),GTK_WIDGET(grid)); | ||
286 | +} | ||
287 | + | ||
288 | +GtkWidget * v3270_host_select_new(GtkWidget *widget) | ||
289 | +{ | ||
290 | + g_return_val_if_fail(GTK_IS_V3270(widget),NULL); | ||
291 | + | ||
292 | + V3270HostSelectWidget * selector = GTK_V3270HostSelectWidget(g_object_new(GTK_TYPE_V3270HostSelectWidget, NULL)); | ||
293 | + | ||
294 | + v3270_host_select_set_session(selector,widget); | ||
295 | + | ||
296 | + return GTK_WIDGET(selector); | ||
297 | +} | ||
298 | + | ||
299 | +void v3270_host_select_set_session(V3270HostSelectWidget *widget, GtkWidget *session) | ||
300 | +{ | ||
301 | + g_return_if_fail(GTK_IS_V3270(session)); | ||
302 | + g_return_if_fail(GTK_IS_V3270HostSelectWidget(widget)); | ||
303 | + | ||
304 | + widget->hSession = v3270_get_session(session); | ||
305 | + | ||
306 | + gtk_entry_set_text(widget->entry[ENTRY_HOSTNAME],lib3270_get_hostname(widget->hSession)); | ||
307 | + gtk_entry_set_text(widget->entry[ENTRY_SRVCNAME],lib3270_get_srvcname(widget->hSession)); | ||
308 | + | ||
309 | + LIB3270_OPTION opt = lib3270_get_options(widget->hSession); | ||
310 | + | ||
311 | + gtk_toggle_button_set_active(widget->ssl,(opt & LIB3270_OPTION_SSL) != 0); | ||
312 | + | ||
313 | + // Set host type | ||
314 | + { | ||
315 | + GtkTreeModel * model = gtk_combo_box_get_model(widget->combo[0]); | ||
316 | + GtkTreeIter iter; | ||
317 | + | ||
318 | + if(gtk_tree_model_get_iter_first(model,&iter)) | ||
319 | + { | ||
320 | + do | ||
321 | + { | ||
322 | + GValue value = { 0, }; | ||
323 | + | ||
324 | + gtk_tree_model_get_value(model,&iter,1,&value); | ||
325 | + | ||
326 | + if(g_value_get_int(&value) == (opt&LIB3270_OPTION_HOST_TYPE)) | ||
327 | + { | ||
328 | + gtk_combo_box_set_active_iter(widget->combo[0],&iter); | ||
329 | + break; | ||
330 | + } | ||
331 | + | ||
332 | + } while(gtk_tree_model_iter_next(model,&iter)); | ||
333 | + } | ||
334 | + } | ||
335 | + | ||
336 | + // Set color type | ||
337 | + { | ||
338 | + GtkTreeModel * model = gtk_combo_box_get_model(widget->combo[1]); | ||
339 | + GtkTreeIter iter; | ||
340 | + int colors = (int) lib3270_get_color_type(widget->hSession); | ||
341 | + | ||
342 | + if(gtk_tree_model_get_iter_first(model,&iter)) | ||
343 | + { | ||
344 | + do | ||
345 | + { | ||
346 | + GValue value = { 0, }; | ||
347 | + | ||
348 | + gtk_tree_model_get_value(model,&iter,1,&value); | ||
349 | + | ||
350 | + g_message("%d - %d",g_value_get_int(&value),colors); | ||
351 | + | ||
352 | + if(g_value_get_int(&value) == colors) | ||
353 | + { | ||
354 | + gtk_combo_box_set_active_iter(widget->combo[1],&iter); | ||
355 | + break; | ||
356 | + } | ||
357 | + | ||
358 | + } while(gtk_tree_model_iter_next(model,&iter)); | ||
359 | + } | ||
360 | + } | ||
361 | + | ||
362 | + // Just in case | ||
363 | + widget->options = opt; | ||
364 | +} | ||
365 | + | ||
366 | +LIB3270_EXPORT void v3270_select_host(GtkWidget *widget) | ||
367 | +{ | ||
368 | + g_return_if_fail(GTK_IS_V3270(widget)); | ||
369 | + | ||
370 | + GtkWidget * dialog = v3270_host_select_new(widget); | ||
371 | + GtkWidget * win = gtk_dialog_new_with_buttons( | ||
372 | + _( "Select hostname" ), | ||
373 | + GTK_WINDOW(gtk_widget_get_toplevel(widget)), | ||
374 | + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, | ||
375 | + _( "C_onnect" ), GTK_RESPONSE_ACCEPT, | ||
376 | + _( "_Cancel" ), GTK_RESPONSE_REJECT, | ||
377 | + NULL ); | ||
378 | + | ||
379 | + | ||
380 | + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(win))),dialog,FALSE,FALSE,2); | ||
381 | + gtk_widget_show_all(dialog); | ||
382 | + | ||
383 | + gboolean again = TRUE; | ||
384 | + while(again) | ||
385 | + { | ||
386 | + gtk_widget_set_sensitive(win,TRUE); | ||
387 | + gtk_widget_set_visible(win,TRUE); | ||
388 | + | ||
389 | + switch(gtk_dialog_run(GTK_DIALOG(win))) | ||
390 | + { | ||
391 | + case GTK_RESPONSE_ACCEPT: | ||
392 | + gtk_widget_set_visible(win,FALSE); | ||
393 | + gtk_widget_set_sensitive(win,FALSE); | ||
394 | + again = v3270_host_select_apply(GTK_V3270HostSelectWidget(dialog)) != 0; | ||
395 | + break; | ||
396 | + | ||
397 | + case GTK_RESPONSE_REJECT: | ||
398 | + again = FALSE; | ||
399 | + break; | ||
400 | + } | ||
401 | + } | ||
402 | + | ||
403 | + gtk_widget_destroy(win); | ||
404 | + | ||
405 | +} | ||
406 | + | ||
407 | +LIB3270_EXPORT int v3270_host_select_apply(V3270HostSelectWidget *widget) | ||
408 | +{ | ||
409 | + g_return_if_fail(GTK_IS_V3270HostSelectWidget(widget)); | ||
410 | + | ||
411 | + lib3270_set_hostname(widget->hSession,gtk_entry_get_text(widget->entry[ENTRY_HOSTNAME])); | ||
412 | + lib3270_set_srvcname(widget->hSession,gtk_entry_get_text(widget->entry[ENTRY_SRVCNAME])); | ||
413 | + lib3270_set_options(widget->hSession,widget->options); | ||
414 | + | ||
415 | + return lib3270_connect(widget->hSession,0); | ||
416 | +} | ||
417 | + |
@@ -0,0 +1,67 @@ | @@ -0,0 +1,67 @@ | ||
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.h 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 | +#ifndef V3270HOST_H_INCLUDED | ||
31 | + | ||
32 | + #include <lib3270/config.h> | ||
33 | + #define ENABLE_NLS | ||
34 | + | ||
35 | + #ifndef GETTEXT_PACKAGE | ||
36 | + #define GETTEXT_PACKAGE PACKAGE_NAME | ||
37 | + #endif | ||
38 | + | ||
39 | + #include <libintl.h> | ||
40 | + #include <glib/gi18n.h> | ||
41 | + #include <gtk/gtk.h> | ||
42 | + #include <lib3270.h> | ||
43 | + | ||
44 | + #define V3270FT_H_INCLUDED 1 | ||
45 | + | ||
46 | + G_BEGIN_DECLS | ||
47 | + | ||
48 | +/*--[ Progress widget ]------------------------------------------------------------------------------*/ | ||
49 | + | ||
50 | + #define GTK_TYPE_V3270HostSelectWidget (V3270HostSelectWidget_get_type ()) | ||
51 | + #define GTK_V3270HostSelectWidget(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_V3270HostSelectWidget, V3270HostSelectWidget)) | ||
52 | + #define GTK_V3270HostSelectWidget_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_V3270HostSelectWidget, V3270HostSelectWidgetClass)) | ||
53 | + #define GTK_IS_V3270HostSelectWidget(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_V3270HostSelectWidget)) | ||
54 | + #define GTK_IS_V3270HostSelectWidget_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_V3270HostSelectWidget)) | ||
55 | + #define GTK_V3270HostSelectWidget_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_V3270HostSelectWidget, V3270HostSelectWidgetClass)) | ||
56 | + | ||
57 | + typedef struct _V3270HostSelectWidget V3270HostSelectWidget; | ||
58 | + typedef struct _V3270HostSelectWidgetClass V3270HostSelectWidgetClass; | ||
59 | + | ||
60 | +/*--[ Prototipes ]-----------------------------------------------------------------------------------*/ | ||
61 | + | ||
62 | + LIB3270_EXPORT void v3270_host_select_set_session(V3270HostSelectWidget *widget, GtkWidget *session); | ||
63 | + LIB3270_EXPORT int v3270_host_select_apply(V3270HostSelectWidget *widget); | ||
64 | + | ||
65 | + G_END_DECLS | ||
66 | + | ||
67 | +#endif // V3270HOST_H_INCLUDED |
src/pw3270/v3270/mouse.c
@@ -49,6 +49,8 @@ gint v3270_get_offset_at_point(v3270 *widget, gint x, gint y) | @@ -49,6 +49,8 @@ gint v3270_get_offset_at_point(v3270 *widget, gint x, gint y) | ||
49 | GdkPoint point; | 49 | GdkPoint point; |
50 | int r,c; | 50 | int r,c; |
51 | 51 | ||
52 | + g_return_val_if_fail(widget->metrics.width > 0,-1); | ||
53 | + | ||
52 | if(x > 0 && y > 0) | 54 | if(x > 0 && y > 0) |
53 | { | 55 | { |
54 | point.x = ((x-widget->metrics.left)/widget->metrics.width); | 56 | point.x = ((x-widget->metrics.left)/widget->metrics.width); |
src/pw3270/v3270/sources.mak
@@ -27,5 +27,5 @@ | @@ -27,5 +27,5 @@ | ||
27 | # | 27 | # |
28 | 28 | ||
29 | V3270_SRC=marshal.c widget.c oia.c iocallback.c keyboard.c draw.c mouse.c selection.c \ | 29 | V3270_SRC=marshal.c widget.c oia.c iocallback.c keyboard.c draw.c mouse.c selection.c \ |
30 | - accessible.c security.c macros.c | 30 | + accessible.c security.c macros.c hostselect.c |
31 | 31 |
src/pw3270/window.c
@@ -180,6 +180,9 @@ | @@ -180,6 +180,9 @@ | ||
180 | { | 180 | { |
181 | GtkWidget * widget = g_object_new(GTK_TYPE_PW3270, NULL); | 181 | GtkWidget * widget = g_object_new(GTK_TYPE_PW3270, NULL); |
182 | 182 | ||
183 | + #warning Reimplementar | ||
184 | + | ||
185 | + /* | ||
183 | if(systype) | 186 | if(systype) |
184 | { | 187 | { |
185 | set_string_to_config("host","uri","%s",systype); | 188 | set_string_to_config("host","uri","%s",systype); |
@@ -197,6 +200,8 @@ | @@ -197,6 +200,8 @@ | ||
197 | else | 200 | else |
198 | colors = get_integer_from_config("host","colortype",16); | 201 | colors = get_integer_from_config("host","colortype",16); |
199 | 202 | ||
203 | + */ | ||
204 | + | ||
200 | pw3270_set_session_color_type(widget,colors); | 205 | pw3270_set_session_color_type(widget,colors); |
201 | 206 | ||
202 | if(host) | 207 | if(host) |