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