From be2f90f93fb52fb0befd52ac1be383d544e146a9 Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Thu, 14 Nov 2019 14:42:12 -0300 Subject: [PATCH] Implementing trace property. --- src/include/terminal.h | 1 + src/terminal/properties/get.c | 4 ++++ src/terminal/properties/init.c | 13 +++++++++++++ src/terminal/properties/private.h | 3 ++- src/terminal/properties/set.c | 4 ++++ src/trace/property.c | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/trace/trace.c | 8 -------- v3270.cbp | 3 +++ 8 files changed, 139 insertions(+), 9 deletions(-) create mode 100644 src/trace/property.c diff --git a/src/include/terminal.h b/src/include/terminal.h index 2aa6b04..976e928 100644 --- a/src/include/terminal.h +++ b/src/include/terminal.h @@ -55,6 +55,7 @@ G_BEGIN_DECLS GParamSpec * remap_file; GParamSpec * dynamic_spacing; GParamSpec * lu_names; + GParamSpec * trace; struct { diff --git a/src/terminal/properties/get.c b/src/terminal/properties/get.c index a5b55b1..d33e65d 100644 --- a/src/terminal/properties/get.c +++ b/src/terminal/properties/get.c @@ -112,6 +112,10 @@ g_value_take_string(value,v3270_get_lunames(GTK_WIDGET(object))); break; + case V3270_PROPERTY_TRACE: + g_value_set_boolean(value,v3270_get_trace(GTK_WIDGET(object))); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); diff --git a/src/terminal/properties/init.c b/src/terminal/properties/init.c index 8d60f6e..d425692 100644 --- a/src/terminal/properties/init.c +++ b/src/terminal/properties/init.c @@ -179,6 +179,19 @@ klass->properties.lu_names ); + // Trace + klass->properties.trace = g_param_spec_boolean( + "trace", + "trace", + _( "Trace window" ), + FALSE, + G_PARAM_READABLE|G_PARAM_WRITABLE); + + g_object_class_install_property( + gobject_class, + V3270_PROPERTY_TRACE, + klass->properties.trace + ); // // Create dynamic properties diff --git a/src/terminal/properties/private.h b/src/terminal/properties/private.h index 708f2c4..6d63c73 100644 --- a/src/terminal/properties/private.h +++ b/src/terminal/properties/private.h @@ -55,9 +55,10 @@ V3270_PROPERTY_REMAP_FILE = 6, ///< @brief Path of the remap file. V3270_PROPERTY_DYNAMIC_SPACING = 7, ///< @brief Toggle dynamic font spacing. V3270_PROPERTY_LU_NAMES = 8, ///< @brief The LU names list. + V3270_PROPERTY_TRACE = 9, ///< @brief Is the trace widget active? - V3270_PROPERTY_DYNAMIC = 9 ///< @brief Id of the first LIB3270 internal property. + V3270_PROPERTY_DYNAMIC = 10 ///< @brief Id of the first LIB3270 internal property. }; G_GNUC_INTERNAL void v3270_get_property(GObject *object,guint prop_id, GValue *value, GParamSpec *pspec); diff --git a/src/terminal/properties/set.c b/src/terminal/properties/set.c index 16bf1a8..5bb9896 100644 --- a/src/terminal/properties/set.c +++ b/src/terminal/properties/set.c @@ -130,6 +130,10 @@ v3270_set_lunames(GTK_WIDGET(object),g_value_get_string(value)); break; + case V3270_PROPERTY_TRACE: + v3270_set_trace(GTK_WIDGET(object), g_value_get_boolean(value)); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); diff --git a/src/trace/property.c b/src/trace/property.c new file mode 100644 index 0000000..82b3948 --- /dev/null +++ b/src/trace/property.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 trace.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) + * + */ + +/** + * SECTION:V3270Trace + * @Short_description: A trace monitor widget. + * @Title: V3270Trace + * + * The #V3270Trace shows a text area with the lib3270 trace output. + * + */ + + #include "private.h" + + #include + #include + #include + +/*--[ Implement ]------------------------------------------------------------------------------------*/ + + gboolean v3270_get_trace(GtkWidget *terminal) + { + return GTK_V3270(terminal)->trace != NULL; + } + + static gboolean bg_remove_trace(v3270 *terminal) + { + if(!terminal->trace) + return FALSE; + + // Destroy trace window. + GtkWidget * parent = gtk_widget_get_parent(terminal->trace); + + if(GTK_IS_NOTEBOOK(parent)) + { + debug("%s: Parent window %s",__FUNCTION__,"is a notebook"); + gtk_notebook_remove_page( + GTK_NOTEBOOK(parent), + gtk_notebook_page_num(GTK_NOTEBOOK(parent),terminal->trace) + ); + } + else if(GTK_IS_WINDOW(parent)) + { + debug("%s: Parent window %s",__FUNCTION__,"is a window"); + gtk_widget_destroy(parent); + } + else if(GTK_IS_CONTAINER(parent)) + { + debug("%s: Parent window %s",__FUNCTION__,"is a container"); + gtk_container_remove(GTK_CONTAINER(parent),terminal->trace); + + } + else + { + g_warning("Can't remove trace window from parent widget"); + } + + + return FALSE; + } + + void v3270_set_trace(GtkWidget *widget, gboolean trace) + { + g_return_if_fail(GTK_IS_V3270(widget)); + + v3270 * terminal = GTK_V3270(widget); + + if(trace) + { + debug("%s: trace is %s",__FUNCTION__,"ON"); + + if(terminal->trace) + return; + + // Create trace window + + } + else + { + debug("%s: trace is %s",__FUNCTION__,"OFF"); + g_idle_add((GSourceFunc) bg_remove_trace, GTK_V3270(widget)); + + } + + + } diff --git a/src/trace/trace.c b/src/trace/trace.c index 62941c8..7c970b7 100644 --- a/src/trace/trace.c +++ b/src/trace/trace.c @@ -490,12 +490,4 @@ return GTK_V3270_TRACE(widget)->scroll; } - gboolean v3270_get_trace(GtkWidget *terminal) - { - return GTK_V3270(terminal)->trace != NULL; - } - void v3270_set_trace(GtkWidget *terminal, gboolean trace) - { - - } diff --git a/v3270.cbp b/v3270.cbp index e599e2f..147af83 100644 --- a/v3270.cbp +++ b/v3270.cbp @@ -307,6 +307,9 @@