diff --git a/src/pw3270/uiparser/accelerator.c b/src/pw3270/uiparser/accelerator.c index 58af8fa..6ffaac9 100644 --- a/src/pw3270/uiparser/accelerator.c +++ b/src/pw3270/uiparser/accelerator.c @@ -34,7 +34,7 @@ /*--[ Implement ]------------------------------------------------------------------------------------*/ - GObject * ui_create_accelerator(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error) + GObject * ui_create_accelerator(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error) { if(info->element) { @@ -51,6 +51,6 @@ return NULL; } - void ui_end_accelerator(GObject *widget,struct parser *info,GError **error) + void ui_end_accelerator(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error) { } diff --git a/src/pw3270/uiparser/menu.c b/src/pw3270/uiparser/menu.c index 91e11e3..73b9e93 100644 --- a/src/pw3270/uiparser/menu.c +++ b/src/pw3270/uiparser/menu.c @@ -33,7 +33,7 @@ /*--[ Implement ]------------------------------------------------------------------------------------*/ - GObject * ui_create_menu(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error) + GObject * ui_create_menu(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error) { GtkWidget * widget; GtkWidget * menu = GTK_WIDGET(info->element); @@ -77,6 +77,6 @@ return ui_insert_element(info, action, UI_ELEMENT_MENU, names, values, G_OBJECT(widget), error); } - void ui_end_menu(GObject *widget,struct parser *info,GError **error) + void ui_end_menu(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error) { } diff --git a/src/pw3270/uiparser/menubar.c b/src/pw3270/uiparser/menubar.c index 966133c..e1b716d 100644 --- a/src/pw3270/uiparser/menubar.c +++ b/src/pw3270/uiparser/menubar.c @@ -33,7 +33,7 @@ /*--[ Implement ]------------------------------------------------------------------------------------*/ - GObject * ui_create_menubar(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error) + GObject * ui_create_menubar(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error) { if(info->element) { @@ -50,6 +50,6 @@ return ui_insert_element(info, action, UI_ELEMENT_MENUBAR, names, values, G_OBJECT(gtk_menu_bar_new()),error); } - void ui_end_menubar(GObject *widget,struct parser *info,GError **error) + void ui_end_menubar(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error) { } diff --git a/src/pw3270/uiparser/menuitem.c b/src/pw3270/uiparser/menuitem.c index c6b5fa5..7d9d8f5 100644 --- a/src/pw3270/uiparser/menuitem.c +++ b/src/pw3270/uiparser/menuitem.c @@ -33,7 +33,7 @@ /*--[ Implement ]------------------------------------------------------------------------------------*/ - GObject * ui_create_menuitem(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error) + GObject * ui_create_menuitem(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error) { GtkWidget * widget = NULL; GtkWidget * menu = GTK_WIDGET(info->element); @@ -111,7 +111,7 @@ return G_OBJECT(widget); } - void ui_end_menuitem(GObject *widget,struct parser *info,GError **error) + void ui_end_menuitem(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error) { } diff --git a/src/pw3270/uiparser/parsefile.c b/src/pw3270/uiparser/parsefile.c index 7400f20..b5f4b8e 100644 --- a/src/pw3270/uiparser/parsefile.c +++ b/src/pw3270/uiparser/parsefile.c @@ -38,8 +38,8 @@ { const gchar * name; enum ui_element id; - GObject * (*create)(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error); - void (*end)(GObject *widget,struct parser *info,GError **error); + GObject * (*create)(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error); + void (*end)(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error); } element_builder[] = { { "menubar", UI_ELEMENT_MENUBAR, ui_create_menubar, ui_end_menubar }, @@ -168,12 +168,14 @@ GtkWidget * widget = NULL; int f; +/* if(info->disabled) { info->disabled++; trace("%s: <%s> disabled=%d",__FUNCTION__,element_name,info->disabled); return; } +*/ for(f=0;fdisabled++; } +*/ } static void element_end(GMarkupParseContext *context, const gchar *element_name, struct parser *info, GError **error) @@ -246,18 +250,20 @@ GtkWidget *widget = GTK_WIDGET(info->element); int f; +/* if(info->disabled) { info->disabled--; // trace("%s: <%s> disabled=%d",__FUNCTION__,element_name,info->disabled); return; } +*/ for(f=0;felement,info,error); + element_builder[f].end(context,info->element,info,error); break; } } @@ -353,7 +359,7 @@ g_free(text); // trace("%s exits with rc=%d",__FUNCTION__,rc); - info->disabled = 0; +// info->disabled = 0; if(info->element) { g_object_set_data(G_OBJECT(info->element),"parent",NULL); diff --git a/src/pw3270/uiparser/popup.c b/src/pw3270/uiparser/popup.c index 9c1d753..2dec81f 100644 --- a/src/pw3270/uiparser/popup.c +++ b/src/pw3270/uiparser/popup.c @@ -33,7 +33,7 @@ /*--[ Implement ]------------------------------------------------------------------------------------*/ - GObject * ui_create_popup(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error) + GObject * ui_create_popup(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error) { GtkWidget * widget = NULL; const gchar * id; @@ -93,7 +93,7 @@ return G_OBJECT(ui_insert_element(info, action, UI_ELEMENT_POPUP, names, values, G_OBJECT(widget), error)); } - void ui_end_popup(GObject *widget,struct parser *info,GError **error) + void ui_end_popup(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error) { } diff --git a/src/pw3270/uiparser/private.h b/src/pw3270/uiparser/private.h index 53b2f02..01bf45f 100644 --- a/src/pw3270/uiparser/private.h +++ b/src/pw3270/uiparser/private.h @@ -54,9 +54,11 @@ struct parser { - int disabled; +// int disabled; GtkWidget * toplevel; GObject * element; + GtkAction * action; + GCallback callback; GtkWidget * center_widget; GtkWidget ** popup; /**< Popup widgets */ GStringChunk * strings; @@ -73,24 +75,24 @@ GObject * ui_get_element(struct parser *info, GtkAction *action, enum ui_element id, const gchar **names, const gchar **values, GError **error); GObject * ui_insert_element(struct parser *info, GtkAction *action, enum ui_element id, const gchar **names, const gchar **values, GObject *widget, GError **error); - GObject * ui_create_menubar(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error); - GObject * ui_create_menu(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error); - GObject * ui_create_menuitem(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error); - GObject * ui_create_toolbar(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error); - GObject * ui_create_toolitem(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error); - GObject * ui_create_separator(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error); - GObject * ui_create_accelerator(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error); - GObject * ui_create_popup(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error); - GObject * ui_create_script(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error); + GObject * ui_create_menubar(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error); + GObject * ui_create_menu(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error); + GObject * ui_create_menuitem(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error); + GObject * ui_create_toolbar(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error); + GObject * ui_create_toolitem(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error); + GObject * ui_create_separator(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error); + GObject * ui_create_accelerator(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error); + GObject * ui_create_popup(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error); + GObject * ui_create_script(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error); - void ui_end_menubar(GObject *widget,struct parser *info,GError **error); - void ui_end_menu(GObject *widget,struct parser *info,GError **error); - void ui_end_menuitem(GObject *widget,struct parser *info,GError **error); - void ui_end_toolbar(GObject *widget,struct parser *info,GError **error); - void ui_end_toolitem(GObject *widget,struct parser *info,GError **error); - void ui_end_separator(GObject *widget,struct parser *info,GError **error); - void ui_end_accelerator(GObject *widget,struct parser *info,GError **error); - void ui_end_popup(GObject *widget,struct parser *info,GError **error); - void ui_end_script(GObject *widget,struct parser *info,GError **error); + void ui_end_menubar(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error); + void ui_end_menu(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error); + void ui_end_menuitem(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error); + void ui_end_toolbar(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error); + void ui_end_toolitem(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error); + void ui_end_separator(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error); + void ui_end_accelerator(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error); + void ui_end_popup(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error); + void ui_end_script(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error); #include "parser.h" diff --git a/src/pw3270/uiparser/script.c b/src/pw3270/uiparser/script.c index 360fb5b..8ef39ec 100644 --- a/src/pw3270/uiparser/script.c +++ b/src/pw3270/uiparser/script.c @@ -36,19 +36,62 @@ /*--[ Implement ]------------------------------------------------------------------------------------*/ - GObject * ui_create_script(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error) + static void element_start(GMarkupParseContext *context, const gchar *element_name, const gchar **names,const gchar **values, struct parser *info, GError **error) { - if(!(info->element && action)) + trace("%s: %s",__FUNCTION__,element_name); + } + + static void element_end(GMarkupParseContext *context, const gchar *element_name, struct parser *info, GError **error) + { + trace("%s: %s",__FUNCTION__,element_name); + } + + static void script_text(GMarkupParseContext *context, const gchar *element_text, gsize text_len, GtkAction *action, GError **error) + { + gchar *text = g_strstrip(g_strdup(element_text)); + g_object_set_data_full(G_OBJECT(action),"script_text",g_strdup(text),g_free); + g_free(text); + } + + GObject * ui_create_script(GMarkupParseContext *context,GtkAction *action, struct parser *info, const gchar **names, const gchar **values, GError **error) + { + static const GMarkupParser parser = + { + (void (*)(GMarkupParseContext *, const gchar *, const gchar **, const gchar **, gpointer, GError **)) + element_start, + (void (*)(GMarkupParseContext *, const gchar *, gpointer, GError **)) + element_end, + (void (*)(GMarkupParseContext *, const gchar *, gsize, gpointer, GError **)) + script_text, + +// (void (*)(GMarkupParseContext *, GError *, gpointer)) + NULL + + }; + + if(action) + { + *error = g_error_new(ERROR_DOMAIN,EINVAL,_( "action attribute is invalid for <%s>"),"script"); + return NULL; + } + + trace("%s: info->element: %p action: %p",__FUNCTION__,info->element, action); + + if(!info->element) { *error = g_error_new(ERROR_DOMAIN,EINVAL,_( "<%s> is invalid at this context"),"script"); return NULL; } + trace("%s: Parsing script",__FUNCTION__); + + g_markup_parse_context_push(context,&parser,NULL); + return NULL; } - void ui_end_script(GObject *widget,struct parser *info,GError **error) + void ui_end_script(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error) { - + g_markup_parse_context_pop(context); } diff --git a/src/pw3270/uiparser/separator.c b/src/pw3270/uiparser/separator.c index 5e24c97..7d40fb5 100644 --- a/src/pw3270/uiparser/separator.c +++ b/src/pw3270/uiparser/separator.c @@ -33,7 +33,7 @@ /*--[ Implement ]------------------------------------------------------------------------------------*/ - GObject * ui_create_separator(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error) + GObject * ui_create_separator(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error) { GtkWidget *widget = NULL; @@ -99,7 +99,7 @@ return G_OBJECT(widget); } - void ui_end_separator(GObject *widget,struct parser *info,GError **error) + void ui_end_separator(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error) { } diff --git a/src/pw3270/uiparser/toolbar.c b/src/pw3270/uiparser/toolbar.c index 924f37c..78f3df5 100644 --- a/src/pw3270/uiparser/toolbar.c +++ b/src/pw3270/uiparser/toolbar.c @@ -48,7 +48,7 @@ } - GObject * ui_create_toolbar(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error) + GObject * ui_create_toolbar(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error) { GtkWidget * widget = NULL; @@ -90,6 +90,6 @@ } - void ui_end_toolbar(GObject *widget,struct parser *info,GError **error) + void ui_end_toolbar(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error) { } diff --git a/src/pw3270/uiparser/toolitem.c b/src/pw3270/uiparser/toolitem.c index 14e39cc..d4c5232 100644 --- a/src/pw3270/uiparser/toolitem.c +++ b/src/pw3270/uiparser/toolitem.c @@ -33,7 +33,7 @@ /*--[ Implement ]------------------------------------------------------------------------------------*/ - GObject * ui_create_toolitem(GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error) + GObject * ui_create_toolitem(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error) { GtkWidget *widget = NULL; @@ -74,7 +74,7 @@ return G_OBJECT(ui_insert_element(info, action, UI_ELEMENT_TOOLITEM, names, values, G_OBJECT(widget), error)); } - void ui_end_toolitem(GObject *widget,struct parser *info,GError **error) + void ui_end_toolitem(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error) { } -- libgit2 0.21.2