Commit 6e14e1d19ac14e53a9c2cef7d51f21609ef302f5

Authored by perry.werneck@gmail.com
1 parent 27bf76ec

Implementando ativacao/desativacao das barras de botoes

src/include/pw3270.h
... ... @@ -79,10 +79,9 @@
79 79  
80 80 LIB3270_EXPORT void pw3270_print(GtkWidget *widget, GObject *action, GtkPrintOperationAction oper, PW3270_SRC src);
81 81  
82   -
83 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 85 #endif
87 86  
88 87 G_END_DECLS
... ...
src/include/pw3270/v3270.h
... ... @@ -138,6 +138,7 @@
138 138 LIB3270_EXPORT const gchar * v3270_get_font_family(GtkWidget *widget);
139 139  
140 140 LIB3270_EXPORT H3270 * v3270_get_session(GtkWidget *widget);
  141 + LIB3270_EXPORT gboolean v3270_is_connected(GtkWidget *widget);
141 142  
142 143 LIB3270_EXPORT int v3270_connect(GtkWidget *widget, const gchar *host);
143 144 LIB3270_EXPORT void v3270_disconnect(GtkWidget *widget);
... ...
src/pw3270/uiparser/action.c
... ... @@ -30,6 +30,7 @@
30 30 */
31 31  
32 32 #include <stdlib.h>
  33 + #include <pw3270/v3270.h>
33 34 #include "private.h"
34 35  
35 36 /*--[ Implement ]------------------------------------------------------------------------------------*/
... ... @@ -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 231 // Pack top toolbars
232 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 237 // Pack top keypads
235 238 memset(&keypad,0,sizeof(keypad));
236 239 keypad.box = vbox;
... ... @@ -238,7 +241,6 @@ void parser_build(struct parser *p, GtkWidget *widget)
238 241 keypad.pack = gtk_box_pack_start;
239 242 g_hash_table_foreach(p->element_list[UI_ELEMENT_KEYPAD],(GHFunc) pack_keypad, &keypad);
240 243  
241   -
242 244 // Pack left keypads
243 245 keypad.box = hbox;
244 246 keypad.filter = GTK_POS_RIGHT;
... ...
src/pw3270/uiparser/parser.h
... ... @@ -71,6 +71,8 @@
71 71 GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash, const gchar **names, const gchar **values, GError **error);
72 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 76 void ui_connect_text_script(GtkWidget *widget, GtkAction *action, const gchar *script_text, GError **error);
75 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 1417  
1418 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 +}
... ...