/* * "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 { debug("%s: Parent window %s",__FUNCTION__,"is not a notebook"); // gtk_widget_destroy(terminal->trace); } return FALSE; } static void on_close_tab(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) { v3270_set_trace(terminal,FALSE); } static gboolean bg_append_trace(GtkWidget *terminal) { if(GTK_V3270(terminal)->trace) return FALSE; // Destroy trace window. GtkWidget * parent = gtk_widget_get_parent(terminal); if(GTK_IS_NOTEBOOK(parent)) { debug("%s: Parent window %s",__FUNCTION__,"is a notebook"); GtkWidget * trace = v3270_trace_new(terminal); GtkWidget * label = gtk_label_new(_("Trace")); GtkWidget * tab = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0); GtkWidget * button = gtk_button_new_from_icon_name("window-close-symbolic",GTK_ICON_SIZE_MENU); gtk_button_set_relief(GTK_BUTTON(button),GTK_RELIEF_NONE); gtk_widget_set_halign(button,GTK_ALIGN_END); gtk_box_pack_start(GTK_BOX(tab),label,FALSE,FALSE,0); gtk_box_pack_end(GTK_BOX(tab),button,FALSE,FALSE,0); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(on_close_tab), terminal); gtk_widget_show_all(trace); gtk_widget_show_all(tab); gtk_notebook_insert_page( GTK_NOTEBOOK(parent), trace, tab, gtk_notebook_page_num(GTK_NOTEBOOK(parent),terminal)+1 ); gtk_notebook_set_tab_detachable( GTK_NOTEBOOK(parent), trace, gtk_notebook_get_tab_detachable( GTK_NOTEBOOK(parent), terminal ) ); gtk_notebook_set_tab_reorderable( GTK_NOTEBOOK(parent), trace, gtk_notebook_get_tab_reorderable( GTK_NOTEBOOK(parent), terminal ) ); } else { debug("%s: Parent window %s",__FUNCTION__,"is not a notebook, creating trace window"); gtk_widget_show_all(v3270_trace_window_new(terminal,NULL)); } return FALSE; } void v3270_set_trace(GtkWidget *widget, gboolean trace) { g_return_if_fail(GTK_IS_V3270(widget)); if(trace) { debug("%s: trace is %s",__FUNCTION__,"ON"); g_idle_add((GSourceFunc) bg_append_trace, GTK_V3270(widget)); } else { debug("%s: trace is %s",__FUNCTION__,"OFF"); g_idle_add((GSourceFunc) bg_remove_trace, GTK_V3270(widget)); } }