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