diff --git a/src/include/pw3270/keypad.h b/src/include/pw3270/keypad.h
index 5251b39..d70825b 100644
--- a/src/include/pw3270/keypad.h
+++ b/src/include/pw3270/keypad.h
@@ -52,7 +52,8 @@
GType KeypadModel_get_type(void) G_GNUC_CONST;
- GList * pw3270_keypad_model_load_from_xml(GList *keypads, const gchar *filename);
+ GList * pw3270_keypad_model_new_from_xml(GList *keypads, const gchar *filename);
+ GtkWidget * pw3270_keypad_get_from_model(GObject *model);
G_END_DECLS
diff --git a/src/objects/keypad/element.c b/src/objects/keypad/element.c
index 454ba9c..029f8da 100644
--- a/src/objects/keypad/element.c
+++ b/src/objects/keypad/element.c
@@ -212,24 +212,24 @@
if(element->label) {
g_free(element->label);
- element->label = g_value_dup_string(value);
}
+ element->label = g_value_dup_string(value);
break;
case PROP_ICON_NAME:
if(element->icon_name) {
g_free(element->icon_name);
- element->icon_name = g_value_dup_string(value);
}
+ element->icon_name = g_value_dup_string(value);
break;
case PROP_ACTION:
if(element->action) {
g_free(element->action);
- element->action = g_value_dup_string(value);
}
+ element->action = g_value_dup_string(value);
break;
case PROP_ROW:
diff --git a/src/objects/keypad/keypad.cbp b/src/objects/keypad/keypad.cbp
index bfd635f..793274a 100644
--- a/src/objects/keypad/keypad.cbp
+++ b/src/objects/keypad/keypad.cbp
@@ -55,6 +55,9 @@
+
+
+
diff --git a/src/objects/keypad/load.c b/src/objects/keypad/load.c
index 2b77072..2d75b88 100644
--- a/src/objects/keypad/load.c
+++ b/src/objects/keypad/load.c
@@ -32,7 +32,7 @@
/*---[ Implement ]----------------------------------------------------------------------------------*/
- static void element_start(GMarkupParseContext *context, const gchar *element_name, const gchar **names,const gchar **values, GList *keypads, GError **error) {
+ static void element_start(GMarkupParseContext *context, const gchar *element_name, const gchar **names,const gchar **values, GList **keypads, GError **error) {
if(!g_ascii_strcasecmp(element_name,"keypad")) {
@@ -48,10 +48,13 @@
G_MARKUP_COLLECT_INVALID
)) {
+ g_object_unref(keypad);
return;
}
+ *keypads = g_list_append(*keypads,keypad);
+
keypad_model_set_position(keypad,position);
if(width) {
@@ -70,7 +73,7 @@
}
- static void element_end(GMarkupParseContext *context, const gchar *element_name, GList *keypads, GError **error) {
+ static void element_end(GMarkupParseContext *context, const gchar *element_name, GList **keypads, GError **error) {
debug("%s(%s)",__FUNCTION__,element_name);
@@ -100,7 +103,7 @@
NULL
};
- GMarkupParseContext * context = g_markup_parse_context_new(&parser,G_MARKUP_TREAT_CDATA_AS_TEXT,keypads,NULL);
+ GMarkupParseContext * context = g_markup_parse_context_new(&parser,G_MARKUP_TREAT_CDATA_AS_TEXT,&keypads,NULL);
g_markup_parse_context_parse(context,text,strlen(text),&error);
g_markup_parse_context_free(context);
}
diff --git a/src/objects/keypad/testprogram/testprogram.c b/src/objects/keypad/testprogram/testprogram.c
index f4e268f..f6f1539 100644
--- a/src/objects/keypad/testprogram/testprogram.c
+++ b/src/objects/keypad/testprogram/testprogram.c
@@ -43,42 +43,29 @@
static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) {
- GtkWidget * window = gtk_application_window_new(app);
- GtkWidget * terminal = v3270_new();
- GtkWidget * vBox = gtk_box_new(GTK_ORIENTATION_VERTICAL,2);
- GtkWidget * notebook = gtk_notebook_new();
-
- // Hack to speed up the tests.
- lib3270_disable_crl_download(v3270_get_session(terminal));
-
- gtk_box_pack_start(GTK_BOX(vBox),notebook,TRUE,TRUE,0);
-
- // Create Terminal window
- {
- gtk_widget_set_can_default(terminal,TRUE);
-
-#if GTK_CHECK_VERSION(3,20,0)
- gtk_widget_set_focus_on_click(terminal,TRUE);
-#endif // GTK 3,20,0
-
- gtk_notebook_append_page(GTK_NOTEBOOK(notebook),terminal,gtk_label_new("Terminal"));
-
- }
+ GtkWidget * window = gtk_application_window_new(app);
// Load keypad
GList *keypads = pw3270_keypad_model_new_from_xml(NULL,"keypad.xml");
- // Create trace window
- v3270_set_trace(terminal,TRUE);
+ if(!keypads) {
+ g_message("No keypad");
+ g_application_quit(G_APPLICATION(app));
+ }
+
+ // Create keypad widget
+ GObject * model = G_OBJECT(g_list_first(keypads)->data);
+ if(model) {
+ gtk_container_add(GTK_CONTAINER(window),pw3270_keypad_get_from_model(model));
+ }
// Setup and show main window
gtk_window_set_title(GTK_WINDOW(window),"PW3270 Keypad test");
- gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
- gtk_window_set_default_size (GTK_WINDOW (window), 800, 500);
- gtk_container_add(GTK_CONTAINER(window),vBox);
+ // gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
+ // gtk_window_set_default_size (GTK_WINDOW (window), 800, 500);
gtk_widget_show_all(window);
- gtk_widget_grab_focus(terminal);
+ g_list_free_full(keypads,g_object_unref);
}
diff --git a/src/objects/keypad/widget.c b/src/objects/keypad/widget.c
new file mode 100644
index 0000000..216dc3e
--- /dev/null
+++ b/src/objects/keypad/widget.c
@@ -0,0 +1,66 @@
+/*
+ * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
+ * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
+ * aplicativos mainframe. Registro no INPI sob o nome G3270.
+ *
+ * Copyright (C) <2008>
+ *
+ * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
+ * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
+ * Free Software Foundation.
+ *
+ * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
+ * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
+ * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
+ * obter mais detalhes.
+ *
+ * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
+ * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
+ * St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Este programa está nomeado como - e possui - linhas de código.
+ *
+ * Contatos:
+ *
+ * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
+ * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
+ *
+ */
+
+ #include "private.h"
+
+/*---[ Implement ]----------------------------------------------------------------------------------*/
+
+ static void create_child(const KeypadElement *element, GtkGrid *grid) {
+
+ GtkWidget * button;
+
+ if(element->icon_name) {
+ button = gtk_button_new_from_icon_name(element->icon_name,GTK_ICON_SIZE_SMALL_TOOLBAR);
+ } else if(element->label) {
+ button = gtk_button_new();
+ gtk_button_set_(element->label);
+ } else {
+ button = gtk_button_new();
+ }
+
+ gtk_grid_attach(
+ grid,
+ button,
+ element->col,element->row,
+ element->width,element->height
+ );
+
+ }
+
+ GtkWidget * pw3270_keypad_get_from_model(GObject *model) {
+
+ g_return_val_if_fail(PW_IS_KEYPAD_MODEL(model),NULL);
+
+ GtkWidget * grid = gtk_grid_new();
+ gtk_grid_set_column_homogeneous(GTK_GRID(grid),TRUE);
+
+ g_list_foreach(PW_KEYPAD_MODEL(model)->elements,(GFunc) create_child, grid);
+
+ return grid;
+ }
--
libgit2 0.21.2