Commit 29ef0ba70386d7c1b949cd554b24e305028e7a59

Authored by perry.werneck@gmail.com
1 parent a49355ab

Reincluindo suporte básico para scripts

src/include/lib3270/action_table.h
@@ -41,8 +41,6 @@ @@ -41,8 +41,6 @@
41 41
42 /* Keyboard actions */ 42 /* Keyboard actions */
43 DECLARE_LIB3270_KEY_ACTION( enter ) 43 DECLARE_LIB3270_KEY_ACTION( enter )
44 - DECLARE_LIB3270_KEY_ACTION( tab )  
45 - DECLARE_LIB3270_KEY_ACTION( backtab )  
46 44
47 DECLARE_LIB3270_FKEY_ACTION( pfkey ) 45 DECLARE_LIB3270_FKEY_ACTION( pfkey )
48 DECLARE_LIB3270_FKEY_ACTION( pakey ) 46 DECLARE_LIB3270_FKEY_ACTION( pakey )
@@ -77,6 +75,9 @@ @@ -77,6 +75,9 @@
77 DECLARE_LIB3270_ACTION( nextword ) 75 DECLARE_LIB3270_ACTION( nextword )
78 DECLARE_LIB3270_ACTION( fieldend ) 76 DECLARE_LIB3270_ACTION( fieldend )
79 77
  78 + DECLARE_LIB3270_ACTION( nextfield )
  79 + DECLARE_LIB3270_ACTION( previousfield )
  80 +
