From 380165330446cc486993c13cd17a009a7c1e2dea Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Tue, 22 Oct 2019 14:55:36 -0300 Subject: [PATCH] Fixing PF/PA actions. --- src/actions/abstract.c | 411 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- src/actions/actions.cbp | 72 ------------------------------------------------------------------------ src/actions/lib3270/action.c | 112 ---------------------------------------------------------------------------------------------------------------- src/actions/lib3270/pakey.c | 139 ------------------------------------------------------------------------------------------------------------------------------------------- src/actions/lib3270/pfkey.c | 139 ------------------------------------------------------------------------------------------------------------------------------------------- src/actions/lib3270/toggle.c | 133 ------------------------------------------------------------------------------------------------------------------------------------- src/actions/private.h | 88 ---------------------------------------------------------------------------------------- src/actions/testprogram/testprogram.c | 133 ------------------------------------------------------------------------------------------------------------------------------------- src/actions/window.c | 91 ------------------------------------------------------------------------------------------- src/objects/actions/abstract.c | 411 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/objects/actions/actions.cbp | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/objects/actions/lib3270/action.c | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/objects/actions/lib3270/pakey.c | 141 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/objects/actions/lib3270/pfkey.c | 142 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/objects/actions/lib3270/toggle.c | 133 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/objects/actions/private.h | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/objects/actions/testprogram/testprogram.c | 133 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/objects/actions/window.c | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/objects/toolbar/core.c | 258 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/objects/toolbar/private.h | 47 +++++++++++++++++++++++++++++++++++++++++++++++ src/objects/toolbar/testprogram/testprogram.c | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/objects/toolbar/toolbar.cbp | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/objects/window/init.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/objects/window/private.h | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/objects/window/terminal.c | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/objects/window/testprogram/testprogram.c | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/objects/window/window.cbp | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/widgets/toolbar/core.c | 258 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ src/widgets/toolbar/private.h | 47 ----------------------------------------------- src/widgets/toolbar/testprogram/testprogram.c | 110 -------------------------------------------------------------------------------------------------------------- src/widgets/toolbar/toolbar.cbp | 55 ------------------------------------------------------- src/widgets/window/init.c | 64 ---------------------------------------------------------------- src/widgets/window/private.h | 65 ----------------------------------------------------------------- src/widgets/window/terminal.c | 81 --------------------------------------------------------------------------------- src/widgets/window/testprogram/testprogram.c | 106 ---------------------------------------------------------------------------------------------------------- src/widgets/window/window.cbp | 61 ------------------------------------------------------------- 36 files changed, 2184 insertions(+), 2165 deletions(-) delete mode 100644 src/actions/abstract.c delete mode 100644 src/actions/actions.cbp delete mode 100644 src/actions/lib3270/action.c delete mode 100644 src/actions/lib3270/pakey.c delete mode 100644 src/actions/lib3270/pfkey.c delete mode 100644 src/actions/lib3270/toggle.c delete mode 100644 src/actions/private.h delete mode 100644 src/actions/testprogram/testprogram.c delete mode 100644 src/actions/window.c create mode 100644 src/objects/actions/abstract.c create mode 100644 src/objects/actions/actions.cbp create mode 100644 src/objects/actions/lib3270/action.c create mode 100644 src/objects/actions/lib3270/pakey.c create mode 100644 src/objects/actions/lib3270/pfkey.c create mode 100644 src/objects/actions/lib3270/toggle.c create mode 100644 src/objects/actions/private.h create mode 100644 src/objects/actions/testprogram/testprogram.c create mode 100644 src/objects/actions/window.c create mode 100644 src/objects/toolbar/core.c create mode 100644 src/objects/toolbar/private.h create mode 100644 src/objects/toolbar/testprogram/testprogram.c create mode 100644 src/objects/toolbar/toolbar.cbp create mode 100644 src/objects/window/init.c create mode 100644 src/objects/window/private.h create mode 100644 src/objects/window/terminal.c create mode 100644 src/objects/window/testprogram/testprogram.c create mode 100644 src/objects/window/window.cbp delete mode 100644 src/widgets/toolbar/core.c delete mode 100644 src/widgets/toolbar/private.h delete mode 100644 src/widgets/toolbar/testprogram/testprogram.c delete mode 100644 src/widgets/toolbar/toolbar.cbp delete mode 100644 src/widgets/window/init.c delete mode 100644 src/widgets/window/private.h delete mode 100644 src/widgets/window/terminal.c delete mode 100644 src/widgets/window/testprogram/testprogram.c delete mode 100644 src/widgets/window/window.cbp diff --git a/src/actions/abstract.c b/src/actions/abstract.c deleted file mode 100644 index bf116c3..0000000 --- a/src/actions/abstract.c +++ /dev/null @@ -1,411 +0,0 @@ -/* - * "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" - #include - - static void pw3270_action_iface_init(GActionInterface *iface); - static void pw3270Action_class_init(pw3270ActionClass *klass); - static void pw3270Action_init(pw3270Action *action); - static void pw3270_action_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); - static void pw3270_action_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); - static void pw3270_action_set_state(GAction *action, GVariant *value); - static gboolean pw3270_action_get_enabled(GAction *action); - static void pw3270_action_activate(GAction *action, GVariant *parameter); - - static gboolean get_enabled(GAction *action, GtkWidget *terminal); - static void activate(GAction *action, GVariant *parameter, GtkWidget *terminal); - static void change_widget(GAction *action, GtkWidget *from, GtkWidget *to); - - static void finalize(GObject *object); - - static const GVariantType * pw3270_action_get_state_type(GAction *action); - static GVariant * pw3270_action_get_state_property(GAction *action); - static const GVariantType * pw3270_action_get_parameter_type(GAction *action); - static GVariant * pw3270_action_get_state_hint(GAction *action); - static void pw3270_action_change_state(GAction *action, GVariant *value); - - enum { - PROP_NONE, - PROP_NAME, - PROP_PARAMETER_TYPE, - PROP_ENABLED, - PROP_STATE_TYPE, - PROP_STATE - }; - - enum { - SIGNAL_CHANGE_STATE, - NR_SIGNALS - }; - - static guint action_signals[NR_SIGNALS]; - - G_DEFINE_TYPE_WITH_CODE(pw3270Action, pw3270Action, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE(G_TYPE_ACTION, pw3270_action_iface_init)) - - void pw3270_action_iface_init(GActionInterface *iface) { - iface->get_name = pw3270_action_get_name; - iface->get_parameter_type = pw3270_action_get_parameter_type; - iface->get_state_type = pw3270_action_get_state_type; - iface->get_state_hint = pw3270_action_get_state_hint; - iface->get_enabled = pw3270_action_get_enabled; - iface->get_state = pw3270_action_get_state_property; - iface->change_state = pw3270_action_change_state; - iface->activate = pw3270_action_activate; - } - - static const GVariantType * get_parameter_type(GAction G_GNUC_UNUSED(*action)) - { - return NULL; - } - - void pw3270Action_class_init(pw3270ActionClass *klass) { - - GObjectClass *object_class = G_OBJECT_CLASS(klass); - - klass->change_widget = change_widget; - klass->get_enabled = get_enabled; - klass->activate = activate; - klass->get_parameter_type = get_parameter_type; - - object_class->finalize = finalize; - object_class->set_property = pw3270_action_set_property; - object_class->get_property = pw3270_action_get_property; - - // Install properties - g_object_class_install_property(object_class, PROP_NAME, - g_param_spec_string ("name", - N_("Action Name"), - N_("The name used to invoke the action"), - NULL, - G_PARAM_READWRITE | - G_PARAM_CONSTRUCT_ONLY | - G_PARAM_STATIC_STRINGS)); - - g_object_class_install_property (object_class, PROP_PARAMETER_TYPE, - g_param_spec_boxed ("parameter-type", - N_("Parameter Type"), - N_("The type of GVariant passed to activate()"), - G_TYPE_VARIANT_TYPE, - G_PARAM_READWRITE | - G_PARAM_CONSTRUCT_ONLY | - G_PARAM_STATIC_STRINGS)); - - g_object_class_install_property (object_class, PROP_STATE_TYPE, - g_param_spec_boxed ("state-type", - N_("State Type"), - N_("The type of the state kept by the action"), - G_TYPE_VARIANT_TYPE, - G_PARAM_READABLE | - G_PARAM_STATIC_STRINGS)); - - // Enabled property - klass->properties.enabled = - g_param_spec_boolean( - "enabled", - N_("Enabled"), - N_("If the action can be activated"), - TRUE, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS - ); - - g_object_class_install_property(object_class, PROP_ENABLED, klass->properties.enabled); - - // State property - klass->properties.state = - g_param_spec_variant( - "state", - N_("State"), - N_("The state the action is in"), - G_VARIANT_TYPE_ANY, - NULL, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT | - G_PARAM_STATIC_STRINGS - ); - - g_object_class_install_property (object_class, PROP_STATE, klass->properties.state); - - // Install signals - action_signals[SIGNAL_CHANGE_STATE] = - g_signal_new( - I_("change-state"), - G_TYPE_SIMPLE_ACTION, - G_SIGNAL_RUN_LAST | G_SIGNAL_MUST_COLLECT, - 0, NULL, NULL, - NULL, - G_TYPE_NONE, 1, - G_TYPE_VARIANT - ); - } - - void pw3270Action_init(pw3270Action *action) { - - action->name = NULL; - action->terminal = NULL; - action->state = NULL; - - } - - void finalize(GObject *object) { - - pw3270Action * action = PW3270_ACTION(object); - - debug("Finalizing action %p (%s)",object,action->name); - - if(action->state) { - g_variant_unref(action->state); - action->state = NULL; - } - - if(action->terminal) { - pw3270_action_set_terminal_widget(G_ACTION(object),NULL); - action->terminal = NULL; - } - - if(action->name) { - g_free(action->name); - action->name = NULL; - } - - if(action->parameter_type) { - g_variant_type_free(action->parameter_type); - action->parameter_type = NULL; - } - - G_OBJECT_CLASS(pw3270Action_parent_class)->finalize(object); - - } - - - void pw3270_action_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { - - GAction *action = G_ACTION(object); - - debug("%s(%d)",__FUNCTION__,prop_id); - - switch (prop_id) { - case PROP_NAME: - g_value_set_string(value, pw3270_action_get_name(action)); - break; - - case PROP_PARAMETER_TYPE: - g_value_set_boxed(value, pw3270_action_get_parameter_type(action)); - break; - - case PROP_ENABLED: - g_value_set_boolean(value, pw3270_action_get_enabled(action)); - break; - - case PROP_STATE_TYPE: - g_value_set_boxed(value, pw3270_action_get_state_type(action)); - break; - - case PROP_STATE: - g_value_take_variant(value, pw3270_action_get_state_property(action)); - break; - - default: - g_assert_not_reached (); - } - - } - - void pw3270_action_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { - -// debug("%s(%d)",__FUNCTION__,prop_id); - - GAction *action = G_ACTION(object); - - switch (prop_id) - { - case PROP_NAME: - pw3270_action_set_name(action, g_value_get_string(value)); - break; - - case PROP_PARAMETER_TYPE: -// action->parameter_type = g_value_dup_boxed (value); - break; - - case PROP_ENABLED: -// action->enabled = g_value_get_boolean (value); - break; - - case PROP_STATE: - pw3270_action_set_state(action, g_value_get_variant(value)); - break; - - default: - g_assert_not_reached (); - } - - } - - const gchar * pw3270_action_get_name(GAction *action) { - return PW3270_ACTION(action)->name; - } - - void pw3270_action_set_name(GAction *object, const gchar *name) { - - pw3270Action * action = PW3270_ACTION(object); - -// debug("%s %s -> %s", __FUNCTION__, action->name, name); - - if(action->name) - g_free(action->name); - - if(name) - action->name = g_strdup(name); - else - action->name = NULL; - - } - - GVariant * pw3270_action_get_state_property(GAction *object) { - pw3270Action *action = PW3270_ACTION(object); - return action->state ? g_variant_ref(action->state) : NULL; - } - - const GVariantType * pw3270_action_get_parameter_type(GAction *action) { - return PW3270_ACTION_GET_CLASS(action)->get_parameter_type(action); - } - - const GVariantType * pw3270_action_get_state_type(GAction *object) { - - pw3270Action * action = PW3270_ACTION(object); - - if(action->state) - return g_variant_get_type(action->state); - - return NULL; - - } - - GVariant * pw3270_action_get_state_hint(GAction *action) { - debug("%s",__FUNCTION__); - return NULL; - } - - void pw3270_action_change_state(GAction *object, GVariant *value) { - pw3270_action_set_state(object, value); - } - - void pw3270_action_change_state_boolean(GAction *action, gboolean state) { - - g_return_if_fail(PW3270_IS_ACTION(action)); - pw3270_action_set_state(action,g_variant_new_boolean(state)); - - } - - void pw3270_action_set_state(GAction *object, GVariant *value) { - - if(value) { - - pw3270Action * action = PW3270_ACTION(object); - - g_variant_ref_sink(value); - - if (!action->state || !g_variant_equal(action->state, value)) { - - if(action->state) - g_variant_unref(action->state); - - action->state = g_variant_ref(value); - - if (g_signal_has_handler_pending(object, action_signals[SIGNAL_CHANGE_STATE], 0, TRUE)) { - g_signal_emit(object, action_signals[SIGNAL_CHANGE_STATE], 0, value); - } - - g_object_notify_by_pspec(G_OBJECT(object), PW3270_ACTION_GET_CLASS(object)->properties.state); - - } - - g_variant_unref(value); - - } - - } - - void pw3270_action_set_enabled(GAction *object, gboolean state) { - g_object_notify_by_pspec(G_OBJECT(object), PW3270_ACTION_GET_CLASS(object)->properties.enabled); - } - - - static void change_widget(GAction *action, GtkWidget G_GNUC_UNUSED(*from), GtkWidget *to) { - PW3270_ACTION(action)->terminal = to; - } - - void pw3270_action_set_terminal_widget(GAction *object, GtkWidget *widget) { - - g_return_if_fail(PW3270_IS_ACTION(object) && GTK_IS_V3270(widget)); - - pw3270Action * action = PW3270_ACTION(object); - - if(action->terminal != widget) { - PW3270_ACTION_GET_CLASS(object)->change_widget(object,action->terminal,widget); - action->terminal = widget; - } - - } - - gboolean pw3270_action_get_enabled(GAction *object) { - - pw3270Action * action = PW3270_ACTION(object); - -// debug("%s: terminal=%p",__FUNCTION__,action->terminal); - - if(action && action->terminal) { - - return PW3270_ACTION_GET_CLASS(object)->get_enabled(object,action->terminal); - - } - - return FALSE; - - } - - void pw3270_action_activate(GAction *object, GVariant *parameter) { - - pw3270Action * action = PW3270_ACTION(object); - - debug("%s: terminal=%p",__FUNCTION__,action->terminal); - - if(action && action->terminal) { - PW3270_ACTION_GET_CLASS(object)->activate(object,parameter,action->terminal); - } - - } - - gboolean get_enabled(GAction *object, GtkWidget *terminal) { - debug("%s(%s)",__FUNCTION__,pw3270_action_get_name(object)); - return TRUE; - } - - void activate(GAction *action, GVariant G_GNUC_UNUSED(*parameter), GtkWidget G_GNUC_UNUSED(*terminal)) { - g_message("Action %s can't be activated",pw3270_action_get_name(action)); - } diff --git a/src/actions/actions.cbp b/src/actions/actions.cbp deleted file mode 100644 index 11d05ce..0000000 --- a/src/actions/actions.cbp +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - diff --git a/src/actions/lib3270/action.c b/src/actions/lib3270/action.c deleted file mode 100644 index c307e20..0000000 --- a/src/actions/lib3270/action.c +++ /dev/null @@ -1,112 +0,0 @@ -/* - * "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) - * - */ - - /** - * @brief Implement GAction "wrapper" for lib3270's actions. - * - */ - - #include "../private.h" - #include - - #define PW3270_TYPE_LIB3270_ACTION (Lib3270Action_get_type()) - #define PW3270_LIB3270_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), PW3270_TYPE_LIB3270_ACTION, Lib3270Action)) - #define PW3270_IS_LIB3270_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), PW3270_TYPE_LIB3270_ACTION)) - - typedef struct _Lib3270ActionClass { - pw3270ActionClass parent_class; - - } Lib3270ActionClass; - - typedef struct _Lib3270Action { - pw3270Action parent; - - const LIB3270_ACTION * definition; - - } Lib3270Action; - - static void Lib3270Action_class_init(Lib3270ActionClass *klass); - static void Lib3270Action_init(Lib3270Action *action); - static void change_widget(GAction *object, GtkWidget *from, GtkWidget *to); - - G_DEFINE_TYPE(Lib3270Action, Lib3270Action, PW3270_TYPE_ACTION); - - static gboolean get_enabled(GAction *action, GtkWidget *terminal) { - - if(terminal) - return PW3270_LIB3270_ACTION(action)->definition->activatable(v3270_get_session(terminal)) > 0 ? TRUE : FALSE; - - return FALSE; - - } - - static void activate(GAction *action, GVariant *parameter, GtkWidget *terminal) { - PW3270_LIB3270_ACTION(action)->definition->activate(v3270_get_session(terminal)); - } - - void Lib3270Action_class_init(Lib3270ActionClass *klass) { - - pw3270ActionClass * action = PW3270_ACTION_CLASS(klass); - - action->activate = activate; - action->get_enabled = get_enabled; - action->change_widget = change_widget; - - } - - void Lib3270Action_init(Lib3270Action *action) { - } - - GAction * pw3270_action_new_from_lib3270(const LIB3270_ACTION * definition) { - - Lib3270Action * action = (Lib3270Action *) g_object_new(PW3270_TYPE_LIB3270_ACTION, NULL); - action->definition = definition; - - // Setup the default name. - pw3270Action * abstract = PW3270_ACTION(action); - - if(abstract->name) - g_free(abstract->name); - - abstract->name = g_strconcat("win.",definition->name,NULL); - - return G_ACTION(action); - } - - void change_widget(GAction *object, GtkWidget *from, GtkWidget *to) { - - PW3270_ACTION_CLASS(Lib3270Action_parent_class)->change_widget(object,from,to); - - // Does the "enabled" state has changed? If yes notify customers. - gboolean enabled = get_enabled(object,to); - if(get_enabled(object,from) != enabled) - pw3270_action_set_enabled(object,enabled); - - } - diff --git a/src/actions/lib3270/pakey.c b/src/actions/lib3270/pakey.c deleted file mode 100644 index 7d0fd4b..0000000 --- a/src/actions/lib3270/pakey.c +++ /dev/null @@ -1,139 +0,0 @@ -/* - * "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) - * - */ - - /** - * @brief Implement GAction "wrapper" for lib3270's PAs. - * - */ - - #include "../private.h" - #include - - #define PW3270_TYPE_PAKEY_ACTION (Lib3270PaAction_get_type()) - #define PW3270_LIB3270_PAKEY_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), PW3270_TYPE_PAKEY_ACTION, Lib3270PaAction)) - #define PW3270_IS_LIB3270_PAKEY_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), PW3270_TYPE_PAKEY_ACTION)) - - typedef struct _Lib3270PaActionClass { - pw3270ActionClass parent_class; - - } Lib3270PaActionClass; - - typedef struct _Lib3270PaAction { - pw3270Action parent; - - } Lib3270PaAction; - - static void Lib3270PaAction_class_init(Lib3270PaActionClass *klass); - static void Lib3270PaAction_init(Lib3270PaAction *action); - static void change_widget(GAction *object, GtkWidget *from, GtkWidget *to); - - G_DEFINE_TYPE(Lib3270PaAction, Lib3270PaAction, PW3270_TYPE_PAKEY_ACTION); - - static gboolean get_enabled(GAction *action, GtkWidget *terminal) { - - if(terminal) - return lib3270_is_connected(v3270_get_session(terminal)) > 0 ? TRUE: FALSE; - - return FALSE; - - } - - static void activate(GAction *action, GVariant *parameter, GtkWidget *terminal) { - - if(action && terminal && parameter) { - - H3270 * hSession = v3270_get_session(terminal); - - if(g_variant_is_of_type(parameter, G_VARIANT_TYPE_INT32)) { - - lib3270_pakey(hSession,(int) g_variant_get_int32(parameter)); - - } else if(g_variant_is_of_type(parameter, G_VARIANT_TYPE_UINT32)) { - - lib3270_pakey(hSession,(int) g_variant_get_uint32(parameter)); - - } else if(g_variant_is_of_type(parameter, G_VARIANT_TYPE_INT16)) { - - lib3270_pakey(hSession,(int) g_variant_get_int16(parameter)); - - } else if(g_variant_is_of_type(parameter, G_VARIANT_TYPE_UINT16)) { - - lib3270_pakey(hSession,(int) g_variant_get_uint16(parameter)); - - } - - } - - } - - static const GVariantType * get_parameter_type(GAction *action) - { - return G_VARIANT_TYPE_UINT16; - } - - void Lib3270PaAction_class_init(Lib3270PaActionClass *klass) { - - pw3270ActionClass * action = PW3270_ACTION_CLASS(klass); - - action->activate = activate; - action->get_enabled = get_enabled; - action->change_widget = change_widget; - action->get_parameter_type = get_parameter_type; - - } - - void Lib3270PaAction_init(Lib3270PaAction *action) { - } - - GAction * pw3270_action_new_pakey(void) { - - Lib3270PaAction * action = (Lib3270PaAction *) g_object_new(PW3270_TYPE_PAKEY_ACTION, NULL); - - // Setup the default name. - pw3270Action * abstract = PW3270_ACTION(action); - - if(abstract->name) - g_free(abstract->name); - - abstract->name = g_strdup("win.pakey"); - - return G_ACTION(action); - } - - void change_widget(GAction *object, GtkWidget *from, GtkWidget *to) { - - PW3270_ACTION_CLASS(Lib3270PaAction_parent_class)->change_widget(object,from,to); - - // Does the "enabled" state has changed? If yes notify customers. - gboolean enabled = get_enabled(object,to); - if(get_enabled(object,from) != enabled) - pw3270_action_set_enabled(object,enabled); - - } - diff --git a/src/actions/lib3270/pfkey.c b/src/actions/lib3270/pfkey.c deleted file mode 100644 index 8e55bb4..0000000 --- a/src/actions/lib3270/pfkey.c +++ /dev/null @@ -1,139 +0,0 @@ -/* - * "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) - * - */ - - /** - * @brief Implement GAction "wrapper" for lib3270's PFs. - * - */ - - #include "../private.h" - #include - - #define PW3270_TYPE_PFKEY_ACTION (Lib3270PfAction_get_type()) - #define PW3270_LIB3270_PFKEY_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), PW3270_TYPE_PFKEY_ACTION, Lib3270PfAction)) - #define PW3270_IS_LIB3270_PFKEY_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), PW3270_TYPE_PFKEY_ACTION)) - - typedef struct _Lib3270PfActionClass { - pw3270ActionClass parent_class; - - } Lib3270PfActionClass; - - typedef struct _Lib3270PfAction { - pw3270Action parent; - - } Lib3270PfAction; - - static void Lib3270PfAction_class_init(Lib3270PfActionClass *klass); - static void Lib3270PfAction_init(Lib3270PfAction *action); - static void change_widget(GAction *object, GtkWidget *from, GtkWidget *to); - - G_DEFINE_TYPE(Lib3270PfAction, Lib3270PfAction, PW3270_TYPE_PFKEY_ACTION); - - static gboolean get_enabled(GAction *action, GtkWidget *terminal) { - - if(terminal) - return lib3270_is_connected(v3270_get_session(terminal)) > 0 ? TRUE: FALSE; - - return FALSE; - - } - - static void activate(GAction *action, GVariant *parameter, GtkWidget *terminal) { - - if(action && terminal && parameter) { - - H3270 * hSession = v3270_get_session(terminal); - - if(g_variant_is_of_type(parameter, G_VARIANT_TYPE_INT32)) { - - lib3270_pfkey(hSession,(int) g_variant_get_int32(parameter)); - - } else if(g_variant_is_of_type(parameter, G_VARIANT_TYPE_UINT32)) { - - lib3270_pfkey(hSession,(int) g_variant_get_uint32(parameter)); - - } else if(g_variant_is_of_type(parameter, G_VARIANT_TYPE_INT16)) { - - lib3270_pfkey(hSession,(int) g_variant_get_int16(parameter)); - - } else if(g_variant_is_of_type(parameter, G_VARIANT_TYPE_UINT16)) { - - lib3270_pfkey(hSession,(int) g_variant_get_uint16(parameter)); - - } - - } - - } - - static const GVariantType * get_parameter_type(GAction *action) - { - return G_VARIANT_TYPE_UINT16; - } - - void Lib3270PfAction_class_init(Lib3270PfActionClass *klass) { - - pw3270ActionClass * action = PW3270_ACTION_CLASS(klass); - - action->activate = activate; - action->get_enabled = get_enabled; - action->change_widget = change_widget; - action->get_parameter_type = get_parameter_type; - - } - - void Lib3270PfAction_init(Lib3270PfAction *action) { - } - - GAction * pw3270_action_new_pfkey(void) { - - Lib3270PfAction * action = (Lib3270PfAction *) g_object_new(PW3270_TYPE_PFKEY_ACTION, NULL); - - // Setup the default name. - pw3270Action * abstract = PW3270_ACTION(action); - - if(abstract->name) - g_free(abstract->name); - - abstract->name = g_strdup("win.pfkey"); - - return G_ACTION(action); - } - - void change_widget(GAction *object, GtkWidget *from, GtkWidget *to) { - - PW3270_ACTION_CLASS(Lib3270PfAction_parent_class)->change_widget(object,from,to); - - // Does the "enabled" state has changed? If yes notify customers. - gboolean enabled = get_enabled(object,to); - if(get_enabled(object,from) != enabled) - pw3270_action_set_enabled(object,enabled); - - } - diff --git a/src/actions/lib3270/toggle.c b/src/actions/lib3270/toggle.c deleted file mode 100644 index 870dc0b..0000000 --- a/src/actions/lib3270/toggle.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * "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) - * - */ - - /** - * @brief Implement GAction "wrapper" for lib3270's toggles. - * - */ - - #include "../private.h" - #include - #include - - #define PW3270_TYPE_LIB3270_TOGGLE_ACTION (Lib3270ToggleAction_get_type()) - #define PW3270_LIB3270_TOGGLE_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), PW3270_TYPE_LIB3270_TOGGLE_ACTION, Lib3270ToggleAction)) - #define PW3270_IS_LIB3270_TOGGLE_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), PW3270_TYPE_LIB3270_TOGGLE_ACTION)) - - typedef struct _Lib3270ToggleActionClass { - pw3270ActionClass parent_class; - - } Lib3270ToggleActionClass; - - typedef struct _Lib3270ToggleAction { - pw3270Action parent; - - const LIB3270_TOGGLE * definition; - const void * listener; - - } Lib3270ToggleAction; - - static void Lib3270ToggleAction_class_init(Lib3270ToggleActionClass *klass); - static void Lib3270ToggleAction_init(Lib3270ToggleAction *action); - - G_DEFINE_TYPE(Lib3270ToggleAction, Lib3270ToggleAction, PW3270_TYPE_ACTION); - - static void change_state(H3270 *hSession, LIB3270_TOGGLE_ID id, char state, void * action) { - debug("%s: %s",__FUNCTION__,state ? "ON" : "OFF"); - pw3270_action_change_state_boolean((GAction *) action, state == 0 ? FALSE : TRUE); - } - - static void change_widget(GAction *object, GtkWidget *from, GtkWidget *to) { - - Lib3270ToggleAction * action = PW3270_LIB3270_TOGGLE_ACTION(object); - - if(action->listener) { - lib3270_unregister_toggle_listener(v3270_get_session(from),action->definition->id,object); - } - - if(to) { - action->listener = lib3270_register_toggle_listener(v3270_get_session(to),action->definition->id,change_state,object); - pw3270_action_change_state_boolean(object,lib3270_get_toggle(v3270_get_session(to),action->definition->id)); - } - - PW3270_ACTION_CLASS(Lib3270ToggleAction_parent_class)->change_widget(object,from,to); - - } - - static void activate(GAction *action, GVariant *parameter, GtkWidget *terminal) { - - debug("Activating \"%s\"",pw3270_action_get_name(action)); - - if(parameter && g_variant_is_of_type(parameter,G_VARIANT_TYPE_BOOLEAN)) { - - lib3270_set_toggle(v3270_get_session(terminal),PW3270_LIB3270_TOGGLE_ACTION(action)->definition->id,g_variant_get_boolean(parameter)); - debug("Toggle set to %s",lib3270_get_toggle(v3270_get_session(terminal),PW3270_LIB3270_TOGGLE_ACTION(action)->definition->id) ? "ON" : "OFF"); - - } else { - - lib3270_toggle(v3270_get_session(terminal),PW3270_LIB3270_TOGGLE_ACTION(action)->definition->id); - debug("Toggle is %s",lib3270_get_toggle(v3270_get_session(terminal),PW3270_LIB3270_TOGGLE_ACTION(action)->definition->id) ? "ON" : "OFF"); - - } - - } - - void Lib3270ToggleAction_class_init(Lib3270ToggleActionClass *klass) { - - pw3270ActionClass * action = PW3270_ACTION_CLASS(klass); - action->activate = activate; - action->change_widget = change_widget; - - } - - void Lib3270ToggleAction_init(Lib3270ToggleAction *action) { - - action->definition = NULL; - action->listener = NULL; - - } - - GAction * pw3270_toggle_action_new_from_lib3270(const LIB3270_TOGGLE * definition) { - - Lib3270ToggleAction * action = (Lib3270ToggleAction *) g_object_new(PW3270_TYPE_LIB3270_TOGGLE_ACTION, NULL); - action->definition = definition; - - // Setup the default name. - pw3270Action * abstract = PW3270_ACTION(action); - - if(abstract->name) - g_free(abstract->name); - - abstract->name = g_strconcat("win.",definition->name,NULL); - - return G_ACTION(action); - - } - - diff --git a/src/actions/private.h b/src/actions/private.h deleted file mode 100644 index c49e3a8..0000000 --- a/src/actions/private.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * "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 - - #include - - /* not really I18N-related, but also a string marker macro */ - #define I_(string) g_intern_static_string (string) - - struct _pw3270Action { - GObject parent; - - GVariantType * parameter_type; - GVariant * state; - GtkWidget * terminal; - gchar * name; - - }; - - struct _pw3270ActionClass { - GObjectClass parent_class; - - struct { - GParamSpec * state; - GParamSpec * enabled; - } properties; - - void (*change_widget)(GAction *action, GtkWidget *from, GtkWidget *to); - gboolean (*get_enabled)(GAction *action, GtkWidget *terminal); - void (*activate)(GAction *action, GVariant *parameter, GtkWidget *terminal); - const GVariantType * (*get_parameter_type)(GAction *action); - - }; - - G_GNUC_INTERNAL GAction * pw3270_action_new_from_lib3270(const LIB3270_ACTION * definition); - G_GNUC_INTERNAL GAction * pw3270_toggle_action_new_from_lib3270(const LIB3270_TOGGLE * definition); - G_GNUC_INTERNAL GAction * pw3270_action_new_pfkey(void); - G_GNUC_INTERNAL GAction * pw3270_action_new_pakey(void); - - G_GNUC_INTERNAL void pw3270_action_change_state_boolean(GAction *action, gboolean state); - G_GNUC_INTERNAL void pw3270_action_set_enabled(GAction *action, gboolean state); - - -#endif // PRIVATE_H_INCLUDED diff --git a/src/actions/testprogram/testprogram.c b/src/actions/testprogram/testprogram.c deleted file mode 100644 index 5e2e002..0000000 --- a/src/actions/testprogram/testprogram.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * "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. 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 testprogram.c 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 - #include - #include - #include - #include - #include - #include "../private.h" - - /*---[ Implement ]----------------------------------------------------------------------------------*/ - - GtkWidget * pw3270_window_get_terminal_widget(GtkWidget *window) { - return g_object_get_data(G_OBJECT(window), "v3270_terminal"); - } - - /* - H3270 * pw3270_window_get_session_handle(GtkWidget *window) { - return v3270_get_session(pw3270_window_get_terminal_widget(window)); - } - */ - - static gboolean handle_command(GtkWidget *trace, const gchar *cmd, const gchar *args, GtkWidget *window) { - - if(!g_ascii_strcasecmp(cmd,"activate")) { - - GAction * action = g_action_map_lookup_action(G_ACTION_MAP(window),args); - - if(!action) { - g_message("Invalid action name: \"%s\"",args); - } else if(g_action_get_enabled(action)) { - g_message("Activating action \"%s\"",args); - g_action_activate(action,NULL); - } else { - g_message("Action \"%s\" is disabled",args); - } - - return TRUE; - } - - return FALSE; - } - - 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(); - GtkWidget * toolbar = gtk_toolbar_new(); - - g_object_set_data(G_OBJECT(window),"v3270_terminal",terminal); - - pw3270_window_add_actions(window); - - gtk_box_pack_start(GTK_BOX(vBox),toolbar,FALSE,TRUE,0); - gtk_box_pack_start(GTK_BOX(vBox),notebook,TRUE,TRUE,0); - - // Create Terminal window - { - gtk_widget_set_can_default(terminal,TRUE); - - gtk_notebook_append_page(GTK_NOTEBOOK(notebook),terminal,gtk_label_new("Terminal")); - -#ifdef _WIN32 - v3270_set_font_family(terminal,"Droid Sans Mono"); -#endif // _WIN32 - - } - - // Create trace window - GtkWidget * trace = v3270_trace_new(terminal); - gtk_notebook_append_page(GTK_NOTEBOOK(notebook),trace,gtk_label_new("Trace")); - - g_signal_connect(trace,"command",G_CALLBACK(handle_command),window); - - // Setup and show main window - 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_widget_show_all(window); - - gtk_widget_grab_focus(terminal); - -} - -int main (int argc, char **argv) { - - GtkApplication *app; - int status; - - app = gtk_application_new ("br.com.bb.pw3270",G_APPLICATION_FLAGS_NONE); - - g_signal_connect (app, "activate", G_CALLBACK(activate), NULL); - - status = g_application_run (G_APPLICATION (app), argc, argv); - g_object_unref (app); - - g_message("rc=%d",status); - - return 0; - -} - - diff --git a/src/actions/window.c b/src/actions/window.c deleted file mode 100644 index fd011c6..0000000 --- a/src/actions/window.c +++ /dev/null @@ -1,91 +0,0 @@ -/* - * "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) - * - */ - - /** - * @brief Integrate pw3270 actions with the application window. - * - */ - - #include "private.h" - #include - #include - - void pw3270_window_add_actions(GtkWidget * appwindow) { - - GActionMap * map = G_ACTION_MAP(appwindow); - GtkWidget * terminal = pw3270_window_get_terminal_widget(appwindow); - size_t ix; - - /* - GAction *action = pw3270_action_new_from_lib3270(lib3270_action_get_by_name("testpattern")); - pw3270_action_set_terminal_widget(action,terminal); - - debug("--> \"%s\"",pw3270_action_get_name(action)); - - g_action_map_add_action(map,action); - - debug("--> \"%s\"",pw3270_action_get_name(action)); - */ - - /* - GAction *action = pw3270_toggle_action_new_from_lib3270(lib3270_get_toggles() + LIB3270_TOGGLE_INSERT); - pw3270_action_set_terminal_widget(action,terminal); - - debug("--> \"%s\"",pw3270_action_get_name(action)); - - g_action_map_add_action(map,action); - - debug("--> \"%s\"",pw3270_action_get_name(action)); - */ - - // Map lib3270 actions - const LIB3270_ACTION * actions = lib3270_get_actions(); - for(ix = 0; actions[ix].name; ix++) { - - GAction *action = pw3270_action_new_from_lib3270(&actions[ix]); - pw3270_action_set_terminal_widget(action,terminal); - g_action_map_add_action(map,action); - - } - - // Map toggles - const LIB3270_TOGGLE * toggles = lib3270_get_toggles(); - for(ix = 0; toggles[ix].name; ix++) { - - GAction *action = pw3270_toggle_action_new_from_lib3270(&toggles[ix]); - pw3270_action_set_terminal_widget(action,terminal); - g_action_map_add_action(map,action); - - } - - g_action_map_add_action(map,pw3270_action_new_pfkey()); - g_action_map_add_action(map,pw3270_action_new_pakey()); - - debug("%s ends",__FUNCTION__); - } diff --git a/src/objects/actions/abstract.c b/src/objects/actions/abstract.c new file mode 100644 index 0000000..46144f0 --- /dev/null +++ b/src/objects/actions/abstract.c @@ -0,0 +1,411 @@ +/* + * "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" + #include + + static void pw3270_action_iface_init(GActionInterface *iface); + static void pw3270Action_class_init(pw3270ActionClass *klass); + static void pw3270Action_init(pw3270Action *action); + static void pw3270_action_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); + static void pw3270_action_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); + static void pw3270_action_set_state(GAction *action, GVariant *value); + static gboolean pw3270_action_get_enabled(GAction *action); + static void pw3270_action_activate(GAction *action, GVariant *parameter); + + static gboolean get_enabled(GAction *action, GtkWidget *terminal); + static void activate(GAction *action, GVariant *parameter, GtkWidget *terminal); + static void change_widget(GAction *action, GtkWidget *from, GtkWidget *to); + + static void finalize(GObject *object); + + static const GVariantType * pw3270_action_get_state_type(GAction *action); + static GVariant * pw3270_action_get_state_property(GAction *action); + static const GVariantType * pw3270_action_get_parameter_type(GAction *action); + static GVariant * pw3270_action_get_state_hint(GAction *action); + static void pw3270_action_change_state(GAction *action, GVariant *value); + + enum { + PROP_NONE, + PROP_NAME, + PROP_PARAMETER_TYPE, + PROP_ENABLED, + PROP_STATE_TYPE, + PROP_STATE + }; + + enum { + SIGNAL_CHANGE_STATE, + NR_SIGNALS + }; + + static guint action_signals[NR_SIGNALS]; + + G_DEFINE_TYPE_WITH_CODE(pw3270Action, pw3270Action, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE(G_TYPE_ACTION, pw3270_action_iface_init)) + + void pw3270_action_iface_init(GActionInterface *iface) { + iface->get_name = pw3270_action_get_name; + iface->get_parameter_type = pw3270_action_get_parameter_type; + iface->get_state_type = pw3270_action_get_state_type; + iface->get_state_hint = pw3270_action_get_state_hint; + iface->get_enabled = pw3270_action_get_enabled; + iface->get_state = pw3270_action_get_state_property; + iface->change_state = pw3270_action_change_state; + iface->activate = pw3270_action_activate; + } + + static const GVariantType * get_parameter_type(GAction G_GNUC_UNUSED(*action)) + { + return NULL; + } + + void pw3270Action_class_init(pw3270ActionClass *klass) { + + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + klass->change_widget = change_widget; + klass->get_enabled = get_enabled; + klass->activate = activate; + klass->get_parameter_type = get_parameter_type; + + object_class->finalize = finalize; + object_class->set_property = pw3270_action_set_property; + object_class->get_property = pw3270_action_get_property; + + // Install properties + g_object_class_install_property(object_class, PROP_NAME, + g_param_spec_string ("name", + N_("Action Name"), + N_("The name used to invoke the action"), + NULL, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property (object_class, PROP_PARAMETER_TYPE, + g_param_spec_boxed ("parameter-type", + N_("Parameter Type"), + N_("The type of GVariant passed to activate()"), + G_TYPE_VARIANT_TYPE, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property (object_class, PROP_STATE_TYPE, + g_param_spec_boxed ("state-type", + N_("State Type"), + N_("The type of the state kept by the action"), + G_TYPE_VARIANT_TYPE, + G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS)); + + // Enabled property + klass->properties.enabled = + g_param_spec_boolean( + "enabled", + N_("Enabled"), + N_("If the action can be activated"), + TRUE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS + ); + + g_object_class_install_property(object_class, PROP_ENABLED, klass->properties.enabled); + + // State property + klass->properties.state = + g_param_spec_variant( + "state", + N_("State"), + N_("The state the action is in"), + G_VARIANT_TYPE_ANY, + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT | + G_PARAM_STATIC_STRINGS + ); + + g_object_class_install_property (object_class, PROP_STATE, klass->properties.state); + + // Install signals + action_signals[SIGNAL_CHANGE_STATE] = + g_signal_new( + I_("change-state"), + G_TYPE_SIMPLE_ACTION, + G_SIGNAL_RUN_LAST | G_SIGNAL_MUST_COLLECT, + 0, NULL, NULL, + NULL, + G_TYPE_NONE, 1, + G_TYPE_VARIANT + ); + } + + void pw3270Action_init(pw3270Action *action) { + + action->name = NULL; + action->terminal = NULL; + action->state = NULL; + + } + + void finalize(GObject *object) { + + pw3270Action * action = PW3270_ACTION(object); + + debug("Finalizing action %p (%s)",object,action->name); + + if(action->state) { + g_variant_unref(action->state); + action->state = NULL; + } + + if(action->terminal) { + pw3270_action_set_terminal_widget(G_ACTION(object),NULL); + action->terminal = NULL; + } + + if(action->name) { + g_free(action->name); + action->name = NULL; + } + + if(action->parameter_type) { + g_variant_type_free(action->parameter_type); + action->parameter_type = NULL; + } + + G_OBJECT_CLASS(pw3270Action_parent_class)->finalize(object); + + } + + + void pw3270_action_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { + + GAction *action = G_ACTION(object); + + debug("%s(%d)",__FUNCTION__,prop_id); + + switch (prop_id) { + case PROP_NAME: + g_value_set_string(value, pw3270_action_get_name(action)); + break; + + case PROP_PARAMETER_TYPE: + g_value_set_boxed(value, pw3270_action_get_parameter_type(action)); + break; + + case PROP_ENABLED: + g_value_set_boolean(value, pw3270_action_get_enabled(action)); + break; + + case PROP_STATE_TYPE: + g_value_set_boxed(value, pw3270_action_get_state_type(action)); + break; + + case PROP_STATE: + g_value_take_variant(value, pw3270_action_get_state_property(action)); + break; + + default: + g_assert_not_reached (); + } + + } + + void pw3270_action_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { + +// debug("%s(%d)",__FUNCTION__,prop_id); + + GAction *action = G_ACTION(object); + + switch (prop_id) + { + case PROP_NAME: + pw3270_action_set_name(action, g_value_get_string(value)); + break; + + case PROP_PARAMETER_TYPE: +// action->parameter_type = g_value_dup_boxed (value); + break; + + case PROP_ENABLED: +// action->enabled = g_value_get_boolean (value); + break; + + case PROP_STATE: + pw3270_action_set_state(action, g_value_get_variant(value)); + break; + + default: + g_assert_not_reached (); + } + + } + + const gchar * pw3270_action_get_name(GAction *action) { + return PW3270_ACTION(action)->name; + } + + void pw3270_action_set_name(GAction *object, const gchar *name) { + + pw3270Action * action = PW3270_ACTION(object); + +// debug("%s %s -> %s", __FUNCTION__, action->name, name); + + if(action->name) + g_free(action->name); + + if(name) + action->name = g_strdup(name); + else + action->name = NULL; + + } + + GVariant * pw3270_action_get_state_property(GAction *object) { + pw3270Action *action = PW3270_ACTION(object); + return action->state ? g_variant_ref(action->state) : NULL; + } + + const GVariantType * pw3270_action_get_parameter_type(GAction *action) { + return PW3270_ACTION_GET_CLASS(action)->get_parameter_type(action); + } + + const GVariantType * pw3270_action_get_state_type(GAction *object) { + + pw3270Action * action = PW3270_ACTION(object); + + if(action->state) + return g_variant_get_type(action->state); + + return NULL; + + } + + GVariant * pw3270_action_get_state_hint(GAction *action) { + debug("%s",__FUNCTION__); + return NULL; + } + + void pw3270_action_change_state(GAction *object, GVariant *value) { + pw3270_action_set_state(object, value); + } + + void pw3270_action_change_state_boolean(GAction *action, gboolean state) { + + g_return_if_fail(PW3270_IS_ACTION(action)); + pw3270_action_set_state(action,g_variant_new_boolean(state)); + + } + + void pw3270_action_set_state(GAction *object, GVariant *value) { + + if(value) { + + pw3270Action * action = PW3270_ACTION(object); + + g_variant_ref_sink(value); + + if (!action->state || !g_variant_equal(action->state, value)) { + + if(action->state) + g_variant_unref(action->state); + + action->state = g_variant_ref(value); + + if (g_signal_has_handler_pending(object, action_signals[SIGNAL_CHANGE_STATE], 0, TRUE)) { + g_signal_emit(object, action_signals[SIGNAL_CHANGE_STATE], 0, value); + } + + g_object_notify_by_pspec(G_OBJECT(object), PW3270_ACTION_GET_CLASS(object)->properties.state); + + } + + g_variant_unref(value); + + } + + } + + void pw3270_action_set_enabled(GAction *object, gboolean state) { + g_object_notify_by_pspec(G_OBJECT(object), PW3270_ACTION_GET_CLASS(object)->properties.enabled); + } + + + static void change_widget(GAction *action, GtkWidget G_GNUC_UNUSED(*from), GtkWidget *to) { + PW3270_ACTION(action)->terminal = to; + } + + void pw3270_action_set_terminal_widget(GAction *object, GtkWidget *widget) { + + g_return_if_fail(PW3270_IS_ACTION(object) && GTK_IS_V3270(widget)); + + pw3270Action * action = PW3270_ACTION(object); + + if(action->terminal != widget) { + PW3270_ACTION_GET_CLASS(object)->change_widget(object,action->terminal,widget); + action->terminal = widget; + } + + } + + gboolean pw3270_action_get_enabled(GAction *object) { + + pw3270Action * action = PW3270_ACTION(object); + +// debug("%s(%s) action=%p terminal=%p",__FUNCTION__,pw3270_action_get_name(object),action,action->terminal); + +// debug("%s: terminal=%p",__FUNCTION__,action->terminal); + + if(action && action->terminal) { + return PW3270_ACTION_GET_CLASS(object)->get_enabled(object,action->terminal); + } + + return FALSE; + + } + + void pw3270_action_activate(GAction *object, GVariant *parameter) { + + pw3270Action * action = PW3270_ACTION(object); + + debug("%s: terminal=%p",__FUNCTION__,action->terminal); + + if(action && action->terminal) { + PW3270_ACTION_GET_CLASS(object)->activate(object,parameter,action->terminal); + } + + } + + gboolean get_enabled(GAction *object, GtkWidget *terminal) { + debug("%s(%s)",__FUNCTION__,pw3270_action_get_name(object)); + return TRUE; + } + + void activate(GAction *action, GVariant G_GNUC_UNUSED(*parameter), GtkWidget G_GNUC_UNUSED(*terminal)) { + g_message("Action %s can't be activated",pw3270_action_get_name(action)); + } diff --git a/src/objects/actions/actions.cbp b/src/objects/actions/actions.cbp new file mode 100644 index 0000000..538bd5a --- /dev/null +++ b/src/objects/actions/actions.cbp @@ -0,0 +1,72 @@ + + + + + + diff --git a/src/objects/actions/lib3270/action.c b/src/objects/actions/lib3270/action.c new file mode 100644 index 0000000..c307e20 --- /dev/null +++ b/src/objects/actions/lib3270/action.c @@ -0,0 +1,112 @@ +/* + * "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) + * + */ + + /** + * @brief Implement GAction "wrapper" for lib3270's actions. + * + */ + + #include "../private.h" + #include + + #define PW3270_TYPE_LIB3270_ACTION (Lib3270Action_get_type()) + #define PW3270_LIB3270_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), PW3270_TYPE_LIB3270_ACTION, Lib3270Action)) + #define PW3270_IS_LIB3270_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), PW3270_TYPE_LIB3270_ACTION)) + + typedef struct _Lib3270ActionClass { + pw3270ActionClass parent_class; + + } Lib3270ActionClass; + + typedef struct _Lib3270Action { + pw3270Action parent; + + const LIB3270_ACTION * definition; + + } Lib3270Action; + + static void Lib3270Action_class_init(Lib3270ActionClass *klass); + static void Lib3270Action_init(Lib3270Action *action); + static void change_widget(GAction *object, GtkWidget *from, GtkWidget *to); + + G_DEFINE_TYPE(Lib3270Action, Lib3270Action, PW3270_TYPE_ACTION); + + static gboolean get_enabled(GAction *action, GtkWidget *terminal) { + + if(terminal) + return PW3270_LIB3270_ACTION(action)->definition->activatable(v3270_get_session(terminal)) > 0 ? TRUE : FALSE; + + return FALSE; + + } + + static void activate(GAction *action, GVariant *parameter, GtkWidget *terminal) { + PW3270_LIB3270_ACTION(action)->definition->activate(v3270_get_session(terminal)); + } + + void Lib3270Action_class_init(Lib3270ActionClass *klass) { + + pw3270ActionClass * action = PW3270_ACTION_CLASS(klass); + + action->activate = activate; + action->get_enabled = get_enabled; + action->change_widget = change_widget; + + } + + void Lib3270Action_init(Lib3270Action *action) { + } + + GAction * pw3270_action_new_from_lib3270(const LIB3270_ACTION * definition) { + + Lib3270Action * action = (Lib3270Action *) g_object_new(PW3270_TYPE_LIB3270_ACTION, NULL); + action->definition = definition; + + // Setup the default name. + pw3270Action * abstract = PW3270_ACTION(action); + + if(abstract->name) + g_free(abstract->name); + + abstract->name = g_strconcat("win.",definition->name,NULL); + + return G_ACTION(action); + } + + void change_widget(GAction *object, GtkWidget *from, GtkWidget *to) { + + PW3270_ACTION_CLASS(Lib3270Action_parent_class)->change_widget(object,from,to); + + // Does the "enabled" state has changed? If yes notify customers. + gboolean enabled = get_enabled(object,to); + if(get_enabled(object,from) != enabled) + pw3270_action_set_enabled(object,enabled); + + } + diff --git a/src/objects/actions/lib3270/pakey.c b/src/objects/actions/lib3270/pakey.c new file mode 100644 index 0000000..2c63cd1 --- /dev/null +++ b/src/objects/actions/lib3270/pakey.c @@ -0,0 +1,141 @@ +/* + * "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) + * + */ + + /** + * @brief Implement GAction "wrapper" for lib3270's PAs. + * + */ + + #include "../private.h" + #include + + #define PW3270_TYPE_PAKEY_ACTION (Lib3270PaAction_get_type()) + #define PW3270_LIB3270_PAKEY_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), PW3270_TYPE_PAKEY_ACTION, Lib3270PaAction)) + #define PW3270_IS_LIB3270_PAKEY_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), PW3270_TYPE_PAKEY_ACTION)) + + typedef struct _Lib3270PaActionClass { + pw3270ActionClass parent_class; + + } Lib3270PaActionClass; + + typedef struct _Lib3270PaAction { + pw3270Action parent; + + } Lib3270PaAction; + + static void Lib3270PaAction_class_init(Lib3270PaActionClass *klass); + static void Lib3270PaAction_init(Lib3270PaAction *action); + static void change_widget(GAction *object, GtkWidget *from, GtkWidget *to); + + G_DEFINE_TYPE(Lib3270PaAction, Lib3270PaAction, PW3270_TYPE_ACTION); + + static gboolean get_enabled(GAction *action, GtkWidget *terminal) { + + debug("%s(%s)",__FUNCTION__,pw3270_action_get_name(action)); + + if(terminal) + return lib3270_is_connected(v3270_get_session(terminal)) > 0 ? TRUE: FALSE; + + return FALSE; + + } + + static void activate(GAction *action, GVariant *parameter, GtkWidget *terminal) { + + if(action && terminal && parameter) { + + H3270 * hSession = v3270_get_session(terminal); + + if(g_variant_is_of_type(parameter, G_VARIANT_TYPE_INT32)) { + + lib3270_pakey(hSession,(int) g_variant_get_int32(parameter)); + + } else if(g_variant_is_of_type(parameter, G_VARIANT_TYPE_UINT32)) { + + lib3270_pakey(hSession,(int) g_variant_get_uint32(parameter)); + + } else if(g_variant_is_of_type(parameter, G_VARIANT_TYPE_INT16)) { + + lib3270_pakey(hSession,(int) g_variant_get_int16(parameter)); + + } else if(g_variant_is_of_type(parameter, G_VARIANT_TYPE_UINT16)) { + + lib3270_pakey(hSession,(int) g_variant_get_uint16(parameter)); + + } + + } + + } + + static const GVariantType * get_parameter_type(GAction *action) + { + return G_VARIANT_TYPE_UINT16; + } + + void Lib3270PaAction_class_init(Lib3270PaActionClass *klass) { + + pw3270ActionClass * action = PW3270_ACTION_CLASS(klass); + + action->activate = activate; + action->get_enabled = get_enabled; + action->change_widget = change_widget; + action->get_parameter_type = get_parameter_type; + + } + + void Lib3270PaAction_init(Lib3270PaAction *action) { + } + + GAction * pw3270_action_new_pakey(void) { + + Lib3270PaAction * action = (Lib3270PaAction *) g_object_new(PW3270_TYPE_PAKEY_ACTION, NULL); + + // Setup the default name. + pw3270Action * abstract = PW3270_ACTION(action); + + if(abstract->name) + g_free(abstract->name); + + abstract->name = g_strdup("win.pakey"); + + return G_ACTION(action); + } + + void change_widget(GAction *object, GtkWidget *from, GtkWidget *to) { + + PW3270_ACTION_CLASS(Lib3270PaAction_parent_class)->change_widget(object,from,to); + + // Does the "enabled" state has changed? If yes notify customers. + gboolean enabled = get_enabled(object,to); + if(get_enabled(object,from) != enabled) + pw3270_action_set_enabled(object,enabled); + + } + diff --git a/src/objects/actions/lib3270/pfkey.c b/src/objects/actions/lib3270/pfkey.c new file mode 100644 index 0000000..f74cdfe --- /dev/null +++ b/src/objects/actions/lib3270/pfkey.c @@ -0,0 +1,142 @@ +/* + * "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) + * + */ + + /** + * @brief Implement GAction "wrapper" for lib3270's PFs. + * + */ + + #include "../private.h" + #include + + #define PW3270_TYPE_PFKEY_ACTION (Lib3270PfAction_get_type()) + #define PW3270_LIB3270_PFKEY_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), PW3270_TYPE_PFKEY_ACTION, Lib3270PfAction)) + #define PW3270_IS_LIB3270_PFKEY_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), PW3270_TYPE_PFKEY_ACTION)) + + typedef struct _Lib3270PfActionClass { + pw3270ActionClass parent_class; + + } Lib3270PfActionClass; + + typedef struct _Lib3270PfAction { + pw3270Action parent; + + } Lib3270PfAction; + + static void Lib3270PfAction_class_init(Lib3270PfActionClass *klass); + static void Lib3270PfAction_init(Lib3270PfAction *action); + static void change_widget(GAction *object, GtkWidget *from, GtkWidget *to); + + G_DEFINE_TYPE(Lib3270PfAction, Lib3270PfAction, PW3270_TYPE_ACTION); + + static gboolean get_enabled(GAction *action, GtkWidget *terminal) { + + debug("%s(%s)",__FUNCTION__,pw3270_action_get_name(action)); + + if(terminal) + return lib3270_is_connected(v3270_get_session(terminal)) > 0 ? TRUE: FALSE; + + return FALSE; + + } + + static void activate(GAction *action, GVariant *parameter, GtkWidget *terminal) { + + if(action && terminal && parameter) { + + H3270 * hSession = v3270_get_session(terminal); + + if(g_variant_is_of_type(parameter, G_VARIANT_TYPE_INT32)) { + + lib3270_pfkey(hSession,(int) g_variant_get_int32(parameter)); + + } else if(g_variant_is_of_type(parameter, G_VARIANT_TYPE_UINT32)) { + + lib3270_pfkey(hSession,(int) g_variant_get_uint32(parameter)); + + } else if(g_variant_is_of_type(parameter, G_VARIANT_TYPE_INT16)) { + + lib3270_pfkey(hSession,(int) g_variant_get_int16(parameter)); + + } else if(g_variant_is_of_type(parameter, G_VARIANT_TYPE_UINT16)) { + + lib3270_pfkey(hSession,(int) g_variant_get_uint16(parameter)); + + } + + } + + } + + static const GVariantType * get_parameter_type(GAction *action) + { + return G_VARIANT_TYPE_UINT16; + } + + void Lib3270PfAction_class_init(Lib3270PfActionClass *klass) { + + pw3270ActionClass * action = PW3270_ACTION_CLASS(klass); + + action->activate = activate; + action->get_enabled = get_enabled; + action->change_widget = change_widget; + action->get_parameter_type = get_parameter_type; + + } + + void Lib3270PfAction_init(Lib3270PfAction *action) { + } + + GAction * pw3270_action_new_pfkey(void) { + + Lib3270PfAction * action = (Lib3270PfAction *) g_object_new(PW3270_TYPE_PFKEY_ACTION, NULL); + + // Setup the default name. + pw3270Action * abstract = PW3270_ACTION(action); + + if(abstract->name) + g_free(abstract->name); + + abstract->name = g_strdup("win.pfkey"); + + return G_ACTION(action); + + } + + void change_widget(GAction *object, GtkWidget *from, GtkWidget *to) { + + PW3270_ACTION_CLASS(Lib3270PfAction_parent_class)->change_widget(object,from,to); + + // Does the "enabled" state has changed? If yes notify customers. + gboolean enabled = get_enabled(object,to); + if(get_enabled(object,from) != enabled) + pw3270_action_set_enabled(object,enabled); + + } + diff --git a/src/objects/actions/lib3270/toggle.c b/src/objects/actions/lib3270/toggle.c new file mode 100644 index 0000000..870dc0b --- /dev/null +++ b/src/objects/actions/lib3270/toggle.c @@ -0,0 +1,133 @@ +/* + * "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) + * + */ + + /** + * @brief Implement GAction "wrapper" for lib3270's toggles. + * + */ + + #include "../private.h" + #include + #include + + #define PW3270_TYPE_LIB3270_TOGGLE_ACTION (Lib3270ToggleAction_get_type()) + #define PW3270_LIB3270_TOGGLE_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), PW3270_TYPE_LIB3270_TOGGLE_ACTION, Lib3270ToggleAction)) + #define PW3270_IS_LIB3270_TOGGLE_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), PW3270_TYPE_LIB3270_TOGGLE_ACTION)) + + typedef struct _Lib3270ToggleActionClass { + pw3270ActionClass parent_class; + + } Lib3270ToggleActionClass; + + typedef struct _Lib3270ToggleAction { + pw3270Action parent; + + const LIB3270_TOGGLE * definition; + const void * listener; + + } Lib3270ToggleAction; + + static void Lib3270ToggleAction_class_init(Lib3270ToggleActionClass *klass); + static void Lib3270ToggleAction_init(Lib3270ToggleAction *action); + + G_DEFINE_TYPE(Lib3270ToggleAction, Lib3270ToggleAction, PW3270_TYPE_ACTION); + + static void change_state(H3270 *hSession, LIB3270_TOGGLE_ID id, char state, void * action) { + debug("%s: %s",__FUNCTION__,state ? "ON" : "OFF"); + pw3270_action_change_state_boolean((GAction *) action, state == 0 ? FALSE : TRUE); + } + + static void change_widget(GAction *object, GtkWidget *from, GtkWidget *to) { + + Lib3270ToggleAction * action = PW3270_LIB3270_TOGGLE_ACTION(object); + + if(action->listener) { + lib3270_unregister_toggle_listener(v3270_get_session(from),action->definition->id,object); + } + + if(to) { + action->listener = lib3270_register_toggle_listener(v3270_get_session(to),action->definition->id,change_state,object); + pw3270_action_change_state_boolean(object,lib3270_get_toggle(v3270_get_session(to),action->definition->id)); + } + + PW3270_ACTION_CLASS(Lib3270ToggleAction_parent_class)->change_widget(object,from,to); + + } + + static void activate(GAction *action, GVariant *parameter, GtkWidget *terminal) { + + debug("Activating \"%s\"",pw3270_action_get_name(action)); + + if(parameter && g_variant_is_of_type(parameter,G_VARIANT_TYPE_BOOLEAN)) { + + lib3270_set_toggle(v3270_get_session(terminal),PW3270_LIB3270_TOGGLE_ACTION(action)->definition->id,g_variant_get_boolean(parameter)); + debug("Toggle set to %s",lib3270_get_toggle(v3270_get_session(terminal),PW3270_LIB3270_TOGGLE_ACTION(action)->definition->id) ? "ON" : "OFF"); + + } else { + + lib3270_toggle(v3270_get_session(terminal),PW3270_LIB3270_TOGGLE_ACTION(action)->definition->id); + debug("Toggle is %s",lib3270_get_toggle(v3270_get_session(terminal),PW3270_LIB3270_TOGGLE_ACTION(action)->definition->id) ? "ON" : "OFF"); + + } + + } + + void Lib3270ToggleAction_class_init(Lib3270ToggleActionClass *klass) { + + pw3270ActionClass * action = PW3270_ACTION_CLASS(klass); + action->activate = activate; + action->change_widget = change_widget; + + } + + void Lib3270ToggleAction_init(Lib3270ToggleAction *action) { + + action->definition = NULL; + action->listener = NULL; + + } + + GAction * pw3270_toggle_action_new_from_lib3270(const LIB3270_TOGGLE * definition) { + + Lib3270ToggleAction * action = (Lib3270ToggleAction *) g_object_new(PW3270_TYPE_LIB3270_TOGGLE_ACTION, NULL); + action->definition = definition; + + // Setup the default name. + pw3270Action * abstract = PW3270_ACTION(action); + + if(abstract->name) + g_free(abstract->name); + + abstract->name = g_strconcat("win.",definition->name,NULL); + + return G_ACTION(action); + + } + + diff --git a/src/objects/actions/private.h b/src/objects/actions/private.h new file mode 100644 index 0000000..c49e3a8 --- /dev/null +++ b/src/objects/actions/private.h @@ -0,0 +1,88 @@ +/* + * "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 + + #include + + /* not really I18N-related, but also a string marker macro */ + #define I_(string) g_intern_static_string (string) + + struct _pw3270Action { + GObject parent; + + GVariantType * parameter_type; + GVariant * state; + GtkWidget * terminal; + gchar * name; + + }; + + struct _pw3270ActionClass { + GObjectClass parent_class; + + struct { + GParamSpec * state; + GParamSpec * enabled; + } properties; + + void (*change_widget)(GAction *action, GtkWidget *from, GtkWidget *to); + gboolean (*get_enabled)(GAction *action, GtkWidget *terminal); + void (*activate)(GAction *action, GVariant *parameter, GtkWidget *terminal); + const GVariantType * (*get_parameter_type)(GAction *action); + + }; + + G_GNUC_INTERNAL GAction * pw3270_action_new_from_lib3270(const LIB3270_ACTION * definition); + G_GNUC_INTERNAL GAction * pw3270_toggle_action_new_from_lib3270(const LIB3270_TOGGLE * definition); + G_GNUC_INTERNAL GAction * pw3270_action_new_pfkey(void); + G_GNUC_INTERNAL GAction * pw3270_action_new_pakey(void); + + G_GNUC_INTERNAL void pw3270_action_change_state_boolean(GAction *action, gboolean state); + G_GNUC_INTERNAL void pw3270_action_set_enabled(GAction *action, gboolean state); + + +#endif // PRIVATE_H_INCLUDED diff --git a/src/objects/actions/testprogram/testprogram.c b/src/objects/actions/testprogram/testprogram.c new file mode 100644 index 0000000..5e2e002 --- /dev/null +++ b/src/objects/actions/testprogram/testprogram.c @@ -0,0 +1,133 @@ +/* + * "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. 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 testprogram.c 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 + #include + #include + #include + #include + #include + #include "../private.h" + + /*---[ Implement ]----------------------------------------------------------------------------------*/ + + GtkWidget * pw3270_window_get_terminal_widget(GtkWidget *window) { + return g_object_get_data(G_OBJECT(window), "v3270_terminal"); + } + + /* + H3270 * pw3270_window_get_session_handle(GtkWidget *window) { + return v3270_get_session(pw3270_window_get_terminal_widget(window)); + } + */ + + static gboolean handle_command(GtkWidget *trace, const gchar *cmd, const gchar *args, GtkWidget *window) { + + if(!g_ascii_strcasecmp(cmd,"activate")) { + + GAction * action = g_action_map_lookup_action(G_ACTION_MAP(window),args); + + if(!action) { + g_message("Invalid action name: \"%s\"",args); + } else if(g_action_get_enabled(action)) { + g_message("Activating action \"%s\"",args); + g_action_activate(action,NULL); + } else { + g_message("Action \"%s\" is disabled",args); + } + + return TRUE; + } + + return FALSE; + } + + 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(); + GtkWidget * toolbar = gtk_toolbar_new(); + + g_object_set_data(G_OBJECT(window),"v3270_terminal",terminal); + + pw3270_window_add_actions(window); + + gtk_box_pack_start(GTK_BOX(vBox),toolbar,FALSE,TRUE,0); + gtk_box_pack_start(GTK_BOX(vBox),notebook,TRUE,TRUE,0); + + // Create Terminal window + { + gtk_widget_set_can_default(terminal,TRUE); + + gtk_notebook_append_page(GTK_NOTEBOOK(notebook),terminal,gtk_label_new("Terminal")); + +#ifdef _WIN32 + v3270_set_font_family(terminal,"Droid Sans Mono"); +#endif // _WIN32 + + } + + // Create trace window + GtkWidget * trace = v3270_trace_new(terminal); + gtk_notebook_append_page(GTK_NOTEBOOK(notebook),trace,gtk_label_new("Trace")); + + g_signal_connect(trace,"command",G_CALLBACK(handle_command),window); + + // Setup and show main window + 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_widget_show_all(window); + + gtk_widget_grab_focus(terminal); + +} + +int main (int argc, char **argv) { + + GtkApplication *app; + int status; + + app = gtk_application_new ("br.com.bb.pw3270",G_APPLICATION_FLAGS_NONE); + + g_signal_connect (app, "activate", G_CALLBACK(activate), NULL); + + status = g_application_run (G_APPLICATION (app), argc, argv); + g_object_unref (app); + + g_message("rc=%d",status); + + return 0; + +} + + diff --git a/src/objects/actions/window.c b/src/objects/actions/window.c new file mode 100644 index 0000000..8d642d3 --- /dev/null +++ b/src/objects/actions/window.c @@ -0,0 +1,105 @@ +/* + * "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) + * + */ + + /** + * @brief Integrate pw3270 actions with the application window. + * + */ + + #include "private.h" + #include + #include + + void pw3270_window_add_actions(GtkWidget * appwindow) { + + GActionMap * map = G_ACTION_MAP(appwindow); + GtkWidget * terminal = pw3270_window_get_terminal_widget(appwindow); + size_t ix; + + /* + GAction *action = pw3270_action_new_from_lib3270(lib3270_action_get_by_name("testpattern")); + pw3270_action_set_terminal_widget(action,terminal); + + debug("--> \"%s\"",pw3270_action_get_name(action)); + + g_action_map_add_action(map,action); + + debug("--> \"%s\"",pw3270_action_get_name(action)); + */ + + /* + GAction *action = pw3270_toggle_action_new_from_lib3270(lib3270_get_toggles() + LIB3270_TOGGLE_INSERT); + pw3270_action_set_terminal_widget(action,terminal); + + debug("--> \"%s\"",pw3270_action_get_name(action)); + + g_action_map_add_action(map,action); + + debug("--> \"%s\"",pw3270_action_get_name(action)); + */ + + // Map lib3270 actions + { + const LIB3270_ACTION * actions = lib3270_get_actions(); + for(ix = 0; actions[ix].name; ix++) { + + GAction *action = pw3270_action_new_from_lib3270(&actions[ix]); + pw3270_action_set_terminal_widget(action,terminal); + g_action_map_add_action(map,action); + + } + } + + // Map toggles + { + const LIB3270_TOGGLE * toggles = lib3270_get_toggles(); + for(ix = 0; toggles[ix].name; ix++) { + + GAction *action = pw3270_toggle_action_new_from_lib3270(&toggles[ix]); + pw3270_action_set_terminal_widget(action,terminal); + g_action_map_add_action(map,action); + + } + } + + // Map special actions + { + GAction * actions[] = { + pw3270_action_new_pfkey(), + pw3270_action_new_pakey() + }; + + for(ix = 0; ix < G_N_ELEMENTS(actions); ix++) { + pw3270_action_set_terminal_widget(actions[ix],terminal); + g_action_map_add_action(map,actions[ix]); + } + } + + debug("%s ends",__FUNCTION__); + } diff --git a/src/objects/toolbar/core.c b/src/objects/toolbar/core.c new file mode 100644 index 0000000..4906df1 --- /dev/null +++ b/src/objects/toolbar/core.c @@ -0,0 +1,258 @@ +/* + * "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" + + static gboolean popup_context_menu(GtkToolbar *toolbar, gint x, gint y, gint button_number); + static void finalize(GObject *object); + + + struct _pw3270ToolBar { + GtkToolbar parent; + + /// @brief Popup Menu + GtkWidget * popup_menu; + + }; + + struct _pw3270ToolBarClass { + + GtkToolbarClass parent_class; + + + }; + + G_DEFINE_TYPE(pw3270ToolBar, pw3270ToolBar, GTK_TYPE_TOOLBAR); + + static void pw3270ToolBar_class_init(pw3270ToolBarClass *klass) { + + GtkToolbarClass * toolbar = GTK_TOOLBAR_CLASS(klass); + + toolbar->popup_context_menu = popup_context_menu; + + G_OBJECT_CLASS(klass)->finalize = finalize; + + } + + static void detacher(GtkWidget *attach_widget, GtkMenu *menu) { + + pw3270ToolBar * toolbar = PW3270_TOOLBAR(attach_widget); + toolbar->popup_menu = NULL; + + } + + static void set_icon_size(GtkMenuItem *menuitem, GtkWidget *toolbar) { + + GtkIconSize * icon_size = g_object_get_data(G_OBJECT(menuitem),"icon_size"); + + if(icon_size) + gtk_toolbar_set_icon_size(GTK_TOOLBAR(toolbar),*icon_size); + else + gtk_toolbar_unset_icon_size(GTK_TOOLBAR(toolbar)); + + } + + static void set_style(GtkMenuItem *menuitem, GtkWidget *toolbar) { + + GtkToolbarStyle * style = g_object_get_data(G_OBJECT(menuitem),"toolbar_style"); + + if(style) + gtk_toolbar_set_style(GTK_TOOLBAR(toolbar),*style); + else + gtk_toolbar_unset_style(GTK_TOOLBAR(toolbar)); + + } + + static void pw3270ToolBar_init(pw3270ToolBar *widget) { + + widget->popup_menu = gtk_menu_new(); + + // Size options + { + static const struct { + const gchar * label; + GtkIconSize icon_size; + } itens[] = { + + { + .label = N_( "System default" ) + + }, + + { + .label = N_( "Small" ), + .icon_size = GTK_ICON_SIZE_SMALL_TOOLBAR + }, + + { + .label = N_( "Large" ), + .icon_size = GTK_ICON_SIZE_LARGE_TOOLBAR + }, + }; + + size_t ix; + + GtkWidget * item = gtk_menu_item_new_with_mnemonic( _("Icon _size") ); + gtk_menu_shell_append(GTK_MENU_SHELL(widget->popup_menu),item); + + GtkWidget * submenu = gtk_menu_new(); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(item),submenu); + + for(ix = 0; ix < G_N_ELEMENTS(itens); ix++) { + + item = gtk_menu_item_new_with_mnemonic(gettext(itens[ix].label)); + + if(ix > 0) + g_object_set_data(G_OBJECT(item),"icon_size", (gpointer) &itens[ix].icon_size); + + g_signal_connect(item, "activate", G_CALLBACK(set_icon_size), widget); + + gtk_menu_shell_append(GTK_MENU_SHELL(submenu),item); + + } + + } + + // Style option + { + static const struct { + const gchar * label; + GtkToolbarStyle style; + } itens[] = { + + { + .label = N_( "System default" ) + }, + + { + .label = N_( "Icons only" ), + .style = GTK_TOOLBAR_ICONS + }, + + { + .label = N_( "Text only" ), + .style = GTK_TOOLBAR_TEXT + }, + + { + .label = N_( "Icons & text" ), + .style = GTK_TOOLBAR_BOTH + }, + }; + + size_t ix; + + GtkWidget * item = gtk_menu_item_new_with_mnemonic( _("S_tyle") ); + gtk_menu_shell_append(GTK_MENU_SHELL(widget->popup_menu),item); + + GtkWidget * submenu = gtk_menu_new(); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(item),submenu); + + for(ix = 0; ix < G_N_ELEMENTS(itens); ix++) { + + item = gtk_menu_item_new_with_mnemonic(gettext(itens[ix].label)); + + if(ix > 0) + g_object_set_data(G_OBJECT(item),"toolbar_style", (gpointer) &itens[ix].style); + + g_signal_connect(item, "activate", G_CALLBACK(set_style), widget); + + gtk_menu_shell_append(GTK_MENU_SHELL(submenu),item); + + } + + } + + // gtk_container_set_border_width(GTK_CONTAINER(widget->popup_menu),6); + gtk_widget_show_all(widget->popup_menu); + gtk_menu_attach_to_widget(GTK_MENU(widget->popup_menu),GTK_WIDGET(widget),detacher); + + } + + static void finalize(GObject *object) { + +// pw3270ToolBar * toolbar = PW3270_TOOLBAR(object); + + + G_OBJECT_CLASS(pw3270ToolBar_parent_class)->finalize(object); + + } + + GtkWidget * pw3270_toolbar_new(void) { + return g_object_new(PW3270_TYPE_TOOLBAR, NULL); + } + + GtkWidget * pw3270_toolbar_insert_lib3270_action(GtkWidget *toolbar, const LIB3270_ACTION *action, gint pos) { + + g_return_val_if_fail(GTK_IS_TOOLBAR(toolbar),NULL); + + if(!action) { + g_message(_("Invalid action identifier")); + return NULL; + } + + if(!action->icon) { + g_message(_("Action \"%s\" doesn't have an icon"), action->name); + return NULL; + } + + if(!action->label) { + g_message(_("Action \"%s\" doesn't have a label"), action->name); + return NULL; + } + + debug("Action: %s icon: %s", action->name, action->icon); + + GtkToolItem * item = gtk_tool_button_new(gtk_image_new_from_icon_name(action->icon,GTK_ICON_SIZE_LARGE_TOOLBAR),gettext(action->label)); + gtk_tool_button_set_use_underline(GTK_TOOL_BUTTON(item),TRUE); + + gtk_widget_set_name(GTK_WIDGET(item), action->name); + + if(action->summary) + gtk_tool_item_set_tooltip_text(item,gettext(action->summary)); + + gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, pos); + + return GTK_WIDGET(item); + } + + gboolean popup_context_menu(GtkToolbar *widget, gint x, gint y, gint button_number) { + + pw3270ToolBar * toolbar = PW3270_TOOLBAR(widget); + + debug("%s button_number=%d",__FUNCTION__,button_number); + + if(toolbar->popup_menu) { + gtk_menu_popup_at_pointer(GTK_MENU(toolbar->popup_menu),NULL); + } + + + return TRUE; + + } diff --git a/src/objects/toolbar/private.h b/src/objects/toolbar/private.h new file mode 100644 index 0000000..f73c20c --- /dev/null +++ b/src/objects/toolbar/private.h @@ -0,0 +1,47 @@ +/* + * "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 + +#endif // PRIVATE_H_INCLUDED diff --git a/src/objects/toolbar/testprogram/testprogram.c b/src/objects/toolbar/testprogram/testprogram.c new file mode 100644 index 0000000..8ebef93 --- /dev/null +++ b/src/objects/toolbar/testprogram/testprogram.c @@ -0,0 +1,110 @@ +/* + * "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. 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 testprogram.c 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 + #include + #include + #include + #include + + /*---[ Implement ]----------------------------------------------------------------------------------*/ + + 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(); + GtkWidget * toolbar = pw3270_toolbar_new(); + + { + // Setup toolbar + static const char * action_names[] = { + "reconnect", + "disconnect", + "selectall", + "unselect" + }; + + size_t ix; + + for(ix = 0; ix < G_N_ELEMENTS(action_names); ix++) { + pw3270_toolbar_insert_lib3270_action(toolbar, lib3270_action_get_by_name(action_names[ix]), -1); + } + + } + + gtk_box_pack_start(GTK_BOX(vBox),toolbar,FALSE,TRUE,0); + gtk_box_pack_start(GTK_BOX(vBox),notebook,TRUE,TRUE,0); + + // Create Terminal window + { + gtk_widget_set_can_default(terminal,TRUE); + + gtk_notebook_append_page(GTK_NOTEBOOK(notebook),terminal,gtk_label_new("Terminal")); + +#ifdef _WIN32 + v3270_set_font_family(terminal,"Droid Sans Mono"); +#endif // _WIN32 + + } + + // Create trace window + gtk_notebook_append_page(GTK_NOTEBOOK(notebook),v3270_trace_new(terminal),gtk_label_new("Trace")); + + // Setup and show main window + 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_widget_show_all(window); + + gtk_widget_grab_focus(terminal); + +} + +int main (int argc, char **argv) { + + GtkApplication *app; + int status; + + app = gtk_application_new ("br.com.bb.pw3270",G_APPLICATION_FLAGS_NONE); + + g_signal_connect (app, "activate", G_CALLBACK(activate), NULL); + + status = g_application_run (G_APPLICATION (app), argc, argv); + g_object_unref (app); + + g_message("rc=%d",status); + + return 0; + +} + + diff --git a/src/objects/toolbar/toolbar.cbp b/src/objects/toolbar/toolbar.cbp new file mode 100644 index 0000000..f9d0801 --- /dev/null +++ b/src/objects/toolbar/toolbar.cbp @@ -0,0 +1,55 @@ + + + + + + diff --git a/src/objects/window/init.c b/src/objects/window/init.c new file mode 100644 index 0000000..fd00a73 --- /dev/null +++ b/src/objects/window/init.c @@ -0,0 +1,64 @@ +/* + * "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" + #include + + G_DEFINE_TYPE(pw3270ApplicationWindow, pw3270ApplicationWindow, GTK_TYPE_APPLICATION_WINDOW); + + static void pw3270ApplicationWindow_class_init(pw3270ApplicationWindowClass *klass) { + + } + + static void pw3270ApplicationWindow_init(pw3270ApplicationWindow *widget) { + + GtkBox * vBox = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL,0)); + + widget->notebook = GTK_NOTEBOOK(gtk_notebook_new()); + widget->terminal = pw3270_terminal_new(GTK_WIDGET(widget)); + widget->toolbar = GTK_TOOLBAR(pw3270_toolbar_new()); + + gtk_notebook_set_show_tabs(widget->notebook,FALSE); + gtk_notebook_set_show_border(widget->notebook, FALSE); + + gtk_box_pack_start(vBox,GTK_WIDGET(widget->toolbar),FALSE,TRUE,0); + gtk_box_pack_start(vBox,GTK_WIDGET(widget->notebook),TRUE,TRUE,0); + + gtk_container_add(GTK_CONTAINER(widget),GTK_WIDGET(vBox)); + gtk_widget_show_all(GTK_WIDGET(widget)); + + } + + GtkWidget * pw3270_application_window_new(GtkApplication * application) { + + g_return_val_if_fail(GTK_IS_APPLICATION(application), NULL); + return g_object_new(PW3270_TYPE_APPLICATION_WINDOW, "application", application, NULL); + + } + diff --git a/src/objects/window/private.h b/src/objects/window/private.h new file mode 100644 index 0000000..d5bd0d8 --- /dev/null +++ b/src/objects/window/private.h @@ -0,0 +1,65 @@ +/* + * "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 + #include + + struct _pw3270ApplicationWindow { + + GtkApplicationWindow parent; + + GtkWidget * terminal; + GtkNotebook * notebook; + GtkToolbar * toolbar; + + }; + + struct _pw3270ApplicationWindowClass { + + GtkApplicationWindowClass parent_class; + + }; + +#endif // PRIVATE_H_INCLUDED diff --git a/src/objects/window/terminal.c b/src/objects/window/terminal.c new file mode 100644 index 0000000..adb4a4d --- /dev/null +++ b/src/objects/window/terminal.c @@ -0,0 +1,81 @@ +/* + * "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" + #include + + static void session_changed(GtkWidget *terminal, GtkWidget *label) { + + gtk_label_set_text(GTK_LABEL(label),v3270_get_session_name(terminal)); + + // Do I have to change the window title? + GtkWidget * toplevel = gtk_widget_get_toplevel(terminal); + if(PW3270_IS_APPLICATION_WINDOW(toplevel)) { + + pw3270ApplicationWindow * window = PW3270_APPLICATION_WINDOW(toplevel); + + if(window->terminal == terminal) { + g_autofree gchar * title = v3270_get_session_title(terminal); + gtk_window_set_title(GTK_WINDOW(window), title); + } + + } + + } + + static gboolean on_terminal_focus(GtkWidget *terminal, GdkEvent *event, pw3270ApplicationWindow * window) { + + // Store the active terminal widget. + window->terminal = terminal; + + // Change window title + g_autofree gchar * title = v3270_get_session_title(terminal); + gtk_window_set_title(GTK_WINDOW(window), title); + + return FALSE; + } + + GtkWidget * pw3270_terminal_new(GtkWidget *widget) { + + g_return_val_if_fail(PW3270_IS_APPLICATION_WINDOW(widget),NULL); + + pw3270ApplicationWindow * window = PW3270_APPLICATION_WINDOW(widget); + GtkWidget * terminal = v3270_new(); + GtkWidget * label = gtk_label_new(v3270_get_session_name(terminal)); + + g_signal_connect(G_OBJECT(terminal), "focus-in-event", G_CALLBACK(on_terminal_focus), widget); + g_signal_connect(G_OBJECT(terminal), "session_changed", G_CALLBACK(session_changed),label); + + gtk_notebook_append_page(GTK_NOTEBOOK(window->notebook),terminal,label); + gtk_notebook_set_show_tabs(GTK_NOTEBOOK(window->notebook),gtk_notebook_get_n_pages(GTK_NOTEBOOK(window->notebook)) > 1); + + return terminal; + + } + diff --git a/src/objects/window/testprogram/testprogram.c b/src/objects/window/testprogram/testprogram.c new file mode 100644 index 0000000..662dde3 --- /dev/null +++ b/src/objects/window/testprogram/testprogram.c @@ -0,0 +1,106 @@ +/* + * "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. 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 testprogram.c 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 + #include + #include + #include + #include + #include + + /*---[ Implement ]----------------------------------------------------------------------------------*/ + + static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) { + + GtkWidget * window = pw3270_application_window_new(app); + + // Create terminal widget + pw3270_terminal_new(window); + pw3270_terminal_new(window); + + // Setup and show main window + 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); + +} + +GtkWidget * pw3270_toolbar_new(void) { + + static const struct _item { + const gchar *icon; + const gchar *label; + } itens[] = { + + { + "gtk-connect", + "_Connect" + }, + + { + "gtk-disconnect", + "_Disconnect" + } + + }; + + GtkWidget * toolbar = gtk_toolbar_new(); + size_t item; + + for(item = 0; item < G_N_ELEMENTS(itens); item++) { + + GtkToolItem * button = gtk_tool_button_new(gtk_image_new_from_icon_name(itens[item].icon,GTK_ICON_SIZE_LARGE_TOOLBAR),itens[item].label); + gtk_tool_button_set_use_underline(GTK_TOOL_BUTTON(button),TRUE); + gtk_toolbar_insert(GTK_TOOLBAR(toolbar), button, -1); + + } + + return toolbar; +} + +int main (int argc, char **argv) { + + GtkApplication *app; + int status; + + app = gtk_application_new ("br.com.bb.pw3270",G_APPLICATION_FLAGS_NONE); + + g_signal_connect (app, "activate", G_CALLBACK(activate), NULL); + + status = g_application_run (G_APPLICATION (app), argc, argv); + g_object_unref (app); + + g_message("rc=%d",status); + + return 0; + +} + + diff --git a/src/objects/window/window.cbp b/src/objects/window/window.cbp new file mode 100644 index 0000000..c00e20d --- /dev/null +++ b/src/objects/window/window.cbp @@ -0,0 +1,61 @@ + + + + + + diff --git a/src/widgets/toolbar/core.c b/src/widgets/toolbar/core.c deleted file mode 100644 index e4e31e5..0000000 --- a/src/widgets/toolbar/core.c +++ /dev/null @@ -1,258 +0,0 @@ -/* - * "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" - - static gboolean popup_context_menu(GtkToolbar *toolbar, gint x, gint y, gint button_number); - static void finalize(GObject *object); - - - struct _pw3270ToolBar { - GtkToolbar parent; - - /// @brief Popup Menu - GtkWidget * popup_menu; - - }; - - struct _pw3270ToolBarClass { - - GtkToolbarClass parent_class; - - - }; - - G_DEFINE_TYPE(pw3270ToolBar, pw3270ToolBar, GTK_TYPE_TOOLBAR); - - static void pw3270ToolBar_class_init(pw3270ToolBarClass *klass) { - - GtkToolbarClass * toolbar = GTK_TOOLBAR_CLASS(klass); - - toolbar->popup_context_menu = popup_context_menu; - - G_OBJECT_CLASS(klass)->finalize = finalize; - - } - - static void detacher(GtkWidget *attach_widget, GtkMenu *menu) { - - pw3270ToolBar * toolbar = PW3270_TOOLBAR(attach_widget); - toolbar->popup_menu = NULL; - - } - - static void set_icon_size(GtkMenuItem *menuitem, GtkWidget *toolbar) { - - GtkIconSize * icon_size = g_object_get_data(G_OBJECT(menuitem),"icon_size"); - - if(icon_size) - gtk_toolbar_set_icon_size(GTK_TOOLBAR(toolbar),*icon_size); - else - gtk_toolbar_unset_icon_size(GTK_TOOLBAR(toolbar)); - - } - - static void set_style(GtkMenuItem *menuitem, GtkWidget *toolbar) { - - GtkToolbarStyle * style = g_object_get_data(G_OBJECT(menuitem),"toolbar_style"); - - if(style) - gtk_toolbar_set_style(GTK_TOOLBAR(toolbar),*style); - else - gtk_toolbar_unset_style(GTK_TOOLBAR(toolbar)); - - } - - static void pw3270ToolBar_init(pw3270ToolBar *widget) { - - widget->popup_menu = gtk_menu_new(); - - // Size options - { - static const struct { - const gchar * label; - GtkIconSize icon_size; - } itens[] = { - - { - .label = N_( "Default" ) - - }, - - { - .label = N_( "Small" ), - .icon_size = GTK_ICON_SIZE_SMALL_TOOLBAR - }, - - { - .label = N_( "Large" ), - .icon_size = GTK_ICON_SIZE_LARGE_TOOLBAR - }, - }; - - size_t ix; - - GtkWidget * item = gtk_menu_item_new_with_mnemonic( _("Icon _size") ); - gtk_menu_shell_append(GTK_MENU_SHELL(widget->popup_menu),item); - - GtkWidget * submenu = gtk_menu_new(); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(item),submenu); - - for(ix = 0; ix < G_N_ELEMENTS(itens); ix++) { - - item = gtk_menu_item_new_with_mnemonic(gettext(itens[ix].label)); - - if(ix > 0) - g_object_set_data(G_OBJECT(item),"icon_size", (gpointer) &itens[ix].icon_size); - - g_signal_connect(item, "activate", G_CALLBACK(set_icon_size), widget); - - gtk_menu_shell_append(GTK_MENU_SHELL(submenu),item); - - } - - } - - // Style option - { - static const struct { - const gchar * label; - GtkToolbarStyle style; - } itens[] = { - - { - .label = N_( "Default" ) - }, - - { - .label = N_( "Icons only" ), - .style = GTK_TOOLBAR_ICONS - }, - - { - .label = N_( "Text only" ), - .style = GTK_TOOLBAR_TEXT - }, - - { - .label = N_( "Icons & text" ), - .style = GTK_TOOLBAR_BOTH - }, - }; - - size_t ix; - - GtkWidget * item = gtk_menu_item_new_with_mnemonic( _("S_tyle") ); - gtk_menu_shell_append(GTK_MENU_SHELL(widget->popup_menu),item); - - GtkWidget * submenu = gtk_menu_new(); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(item),submenu); - - for(ix = 0; ix < G_N_ELEMENTS(itens); ix++) { - - item = gtk_menu_item_new_with_mnemonic(gettext(itens[ix].label)); - - if(ix > 0) - g_object_set_data(G_OBJECT(item),"toolbar_style", (gpointer) &itens[ix].style); - - g_signal_connect(item, "activate", G_CALLBACK(set_style), widget); - - gtk_menu_shell_append(GTK_MENU_SHELL(submenu),item); - - } - - } - - // gtk_container_set_border_width(GTK_CONTAINER(widget->popup_menu),6); - gtk_widget_show_all(widget->popup_menu); - gtk_menu_attach_to_widget(GTK_MENU(widget->popup_menu),GTK_WIDGET(widget),detacher); - - } - - static void finalize(GObject *object) { - -// pw3270ToolBar * toolbar = PW3270_TOOLBAR(object); - - - G_OBJECT_CLASS(pw3270ToolBar_parent_class)->finalize(object); - - } - - GtkWidget * pw3270_toolbar_new(void) { - return g_object_new(PW3270_TYPE_TOOLBAR, NULL); - } - - GtkWidget * pw3270_toolbar_insert_lib3270_action(GtkWidget *toolbar, const LIB3270_ACTION *action, gint pos) { - - g_return_val_if_fail(GTK_IS_TOOLBAR(toolbar),NULL); - - if(!action) { - g_message(_("Invalid action identifier")); - return NULL; - } - - if(!action->icon) { - g_message(_("Action \"%s\" doesn't have an icon"), action->name); - return NULL; - } - - if(!action->label) { - g_message(_("Action \"%s\" doesn't have a label"), action->name); - return NULL; - } - - debug("Action: %s icon: %s", action->name, action->icon); - - GtkToolItem * item = gtk_tool_button_new(gtk_image_new_from_icon_name(action->icon,GTK_ICON_SIZE_LARGE_TOOLBAR),gettext(action->label)); - gtk_tool_button_set_use_underline(GTK_TOOL_BUTTON(item),TRUE); - - gtk_widget_set_name(GTK_WIDGET(item), action->name); - - if(action->summary) - gtk_tool_item_set_tooltip_text(item,gettext(action->summary)); - - gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, pos); - - return GTK_WIDGET(item); - } - - gboolean popup_context_menu(GtkToolbar *widget, gint x, gint y, gint button_number) { - - pw3270ToolBar * toolbar = PW3270_TOOLBAR(widget); - - debug("%s button_number=%d",__FUNCTION__,button_number); - - if(toolbar->popup_menu) { - gtk_menu_popup_at_pointer(GTK_MENU(toolbar->popup_menu),NULL); - } - - - return TRUE; - - } diff --git a/src/widgets/toolbar/private.h b/src/widgets/toolbar/private.h deleted file mode 100644 index f73c20c..0000000 --- a/src/widgets/toolbar/private.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * "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 - -#endif // PRIVATE_H_INCLUDED diff --git a/src/widgets/toolbar/testprogram/testprogram.c b/src/widgets/toolbar/testprogram/testprogram.c deleted file mode 100644 index 8ebef93..0000000 --- a/src/widgets/toolbar/testprogram/testprogram.c +++ /dev/null @@ -1,110 +0,0 @@ -/* - * "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. 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 testprogram.c 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 - #include - #include - #include - #include - - /*---[ Implement ]----------------------------------------------------------------------------------*/ - - 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(); - GtkWidget * toolbar = pw3270_toolbar_new(); - - { - // Setup toolbar - static const char * action_names[] = { - "reconnect", - "disconnect", - "selectall", - "unselect" - }; - - size_t ix; - - for(ix = 0; ix < G_N_ELEMENTS(action_names); ix++) { - pw3270_toolbar_insert_lib3270_action(toolbar, lib3270_action_get_by_name(action_names[ix]), -1); - } - - } - - gtk_box_pack_start(GTK_BOX(vBox),toolbar,FALSE,TRUE,0); - gtk_box_pack_start(GTK_BOX(vBox),notebook,TRUE,TRUE,0); - - // Create Terminal window - { - gtk_widget_set_can_default(terminal,TRUE); - - gtk_notebook_append_page(GTK_NOTEBOOK(notebook),terminal,gtk_label_new("Terminal")); - -#ifdef _WIN32 - v3270_set_font_family(terminal,"Droid Sans Mono"); -#endif // _WIN32 - - } - - // Create trace window - gtk_notebook_append_page(GTK_NOTEBOOK(notebook),v3270_trace_new(terminal),gtk_label_new("Trace")); - - // Setup and show main window - 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_widget_show_all(window); - - gtk_widget_grab_focus(terminal); - -} - -int main (int argc, char **argv) { - - GtkApplication *app; - int status; - - app = gtk_application_new ("br.com.bb.pw3270",G_APPLICATION_FLAGS_NONE); - - g_signal_connect (app, "activate", G_CALLBACK(activate), NULL); - - status = g_application_run (G_APPLICATION (app), argc, argv); - g_object_unref (app); - - g_message("rc=%d",status); - - return 0; - -} - - diff --git a/src/widgets/toolbar/toolbar.cbp b/src/widgets/toolbar/toolbar.cbp deleted file mode 100644 index f9d0801..0000000 --- a/src/widgets/toolbar/toolbar.cbp +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - diff --git a/src/widgets/window/init.c b/src/widgets/window/init.c deleted file mode 100644 index fd00a73..0000000 --- a/src/widgets/window/init.c +++ /dev/null @@ -1,64 +0,0 @@ -/* - * "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" - #include - - G_DEFINE_TYPE(pw3270ApplicationWindow, pw3270ApplicationWindow, GTK_TYPE_APPLICATION_WINDOW); - - static void pw3270ApplicationWindow_class_init(pw3270ApplicationWindowClass *klass) { - - } - - static void pw3270ApplicationWindow_init(pw3270ApplicationWindow *widget) { - - GtkBox * vBox = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL,0)); - - widget->notebook = GTK_NOTEBOOK(gtk_notebook_new()); - widget->terminal = pw3270_terminal_new(GTK_WIDGET(widget)); - widget->toolbar = GTK_TOOLBAR(pw3270_toolbar_new()); - - gtk_notebook_set_show_tabs(widget->notebook,FALSE); - gtk_notebook_set_show_border(widget->notebook, FALSE); - - gtk_box_pack_start(vBox,GTK_WIDGET(widget->toolbar),FALSE,TRUE,0); - gtk_box_pack_start(vBox,GTK_WIDGET(widget->notebook),TRUE,TRUE,0); - - gtk_container_add(GTK_CONTAINER(widget),GTK_WIDGET(vBox)); - gtk_widget_show_all(GTK_WIDGET(widget)); - - } - - GtkWidget * pw3270_application_window_new(GtkApplication * application) { - - g_return_val_if_fail(GTK_IS_APPLICATION(application), NULL); - return g_object_new(PW3270_TYPE_APPLICATION_WINDOW, "application", application, NULL); - - } - diff --git a/src/widgets/window/private.h b/src/widgets/window/private.h deleted file mode 100644 index d5bd0d8..0000000 --- a/src/widgets/window/private.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * "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 - #include - - struct _pw3270ApplicationWindow { - - GtkApplicationWindow parent; - - GtkWidget * terminal; - GtkNotebook * notebook; - GtkToolbar * toolbar; - - }; - - struct _pw3270ApplicationWindowClass { - - GtkApplicationWindowClass parent_class; - - }; - -#endif // PRIVATE_H_INCLUDED diff --git a/src/widgets/window/terminal.c b/src/widgets/window/terminal.c deleted file mode 100644 index adb4a4d..0000000 --- a/src/widgets/window/terminal.c +++ /dev/null @@ -1,81 +0,0 @@ -/* - * "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" - #include - - static void session_changed(GtkWidget *terminal, GtkWidget *label) { - - gtk_label_set_text(GTK_LABEL(label),v3270_get_session_name(terminal)); - - // Do I have to change the window title? - GtkWidget * toplevel = gtk_widget_get_toplevel(terminal); - if(PW3270_IS_APPLICATION_WINDOW(toplevel)) { - - pw3270ApplicationWindow * window = PW3270_APPLICATION_WINDOW(toplevel); - - if(window->terminal == terminal) { - g_autofree gchar * title = v3270_get_session_title(terminal); - gtk_window_set_title(GTK_WINDOW(window), title); - } - - } - - } - - static gboolean on_terminal_focus(GtkWidget *terminal, GdkEvent *event, pw3270ApplicationWindow * window) { - - // Store the active terminal widget. - window->terminal = terminal; - - // Change window title - g_autofree gchar * title = v3270_get_session_title(terminal); - gtk_window_set_title(GTK_WINDOW(window), title); - - return FALSE; - } - - GtkWidget * pw3270_terminal_new(GtkWidget *widget) { - - g_return_val_if_fail(PW3270_IS_APPLICATION_WINDOW(widget),NULL); - - pw3270ApplicationWindow * window = PW3270_APPLICATION_WINDOW(widget); - GtkWidget * terminal = v3270_new(); - GtkWidget * label = gtk_label_new(v3270_get_session_name(terminal)); - - g_signal_connect(G_OBJECT(terminal), "focus-in-event", G_CALLBACK(on_terminal_focus), widget); - g_signal_connect(G_OBJECT(terminal), "session_changed", G_CALLBACK(session_changed),label); - - gtk_notebook_append_page(GTK_NOTEBOOK(window->notebook),terminal,label); - gtk_notebook_set_show_tabs(GTK_NOTEBOOK(window->notebook),gtk_notebook_get_n_pages(GTK_NOTEBOOK(window->notebook)) > 1); - - return terminal; - - } - diff --git a/src/widgets/window/testprogram/testprogram.c b/src/widgets/window/testprogram/testprogram.c deleted file mode 100644 index 662dde3..0000000 --- a/src/widgets/window/testprogram/testprogram.c +++ /dev/null @@ -1,106 +0,0 @@ -/* - * "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. 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 testprogram.c 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 - #include - #include - #include - #include - #include - - /*---[ Implement ]----------------------------------------------------------------------------------*/ - - static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) { - - GtkWidget * window = pw3270_application_window_new(app); - - // Create terminal widget - pw3270_terminal_new(window); - pw3270_terminal_new(window); - - // Setup and show main window - 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); - -} - -GtkWidget * pw3270_toolbar_new(void) { - - static const struct _item { - const gchar *icon; - const gchar *label; - } itens[] = { - - { - "gtk-connect", - "_Connect" - }, - - { - "gtk-disconnect", - "_Disconnect" - } - - }; - - GtkWidget * toolbar = gtk_toolbar_new(); - size_t item; - - for(item = 0; item < G_N_ELEMENTS(itens); item++) { - - GtkToolItem * button = gtk_tool_button_new(gtk_image_new_from_icon_name(itens[item].icon,GTK_ICON_SIZE_LARGE_TOOLBAR),itens[item].label); - gtk_tool_button_set_use_underline(GTK_TOOL_BUTTON(button),TRUE); - gtk_toolbar_insert(GTK_TOOLBAR(toolbar), button, -1); - - } - - return toolbar; -} - -int main (int argc, char **argv) { - - GtkApplication *app; - int status; - - app = gtk_application_new ("br.com.bb.pw3270",G_APPLICATION_FLAGS_NONE); - - g_signal_connect (app, "activate", G_CALLBACK(activate), NULL); - - status = g_application_run (G_APPLICATION (app), argc, argv); - g_object_unref (app); - - g_message("rc=%d",status); - - return 0; - -} - - diff --git a/src/widgets/window/window.cbp b/src/widgets/window/window.cbp deleted file mode 100644 index c00e20d..0000000 --- a/src/widgets/window/window.cbp +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - -- libgit2 0.21.2