diff --git a/src/pw3270/uiparser/button.c b/src/pw3270/uiparser/button.c index 9deee15..3b24d5b 100644 --- a/src/pw3270/uiparser/button.c +++ b/src/pw3270/uiparser/button.c @@ -77,6 +77,18 @@ void keypad_button_start(GMarkupParseContext *context, const gchar **names,const gchar **values, GError **error, struct keypad *keypad) { + const gchar * label = ui_get_attribute("label", names, values); + const gchar * icon = ui_get_attribute("icon", names, values); + + if(label) { + keypad->widget = gtk_button_new_with_label(label); + } else { + gchar *text = g_strconcat("gtk-",icon,NULL); + keypad->widget = gtk_button_new(); + gtk_container_add(GTK_CONTAINER(keypad->widget),gtk_image_new_from_stock(text,GTK_ICON_SIZE_SMALL_TOOLBAR)); + g_free(text); + } + /* const gchar * label = ui_get_attribute("label", names, values); const gchar * icon = ui_get_attribute("icon", names, values); @@ -85,11 +97,6 @@ GtkAction * action = NULL; GtkWidget * widget = NULL; - if(++keypad->col > keypad->num_cols) - keypad->num_cols = keypad->col; - - keypad->row->num_cols++; - if(label) { widget = gtk_button_new_with_label(gettext(g_strcompress(label))); @@ -102,11 +109,6 @@ g_free(text); } - keypad->row->cols = g_list_append(keypad->row->cols,widget); - - if(!widget) - return; - #if GTK_CHECK_VERSION(2,18,0) gtk_widget_set_can_focus(widget,FALSE); gtk_widget_set_can_default(widget,FALSE); @@ -133,6 +135,6 @@ gtk_widget_set_sensitive(widget,FALSE); g_signal_connect(G_OBJECT(widget),"clicked",G_CALLBACK(button_script),info->center_widget); } - */ +*/ } diff --git a/src/pw3270/uiparser/keypad.c b/src/pw3270/uiparser/keypad.c index 35ca13c..de9558c 100644 --- a/src/pw3270/uiparser/keypad.c +++ b/src/pw3270/uiparser/keypad.c @@ -33,12 +33,30 @@ static void element_start(GMarkupParseContext *context, const gchar *element_name, const gchar **names,const gchar **values, struct keypad *keypad, GError **error) { - trace("%s(%s)",__FUNCTION__,element_name); + trace("%s(%s,%d,%d)",__FUNCTION__,element_name,(int) keypad->row, (int) keypad->col); + + keypad->widget = NULL; + + if(!strcasecmp(element_name,"button")) { + keypad_button_start(context, names, values, error, keypad); + } + } static void element_end(GMarkupParseContext *context, const gchar *element_name, struct keypad *keypad, GError **error) { - trace("%s(%s)",__FUNCTION__,element_name); + if(keypad->widget) { + gtk_grid_attach(keypad->grid,keypad->widget,keypad->col,keypad->row,1,1); + keypad->widget = NULL; + } + + if(!strcasecmp(element_name,"row")) { + keypad->row++; + keypad->col = 0; + } else { + keypad->col++; + } + } static void toggled(GtkToggleAction *action, GtkWidget *widget) diff --git a/src/pw3270/uiparser/keypad.h b/src/pw3270/uiparser/keypad.h index 15a1034..3090514 100644 --- a/src/pw3270/uiparser/keypad.h +++ b/src/pw3270/uiparser/keypad.h @@ -38,6 +38,7 @@ unsigned short row; unsigned short col; GtkGrid * grid; + GtkWidget * widget; GtkReliefStyle relief; UI_ATTR_DIRECTION pos; }; -- libgit2 0.21.2