80 DECLARE_LIB3270_ACTION( attn ) 81 DECLARE_LIB3270_ACTION( attn )
81 DECLARE_LIB3270_ACTION( break ) 82 DECLARE_LIB3270_ACTION( break )
82 DECLARE_LIB3270_ACTION( pastenext ) 83 DECLARE_LIB3270_ACTION( pastenext )
src/lib3270/kybd.c
@@ -1394,7 +1394,7 @@ Tab_action(Widget w unused, XEvent *event, String *params, Cardinal *num_params) @@ -1394,7 +1394,7 @@ Tab_action(Widget w unused, XEvent *event, String *params, Cardinal *num_params)
1394 } 1394 }
1395 */ 1395 */
1396 1396
1397 -LIB3270_KEY_ACTION( tab ) 1397 +LIB3270_ACTION( nextfield )
1398 { 1398 {
1399 1399
1400 // reset_idle_timer(); 1400 // reset_idle_timer();
@@ -1407,7 +1407,7 @@ LIB3270_KEY_ACTION( tab ) @@ -1407,7 +1407,7 @@ LIB3270_KEY_ACTION( tab )
1407 status_reset(hSession); 1407 status_reset(hSession);
1408 } else 1408 } else
1409 { 1409 {
1410 - ENQUEUE_ACTION(lib3270_tab); 1410 + ENQUEUE_ACTION(lib3270_nextfield);
1411 return 0; 1411 return 0;
1412 } 1412 }
1413 } 1413 }
@@ -1439,7 +1439,7 @@ LIB3270_EXPORT int lib3270_clear_operator_error(H3270 *hSession) @@ -1439,7 +1439,7 @@ LIB3270_EXPORT int lib3270_clear_operator_error(H3270 *hSession)
1439 /* 1439 /*
1440 * Tab backward to previous field. 1440 * Tab backward to previous field.
1441 */ 1441 */
1442 -LIB3270_KEY_ACTION( backtab ) 1442 +LIB3270_ACTION( previousfield )
1443 { 1443 {
1444 register int baddr, nbaddr; 1444 register int baddr, nbaddr;
1445 int sbaddr; 1445 int sbaddr;
@@ -1455,7 +1455,7 @@ LIB3270_KEY_ACTION( backtab ) @@ -1455,7 +1455,7 @@ LIB3270_KEY_ACTION( backtab )
1455 } 1455 }
1456 else 1456 else
1457 { 1457 {
1458 - ENQUEUE_ACTION(lib3270_backtab); 1458 + ENQUEUE_ACTION(lib3270_previousfield);
1459 return 0; 1459 return 0;
1460 } 1460 }
1461 } 1461 }
@@ -3020,7 +3020,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, char *s, int len, int p @@ -3020,7 +3020,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, char *s, int len, int p
3020 case '\r': /* ignored */ 3020 case '\r': /* ignored */
3021 break; 3021 break;
3022 case '\t': 3022 case '\t':
3023 - lib3270_tab(session); 3023 + lib3270_nextfield(session);
3024 skipped = False; 3024 skipped = False;
3025 break; 3025 break;
3026 case '\\': /* backslashes are NOT special when 3026 case '\\': /* backslashes are NOT special when
@@ -3106,12 +3106,12 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, char *s, int len, int p @@ -3106,12 +3106,12 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, char *s, int len, int p
3106 break; 3106 break;
3107 3107
3108 case 't': 3108 case 't':
3109 - lib3270_tab(session); 3109 + lib3270_nextfield(session);
3110 skipped = False; 3110 skipped = False;
3111 state = BASE; 3111 state = BASE;
3112 break; 3112 break;
3113 case 'T': 3113 case 'T':
3114 - lib3270_tab(session); 3114 + lib3270_nextfield(session);
3115 skipped = False; 3115 skipped = False;
3116 state = BASE; 3116 state = BASE;
3117 break; 3117 break;
src/pw3270/actions.c
@@ -36,6 +36,7 @@ @@ -36,6 +36,7 @@
36 #include <lib3270/actions.h> 36 #include <lib3270/actions.h>
37 #include <lib3270/selection.h> 37 #include <lib3270/selection.h>
38 #include <lib3270/trace.h> 38 #include <lib3270/trace.h>
  39 + #include <lib3270/macros.h>
39 #include <stdlib.h> 40 #include <stdlib.h>
40 41
41 #ifdef DEBUG 42 #ifdef DEBUG
@@ -736,3 +737,47 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash @@ -736,3 +737,47 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash
736 return action; 737 return action;
737 } 738 }
738 739
  740 +static void action_text_script(GtkAction *action, GtkWidget *widget)
  741 +{
  742 + gchar **ln = g_strsplit(g_object_get_data(G_OBJECT(action),"script_text"),"\n",-1);
  743 + int f;
  744 + H3270 * hSession = v3270_get_session(widget);
  745 +
  746 + for(f=0;ln[f];f++)
  747 + {
  748 + GError * error = NULL;
  749 + gint argc = 0;
  750 + gchar **argv = NULL;
  751 +
  752 + if(g_shell_parse_argv(g_strstrip(ln[f]),&argc,&argv,&error))
  753 + {
  754 + gchar *rsp = lib3270_run_macro(hSession,(const gchar **) argv);
  755 + if(rsp)
  756 + g_free(rsp);
  757 + }
  758 + else
  759 + {
  760 + g_warning("Error parsing \"%s\": %s",g_strstrip(ln[f]),error->message);
  761 + g_error_free(error);
  762 + }
  763 +
  764 + if(argv)
  765 + g_strfreev(argv);
  766 +
  767 + }
  768 +
  769 +
  770 + g_strfreev(ln);
  771 +}
  772 +
  773 +void ui_connect_text_script(GtkWidget *widget, GtkAction *action, const gchar *script_text, GError **error)
  774 +{
  775 + gchar *base = g_strstrip(g_strdup(script_text));
  776 + gchar *text = g_strdup(base);
  777 + g_free(base);
  778 +
  779 + gtk_action_set_sensitive(action,TRUE);
  780 + g_object_set_data_full(G_OBJECT(action),"script_text",text,g_free);
  781 + g_signal_connect(action,"activate",G_CALLBACK(action_text_script),widget);
  782 +}
  783 +
src/pw3270/uiparser/parser.h
@@ -56,4 +56,6 @@ @@ -56,4 +56,6 @@
56 gboolean ui_get_bool_attribute(const gchar *key, const gchar **name, const gchar **value, gboolean def); 56 gboolean ui_get_bool_attribute(const gchar *key, const gchar **name, const gchar **value, gboolean def);
57 GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash, const gchar **names, const gchar **values, GError **error); 57 GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash, const gchar **names, const gchar **values, GError **error);
58 58
  59 + void ui_connect_text_script(GtkWidget *widget, GtkAction *action, const gchar *script_text, GError **error);
  60 +
59 #endif // UI_PARSER_H_INCLUDED 61 #endif // UI_PARSER_H_INCLUDED
src/pw3270/uiparser/private.h
@@ -54,11 +54,10 @@ @@ -54,11 +54,10 @@
54 54
55 struct parser 55 struct parser
56 { 56 {
57 -// int disabled;  
58 GtkWidget * toplevel; 57 GtkWidget * toplevel;
59 GObject * element; 58 GObject * element;
60 GtkAction * action; 59 GtkAction * action;
61 -// GCallback callback; 60 + GtkAction * script_action;
62 GtkWidget * center_widget; 61 GtkWidget * center_widget;
63 GtkWidget ** popup; /**< Popup widgets */ 62 GtkWidget ** popup; /**< Popup widgets */
64 GStringChunk * strings; 63 GStringChunk * strings;
src/pw3270/uiparser/script.c
@@ -37,36 +37,21 @@ @@ -37,36 +37,21 @@
37 #define trace_action(a,w) /* */ 37 #define trace_action(a,w) /* */
38 #endif // X3270_TRACE 38 #endif // X3270_TRACE
39 39
40 -/*--[ Parser struct ]--------------------------------------------------------------------------------*/  
41 -  
42 -  
43 /*--[ Implement ]------------------------------------------------------------------------------------*/ 40 /*--[ Implement ]------------------------------------------------------------------------------------*/
44 41
45 - static void element_start(GMarkupParseContext *context, const gchar *element_name, const gchar **names,const gchar **values, GtkAction *action, GError **error) 42 + static void element_start(GMarkupParseContext *context, const gchar *element_name, const gchar **names,const gchar **values, struct parser *info, GError **error)
46 { 43 {
47 trace("%s: %s",__FUNCTION__,element_name); 44 trace("%s: %s",__FUNCTION__,element_name);
48 } 45 }
49 46
50 - static void element_end(GMarkupParseContext *context, const gchar *element_name, GtkAction *action, GError **error) 47 + static void element_end(GMarkupParseContext *context, const gchar *element_name, struct parser *info, GError **error)
51 { 48 {
52 trace("%s: %s",__FUNCTION__,element_name); 49 trace("%s: %s",__FUNCTION__,element_name);
53 } 50 }
54 51
55 - static void text_action(GtkAction *action, const gchar *text)  
56 - {  
57 - trace("Script:\n%s\n",text);  
58 - }  
59 -  
60 - static void script_text(GMarkupParseContext *context, const gchar *element_text, gsize text_len, GtkAction *action, GError **error) 52 + static void script_text(GMarkupParseContext *context, const gchar *element_text, gsize text_len, struct parser *info, GError **error)
61 { 53 {
62 - gchar *base = g_strstrip(g_strdup(element_text));  
63 - gchar *text = g_strdup(base);  
64 - g_free(base);  
65 -  
66 - gtk_action_set_sensitive(action,TRUE);  
67 - g_object_set_data_full(G_OBJECT(action),"script_text",text,g_free);  
68 - g_signal_connect(action,"activate",G_CALLBACK(text_action),text);  
69 - 54 + ui_connect_text_script(info->center_widget, info->script_action,element_text,error);
70 } 55 }
71 56
72 GObject * ui_create_script(GMarkupParseContext *context,GtkAction *action, struct parser *info, const gchar **names, const gchar **values, GError **error) 57 GObject * ui_create_script(GMarkupParseContext *context,GtkAction *action, struct parser *info, const gchar **names, const gchar **values, GError **error)
@@ -91,7 +76,7 @@ @@ -91,7 +76,7 @@
91 return NULL; 76 return NULL;
92 } 77 }
93 78
94 - trace("%s: info->element: %p action: %p",__FUNCTION__,info->element, action); 79 +// trace("%s: info->element: %p action: %p",__FUNCTION__,info->element, action);
95 80
96 if(!(info->element && info->actions)) 81 if(!(info->element && info->actions))
97 { 82 {
@@ -99,9 +84,8 @@ @@ -99,9 +84,8 @@
99 return NULL; 84 return NULL;
100 } 85 }
101 86
102 - trace("%s: Parsing script for action %s",__FUNCTION__,gtk_action_get_name(info->action));  
103 -  
104 - g_markup_parse_context_push(context,&parser,info->action); 87 + info->script_action = info->action;
  88 + g_markup_parse_context_push(context,&parser,info);
