Commit 7b95d4de2c384f45b925bd18308982bea489f2b9
1 parent
833b2fc6
Exists in
master
and in
5 other branches
Reimplementando diálogos de transferência de arquivos
Showing
3 changed files
with
70 additions
and
49 deletions
Show diff stats
src/include/pw3270/v3270.h
| ... | ... | @@ -35,6 +35,7 @@ |
| 35 | 35 | #include <lib3270/config.h> |
| 36 | 36 | #include <lib3270.h> |
| 37 | 37 | #include <lib3270/popup.h> |
| 38 | + #include <lib3270/filetransfer.h> | |
| 38 | 39 | |
| 39 | 40 | #define V3270_H_INCLUDED 1 |
| 40 | 41 | |
| ... | ... | @@ -226,6 +227,7 @@ |
| 226 | 227 | LIB3270_EXPORT const gchar * v3270_get_ssl_status_message(GtkWidget *widget); |
| 227 | 228 | LIB3270_EXPORT void v3270_popup_security_dialog(GtkWidget *widget); |
| 228 | 229 | |
| 230 | + LIB3270_EXPORT gint v3270_transfer_file(GtkWidget *widget, LIB3270_FT_OPTION options, const gchar *local, const gchar *remote, int lrecl, int blksize, int primspace, int secspace, int dft); | |
| 229 | 231 | |
| 230 | 232 | G_END_DECLS |
| 231 | 233 | ... | ... |
src/pw3270/filetransfer.c
| ... | ... | @@ -134,7 +134,27 @@ static void ft_dialog_load(GtkWidget *widget, const gchar *name) |
| 134 | 134 | |
| 135 | 135 | static void ft_dialog_save(GtkWidget *widget, const gchar *name) |
| 136 | 136 | { |
| 137 | - const gchar * filename = v3270_ft_dialog_get_local_filename(widget); | |
| 137 | + LIB3270_FT_OPTION opt = v3270_ft_dialog_get_options(widget); | |
| 138 | + const gchar * filename = v3270_ft_dialog_get_local_filename(widget); | |
| 139 | + int f; | |
| 140 | + | |
| 141 | + for(f=0;f<G_N_ELEMENTS(ftoptions);f++) | |
| 142 | + { | |
| 143 | + trace("%s=%s",ftoptions[f].name,((opt & ftoptions[f].val) != 0) ? "ON" : "OFF"); | |
| 144 | + set_boolean_to_config(name, ftoptions[f].name, ((opt & ftoptions[f].val) != 0)); | |
| 145 | + } | |
| 146 | + | |
| 147 | + for(f=0;f<G_N_ELEMENTS(recfm);f++) | |
| 148 | + { | |
| 149 | + if((opt & LIB3270_FT_RECORD_FORMAT_MASK) == recfm[f].val) | |
| 150 | + set_string_to_config(name,"recfm","%s",recfm[f].name); | |
| 151 | + } | |
| 152 | + | |
| 153 | + for(f=0;f<G_N_ELEMENTS(units);f++) | |
| 154 | + { | |
| 155 | + if( (opt & LIB3270_FT_ALLOCATION_UNITS_MASK) == units[f].val) | |
| 156 | + set_string_to_config(name,"units","%s",units[f].name); | |
| 157 | + } | |
| 138 | 158 | |
| 139 | 159 | set_integer_to_config(name,"dft",v3270_ft_dialog_get_dft_buffer_size(widget)); |
| 140 | 160 | set_integer_to_config(name,"reclen",v3270_ft_dialog_get_record_length(widget)); |
| ... | ... | @@ -214,31 +234,21 @@ static void ft_state_changed(H3270FT *ft, LIB3270_FT_STATE state) |
| 214 | 234 | { |
| 215 | 235 | } |
| 216 | 236 | |
| 217 | -static GtkWidget * start_file_transfer(GtkAction *action, GtkWidget *widget, GtkWidget *info) | |
| 237 | +gint v3270_transfer_file(GtkWidget *widget, LIB3270_FT_OPTION options, const gchar *local, const gchar *remote, int lrecl, int blksize, int primspace, int secspace, int dft) | |
| 218 | 238 | { |
| 219 | - GtkWidget * dialog = gtk_dialog_new_with_buttons( _( "File transfer" ), | |
| 220 | - GTK_WINDOW(gtk_widget_get_toplevel(widget)), | |
| 221 | - GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, | |
| 222 | - GTK_STOCK_CANCEL,GTK_RESPONSE_CLOSE,NULL ); | |
| 223 | - const gchar * local = v3270_ft_dialog_get_local_filename(info); | |
| 224 | - const gchar * remote = v3270_ft_dialog_get_host_filename(info); | |
| 225 | - | |
| 226 | - gtk_widget_set_visible(info,FALSE); | |
| 227 | - | |
| 228 | - H3270FT * ft = lib3270_ft_new( | |
| 229 | - v3270_get_session(widget), | |
| 230 | - v3270_ft_dialog_get_options(info), | |
| 231 | - local, | |
| 232 | - remote, | |
| 233 | - v3270_ft_dialog_get_record_length(info), | |
| 234 | - v3270_ft_dialog_get_block_size(info), | |
| 235 | - v3270_ft_dialog_get_primary_space(info), | |
| 236 | - v3270_ft_dialog_get_secondary_space(info), | |
| 237 | - v3270_ft_dialog_get_dft_buffer_size(info) | |
| 238 | - ); | |
| 239 | + g_return_val_if_fail(GTK_IS_V3270(widget),NULL); | |
| 240 | + | |
| 241 | + H3270FT * ft = lib3270_ft_new(v3270_get_session(widget),options,local,remote,lrecl,blksize,primspace,secspace,dft); | |
| 239 | 242 | |
| 240 | 243 | if(!ft) |
| 241 | - return NULL; | |
| 244 | + return -1; | |
| 245 | + | |
| 246 | + GtkWidget * dialog = gtk_dialog_new_with_buttons( | |
| 247 | + (options & LIB3270_FT_OPTION_RECEIVE) ? _( "Receiving file" ) : _( "Sending file" ), | |
| 248 | + GTK_WINDOW(gtk_widget_get_toplevel(widget)), | |
| 249 | + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, | |
| 250 | + GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL,NULL ); | |
| 251 | + | |
| 242 | 252 | |
| 243 | 253 | // Create FT progress dialog |
| 244 | 254 | GtkWidget * progress = v3270_ft_progress_new(); |
| ... | ... | @@ -258,7 +268,15 @@ static GtkWidget * start_file_transfer(GtkAction *action, GtkWidget *widget, Gtk |
| 258 | 268 | gtk_widget_show_all(progress); |
| 259 | 269 | gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),GTK_WIDGET(progress),FALSE,TRUE,2); |
| 260 | 270 | |
| 261 | - return dialog; | |
| 271 | + gtk_widget_show_all(dialog); | |
| 272 | + lib3270_ft_start(v3270_get_session(widget)); | |
| 273 | + int rc = gtk_dialog_run(GTK_DIALOG(dialog)); | |
| 274 | + lib3270_ft_destroy(v3270_get_session(widget)); | |
| 275 | + | |
| 276 | + gtk_widget_destroy(dialog); | |
| 277 | + | |
| 278 | + return rc; | |
| 279 | + | |
| 262 | 280 | } |
| 263 | 281 | |
| 264 | 282 | void download_action(GtkAction *action, GtkWidget *widget) |
| ... | ... | @@ -281,28 +299,27 @@ void download_action(GtkAction *action, GtkWidget *widget) |
| 281 | 299 | } |
| 282 | 300 | |
| 283 | 301 | GtkWidget *dialog = v3270_ft_dialog_new(widget,LIB3270_FT_OPTION_RECEIVE|get_options_from_config(name)); |
| 284 | - GtkWidget *progress = NULL; | |
| 285 | 302 | |
| 286 | 303 | ft_dialog_load(dialog,name); |
| 287 | 304 | |
| 288 | 305 | if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) |
| 289 | 306 | { |
| 290 | 307 | ft_dialog_save(dialog,name); |
| 291 | - progress = start_file_transfer(action, widget, dialog); | |
| 308 | + gtk_widget_hide(dialog); | |
| 309 | + | |
| 310 | + v3270_transfer_file( widget, | |
| 311 | + v3270_ft_dialog_get_options(dialog), | |
| 312 | + v3270_ft_dialog_get_local_filename(dialog), | |
| 313 | + v3270_ft_dialog_get_host_filename(dialog), | |
| 314 | + v3270_ft_dialog_get_record_length(dialog), | |
| 315 | + v3270_ft_dialog_get_block_size(dialog), | |
| 316 | + v3270_ft_dialog_get_primary_space(dialog), | |
| 317 | + v3270_ft_dialog_get_secondary_space(dialog), | |
| 318 | + v3270_ft_dialog_get_dft_buffer_size(dialog)); | |
| 292 | 319 | } |
| 293 | 320 | |
| 294 | 321 | gtk_widget_destroy(dialog); |
| 295 | 322 | |
| 296 | - if(progress) | |
| 297 | - { | |
| 298 | - gtk_widget_show(progress); | |
| 299 | - lib3270_ft_start(v3270_get_session(widget)); | |
| 300 | - gtk_dialog_run(GTK_DIALOG(progress)); | |
| 301 | - lib3270_ft_destroy(v3270_get_session(widget)); | |
| 302 | - | |
| 303 | - gtk_widget_destroy(progress); | |
| 304 | - } | |
| 305 | - | |
| 306 | 323 | } |
| 307 | 324 | |
| 308 | 325 | void upload_action(GtkAction *action, GtkWidget *widget) |
| ... | ... | @@ -325,29 +342,27 @@ void upload_action(GtkAction *action, GtkWidget *widget) |
| 325 | 342 | } |
| 326 | 343 | |
| 327 | 344 | GtkWidget *dialog = v3270_ft_dialog_new(widget,LIB3270_FT_OPTION_SEND|get_options_from_config(name)); |
| 328 | - GtkWidget *progress = NULL; | |
| 329 | 345 | |
| 330 | 346 | ft_dialog_load(dialog,name); |
| 331 | 347 | |
| 332 | 348 | if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) |
| 333 | 349 | { |
| 334 | 350 | ft_dialog_save(dialog,name); |
| 335 | - progress = start_file_transfer(action, widget, dialog); | |
| 351 | + gtk_widget_hide(dialog); | |
| 352 | + | |
| 353 | + v3270_transfer_file( widget, | |
| 354 | + v3270_ft_dialog_get_options(dialog), | |
| 355 | + v3270_ft_dialog_get_local_filename(dialog), | |
| 356 | + v3270_ft_dialog_get_host_filename(dialog), | |
| 357 | + v3270_ft_dialog_get_record_length(dialog), | |
| 358 | + v3270_ft_dialog_get_block_size(dialog), | |
| 359 | + v3270_ft_dialog_get_primary_space(dialog), | |
| 360 | + v3270_ft_dialog_get_secondary_space(dialog), | |
| 361 | + v3270_ft_dialog_get_dft_buffer_size(dialog)); | |
| 336 | 362 | } |
| 337 | 363 | |
| 338 | 364 | gtk_widget_destroy(dialog); |
| 339 | 365 | |
| 340 | - if(progress) | |
| 341 | - { | |
| 342 | - gtk_widget_show(progress); | |
| 343 | - | |
| 344 | - lib3270_ft_start(v3270_get_session(widget)); | |
| 345 | - gtk_dialog_run(GTK_DIALOG(progress)); | |
| 346 | - lib3270_ft_destroy(v3270_get_session(widget)); | |
| 347 | - | |
| 348 | - gtk_widget_destroy(progress); | |
| 349 | - } | |
| 350 | - | |
| 351 | 366 | } |
| 352 | 367 | |
| 353 | 368 | ... | ... |
src/pw3270/ft/ftdialog.c
| ... | ... | @@ -115,6 +115,10 @@ static void browse_file(GtkButton *button,v3270FTD *parent) |
| 115 | 115 | NULL |
| 116 | 116 | ); |
| 117 | 117 | |
| 118 | + const gchar * current = gtk_entry_get_text(GTK_ENTRY(parent->filename[FILENAME_LOCAL])); | |
| 119 | + if(current && *current) | |
| 120 | + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog),current); | |
| 121 | + | |
| 118 | 122 | if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) |
| 119 | 123 | { |
| 120 | 124 | gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); | ... | ... |