Commit 94534245f0759d523a81dedfe43eb1b1fbe4d949

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

Incluindo suporte para tag "script"

src/pw3270/uiparser/accelerator.c
... ... @@ -34,7 +34,7 @@
34 34  
35 35 /*--[ Implement ]------------------------------------------------------------------------------------*/
36 36  
37   - GObject * ui_create_accelerator(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error)
  37 + GObject * ui_create_accelerator(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error)
38 38 {
39 39 if(info->element)
40 40 {
... ... @@ -51,6 +51,6 @@
51 51 return NULL;
52 52 }
53 53  
54   - void ui_end_accelerator(GObject *widget,struct parser *info,GError **error)
  54 + void ui_end_accelerator(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error)
55 55 {
56 56 }
... ...
src/pw3270/uiparser/menu.c
... ... @@ -33,7 +33,7 @@
33 33  
34 34 /*--[ Implement ]------------------------------------------------------------------------------------*/
35 35  
36   - GObject * ui_create_menu(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error)
  36 + GObject * ui_create_menu(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error)
37 37 {
38 38 GtkWidget * widget;
39 39 GtkWidget * menu = GTK_WIDGET(info->element);
... ... @@ -77,6 +77,6 @@
77 77 return ui_insert_element(info, action, UI_ELEMENT_MENU, names, values, G_OBJECT(widget), error);
78 78 }
79 79  
80   - void ui_end_menu(GObject *widget,struct parser *info,GError **error)
  80 + void ui_end_menu(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error)
81 81 {
82 82 }
... ...
src/pw3270/uiparser/menubar.c
... ... @@ -33,7 +33,7 @@
33 33  
34 34 /*--[ Implement ]------------------------------------------------------------------------------------*/
35 35  
36   - GObject * ui_create_menubar(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error)
  36 + GObject * ui_create_menubar(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error)
37 37 {
38 38 if(info->element)
39 39 {
... ... @@ -50,6 +50,6 @@
50 50 return ui_insert_element(info, action, UI_ELEMENT_MENUBAR, names, values, G_OBJECT(gtk_menu_bar_new()),error);
51 51 }
52 52  
53   - void ui_end_menubar(GObject *widget,struct parser *info,GError **error)
  53 + void ui_end_menubar(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error)
54 54 {
55 55 }
... ...
src/pw3270/uiparser/menuitem.c
... ... @@ -33,7 +33,7 @@
33 33  
34 34 /*--[ Implement ]------------------------------------------------------------------------------------*/
35 35  
36   - GObject * ui_create_menuitem(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error)
  36 + GObject * ui_create_menuitem(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error)
37 37 {
38 38 GtkWidget * widget = NULL;
39 39 GtkWidget * menu = GTK_WIDGET(info->element);
... ... @@ -111,7 +111,7 @@
111 111 return G_OBJECT(widget);
112 112 }
113 113  
114   - void ui_end_menuitem(GObject *widget,struct parser *info,GError **error)
  114 + void ui_end_menuitem(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error)
115 115 {
116 116 }
117 117  
... ...
src/pw3270/uiparser/parsefile.c
... ... @@ -38,8 +38,8 @@
38 38 {
39 39 const gchar * name;
40 40 enum ui_element id;
41   - GObject * (*create)(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error);
42   - void (*end)(GObject *widget,struct parser *info,GError **error);
  41 + GObject * (*create)(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error);
  42 + void (*end)(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error);
43 43 } element_builder[] =
44 44 {
45 45 { "menubar", UI_ELEMENT_MENUBAR, ui_create_menubar, ui_end_menubar },
... ... @@ -168,12 +168,14 @@
168 168 GtkWidget * widget = NULL;
169 169 int f;
170 170  
  171 +/*
171 172 if(info->disabled)
172 173 {
173 174 info->disabled++;
174 175 trace("%s: <%s> disabled=%d",__FUNCTION__,element_name,info->disabled);
175 176 return;
176 177 }
  178 +*/
177 179  
178 180 for(f=0;f<G_N_ELEMENTS(element_builder);f++)
179 181 {
... ... @@ -218,7 +220,7 @@
218 220 }
219 221  
220 222 if(!widget)
221   - widget = GTK_WIDGET(element_builder[id].create(action,info,names,values,error));
  223 + widget = GTK_WIDGET(element_builder[id].create(context,action,info,names,values,error));
222 224  
223 225 if(widget)
224 226 {
... ... @@ -235,10 +237,12 @@
235 237 #endif // GTK(2,18,0)
236 238  
237 239 }
  240 +/*
238 241 else
239 242 {
240 243 info->disabled++;
241 244 }
  245 +*/
242 246 }
243 247  
244 248 static void element_end(GMarkupParseContext *context, const gchar *element_name, struct parser *info, GError **error)
... ... @@ -246,18 +250,20 @@
246 250 GtkWidget *widget = GTK_WIDGET(info->element);
247 251 int f;
248 252  
  253 +/*
249 254 if(info->disabled)
250 255 {
251 256 info->disabled--;
252 257 // trace("%s: <%s> disabled=%d",__FUNCTION__,element_name,info->disabled);
253 258 return;
254 259 }
  260 +*/
255 261  
256 262 for(f=0;f<G_N_ELEMENTS(element_builder);f++)
257 263 {
258 264 if(!g_ascii_strcasecmp(element_name,element_builder[f].name))
259 265 {
260   - element_builder[f].end(info->element,info,error);
  266 + element_builder[f].end(context,info->element,info,error);
261 267 break;
262 268 }
263 269 }
... ... @@ -353,7 +359,7 @@
353 359 g_free(text);
354 360  
355 361 // trace("%s exits with rc=%d",__FUNCTION__,rc);
356   - info->disabled = 0;
  362 +// info->disabled = 0;
357 363 if(info->element)
358 364 {
359 365 g_object_set_data(G_OBJECT(info->element),"parent",NULL);
... ...
src/pw3270/uiparser/popup.c
... ... @@ -33,7 +33,7 @@
33 33  
34 34 /*--[ Implement ]------------------------------------------------------------------------------------*/
35 35  
36   - GObject * ui_create_popup(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error)
  36 + GObject * ui_create_popup(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error)
37 37 {
38 38 GtkWidget * widget = NULL;
39 39 const gchar * id;
... ... @@ -93,7 +93,7 @@
93 93 return G_OBJECT(ui_insert_element(info, action, UI_ELEMENT_POPUP, names, values, G_OBJECT(widget), error));
94 94 }
95 95  
96   - void ui_end_popup(GObject *widget,struct parser *info,GError **error)
  96 + void ui_end_popup(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error)
97 97 {
98 98  
99 99 }
... ...
src/pw3270/uiparser/private.h
... ... @@ -54,9 +54,11 @@
54 54  
55 55 struct parser
56 56 {
57   - int disabled;
  57 +// int disabled;
58 58 GtkWidget * toplevel;
59 59 GObject * element;
  60 + GtkAction * action;
  61 + GCallback callback;
60 62 GtkWidget * center_widget;
61 63 GtkWidget ** popup; /**< Popup widgets */
62 64 GStringChunk * strings;
... ... @@ -73,24 +75,24 @@
73 75 GObject * ui_get_element(struct parser *info, GtkAction *action, enum ui_element id, const gchar **names, const gchar **values, GError **error);
74 76 GObject * ui_insert_element(struct parser *info, GtkAction *action, enum ui_element id, const gchar **names, const gchar **values, GObject *widget, GError **error);
75 77  
76   - GObject * ui_create_menubar(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error);
77   - GObject * ui_create_menu(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error);
78   - GObject * ui_create_menuitem(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error);
79   - GObject * ui_create_toolbar(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error);
80   - GObject * ui_create_toolitem(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error);
81   - GObject * ui_create_separator(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error);
82   - GObject * ui_create_accelerator(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error);
83   - GObject * ui_create_popup(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error);
84   - GObject * ui_create_script(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error);
  78 + GObject * ui_create_menubar(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error);
  79 + GObject * ui_create_menu(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error);
  80 + GObject * ui_create_menuitem(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error);
  81 + GObject * ui_create_toolbar(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error);
  82 + GObject * ui_create_toolitem(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error);
  83 + GObject * ui_create_separator(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error);
  84 + GObject * ui_create_accelerator(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error);
  85 + GObject * ui_create_popup(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error);
  86 + GObject * ui_create_script(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error);
85 87  
86   - void ui_end_menubar(GObject *widget,struct parser *info,GError **error);
87   - void ui_end_menu(GObject *widget,struct parser *info,GError **error);
88   - void ui_end_menuitem(GObject *widget,struct parser *info,GError **error);
89   - void ui_end_toolbar(GObject *widget,struct parser *info,GError **error);
90   - void ui_end_toolitem(GObject *widget,struct parser *info,GError **error);
91   - void ui_end_separator(GObject *widget,struct parser *info,GError **error);
92   - void ui_end_accelerator(GObject *widget,struct parser *info,GError **error);
93   - void ui_end_popup(GObject *widget,struct parser *info,GError **error);
94   - void ui_end_script(GObject *widget,struct parser *info,GError **error);
  88 + void ui_end_menubar(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error);
  89 + void ui_end_menu(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error);
  90 + void ui_end_menuitem(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error);
  91 + void ui_end_toolbar(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error);
  92 + void ui_end_toolitem(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error);
  93 + void ui_end_separator(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error);
  94 + void ui_end_accelerator(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error);
  95 + void ui_end_popup(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error);
  96 + void ui_end_script(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error);
95 97  
96 98 #include "parser.h"
... ...
src/pw3270/uiparser/script.c
... ... @@ -36,19 +36,62 @@
36 36  
37 37 /*--[ Implement ]------------------------------------------------------------------------------------*/
38 38  
39   - GObject * ui_create_script(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error)
  39 + static void element_start(GMarkupParseContext *context, const gchar *element_name, const gchar **names,const gchar **values, struct parser *info, GError **error)
40 40 {
41   - if(!(info->element && action))
  41 + trace("%s: %s",__FUNCTION__,element_name);
  42 + }
  43 +
  44 + static void element_end(GMarkupParseContext *context, const gchar *element_name, struct parser *info, GError **error)
  45 + {
  46 + trace("%s: %s",__FUNCTION__,element_name);
  47 + }
  48 +
  49 + static void script_text(GMarkupParseContext *context, const gchar *element_text, gsize text_len, GtkAction *action, GError **error)
  50 + {
  51 + gchar *text = g_strstrip(g_strdup(element_text));
  52 + g_object_set_data_full(G_OBJECT(action),"script_text",g_strdup(text),g_free);
  53 + g_free(text);
  54 + }
  55 +
  56 + GObject * ui_create_script(GMarkupParseContext *context,GtkAction *action, struct parser *info, const gchar **names, const gchar **values, GError **error)
  57 + {
  58 + static const GMarkupParser parser =
  59 + {
  60 + (void (*)(GMarkupParseContext *, const gchar *, const gchar **, const gchar **, gpointer, GError **))
  61 + element_start,
  62 + (void (*)(GMarkupParseContext *, const gchar *, gpointer, GError **))
  63 + element_end,
  64 + (void (*)(GMarkupParseContext *, const gchar *, gsize, gpointer, GError **))
  65 + script_text,
  66 +
  67 +// (void (*)(GMarkupParseContext *, GError *, gpointer))
  68 + NULL
  69 +
  70 + };
  71 +
  72 + if(action)
  73 + {
  74 + *error = g_error_new(ERROR_DOMAIN,EINVAL,_( "action attribute is invalid for <%s>"),"script");
  75 + return NULL;
  76 + }
  77 +
  78 + trace("%s: info->element: %p action: %p",__FUNCTION__,info->element, action);
  79 +
  80 + if(!info->element)
42 81 {
43 82 *error = g_error_new(ERROR_DOMAIN,EINVAL,_( "<%s> is invalid at this context"),"script");
44 83 return NULL;
45 84 }
46 85  
  86 + trace("%s: Parsing script",__FUNCTION__);
  87 +
  88 + g_markup_parse_context_push(context,&parser,NULL);
  89 +
47 90 return NULL;
48 91 }
49 92  
50   - void ui_end_script(GObject *widget,struct parser *info,GError **error)
  93 + void ui_end_script(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error)
51 94 {
52   -
  95 + g_markup_parse_context_pop(context);
53 96 }
54 97  
... ...
src/pw3270/uiparser/separator.c
... ... @@ -33,7 +33,7 @@
33 33  
34 34 /*--[ Implement ]------------------------------------------------------------------------------------*/
35 35  
36   - GObject * ui_create_separator(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error)
  36 + GObject * ui_create_separator(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error)
37 37 {
38 38 GtkWidget *widget = NULL;
39 39  
... ... @@ -99,7 +99,7 @@
99 99 return G_OBJECT(widget);
100 100 }
101 101  
102   - void ui_end_separator(GObject *widget,struct parser *info,GError **error)
  102 + void ui_end_separator(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error)
103 103 {
104 104 }
105 105  
... ...
src/pw3270/uiparser/toolbar.c
... ... @@ -48,7 +48,7 @@
48 48  
49 49 }
50 50  
51   - GObject * ui_create_toolbar(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error)
  51 + GObject * ui_create_toolbar(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error)
52 52 {
53 53 GtkWidget * widget = NULL;
54 54  
... ... @@ -90,6 +90,6 @@
90 90  
91 91 }
92 92  
93   - void ui_end_toolbar(GObject *widget,struct parser *info,GError **error)
  93 + void ui_end_toolbar(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error)
94 94 {
95 95 }
... ...
src/pw3270/uiparser/toolitem.c
... ... @@ -33,7 +33,7 @@
33 33  
34 34 /*--[ Implement ]------------------------------------------------------------------------------------*/
35 35  
36   - GObject * ui_create_toolitem(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error)
  36 + GObject * ui_create_toolitem(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error)
37 37 {
38 38 GtkWidget *widget = NULL;
39 39  
... ... @@ -74,7 +74,7 @@
74 74 return G_OBJECT(ui_insert_element(info, action, UI_ELEMENT_TOOLITEM, names, values, G_OBJECT(widget), error));
75 75 }
76 76  
77   - void ui_end_toolitem(GObject *widget,struct parser *info,GError **error)
  77 + void ui_end_toolitem(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error)
78 78 {
79 79 }
80 80  
... ...