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,7 +34,7 @@
34 34
35 /*--[ Implement ]------------------------------------------------------------------------------------*/ 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 if(info->element) 39 if(info->element)
40 { 40 {
@@ -51,6 +51,6 @@ @@ -51,6 +51,6 @@
51 return NULL; 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,7 +33,7 @@
33 33
34 /*--[ Implement ]------------------------------------------------------------------------------------*/ 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 GtkWidget * widget; 38 GtkWidget * widget;
39 GtkWidget * menu = GTK_WIDGET(info->element); 39 GtkWidget * menu = GTK_WIDGET(info->element);
@@ -77,6 +77,6 @@ @@ -77,6 +77,6 @@
77 return ui_insert_element(info, action, UI_ELEMENT_MENU, names, values, G_OBJECT(widget), error); 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,7 +33,7 @@
33 33
34 /*--[ Implement ]------------------------------------------------------------------------------------*/ 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 if(info->element) 38 if(info->element)
39 { 39 {
@@ -50,6 +50,6 @@ @@ -50,6 +50,6 @@
50 return ui_insert_element(info, action, UI_ELEMENT_MENUBAR, names, values, G_OBJECT(gtk_menu_bar_new()),error); 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,7 +33,7 @@
33 33
34 /*--[ Implement ]------------------------------------------------------------------------------------*/ 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 GtkWidget * widget = NULL; 38 GtkWidget * widget = NULL;
39 GtkWidget * menu = GTK_WIDGET(info->element); 39 GtkWidget * menu = GTK_WIDGET(info->element);
@@ -111,7 +111,7 @@ @@ -111,7 +111,7 @@
111 return G_OBJECT(widget); 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,8 +38,8 @@
38 { 38 {
39 const gchar * name; 39 const gchar * name;
40 enum ui_element id; 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 } element_builder[] = 43 } element_builder[] =
44 { 44 {
45 { "menubar", UI_ELEMENT_MENUBAR, ui_create_menubar, ui_end_menubar }, 45 { "menubar", UI_ELEMENT_MENUBAR, ui_create_menubar, ui_end_menubar },
@@ -168,12 +168,14 @@ @@ -168,12 +168,14 @@
168 GtkWidget * widget = NULL; 168 GtkWidget * widget = NULL;
169 int f; 169 int f;
170 170
  171 +/*
171 if(info->disabled) 172 if(info->disabled)
172 { 173 {
173 info->disabled++; 174 info->disabled++;
174 trace("%s: <%s> disabled=%d",__FUNCTION__,element_name,info->disabled); 175 trace("%s: <%s> disabled=%d",__FUNCTION__,element_name,info->disabled);
175 return; 176 return;
176 } 177 }
  178 +*/
177 179
178 for(f=0;f<G_N_ELEMENTS(element_builder);f++) 180 for(f=0;f<G_N_ELEMENTS(element_builder);f++)
179 { 181 {
@@ -218,7 +220,7 @@ @@ -218,7 +220,7 @@
218 } 220 }
219 221
220 if(!widget) 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 if(widget) 225 if(widget)
224 { 226 {
@@ -235,10 +237,12 @@ @@ -235,10 +237,12 @@
235 #endif // GTK(2,18,0) 237 #endif // GTK(2,18,0)
236 238
237 } 239 }
  240 +/*
238 else 241 else
239 { 242 {
240 info->disabled++; 243 info->disabled++;
241 } 244 }
  245 +*/
242 } 246 }
243 247
244 static void element_end(GMarkupParseContext *context, const gchar *element_name, struct parser *info, GError **error) 248 static void element_end(GMarkupParseContext *context, const gchar *element_name, struct parser *info, GError **error)
@@ -246,18 +250,20 @@ @@ -246,18 +250,20 @@
246 GtkWidget *widget = GTK_WIDGET(info->element); 250 GtkWidget *widget = GTK_WIDGET(info->element);
247 int f; 251 int f;
248 252
  253 +/*
249 if(info->disabled) 254 if(info->disabled)
250 { 255 {
251 info->disabled--; 256 info->disabled--;
252 // trace("%s: <%s> disabled=%d",__FUNCTION__,element_name,info->disabled); 257 // trace("%s: <%s> disabled=%d",__FUNCTION__,element_name,info->disabled);
253 return; 258 return;
254 } 259 }
  260 +*/
255 261
256 for(f=0;f<G_N_ELEMENTS(element_builder);f++) 262 for(f=0;f<G_N_ELEMENTS(element_builder);f++)
257 { 263 {
258 if(!g_ascii_strcasecmp(element_name,element_builder[f].name)) 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 break; 267 break;
262 } 268 }
263 } 269 }
@@ -353,7 +359,7 @@ @@ -353,7 +359,7 @@
353 g_free(text); 359 g_free(text);
354 360
355 // trace("%s exits with rc=%d",__FUNCTION__,rc); 361 // trace("%s exits with rc=%d",__FUNCTION__,rc);
356 - info->disabled = 0; 362 +// info->disabled = 0;
357 if(info->element) 363 if(info->element)
358 { 364 {
359 g_object_set_data(G_OBJECT(info->element),"parent",NULL); 365 g_object_set_data(G_OBJECT(info->element),"parent",NULL);
src/pw3270/uiparser/popup.c
@@ -33,7 +33,7 @@ @@ -33,7 +33,7 @@
33 33
34 /*--[ Implement ]------------------------------------------------------------------------------------*/ 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 GtkWidget * widget = NULL; 38 GtkWidget * widget = NULL;
39 const gchar * id; 39 const gchar * id;
@@ -93,7 +93,7 @@ @@ -93,7 +93,7 @@
93 return G_OBJECT(ui_insert_element(info, action, UI_ELEMENT_POPUP, names, values, G_OBJECT(widget), error)); 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,9 +54,11 @@
54 54
55 struct parser 55 struct parser
56 { 56 {
57 - int disabled; 57 +// int disabled;
58 GtkWidget * toplevel; 58 GtkWidget * toplevel;
59 GObject * element; 59 GObject * element;
  60 + GtkAction * action;
  61 + GCallback callback;
60 GtkWidget * center_widget; 62 GtkWidget * center_widget;
61 GtkWidget ** popup; /**< Popup widgets */ 63 GtkWidget ** popup; /**< Popup widgets */
62 GStringChunk * strings; 64 GStringChunk * strings;
@@ -73,24 +75,24 @@ @@ -73,24 +75,24 @@
73 GObject * ui_get_element(struct parser *info, GtkAction *action, enum ui_element id, const gchar **names, const gchar **values, GError **error); 75 GObject * ui_get_element(struct parser *info, GtkAction *action, enum ui_element id, const gchar **names, const gchar **values, GError **error);
74 GObject * ui_insert_element(struct parser *info, GtkAction *action, enum ui_element id, const gchar **names, const gchar **values, GObject *widget, GError **error); 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 #include "parser.h" 98 #include "parser.h"
src/pw3270/uiparser/script.c
@@ -36,19 +36,62 @@ @@ -36,19 +36,62 @@
36 36
37 /*--[ Implement ]------------------------------------------------------------------------------------*/ 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 *error = g_error_new(ERROR_DOMAIN,EINVAL,_( "<%s> is invalid at this context"),"script"); 82 *error = g_error_new(ERROR_DOMAIN,EINVAL,_( "<%s> is invalid at this context"),"script");
44 return NULL; 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 return NULL; 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,7 +33,7 @@
33 33
34 /*--[ Implement ]------------------------------------------------------------------------------------*/ 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 GtkWidget *widget = NULL; 38 GtkWidget *widget = NULL;
39 39
@@ -99,7 +99,7 @@ @@ -99,7 +99,7 @@
99 return G_OBJECT(widget); 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,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 GtkWidget * widget = NULL; 53 GtkWidget * widget = NULL;
54 54
@@ -90,6 +90,6 @@ @@ -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,7 +33,7 @@
33 33
34 /*--[ Implement ]------------------------------------------------------------------------------------*/ 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 GtkWidget *widget = NULL; 38 GtkWidget *widget = NULL;
39 39
@@ -74,7 +74,7 @@ @@ -74,7 +74,7 @@
74 return G_OBJECT(ui_insert_element(info, action, UI_ELEMENT_TOOLITEM, names, values, G_OBJECT(widget), error)); 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