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,6 +35,7 @@ | ||
35 | #include <lib3270/config.h> | 35 | #include <lib3270/config.h> |
36 | #include <lib3270.h> | 36 | #include <lib3270.h> |
37 | #include <lib3270/popup.h> | 37 | #include <lib3270/popup.h> |
38 | + #include <lib3270/filetransfer.h> | ||
38 | 39 | ||
39 | #define V3270_H_INCLUDED 1 | 40 | #define V3270_H_INCLUDED 1 |
40 | 41 | ||
@@ -226,6 +227,7 @@ | @@ -226,6 +227,7 @@ | ||
226 | LIB3270_EXPORT const gchar * v3270_get_ssl_status_message(GtkWidget *widget); | 227 | LIB3270_EXPORT const gchar * v3270_get_ssl_status_message(GtkWidget *widget); |
227 | LIB3270_EXPORT void v3270_popup_security_dialog(GtkWidget *widget); | 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 | G_END_DECLS | 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,7 +134,27 @@ static void ft_dialog_load(GtkWidget *widget, const gchar *name) | ||
134 | 134 | ||
135 | static void ft_dialog_save(GtkWidget *widget, const gchar *name) | 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 | set_integer_to_config(name,"dft",v3270_ft_dialog_get_dft_buffer_size(widget)); | 159 | set_integer_to_config(name,"dft",v3270_ft_dialog_get_dft_buffer_size(widget)); |
140 | set_integer_to_config(name,"reclen",v3270_ft_dialog_get_record_length(widget)); | 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,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 | if(!ft) | 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 | // Create FT progress dialog | 253 | // Create FT progress dialog |
244 | GtkWidget * progress = v3270_ft_progress_new(); | 254 | GtkWidget * progress = v3270_ft_progress_new(); |
@@ -258,7 +268,15 @@ static GtkWidget * start_file_transfer(GtkAction *action, GtkWidget *widget, Gtk | @@ -258,7 +268,15 @@ static GtkWidget * start_file_transfer(GtkAction *action, GtkWidget *widget, Gtk | ||
258 | gtk_widget_show_all(progress); | 268 | gtk_widget_show_all(progress); |
259 | gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),GTK_WIDGET(progress),FALSE,TRUE,2); | 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 | void download_action(GtkAction *action, GtkWidget *widget) | 282 | void download_action(GtkAction *action, GtkWidget *widget) |
@@ -281,28 +299,27 @@ void download_action(GtkAction *action, GtkWidget *widget) | @@ -281,28 +299,27 @@ void download_action(GtkAction *action, GtkWidget *widget) | ||
281 | } | 299 | } |
282 | 300 | ||
283 | GtkWidget *dialog = v3270_ft_dialog_new(widget,LIB3270_FT_OPTION_RECEIVE|get_options_from_config(name)); | 301 | GtkWidget *dialog = v3270_ft_dialog_new(widget,LIB3270_FT_OPTION_RECEIVE|get_options_from_config(name)); |
284 | - GtkWidget *progress = NULL; | ||
285 | 302 | ||
286 | ft_dialog_load(dialog,name); | 303 | ft_dialog_load(dialog,name); |
287 | 304 | ||
288 | if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) | 305 | if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) |
289 | { | 306 | { |
290 | ft_dialog_save(dialog,name); | 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 | gtk_widget_destroy(dialog); | 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 | void upload_action(GtkAction *action, GtkWidget *widget) | 325 | void upload_action(GtkAction *action, GtkWidget *widget) |
@@ -325,29 +342,27 @@ void upload_action(GtkAction *action, GtkWidget *widget) | @@ -325,29 +342,27 @@ void upload_action(GtkAction *action, GtkWidget *widget) | ||
325 | } | 342 | } |
326 | 343 | ||
327 | GtkWidget *dialog = v3270_ft_dialog_new(widget,LIB3270_FT_OPTION_SEND|get_options_from_config(name)); | 344 | GtkWidget *dialog = v3270_ft_dialog_new(widget,LIB3270_FT_OPTION_SEND|get_options_from_config(name)); |
328 | - GtkWidget *progress = NULL; | ||
329 | 345 | ||
330 | ft_dialog_load(dialog,name); | 346 | ft_dialog_load(dialog,name); |
331 | 347 | ||
332 | if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) | 348 | if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) |
333 | { | 349 | { |
334 | ft_dialog_save(dialog,name); | 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 | gtk_widget_destroy(dialog); | 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,6 +115,10 @@ static void browse_file(GtkButton *button,v3270FTD *parent) | ||
115 | NULL | 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 | if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) | 122 | if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) |
119 | { | 123 | { |
120 | gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); | 124 | gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); |