Commit 7c811a36de4a8a12c4dd34c0612199b828b26483
1 parent
81955deb
Exists in
master
and in
1 other branch
Working on trace window.
Showing
8 changed files
with
102 additions
and
13 deletions
Show diff stats
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 | + |