Commit 7c811a36de4a8a12c4dd34c0612199b828b26483

Authored by Perry Werneck
1 parent 81955deb
Exists in master and in 1 other branch develop

Working on trace window.

src/filetransfer/activitylist.c
@@ -270,7 +270,7 @@ @@ -270,7 +270,7 @@
270 { 270 {
271 V3270FTActivityList * list = GTK_V3270_FT_ACTIVITY_LIST(widget); 271 V3270FTActivityList * list = GTK_V3270_FT_ACTIVITY_LIST(widget);
272 272
273 - gchar * filename = v3270ft_select_file( 273 + gchar * filename = v3270_select_file(
274 widget, 274 widget,
275 _("Load queue from file"), 275 _("Load queue from file"),
276 _("Load"), GTK_FILE_CHOOSER_ACTION_OPEN, 276 _("Load"), GTK_FILE_CHOOSER_ACTION_OPEN,
@@ -370,7 +370,7 @@ @@ -370,7 +370,7 @@
370 { 370 {
371 V3270FTActivityList * list = GTK_V3270_FT_ACTIVITY_LIST(widget); 371 V3270FTActivityList * list = GTK_V3270_FT_ACTIVITY_LIST(widget);
372 372
373 - gchar * filename = v3270ft_select_file( 373 + gchar * filename = v3270_select_file(
374 widget, 374 widget,
375 _("Save queue to file"), 375 _("Save queue to file"),
376 _("Save"), 376 _("Save"),
src/filetransfer/select.c
@@ -37,7 +37,7 @@ @@ -37,7 +37,7 @@
37 37
38 /*--[ Implement ]------------------------------------------------------------------------------------*/ 38 /*--[ Implement ]------------------------------------------------------------------------------------*/
39 39
40 -gchar * v3270ft_select_file(GtkWidget *dialog, const gchar *title, const gchar *button, GtkFileChooserAction action, const gchar *filename, G_GNUC_UNUSED const gchar *filter, ...) { 40 +gchar * v3270_select_file(GtkWidget *dialog, const gchar *title, const gchar *button, GtkFileChooserAction action, const gchar *filename, G_GNUC_UNUSED const gchar *filter, ...) {
41 41
42 gchar *rc = NULL; 42 gchar *rc = NULL;
43 43
src/filetransfer/settings.c
@@ -202,7 +202,7 @@ static gboolean spin_format(GtkSpinButton *spin, G_GNUC_UNUSED gpointer data) { @@ -202,7 +202,7 @@ static gboolean spin_format(GtkSpinButton *spin, G_GNUC_UNUSED gpointer data) {
202 static void open_select_file_dialog(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_pos, G_GNUC_UNUSED GdkEvent *event, GtkWidget *widget) 202 static void open_select_file_dialog(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_pos, G_GNUC_UNUSED GdkEvent *event, GtkWidget *widget)
203 { 203 {
204 v3270_autofree gchar *filename = 204 v3270_autofree gchar *filename =
205 - v3270ft_select_file( 205 + v3270_select_file(
206 gtk_widget_get_toplevel(widget), 206 gtk_widget_get_toplevel(widget),
207 _("Select local file"), 207 _("Select local file"),
208 _("Select"), 208 _("Select"),
src/filetransfer/v3270ft.c
@@ -190,7 +190,7 @@ static void remove_file(G_GNUC_UNUSED GtkButton *button, v3270ft *dialog) { @@ -190,7 +190,7 @@ static void remove_file(G_GNUC_UNUSED GtkButton *button, v3270ft *dialog) {
190 190
191 static void load_file(G_GNUC_UNUSED GtkButton *button, v3270ft *dialog) { 191 static void load_file(G_GNUC_UNUSED GtkButton *button, v3270ft *dialog) {
192 192
193 - gchar * filename = v3270ft_select_file( 193 + gchar * filename = v3270_select_file(
194 GTK_WIDGET(dialog), 194 GTK_WIDGET(dialog),
195 _("Load queue from file"), 195 _("Load queue from file"),
196 _("Load"), GTK_FILE_CHOOSER_ACTION_OPEN, 196 _("Load"), GTK_FILE_CHOOSER_ACTION_OPEN,
@@ -209,7 +209,7 @@ static void load_file(G_GNUC_UNUSED GtkButton *button, v3270ft *dialog) { @@ -209,7 +209,7 @@ static void load_file(G_GNUC_UNUSED GtkButton *button, v3270ft *dialog) {
209 209
210 static void save_file(G_GNUC_UNUSED GtkButton *button, v3270ft *dialog) { 210 static void save_file(G_GNUC_UNUSED GtkButton *button, v3270ft *dialog) {
211 211
212 - gchar * filename = v3270ft_select_file( 212 + gchar * filename = v3270_select_file(
213 GTK_WIDGET(dialog), 213 GTK_WIDGET(dialog),
214 _("Save queue to file"), 214 _("Save queue to file"),
215 _("Save"), 215 _("Save"),
@@ -297,7 +297,7 @@ static void select_local_file(GtkButton G_GNUC_UNUSED(*button), v3270ft *dialog) @@ -297,7 +297,7 @@ static void select_local_file(GtkButton G_GNUC_UNUSED(*button), v3270ft *dialog)
297 static void icon_press(G_GNUC_UNUSED GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_pos, G_GNUC_UNUSED GdkEvent *event, v3270ft *dialog) { 297 static void icon_press(G_GNUC_UNUSED GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_pos, G_GNUC_UNUSED GdkEvent *event, v3270ft *dialog) {
298 #endif // WIN32 298 #endif // WIN32
299 299
300 - gchar *filename = v3270ft_select_file( 300 + gchar *filename = v3270_select_file(
301 GTK_WIDGET(dialog), 301 GTK_WIDGET(dialog),
302 _("Select local file"), 302 _("Select local file"),
303 _("Select"), 303 _("Select"),
src/include/internals.h
@@ -73,6 +73,8 @@ @@ -73,6 +73,8 @@
73 G_GNUC_INTERNAL void v3270_activity_list_save(GtkWidget *widget); 73 G_GNUC_INTERNAL void v3270_activity_list_save(GtkWidget *widget);
74 G_GNUC_INTERNAL void v3270_activity_list_save_as(GtkWidget *widget); 74 G_GNUC_INTERNAL void v3270_activity_list_save_as(GtkWidget *widget);
75 75
  76 + 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;
  77 +
76 G_END_DECLS 78 G_END_DECLS
77 79
78 #endif // V3270_INTERNALS_H_INCLUDED 80 #endif // V3270_INTERNALS_H_INCLUDED
src/include/v3270/filetransfer.h
@@ -77,8 +77,6 @@ @@ -77,8 +77,6 @@
77 void v3270ft_append_file(GtkWidget *widget, const gchar *filename, gboolean text); 77 void v3270ft_append_file(GtkWidget *widget, const gchar *filename, gboolean text);
78 guint v3270ft_append_selection(GtkWidget *widget, GtkSelectionData *data); 78 guint v3270ft_append_selection(GtkWidget *widget, GtkSelectionData *data);
79 79
80 - gchar * v3270ft_select_file(GtkWidget *dialog, const gchar *title, const gchar *button, GtkFileChooserAction action, const gchar *filename, const gchar *filter, ... ) G_GNUC_NULL_TERMINATED;  
81 -  
82 gint v3270ft_transfer(GtkWidget *dialog, H3270 *session); 80 gint v3270ft_transfer(GtkWidget *dialog, H3270 *session);
83 81
84 // FT Settings widget 82 // FT Settings widget
src/include/v3270/trace.h
@@ -52,6 +52,9 @@ @@ -52,6 +52,9 @@
52 LIB3270_EXPORT void v3270_trace_vprintf(GtkWidget *widget, const char *fmt, va_list args); 52 LIB3270_EXPORT void v3270_trace_vprintf(GtkWidget *widget, const char *fmt, va_list args);
53 LIB3270_EXPORT void v3270_trace_printf(GtkWidget *widget, const char *fmt, ... ); 53 LIB3270_EXPORT void v3270_trace_printf(GtkWidget *widget, const char *fmt, ... );
54 54
  55 + LIB3270_EXPORT void v3270_trace_save(GtkWidget *widget);
  56 + LIB3270_EXPORT void v3270_trace_select_file(GtkWidget *widget);
  57 +
55 G_END_DECLS 58 G_END_DECLS
56 59
57 #endif // V3270_H_INCLUDED 60 #endif // V3270_H_INCLUDED
src/trace/widget.c
@@ -50,6 +50,7 @@ @@ -50,6 +50,7 @@
50 #include <lib3270/trace.h> 50 #include <lib3270/trace.h>
51 #include <lib3270/properties.h> 51 #include <lib3270/properties.h>
52 #include <v3270/trace.h> 52 #include <v3270/trace.h>
  53 + #include <internals.h>
53 54
54 #if defined( HAVE_SYSLOG ) 55 #if defined( HAVE_SYSLOG )
55 #include <syslog.h> 56 #include <syslog.h>
@@ -74,6 +75,8 @@ @@ -74,6 +75,8 @@
74 GtkTextBuffer * text; ///< @brief Trace window contents. 75 GtkTextBuffer * text; ///< @brief Trace window contents.
75 GtkEntry * entry; ///< @brief Command line entry. 76 GtkEntry * entry; ///< @brief Command line entry.
76 77
  78 + gchar * filename; ///< @brief Selected file name.
  79 +
77 guint log_handler; ///< @brief GTK Log Handler. 80 guint log_handler; ///< @brief GTK Log Handler.
78 81
79 /// @brief lib3270's saved trace handler. 82 /// @brief lib3270's saved trace handler.
@@ -124,6 +127,12 @@ @@ -124,6 +127,12 @@
124 127
125 V3270Trace *trace = GTK_V3270_TRACE(object); 128 V3270Trace *trace = GTK_V3270_TRACE(object);
126 129
  130 + if(trace->filename)
  131 + {
  132 + g_free(trace->filename);
  133 + trace->filename = NULL;
  134 + }
  135 +
127 if(trace->log_handler) 136 if(trace->log_handler)
128 { 137 {
129 g_log_remove_handler(NULL,trace->log_handler); 138 g_log_remove_handler(NULL,trace->log_handler);
@@ -324,6 +333,9 @@ @@ -324,6 +333,9 @@
324 333
325 static void bg_append_text(struct _append_text *cfg) 334 static void bg_append_text(struct _append_text *cfg)
326 { 335 {
  336 + if(!GTK_IS_TEXT_BUFFER(cfg->widget->text))
  337 + return;
  338 +
327 GtkTextIter itr; 339 GtkTextIter itr;
328 gtk_text_buffer_get_end_iter(cfg->widget->text,&itr); 340 gtk_text_buffer_get_end_iter(cfg->widget->text,&itr);
329 341
@@ -379,9 +391,14 @@ @@ -379,9 +391,14 @@
379 g_signal_connect(G_OBJECT(widget), "activate", callback, data); 391 g_signal_connect(G_OBJECT(widget), "activate", callback, data);
380 } 392 }
381 393
382 - static void menu_save_as(G_GNUC_UNUSED GtkWidget *button, V3270Trace *trace) 394 + static void menu_save(G_GNUC_UNUSED GtkWidget *button, GtkWidget *trace)
383 { 395 {
384 - debug("%s",__FUNCTION__); 396 + v3270_trace_save(trace);
  397 + }
  398 +
  399 + static void menu_save_as(G_GNUC_UNUSED GtkWidget *button, GtkWidget *trace)
  400 + {
  401 + v3270_trace_select_file(trace);
385 } 402 }
386 403
387 static void menu_close(G_GNUC_UNUSED GtkWidget *button, GtkWidget *window) 404 static void menu_close(G_GNUC_UNUSED GtkWidget *button, GtkWidget *window)
@@ -396,7 +413,7 @@ @@ -396,7 +413,7 @@
396 413
397 GtkWidget * window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 414 GtkWidget * window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
398 GtkWidget * vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL,0); 415 GtkWidget * vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL,0);
399 - V3270Trace * trace = v3270_trace_new(widget); 416 + GtkWidget * trace = v3270_trace_new(widget);
400 417
401 // Set window title and default size 418 // Set window title and default size
402 { 419 {
@@ -406,7 +423,7 @@ @@ -406,7 +423,7 @@
406 if(url) 423 if(url)
407 title = g_strdup_printf("%s - %s - Trace", v3270_get_session_name(widget), url); 424 title = g_strdup_printf("%s - %s - Trace", v3270_get_session_name(widget), url);
408 else 425 else
409 - title = g_strdup_printf("%s - Trace", v3270_get_session_name(widget), url); 426 + title = g_strdup_printf("%s - Trace", v3270_get_session_name(widget));
410 427
411 gtk_window_set_title(GTK_WINDOW(window), title); 428 gtk_window_set_title(GTK_WINDOW(window), title);
412 gtk_window_set_default_size(GTK_WINDOW(widget),590,430); 429 gtk_window_set_default_size(GTK_WINDOW(widget),590,430);
@@ -421,6 +438,7 @@ @@ -421,6 +438,7 @@
421 gtk_menu_item_set_submenu(GTK_MENU_ITEM(topitem), submenu); 438 gtk_menu_item_set_submenu(GTK_MENU_ITEM(topitem), submenu);
422 gtk_menu_shell_append(GTK_MENU_SHELL(menubar), topitem); 439 gtk_menu_shell_append(GTK_MENU_SHELL(menubar), topitem);
423 440
  441 + menu_item_new(submenu,_("_Save"),G_CALLBACK(menu_save),trace);
424 menu_item_new(submenu,_("Save _As"),G_CALLBACK(menu_save_as),trace); 442 menu_item_new(submenu,_("Save _As"),G_CALLBACK(menu_save_as),trace);
425 menu_item_new(submenu,_("_Close"),G_CALLBACK(menu_close),window); 443 menu_item_new(submenu,_("_Close"),G_CALLBACK(menu_close),window);
426 444
@@ -435,3 +453,71 @@ @@ -435,3 +453,71 @@
435 return window; 453 return window;
436 } 454 }
437 455
  456 + LIB3270_EXPORT void v3270_trace_save(GtkWidget *widget)
  457 + {
  458 + V3270Trace * trace = GTK_V3270_TRACE(widget);
  459 +
  460 + if(trace && trace->filename)
  461 + {
  462 + GError * error = NULL;
  463 + gchar * text;
  464 + GtkTextIter start;
  465 + GtkTextIter end;
  466 +
  467 + gtk_text_buffer_get_start_iter(trace->text,&start);
  468 + gtk_text_buffer_get_end_iter(trace->text,&end);
  469 + text = gtk_text_buffer_get_text(trace->text,&start,&end,FALSE);
  470 +
  471 + g_file_set_contents(trace->filename,text,-1,&error);
  472 +
  473 + g_free(text);
  474 +
  475 + if(error)
  476 + {
  477 + GtkWidget *popup =
  478 + gtk_message_dialog_new_with_markup(
  479 + GTK_WINDOW(gtk_widget_get_toplevel(widget)),
  480 + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
  481 + GTK_MESSAGE_ERROR,
  482 + GTK_BUTTONS_CLOSE,
  483 + _( "Can't save %s" ),
  484 + trace->filename
  485 + );
  486 +
  487 + gtk_window_set_title(GTK_WINDOW(popup),_("Can't save file"));
  488 +
  489 + gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(popup),"%s",error->message);
  490 + g_error_free(error);
  491 +
  492 + gtk_dialog_run(GTK_DIALOG(popup));
  493 + gtk_widget_destroy(popup);
  494 +
  495 + }
  496 +
  497 + }
  498 +
  499 + }
  500 +
  501 + LIB3270_EXPORT void v3270_trace_select_file(GtkWidget *widget)
  502 + {
  503 + V3270Trace * trace = GTK_V3270_TRACE(widget);
  504 +
  505 + gchar * filename =
  506 + v3270_select_file(
  507 + GTK_WIDGET(trace),
  508 + _("Save trace to file"),
  509 + _("Save"),
  510 + GTK_FILE_CHOOSER_ACTION_SAVE,
  511 + trace->filename,
  512 + N_("Text file"), "*.txt",
  513 + NULL
  514 + );
  515 +
  516 + if(filename) {
  517 + g_free(trace->filename);
  518 + trace->filename = filename;
  519 + v3270_trace_save(widget);
  520 + }
  521 +
  522 + }
  523 +