105 89
106 return NULL; 90 return NULL;
107 } 91 }
src/pw3270/v3270/keyboard.c
@@ -95,8 +95,8 @@ @@ -95,8 +95,8 @@
95 { GDK_Up, 0, lib3270_cursor_up }, 95 { GDK_Up, 0, lib3270_cursor_up },
96 { GDK_Right, 0, lib3270_cursor_right }, 96 { GDK_Right, 0, lib3270_cursor_right },
97 { GDK_Down, 0, lib3270_cursor_down }, 97 { GDK_Down, 0, lib3270_cursor_down },
98 - { GDK_Tab, 0, lib3270_tab },  
99 - { GDK_ISO_Left_Tab, GDK_SHIFT_MASK, lib3270_backtab }, 98 + { GDK_Tab, 0, lib3270_nextfield },
  99 + { GDK_ISO_Left_Tab, GDK_SHIFT_MASK, lib3270_previousfield },
100 { GDK_KP_Left, 0, lib3270_cursor_left }, 100 { GDK_KP_Left, 0, lib3270_cursor_left },
101 { GDK_KP_Up, 0, lib3270_cursor_up }, 101 { GDK_KP_Up, 0, lib3270_cursor_up },
102 { GDK_KP_Right, 0, lib3270_cursor_right }, 102 { GDK_KP_Right, 0, lib3270_cursor_right },
@@ -199,13 +199,13 @@ @@ -199,13 +199,13 @@
199 void v3270_tab(GtkWidget *widget) 199 void v3270_tab(GtkWidget *widget)
200 { 200 {
201 g_return_if_fail(GTK_IS_V3270(widget)); 201 g_return_if_fail(GTK_IS_V3270(widget));
202 - lib3270_tab(GTK_V3270(widget)->host); 202 + lib3270_nextfield(GTK_V3270(widget)->host);
203 } 203 }
204 204
205 void v3270_backtab(GtkWidget *widget) 205 void v3270_backtab(GtkWidget *widget)
206 { 206 {
207 g_return_if_fail(GTK_IS_V3270(widget)); 207 g_return_if_fail(GTK_IS_V3270(widget));
208 - lib3270_backtab(GTK_V3270(widget)->host); 208 + lib3270_previousfield(GTK_V3270(widget)->host);
209 } 209 }
210 210
211 void v3270_set_string(GtkWidget *widget, const gchar *str) 211 void v3270_set_string(GtkWidget *widget, const gchar *str)
ui/00default.xml
@@ -16,8 +16,8 @@ @@ -16,8 +16,8 @@
16 obter mais detalhes. 16 obter mais detalhes.
17 17
18 Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este 18 Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
19 - programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin  
20 - St, Fifth Floor, Boston, MA 02110-1301 USA 19 + programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  20 + St, Fifth Floor, Boston, MA 02110-1301 USA
21 21
22 22
23 Contatos: 23 Contatos:
@@ -184,8 +184,8 @@ @@ -184,8 +184,8 @@
184 <menuitem action='print' src='copy'/> 184 <menuitem action='print' src='copy'/>
185 185
186 <separator /> 186 <separator />
187 - <menuitem action='backtab' label='Previous field' />  
188 - <menuitem action='tab' label='Next field'/> 187 + <menuitem action='previousfield' label='Previous field' />
  188 + <menuitem action='nextfield' label='Next field'/>
189 <menuitem name="return" action='activate' label='Return' key='Return' /> 189 <menuitem name="return" action='activate' label='Return' key='Return' />
190 190
191 <separator /> 191 <separator />
@@ -232,8 +232,8 @@ @@ -232,8 +232,8 @@
232 <accelerator action='move' target='cursor' direction='up' key='Up' group='online' /> 232 <accelerator action='move' target='cursor' direction='up' key='Up' group='online' />
233 <accelerator action='move' target='cursor' direction='down' key='Down' group='online' /> 233 <accelerator action='move' target='cursor' direction='down' key='Down' group='online' />
234 234
235 - <accelerator action='PreviousField' key='ISO_Left_Tab' group='online' label='Previous field' />  
236 - <accelerator action='NextField' key='Tab' group='online' label='Next field'/> 235 + <accelerator action='previousfield' key='ISO_Left_Tab' group='online' label='Previous field' />
  236 + <accelerator action='nextfield' key='Tab' group='online' label='Next field'/>
237 237
238 <accelerator action='dup' key='<Shift>KP_Multiply' group='online' /> 238 <accelerator action='dup' key='<Shift>KP_Multiply' group='online' />
239 239