Commit 587c6297d5b0b45a1290bd1c53417c551f6332ef

Authored by Perry Werneck
1 parent 880509be

Creating keypad widget.

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
... ... @@ -55,6 +55,9 @@
55 55 <Unit filename="testprogram/testprogram.c">
56 56 <Option compilerVar="CC" />
57 57 </Unit>
  58 + <Unit filename="widget.c">
  59 + <Option compilerVar="CC" />
  60 + </Unit>
58 61 <Extensions />
59 62 </Project>
60 63 </CodeBlocks_project_file>
... ...
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  
... ...
src/objects/keypad/widget.c 0 → 100644
... ... @@ -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 + }
... ...