Commit 587c6297d5b0b45a1290bd1c53417c551f6332ef
1 parent
880509be
Exists in
master
and in
4 other branches
Creating keypad widget.
Showing
6 changed files
with
94 additions
and
34 deletions
Show diff stats
src/include/pw3270/keypad.h
... | ... | @@ -52,7 +52,8 @@ |
52 | 52 | |
53 | 53 | GType KeypadModel_get_type(void) G_GNUC_CONST; |
54 | 54 | |
55 | - GList * pw3270_keypad_model_load_from_xml(GList *keypads, const gchar *filename); | |
55 | + GList * pw3270_keypad_model_new_from_xml(GList *keypads, const gchar *filename); | |
56 | + GtkWidget * pw3270_keypad_get_from_model(GObject *model); | |
56 | 57 | |
57 | 58 | G_END_DECLS |
58 | 59 | ... | ... |
src/objects/keypad/element.c
... | ... | @@ -212,24 +212,24 @@ |
212 | 212 | |
213 | 213 | if(element->label) { |
214 | 214 | g_free(element->label); |
215 | - element->label = g_value_dup_string(value); | |
216 | 215 | } |
216 | + element->label = g_value_dup_string(value); | |
217 | 217 | break; |
218 | 218 | |
219 | 219 | case PROP_ICON_NAME: |
220 | 220 | |
221 | 221 | if(element->icon_name) { |
222 | 222 | g_free(element->icon_name); |
223 | - element->icon_name = g_value_dup_string(value); | |
224 | 223 | } |
224 | + element->icon_name = g_value_dup_string(value); | |
225 | 225 | break; |
226 | 226 | |
227 | 227 | case PROP_ACTION: |
228 | 228 | |
229 | 229 | if(element->action) { |
230 | 230 | g_free(element->action); |
231 | - element->action = g_value_dup_string(value); | |
232 | 231 | } |
232 | + element->action = g_value_dup_string(value); | |
233 | 233 | break; |
234 | 234 | |
235 | 235 | case PROP_ROW: | ... | ... |
src/objects/keypad/keypad.cbp
src/objects/keypad/load.c
... | ... | @@ -32,7 +32,7 @@ |
32 | 32 | |
33 | 33 | /*---[ Implement ]----------------------------------------------------------------------------------*/ |
34 | 34 | |
35 | - static void element_start(GMarkupParseContext *context, const gchar *element_name, const gchar **names,const gchar **values, GList *keypads, GError **error) { | |
35 | + static void element_start(GMarkupParseContext *context, const gchar *element_name, const gchar **names,const gchar **values, GList **keypads, GError **error) { | |
36 | 36 | |
37 | 37 | if(!g_ascii_strcasecmp(element_name,"keypad")) { |
38 | 38 | |
... | ... | @@ -48,10 +48,13 @@ |
48 | 48 | G_MARKUP_COLLECT_INVALID |
49 | 49 | )) { |
50 | 50 | |
51 | + g_object_unref(keypad); | |
51 | 52 | return; |
52 | 53 | |
53 | 54 | } |
54 | 55 | |
56 | + *keypads = g_list_append(*keypads,keypad); | |
57 | + | |
55 | 58 | keypad_model_set_position(keypad,position); |
56 | 59 | |
57 | 60 | if(width) { |
... | ... | @@ -70,7 +73,7 @@ |
70 | 73 | |
71 | 74 | } |
72 | 75 | |
73 | - static void element_end(GMarkupParseContext *context, const gchar *element_name, GList *keypads, GError **error) { | |
76 | + static void element_end(GMarkupParseContext *context, const gchar *element_name, GList **keypads, GError **error) { | |
74 | 77 | |
75 | 78 | debug("%s(%s)",__FUNCTION__,element_name); |
76 | 79 | |
... | ... | @@ -100,7 +103,7 @@ |
100 | 103 | NULL |
101 | 104 | }; |
102 | 105 | |
103 | - GMarkupParseContext * context = g_markup_parse_context_new(&parser,G_MARKUP_TREAT_CDATA_AS_TEXT,keypads,NULL); | |
106 | + GMarkupParseContext * context = g_markup_parse_context_new(&parser,G_MARKUP_TREAT_CDATA_AS_TEXT,&keypads,NULL); | |
104 | 107 | g_markup_parse_context_parse(context,text,strlen(text),&error); |
105 | 108 | g_markup_parse_context_free(context); |
106 | 109 | } | ... | ... |
src/objects/keypad/testprogram/testprogram.c
... | ... | @@ -43,42 +43,29 @@ |
43 | 43 | |
44 | 44 | static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) { |
45 | 45 | |
46 | - GtkWidget * window = gtk_application_window_new(app); | |
47 | - GtkWidget * terminal = v3270_new(); | |
48 | - GtkWidget * vBox = gtk_box_new(GTK_ORIENTATION_VERTICAL,2); | |
49 | - GtkWidget * notebook = gtk_notebook_new(); | |
50 | - | |
51 | - // Hack to speed up the tests. | |
52 | - lib3270_disable_crl_download(v3270_get_session(terminal)); | |
53 | - | |
54 | - gtk_box_pack_start(GTK_BOX(vBox),notebook,TRUE,TRUE,0); | |
55 | - | |
56 | - // Create Terminal window | |
57 | - { | |
58 | - gtk_widget_set_can_default(terminal,TRUE); | |
59 | - | |
60 | -#if GTK_CHECK_VERSION(3,20,0) | |
61 | - gtk_widget_set_focus_on_click(terminal,TRUE); | |
62 | -#endif // GTK 3,20,0 | |
63 | - | |
64 | - gtk_notebook_append_page(GTK_NOTEBOOK(notebook),terminal,gtk_label_new("Terminal")); | |
65 | - | |
66 | - } | |
46 | + GtkWidget * window = gtk_application_window_new(app); | |
67 | 47 | |
68 | 48 | // Load keypad |
69 | 49 | GList *keypads = pw3270_keypad_model_new_from_xml(NULL,"keypad.xml"); |
70 | 50 | |
71 | - // Create trace window | |
72 | - v3270_set_trace(terminal,TRUE); | |
51 | + if(!keypads) { | |
52 | + g_message("No keypad"); | |
53 | + g_application_quit(G_APPLICATION(app)); | |
54 | + } | |
55 | + | |
56 | + // Create keypad widget | |
57 | + GObject * model = G_OBJECT(g_list_first(keypads)->data); | |
58 | + if(model) { | |
59 | + gtk_container_add(GTK_CONTAINER(window),pw3270_keypad_get_from_model(model)); | |
60 | + } | |
73 | 61 | |
74 | 62 | // Setup and show main window |
75 | 63 | gtk_window_set_title(GTK_WINDOW(window),"PW3270 Keypad test"); |
76 | - gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); | |
77 | - gtk_window_set_default_size (GTK_WINDOW (window), 800, 500); | |
78 | - gtk_container_add(GTK_CONTAINER(window),vBox); | |
64 | + // gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); | |
65 | + // gtk_window_set_default_size (GTK_WINDOW (window), 800, 500); | |
79 | 66 | gtk_widget_show_all(window); |
80 | 67 | |
81 | - gtk_widget_grab_focus(terminal); | |
68 | + g_list_free_full(keypads,g_object_unref); | |
82 | 69 | |
83 | 70 | } |
84 | 71 | ... | ... |
... | ... | @@ -0,0 +1,66 @@ |
1 | +/* | |
2 | + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
3 | + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
4 | + * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
5 | + * | |
6 | + * Copyright (C) <2008> <Banco do Brasil S.A.> | |
7 | + * | |
8 | + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
9 | + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
10 | + * Free Software Foundation. | |
11 | + * | |
12 | + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
13 | + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
14 | + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
15 | + * obter mais detalhes. | |
16 | + * | |
17 | + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
18 | + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
19 | + * St, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | + * | |
21 | + * Este programa está nomeado como - e possui - linhas de código. | |
22 | + * | |
23 | + * Contatos: | |
24 | + * | |
25 | + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
26 | + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
27 | + * | |
28 | + */ | |
29 | + | |
30 | + #include "private.h" | |
31 | + | |
32 | +/*---[ Implement ]----------------------------------------------------------------------------------*/ | |
33 | + | |
34 | + static void create_child(const KeypadElement *element, GtkGrid *grid) { | |
35 | + | |
36 | + GtkWidget * button; | |
37 | + | |
38 | + if(element->icon_name) { | |
39 | + button = gtk_button_new_from_icon_name(element->icon_name,GTK_ICON_SIZE_SMALL_TOOLBAR); | |
40 | + } else if(element->label) { | |
41 | + button = gtk_button_new(); | |
42 | + gtk_button_set_(element->label); | |
43 | + } else { | |
44 | + button = gtk_button_new(); | |
45 | + } | |
46 | + | |
47 | + gtk_grid_attach( | |
48 | + grid, | |
49 | + button, | |
50 | + element->col,element->row, | |
51 | + element->width,element->height | |
52 | + ); | |
53 | + | |
54 | + } | |
55 | + | |
56 | + GtkWidget * pw3270_keypad_get_from_model(GObject *model) { | |
57 | + | |
58 | + g_return_val_if_fail(PW_IS_KEYPAD_MODEL(model),NULL); | |
59 | + | |
60 | + GtkWidget * grid = gtk_grid_new(); | |
61 | + gtk_grid_set_column_homogeneous(GTK_GRID(grid),TRUE); | |
62 | + | |
63 | + g_list_foreach(PW_KEYPAD_MODEL(model)->elements,(GFunc) create_child, grid); | |
64 | + | |
65 | + return grid; | |
66 | + } | ... | ... |