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)); | ... | ... |