From 7c811a36de4a8a12c4dd34c0612199b828b26483 Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Thu, 14 Feb 2019 16:13:47 -0200 Subject: [PATCH] Working on trace window. --- src/filetransfer/activitylist.c | 4 ++-- src/filetransfer/select.c | 2 +- src/filetransfer/settings.c | 2 +- src/filetransfer/v3270ft.c | 6 +++--- src/include/internals.h | 2 ++ src/include/v3270/filetransfer.h | 2 -- src/include/v3270/trace.h | 3 +++ src/trace/widget.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 8 files changed, 102 insertions(+), 13 deletions(-) diff --git a/src/filetransfer/activitylist.c b/src/filetransfer/activitylist.c index 36dff66..74a1250 100644 --- a/src/filetransfer/activitylist.c +++ b/src/filetransfer/activitylist.c @@ -270,7 +270,7 @@ { V3270FTActivityList * list = GTK_V3270_FT_ACTIVITY_LIST(widget); - gchar * filename = v3270ft_select_file( + gchar * filename = v3270_select_file( widget, _("Load queue from file"), _("Load"), GTK_FILE_CHOOSER_ACTION_OPEN, @@ -370,7 +370,7 @@ { V3270FTActivityList * list = GTK_V3270_FT_ACTIVITY_LIST(widget); - gchar * filename = v3270ft_select_file( + gchar * filename = v3270_select_file( widget, _("Save queue to file"), _("Save"), diff --git a/src/filetransfer/select.c b/src/filetransfer/select.c index 45988fa..b1f7d56 100644 --- a/src/filetransfer/select.c +++ b/src/filetransfer/select.c @@ -37,7 +37,7 @@ /*--[ Implement ]------------------------------------------------------------------------------------*/ -gchar * v3270ft_select_file(GtkWidget *dialog, const gchar *title, const gchar *button, GtkFileChooserAction action, const gchar *filename, G_GNUC_UNUSED const gchar *filter, ...) { +gchar * v3270_select_file(GtkWidget *dialog, const gchar *title, const gchar *button, GtkFileChooserAction action, const gchar *filename, G_GNUC_UNUSED const gchar *filter, ...) { gchar *rc = NULL; diff --git a/src/filetransfer/settings.c b/src/filetransfer/settings.c index 0cb9254..5e261f6 100644 --- a/src/filetransfer/settings.c +++ b/src/filetransfer/settings.c @@ -202,7 +202,7 @@ static gboolean spin_format(GtkSpinButton *spin, G_GNUC_UNUSED gpointer data) { static void open_select_file_dialog(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_pos, G_GNUC_UNUSED GdkEvent *event, GtkWidget *widget) { v3270_autofree gchar *filename = - v3270ft_select_file( + v3270_select_file( gtk_widget_get_toplevel(widget), _("Select local file"), _("Select"), diff --git a/src/filetransfer/v3270ft.c b/src/filetransfer/v3270ft.c index 6225c4e..1d62542 100644 --- a/src/filetransfer/v3270ft.c +++ b/src/filetransfer/v3270ft.c @@ -190,7 +190,7 @@ static void remove_file(G_GNUC_UNUSED GtkButton *button, v3270ft *dialog) { static void load_file(G_GNUC_UNUSED GtkButton *button, v3270ft *dialog) { - gchar * filename = v3270ft_select_file( + gchar * filename = v3270_select_file( GTK_WIDGET(dialog), _("Load queue from file"), _("Load"), GTK_FILE_CHOOSER_ACTION_OPEN, @@ -209,7 +209,7 @@ static void load_file(G_GNUC_UNUSED GtkButton *button, v3270ft *dialog) { static void save_file(G_GNUC_UNUSED GtkButton *button, v3270ft *dialog) { - gchar * filename = v3270ft_select_file( + gchar * filename = v3270_select_file( GTK_WIDGET(dialog), _("Save queue to file"), _("Save"), @@ -297,7 +297,7 @@ static void select_local_file(GtkButton G_GNUC_UNUSED(*button), v3270ft *dialog) static void icon_press(G_GNUC_UNUSED GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_pos, G_GNUC_UNUSED GdkEvent *event, v3270ft *dialog) { #endif // WIN32 - gchar *filename = v3270ft_select_file( + gchar *filename = v3270_select_file( GTK_WIDGET(dialog), _("Select local file"), _("Select"), diff --git a/src/include/internals.h b/src/include/internals.h index 708f00b..a8aa062 100644 --- a/src/include/internals.h +++ b/src/include/internals.h @@ -73,6 +73,8 @@ G_GNUC_INTERNAL void v3270_activity_list_save(GtkWidget *widget); G_GNUC_INTERNAL void v3270_activity_list_save_as(GtkWidget *widget); + G_GNUC_INTERNAL gchar * v3270_select_file(GtkWidget *dialog, const gchar *title, const gchar *button, GtkFileChooserAction action, const gchar *filename, const gchar *filter, ... ) G_GNUC_NULL_TERMINATED; + G_END_DECLS #endif // V3270_INTERNALS_H_INCLUDED diff --git a/src/include/v3270/filetransfer.h b/src/include/v3270/filetransfer.h index 68d864d..fc3fb1c 100644 --- a/src/include/v3270/filetransfer.h +++ b/src/include/v3270/filetransfer.h @@ -77,8 +77,6 @@ void v3270ft_append_file(GtkWidget *widget, const gchar *filename, gboolean text); guint v3270ft_append_selection(GtkWidget *widget, GtkSelectionData *data); - gchar * v3270ft_select_file(GtkWidget *dialog, const gchar *title, const gchar *button, GtkFileChooserAction action, const gchar *filename, const gchar *filter, ... ) G_GNUC_NULL_TERMINATED; - gint v3270ft_transfer(GtkWidget *dialog, H3270 *session); // FT Settings widget diff --git a/src/include/v3270/trace.h b/src/include/v3270/trace.h index 5c384b4..48c5b24 100644 --- a/src/include/v3270/trace.h +++ b/src/include/v3270/trace.h @@ -52,6 +52,9 @@ LIB3270_EXPORT void v3270_trace_vprintf(GtkWidget *widget, const char *fmt, va_list args); LIB3270_EXPORT void v3270_trace_printf(GtkWidget *widget, const char *fmt, ... ); + LIB3270_EXPORT void v3270_trace_save(GtkWidget *widget); + LIB3270_EXPORT void v3270_trace_select_file(GtkWidget *widget); + G_END_DECLS #endif // V3270_H_INCLUDED diff --git a/src/trace/widget.c b/src/trace/widget.c index a33550e..4941906 100644 --- a/src/trace/widget.c +++ b/src/trace/widget.c @@ -50,6 +50,7 @@ #include #include #include + #include #if defined( HAVE_SYSLOG ) #include @@ -74,6 +75,8 @@ GtkTextBuffer * text; ///< @brief Trace window contents. GtkEntry * entry; ///< @brief Command line entry. + gchar * filename; ///< @brief Selected file name. + guint log_handler; ///< @brief GTK Log Handler. /// @brief lib3270's saved trace handler. @@ -124,6 +127,12 @@ V3270Trace *trace = GTK_V3270_TRACE(object); + if(trace->filename) + { + g_free(trace->filename); + trace->filename = NULL; + } + if(trace->log_handler) { g_log_remove_handler(NULL,trace->log_handler); @@ -324,6 +333,9 @@ static void bg_append_text(struct _append_text *cfg) { + if(!GTK_IS_TEXT_BUFFER(cfg->widget->text)) + return; + GtkTextIter itr; gtk_text_buffer_get_end_iter(cfg->widget->text,&itr); @@ -379,9 +391,14 @@ g_signal_connect(G_OBJECT(widget), "activate", callback, data); } - static void menu_save_as(G_GNUC_UNUSED GtkWidget *button, V3270Trace *trace) + static void menu_save(G_GNUC_UNUSED GtkWidget *button, GtkWidget *trace) { - debug("%s",__FUNCTION__); + v3270_trace_save(trace); + } + + static void menu_save_as(G_GNUC_UNUSED GtkWidget *button, GtkWidget *trace) + { + v3270_trace_select_file(trace); } static void menu_close(G_GNUC_UNUSED GtkWidget *button, GtkWidget *window) @@ -396,7 +413,7 @@ GtkWidget * window = gtk_window_new(GTK_WINDOW_TOPLEVEL); GtkWidget * vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL,0); - V3270Trace * trace = v3270_trace_new(widget); + GtkWidget * trace = v3270_trace_new(widget); // Set window title and default size { @@ -406,7 +423,7 @@ if(url) title = g_strdup_printf("%s - %s - Trace", v3270_get_session_name(widget), url); else - title = g_strdup_printf("%s - Trace", v3270_get_session_name(widget), url); + title = g_strdup_printf("%s - Trace", v3270_get_session_name(widget)); gtk_window_set_title(GTK_WINDOW(window), title); gtk_window_set_default_size(GTK_WINDOW(widget),590,430); @@ -421,6 +438,7 @@ gtk_menu_item_set_submenu(GTK_MENU_ITEM(topitem), submenu); gtk_menu_shell_append(GTK_MENU_SHELL(menubar), topitem); + menu_item_new(submenu,_("_Save"),G_CALLBACK(menu_save),trace); menu_item_new(submenu,_("Save _As"),G_CALLBACK(menu_save_as),trace); menu_item_new(submenu,_("_Close"),G_CALLBACK(menu_close),window); @@ -435,3 +453,71 @@ return window; } + LIB3270_EXPORT void v3270_trace_save(GtkWidget *widget) + { + V3270Trace * trace = GTK_V3270_TRACE(widget); + + if(trace && trace->filename) + { + GError * error = NULL; + gchar * text; + GtkTextIter start; + GtkTextIter end; + + gtk_text_buffer_get_start_iter(trace->text,&start); + gtk_text_buffer_get_end_iter(trace->text,&end); + text = gtk_text_buffer_get_text(trace->text,&start,&end,FALSE); + + g_file_set_contents(trace->filename,text,-1,&error); + + g_free(text); + + if(error) + { + GtkWidget *popup = + gtk_message_dialog_new_with_markup( + GTK_WINDOW(gtk_widget_get_toplevel(widget)), + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_CLOSE, + _( "Can't save %s" ), + trace->filename + ); + + gtk_window_set_title(GTK_WINDOW(popup),_("Can't save file")); + + gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(popup),"%s",error->message); + g_error_free(error); + + gtk_dialog_run(GTK_DIALOG(popup)); + gtk_widget_destroy(popup); + + } + + } + + } + + LIB3270_EXPORT void v3270_trace_select_file(GtkWidget *widget) + { + V3270Trace * trace = GTK_V3270_TRACE(widget); + + gchar * filename = + v3270_select_file( + GTK_WIDGET(trace), + _("Save trace to file"), + _("Save"), + GTK_FILE_CHOOSER_ACTION_SAVE, + trace->filename, + N_("Text file"), "*.txt", + NULL + ); + + if(filename) { + g_free(trace->filename); + trace->filename = filename; + v3270_trace_save(widget); + } + + } + -- libgit2 0.21.2