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 | + |