From a63a0c5d1e6c3204788bc00ae8e48d6a3e215d3a Mon Sep 17 00:00:00 2001 From: perry.werneck@gmail.com Date: Tue, 3 Dec 2013 10:16:07 +0000 Subject: [PATCH] Ajustando diálogo de transferência de arquivos --- src/include/lib3270.h | 10 ++++++++++ src/lib3270/options.c | 6 ++++++ src/pw3270/filetransfer.c | 7 +++++-- src/pw3270/ft/ftprogress.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ src/pw3270/ft/v3270ft.h | 1 + 5 files changed, 66 insertions(+), 2 deletions(-) diff --git a/src/include/lib3270.h b/src/include/lib3270.h index efa3e55..d1473f7 100644 --- a/src/include/lib3270.h +++ b/src/include/lib3270.h @@ -1021,6 +1021,16 @@ LIB3270_EXPORT const LIB3270_OPTION_ENTRY * lib3270_get_option_list(void); + /** + * The host is TSO? + * + * @param hSession Session Handle + * + * @return Non zero if the host is TSO. + * + */ + LIB3270_EXPORT int lib3270_is_tso(H3270 *hSession); + #ifdef __cplusplus } diff --git a/src/lib3270/options.c b/src/lib3270/options.c index 1f1c5e9..6e5272d 100644 --- a/src/lib3270/options.c +++ b/src/lib3270/options.c @@ -118,3 +118,9 @@ LIB3270_EXPORT const LIB3270_OPTION_ENTRY * lib3270_get_option_list(void) { return options; } + +LIB3270_EXPORT int lib3270_is_tso(H3270 *hSession) +{ + CHECK_SESSION_HANDLE(hSession); + return (hSession->options & LIB3270_OPTION_TSO) != 0; +} diff --git a/src/pw3270/filetransfer.c b/src/pw3270/filetransfer.c index fbe614f..20fe07f 100644 --- a/src/pw3270/filetransfer.c +++ b/src/pw3270/filetransfer.c @@ -209,7 +209,7 @@ static void ft_dialog_save(GtkWidget *widget, const gchar *name) static void ft_complete(H3270FT *ft, unsigned long length,double kbytes_sec) { - v3270_ft_progress_update(GTK_WIDGET(ft->widget),length,length,kbytes_sec); + v3270_ft_progress_complete(GTK_WIDGET(ft->widget),length,kbytes_sec); } static void ft_message(struct _h3270ft *ft, const char *text) @@ -247,7 +247,7 @@ gint v3270_transfer_file(GtkWidget *widget, LIB3270_FT_OPTION options, const gch (options & LIB3270_FT_OPTION_RECEIVE) ? _( "Receiving file" ) : _( "Sending file" ), GTK_WINDOW(gtk_widget_get_toplevel(widget)), GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL,NULL ); + _( "_Cancel" ), GTK_RESPONSE_CANCEL,NULL ); // Create FT progress dialog @@ -300,6 +300,8 @@ void download_action(GtkAction *action, GtkWidget *widget) GtkWidget *dialog = v3270_ft_dialog_new(widget,LIB3270_FT_OPTION_RECEIVE|get_options_from_config(name)); + v3270_ft_dialog_set_tso(dialog,lib3270_is_tso(v3270_get_session(widget))); + ft_dialog_load(dialog,name); if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) @@ -343,6 +345,7 @@ void upload_action(GtkAction *action, GtkWidget *widget) GtkWidget *dialog = v3270_ft_dialog_new(widget,LIB3270_FT_OPTION_SEND|get_options_from_config(name)); + v3270_ft_dialog_set_tso(dialog,lib3270_is_tso(v3270_get_session(widget))); ft_dialog_load(dialog,name); if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) diff --git a/src/pw3270/ft/ftprogress.c b/src/pw3270/ft/ftprogress.c index bfe79fd..113437c 100644 --- a/src/pw3270/ft/ftprogress.c +++ b/src/pw3270/ft/ftprogress.c @@ -207,9 +207,53 @@ void v3270_ft_progress_update(GtkWidget *widget, unsigned long current, unsigned } if(total && current) + { + double remaining = ((double) (total - current))/1024.0; + + if(remaining > 0 && kbytes_sec > 0) + { + char buffer[40]; + double seconds = ((double) remaining) / kbytes_sec; + time_t eta = time(0) + ((time_t) seconds); + strftime(buffer, 39, "%H:%M:%S", localtime(&eta)); + gtk_label_set_text(obj->value[VALUE_ETA],buffer); + } + else + { + gtk_label_set_text(obj->value[VALUE_ETA],""); + } + gtk_progress_bar_set_fraction(obj->progress,((gdouble) current) / ((gdouble) total)); + } else + { gtk_progress_bar_pulse(obj->progress); + gtk_label_set_text(obj->value[VALUE_ETA],""); + } + +} + +void v3270_ft_progress_complete(GtkWidget *widget,unsigned long length, double kbytes_sec) +{ + g_return_if_fail(GTK_IS_V3270FTProgress(widget)); + + v3270FTProgress *obj = GTK_V3270FTProcess(widget); + + if(length) + { + gchar *str = g_strdup_printf("%ld",length); + gtk_label_set_text(obj->value[VALUE_CURRENT],str); + g_free(str); + } + + if(kbytes_sec) + { + gchar *str = g_strdup_printf("%ld KB/s",(unsigned long) kbytes_sec); + gtk_label_set_text(obj->value[VALUE_SPEED],str); + g_free(str); + } + + gtk_label_set_text(obj->value[VALUE_ETA],""); } diff --git a/src/pw3270/ft/v3270ft.h b/src/pw3270/ft/v3270ft.h index 0f33ed2..ed5040b 100644 --- a/src/pw3270/ft/v3270ft.h +++ b/src/pw3270/ft/v3270ft.h @@ -96,6 +96,7 @@ LIB3270_EXPORT void v3270_ft_progress_set_message(GtkWidget *widget, const gchar *msg); LIB3270_EXPORT void v3270_ft_progress_set_host_filename(GtkWidget *widget, const gchar *name); LIB3270_EXPORT void v3270_ft_progress_set_local_filename(GtkWidget *widget, const gchar *name); + LIB3270_EXPORT void v3270_ft_progress_complete(GtkWidget *widget,unsigned long length,double kbytes_sec); -- libgit2 0.21.2