diff --git a/src/include/pw3270/keypad.h b/src/include/pw3270/keypad.h
index 9c91c1b..07ebcc6 100644
--- a/src/include/pw3270/keypad.h
+++ b/src/include/pw3270/keypad.h
@@ -52,6 +52,7 @@
GType KeypadModel_get_type(void) G_GNUC_CONST;
+ GObject * pw3270_keypad_model_new_from_xml(const gchar *filename);
G_END_DECLS
diff --git a/src/objects/keypad/keypad.cbp b/src/objects/keypad/keypad.cbp
index 15cf46e..0619803 100644
--- a/src/objects/keypad/keypad.cbp
+++ b/src/objects/keypad/keypad.cbp
@@ -39,6 +39,13 @@
+
+
+
+
+
+
+
diff --git a/src/objects/keypad/load.c b/src/objects/keypad/load.c
new file mode 100644
index 0000000..8423b80
--- /dev/null
+++ b/src/objects/keypad/load.c
@@ -0,0 +1,59 @@
+/*
+ * "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 ]----------------------------------------------------------------------------------*/
+
+ GObject * pw3270_keypad_model_new_from_xml(const gchar *filename) {
+
+ GObject * object = g_object_new(PW_TYPE_KEYPAD_MODEL,NULL);
+ GError * error = NULL;
+ g_autofree gchar *text = NULL;
+
+ if(g_file_get_contents(filename,&text,NULL,&error)) {
+
+ g_message("Loading keypad from %s",filename);
+
+
+ }
+
+ if(error) {
+
+ // TODO: Popup with error message.
+ g_error_free(error);
+ error = NULL;
+ g_object_unref(object);
+ object = NULL;
+
+ }
+
+ return object;
+
+ }
diff --git a/src/objects/keypad/model.c b/src/objects/keypad/model.c
new file mode 100644
index 0000000..75b88c2
--- /dev/null
+++ b/src/objects/keypad/model.c
@@ -0,0 +1,233 @@
+/*
+ * "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"
+
+/*---[ Globals & Object definition ]----------------------------------------------------------------*/
+
+ enum {
+ PROP_NONE,
+ PROP_NAME,
+ PROP_LABEL,
+ PROP_POSITION,
+ PROP_WIDTH,
+ PROP_HEIGHT,
+ };
+
+ static const char * positions[] = {
+ "up",
+ "down",
+ "left",
+ "right"
+ };
+
+ static void get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
+ static void set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+
+ G_DEFINE_TYPE(KeypadModel, KeypadModel, G_TYPE_OBJECT)
+
+/*---[ Implement ]----------------------------------------------------------------------------------*/
+
+ static void finalize(GObject *object) {
+
+ KeypadModel * model = PW_KEYPAD_MODEL(object);
+
+ if(model->name) {
+ g_free(model->name);
+ model->name = NULL;
+ }
+
+ if(model->label) {
+ g_free(model->label);
+ model->label = NULL;
+ }
+
+ }
+
+ static void KeypadModel_class_init(KeypadModelClass *klass) {
+
+ GObjectClass *object_class = G_OBJECT_CLASS(klass);
+
+ klass->domain = g_quark_from_static_string("keypad");
+
+ object_class->finalize = finalize;
+ object_class->get_property = get_property;
+ object_class->set_property = set_property;
+
+ // Install properties
+ g_object_class_install_property(object_class, PROP_NAME,
+ g_param_spec_string (
+ "name",
+ N_("Keypad Name"),
+ N_("The name used to identify the keypad"),
+ NULL,
+ G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE
+ )
+ );
+
+ g_object_class_install_property(object_class, PROP_LABEL,
+ g_param_spec_string (
+ "label",
+ N_("Keypad Label"),
+ N_("The Label of the keypad"),
+ NULL,
+ G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE
+ )
+ );
+
+ g_object_class_install_property(object_class, PROP_POSITION,
+ g_param_spec_string (
+ "position",
+ N_("Keypad position"),
+ N_("The position of the keypad"),
+ NULL,
+ G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE
+ )
+ );
+
+ g_object_class_install_property(object_class, PROP_WIDTH,
+ g_param_spec_uint(
+ "width",
+ "width",
+ _("Keypad width in columns"),
+ 1,
+ 10,
+ 3,
+ G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE
+ )
+ );
+
+ g_object_class_install_property(object_class, PROP_WIDTH,
+ g_param_spec_uint(
+ "height",
+ "height",
+ _("Keypad height in rows"),
+ 0,
+ 100,
+ 0,
+ G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE
+ )
+ );
+ }
+
+ static void KeypadModel_init(KeypadModel *object) {
+
+
+ }
+
+ static void get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) {
+
+ KeypadModel * model = PW_KEYPAD_MODEL(object);
+
+ switch (prop_id) {
+ case PROP_NAME:
+ g_value_set_string(value, model->name);
+ break;
+
+ case PROP_LABEL:
+ g_value_set_string(value, model->label);
+ break;
+
+ case PROP_POSITION:
+ g_value_set_static_string(value,keypad_model_get_position(object));
+ break;
+
+ case PROP_HEIGHT:
+ g_value_set_uint(value, model->height);
+ break;
+
+ case PROP_WIDTH:
+ g_value_set_uint(value, model->width);
+ break;
+
+ default:
+ g_assert_not_reached ();
+ }
+
+ }
+
+ static void set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) {
+
+ KeypadModel * model = PW_KEYPAD_MODEL(object);
+
+ switch (prop_id) {
+ case PROP_NAME:
+
+ if(model->name) {
+ g_free(model->name);
+ model->name = g_value_dup_string(value);
+ }
+ break;
+
+ case PROP_LABEL:
+
+ if(model->label) {
+ g_free(model->label);
+ model->label = g_value_dup_string(value);
+ }
+ break;
+
+ case PROP_POSITION:
+ keypad_model_set_position(object,g_value_get_string(value));
+ break;
+
+ case PROP_HEIGHT:
+ model->height = (unsigned short) g_value_get_uint(value);
+ break;
+
+ case PROP_WIDTH:
+ model->width = (unsigned short) g_value_get_uint(value);
+ break;
+
+ default:
+ g_assert_not_reached();
+ }
+ }
+
+ void keypad_model_set_position(GObject *model, const gchar *position) {
+
+ size_t ix;
+ for(ix = 0; ix < G_N_ELEMENTS(positions); ix++) {
+ if(!g_ascii_strcasecmp(positions[ix],position)) {
+ PW_KEYPAD_MODEL(model)->position = (unsigned short) ix;
+ break;
+ }
+ }
+
+ }
+
+ const gchar * keypad_model_get_position(GObject *model) {
+
+ size_t ix = (size_t) PW_KEYPAD_MODEL(model)->position;
+
+ if(ix < G_N_ELEMENTS(positions))
+ return positions[ix];
+
+ return "undefined";
+ }
diff --git a/src/objects/keypad/private.h b/src/objects/keypad/private.h
new file mode 100644
index 0000000..561ea71
--- /dev/null
+++ b/src/objects/keypad/private.h
@@ -0,0 +1,71 @@
+/*
+ * "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)
+ *
+ */
+
+#ifndef PRIVATE_H_INCLUDED
+
+ #define PRIVATE_H_INCLUDED
+
+ #include
+
+ #ifndef GETTEXT_PACKAGE
+ #define GETTEXT_PACKAGE PACKAGE_NAME
+ #endif
+
+ #include
+ #include
+ #include
+
+ #include
+ #include
+
+ #include
+
+ struct _KeypadModel {
+ GObject parent;
+
+ unsigned short width;
+ unsigned short height;
+ unsigned short position;
+
+ gchar *name;
+ gchar *label;
+
+
+ };
+
+ struct _KeypadModelClass {
+ GObjectClass parent;
+ GQuark domain;
+
+ };
+
+ void keypad_model_set_position(GObject *model, const gchar *position);
+ const gchar * keypad_model_get_position(GObject *mode);
+
+#endif // PRIVATE_H_INCLUDED
diff --git a/src/objects/keypad/testprogram/testprogram.c b/src/objects/keypad/testprogram/testprogram.c
index 6a68847..ac740ab 100644
--- a/src/objects/keypad/testprogram/testprogram.c
+++ b/src/objects/keypad/testprogram/testprogram.c
@@ -65,6 +65,9 @@
}
+ // Load keypad
+ GObject *keypad = pw3270_keypad_model_new_from_xml("keypad.xml");
+
// Create trace window
v3270_set_trace(terminal,TRUE);
--
libgit2 0.21.2