Commit 6e14e1d19ac14e53a9c2cef7d51f21609ef302f5
1 parent
27bf76ec
Exists in
master
and in
5 other branches
Implementando ativacao/desativacao das barras de botoes
Showing
6 changed files
with
65 additions
and
4 deletions
Show diff stats
src/include/pw3270.h
@@ -79,10 +79,9 @@ | @@ -79,10 +79,9 @@ | ||
79 | 79 | ||
80 | LIB3270_EXPORT void pw3270_print(GtkWidget *widget, GObject *action, GtkPrintOperationAction oper, PW3270_SRC src); | 80 | LIB3270_EXPORT void pw3270_print(GtkWidget *widget, GObject *action, GtkPrintOperationAction oper, PW3270_SRC src); |
81 | 81 | ||
82 | - | ||
83 | #ifdef HAVE_GTKMAC | 82 | #ifdef HAVE_GTKMAC |
84 | - #include <gtk-mac-bundle.h> | ||
85 | - LIB3270_EXPORT GtkMacBundle * pw3270_get_bundle(void); | 83 | + #include <gtk-mac-bundle.h> |
84 | + LIB3270_EXPORT GtkMacBundle * pw3270_get_bundle(void); | ||
86 | #endif | 85 | #endif |
87 | 86 | ||
88 | G_END_DECLS | 87 | G_END_DECLS |
src/include/pw3270/v3270.h
@@ -138,6 +138,7 @@ | @@ -138,6 +138,7 @@ | ||
138 | LIB3270_EXPORT const gchar * v3270_get_font_family(GtkWidget *widget); | 138 | LIB3270_EXPORT const gchar * v3270_get_font_family(GtkWidget *widget); |
139 | 139 | ||
140 | LIB3270_EXPORT H3270 * v3270_get_session(GtkWidget *widget); | 140 | LIB3270_EXPORT H3270 * v3270_get_session(GtkWidget *widget); |
141 | + LIB3270_EXPORT gboolean v3270_is_connected(GtkWidget *widget); | ||
141 | 142 | ||
142 | LIB3270_EXPORT int v3270_connect(GtkWidget *widget, const gchar *host); | 143 | LIB3270_EXPORT int v3270_connect(GtkWidget *widget, const gchar *host); |
143 | LIB3270_EXPORT void v3270_disconnect(GtkWidget *widget); | 144 | LIB3270_EXPORT void v3270_disconnect(GtkWidget *widget); |
src/pw3270/uiparser/action.c
@@ -30,6 +30,7 @@ | @@ -30,6 +30,7 @@ | ||
30 | */ | 30 | */ |
31 | 31 | ||
32 | #include <stdlib.h> | 32 | #include <stdlib.h> |
33 | + #include <pw3270/v3270.h> | ||
33 | #include "private.h" | 34 | #include "private.h" |
34 | 35 | ||
35 | /*--[ Implement ]------------------------------------------------------------------------------------*/ | 36 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
@@ -120,3 +121,53 @@ | @@ -120,3 +121,53 @@ | ||
120 | } | 121 | } |
121 | } | 122 | } |
122 | } | 123 | } |
124 | + | ||
125 | + struct list_data | ||
126 | + { | ||
127 | + GtkWidget * terminal; | ||
128 | + GtkWidget **keypad; | ||
129 | + guint pos; | ||
130 | + guint total; | ||
131 | + }; | ||
132 | + | ||
133 | + static void insert_keypad(gpointer key, GtkWidget *widget, struct list_data *dt) | ||
134 | + { | ||
135 | + if(!widget || dt->pos >= dt->total) | ||
136 | + return; | ||
137 | + gtk_widget_set_sensitive(widget,v3270_is_connected(dt->terminal)); | ||
138 | + | ||
139 | + trace("%s: keypad[%d]=%p",__FUNCTION__,dt->pos,widget); | ||
140 | + dt->keypad[dt->pos++] = widget; | ||
141 | + } | ||
142 | + | ||
143 | + static void disable_keypad(GtkWidget *terminal, GtkWidget **keypad) | ||
144 | + { | ||
145 | + while(*keypad) | ||
146 | + gtk_widget_set_sensitive(*(keypad++),FALSE); | ||
147 | + } | ||
148 | + | ||
149 | + static void enable_keypad(GtkWidget *terminal, const gchar *dunno, GtkWidget **keypad) | ||
150 | + { | ||
151 | + while(*keypad) | ||
152 | + gtk_widget_set_sensitive(*(keypad++),TRUE); | ||
153 | + } | ||
154 | + | ||
155 | + void ui_setup_keypads(GHashTable *keypads, GtkWidget *window, GtkWidget *widget) | ||
156 | + { | ||
157 | + struct list_data dt; | ||
158 | + | ||
159 | + memset(&dt,0,sizeof(dt)); | ||
160 | + dt.terminal = widget; | ||
161 | + dt.total = g_hash_table_size(keypads); | ||
162 | + | ||
163 | + if(!dt.total) | ||
164 | + return; | ||
165 | + | ||
166 | + dt.keypad = g_new0(GtkWidget *,dt.total+1); | ||
167 | + g_hash_table_foreach(keypads,(GHFunc) insert_keypad, &dt); | ||
168 | + | ||
169 | + g_signal_connect(widget,"disconnected",G_CALLBACK(disable_keypad),dt.keypad); | ||
170 | + g_signal_connect(widget,"connected",G_CALLBACK(enable_keypad),dt.keypad); | ||
171 | + | ||
172 | + g_object_set_data_full(G_OBJECT(widget),"keypads",dt.keypad,g_free); | ||
173 | + } |
src/pw3270/uiparser/parser.c
@@ -231,6 +231,9 @@ void parser_build(struct parser *p, GtkWidget *widget) | @@ -231,6 +231,9 @@ void parser_build(struct parser *p, GtkWidget *widget) | ||
231 | // Pack top toolbars | 231 | // Pack top toolbars |
232 | g_hash_table_foreach(p->element_list[UI_ELEMENT_TOOLBAR],(GHFunc) pack_start, p); | 232 | g_hash_table_foreach(p->element_list[UI_ELEMENT_TOOLBAR],(GHFunc) pack_start, p); |
233 | 233 | ||
234 | + // Setup keypads | ||
235 | + ui_setup_keypads(p->element_list[UI_ELEMENT_KEYPAD], p->toplevel, p->center_widget); | ||
236 | + | ||
234 | // Pack top keypads | 237 | // Pack top keypads |
235 | memset(&keypad,0,sizeof(keypad)); | 238 | memset(&keypad,0,sizeof(keypad)); |
236 | keypad.box = vbox; | 239 | keypad.box = vbox; |
@@ -238,7 +241,6 @@ void parser_build(struct parser *p, GtkWidget *widget) | @@ -238,7 +241,6 @@ void parser_build(struct parser *p, GtkWidget *widget) | ||
238 | keypad.pack = gtk_box_pack_start; | 241 | keypad.pack = gtk_box_pack_start; |
239 | g_hash_table_foreach(p->element_list[UI_ELEMENT_KEYPAD],(GHFunc) pack_keypad, &keypad); | 242 | g_hash_table_foreach(p->element_list[UI_ELEMENT_KEYPAD],(GHFunc) pack_keypad, &keypad); |
240 | 243 | ||
241 | - | ||
242 | // Pack left keypads | 244 | // Pack left keypads |
243 | keypad.box = hbox; | 245 | keypad.box = hbox; |
244 | keypad.filter = GTK_POS_RIGHT; | 246 | keypad.filter = GTK_POS_RIGHT; |
src/pw3270/uiparser/parser.h
@@ -71,6 +71,8 @@ | @@ -71,6 +71,8 @@ | ||
71 | GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash, const gchar **names, const gchar **values, GError **error); | 71 | GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash, const gchar **names, const gchar **values, GError **error); |
72 | const gchar * ui_get_dir_name(UI_ATTR_DIRECTION dir); | 72 | const gchar * ui_get_dir_name(UI_ATTR_DIRECTION dir); |
73 | 73 | ||
74 | + void ui_setup_keypads(GHashTable *keypads, GtkWidget *window, GtkWidget *widget); | ||
75 | + | ||
74 | void ui_connect_text_script(GtkWidget *widget, GtkAction *action, const gchar *script_text, GError **error); | 76 | void ui_connect_text_script(GtkWidget *widget, GtkAction *action, const gchar *script_text, GError **error); |
75 | void ui_set_scroll_actions(GtkWidget *widget, GtkAction *action[UI_ATTR_DIRECTION_COUNT]); | 77 | void ui_set_scroll_actions(GtkWidget *widget, GtkAction *action[UI_ATTR_DIRECTION_COUNT]); |
76 | 78 |
src/pw3270/v3270/widget.c
@@ -1417,3 +1417,9 @@ void v3270_set_session_name(GtkWidget *widget, const gchar *name) | @@ -1417,3 +1417,9 @@ void v3270_set_session_name(GtkWidget *widget, const gchar *name) | ||
1417 | 1417 | ||
1418 | GTK_V3270(widget)->session_name = g_strdup(name); | 1418 | GTK_V3270(widget)->session_name = g_strdup(name); |
1419 | } | 1419 | } |
1420 | + | ||
1421 | +gboolean v3270_is_connected(GtkWidget *widget) | ||
1422 | +{ | ||
1423 | + g_return_val_if_fail(GTK_IS_V3270(widget),FALSE); | ||
1424 | + return lib3270_connected(GTK_V3270(widget)->host) ? TRUE : FALSE; | ||
1425 | +} |