Commit c483b7cea9ddff44585d76ca154e7a5838d9ef3c
1 parent
5a0a1092
Exists in
master
and in
5 other branches
Implementando diálogo de transferência de arquivos
Showing
2 changed files
with
79 additions
and
16 deletions
Show diff stats
src/pw3270/ft/ftdialog.c
... | ... | @@ -55,7 +55,10 @@ |
55 | 55 | GtkDialog parent; |
56 | 56 | GtkWidget * filename[FILENAME_COUNT]; /**< Filenames for the transfer */ |
57 | 57 | GtkWidget * units; /**< Units frame box */ |
58 | + GtkWidget * ready; /**< Send/Save button */ | |
58 | 59 | GtkSpinButton * value[VALUE_COUNT]; |
60 | + gboolean local; /**< TRUE if local filename is ok */ | |
61 | + gboolean remote; /**< TRUE if remote filename is ok */ | |
59 | 62 | LIB3270_FT_OPTION options; |
60 | 63 | }; |
61 | 64 | |
... | ... | @@ -232,6 +235,59 @@ static GtkWidget * ftradio_new(v3270FTD *dialog, const gchar *title, const gchar |
232 | 235 | return GTK_WIDGET(frame); |
233 | 236 | } |
234 | 237 | |
238 | +static void test_remote_file(GtkEditable *editable, v3270FTD *dialog) | |
239 | +{ | |
240 | +#if GTK_CHECK_VERSION(3,2,0) | |
241 | + if(!gtk_entry_get_text_length(GTK_ENTRY(dialog->filename[FILENAME_LOCAL]))) | |
242 | + { | |
243 | + gchar *basename = g_path_get_basename(gtk_entry_get_text(GTK_ENTRY(editable))); | |
244 | + gchar *filename = g_build_filename(g_get_user_special_dir(G_USER_DIRECTORY_DOCUMENTS),basename,NULL); | |
245 | + gtk_entry_set_placeholder_text(GTK_ENTRY(dialog->filename[FILENAME_LOCAL]),filename); | |
246 | + g_free(filename); | |
247 | + g_free(basename); | |
248 | + } | |
249 | +#endif // GTK(3,2) | |
250 | + | |
251 | + dialog->remote = gtk_entry_get_text_length(GTK_ENTRY(dialog->filename[FILENAME_HOST])) > 0; | |
252 | + gtk_widget_set_sensitive(dialog->ready,dialog->local && dialog->remote); | |
253 | + | |
254 | +} | |
255 | + | |
256 | +static void test_file_exists(GtkEditable *editable, v3270FTD *dialog) | |
257 | +{ | |
258 | + const gchar *filename = gtk_entry_get_text(GTK_ENTRY(dialog->filename[FILENAME_LOCAL])); | |
259 | + dialog->local = g_file_test(filename,G_FILE_TEST_EXISTS); | |
260 | + | |
261 | +#if GTK_CHECK_VERSION(3,2,0) | |
262 | + if(dialog->local && !gtk_entry_get_text_length(GTK_ENTRY(dialog->filename[FILENAME_HOST]))) | |
263 | + { | |
264 | + gchar *basename = g_path_get_basename(gtk_entry_get_text(GTK_ENTRY(editable))); | |
265 | + gtk_entry_set_placeholder_text(GTK_ENTRY(dialog->filename[FILENAME_HOST]),basename); | |
266 | + g_free(basename); | |
267 | + } | |
268 | +#endif // GTK(3,2) | |
269 | + | |
270 | + gtk_widget_set_sensitive(dialog->ready,dialog->local && dialog->remote); | |
271 | + | |
272 | +} | |
273 | + | |
274 | +static void test_path_exists(GtkEditable *editable, v3270FTD *dialog) | |
275 | +{ | |
276 | + const gchar *filename = gtk_entry_get_text(GTK_ENTRY(dialog->filename[FILENAME_LOCAL])); | |
277 | + | |
278 | + if(!*filename) | |
279 | + { | |
280 | + dialog->local = FALSE; | |
281 | + } | |
282 | + else | |
283 | + { | |
284 | + gchar *dirname = g_path_get_dirname(filename); | |
285 | + dialog->local = g_file_test(dirname,G_FILE_TEST_IS_DIR); | |
286 | + g_free(dirname); | |
287 | + | |
288 | + } | |
289 | +} | |
290 | + | |
235 | 291 | GtkWidget * v3270_ft_dialog_new(GtkWidget *parent, LIB3270_FT_OPTION options) |
236 | 292 | { |
237 | 293 | v3270FTD *dialog = g_object_new(GTK_TYPE_V3270FTD, NULL); |
... | ... | @@ -274,11 +330,23 @@ GtkWidget * v3270_ft_dialog_new(GtkWidget *parent, LIB3270_FT_OPTION options) |
274 | 330 | gtk_widget_set_tooltip_text(GTK_WIDGET(browse),_("Select file")); |
275 | 331 | g_signal_connect(G_OBJECT(browse),"clicked",G_CALLBACK(browse_file),dialog); |
276 | 332 | |
333 | + gtk_dialog_add_button(GTK_DIALOG(dialog),_( "_Cancel" ), GTK_RESPONSE_CANCEL); | |
334 | + | |
335 | + dialog->ready = gtk_dialog_add_button(GTK_DIALOG(dialog), | |
336 | + (dialog->options & LIB3270_FT_OPTION_RECEIVE) != 0 ? _( "_Send") : _( "_Save" ), | |
337 | + GTK_RESPONSE_ACCEPT); | |
338 | + | |
339 | + gtk_widget_set_sensitive(dialog->ready,FALSE); | |
340 | + g_signal_connect(G_OBJECT(dialog->filename[FILENAME_HOST]),"changed",G_CALLBACK(test_remote_file),dialog); | |
341 | + | |
277 | 342 | if(options & LIB3270_FT_OPTION_RECEIVE) |
278 | 343 | { |
279 | 344 | // It's receiving file first host filename, then local filename |
280 | 345 | gtk_window_set_title(GTK_WINDOW(dialog),_( "Receive file from host" )); |
281 | 346 | |
347 | + g_signal_connect(G_OBJECT(dialog->filename[FILENAME_LOCAL]),"changed",G_CALLBACK(test_path_exists),dialog); | |
348 | + | |
349 | + | |
282 | 350 | gtk_grid_attach(grid,label[FILENAME_HOST],0,0,1,1); |
283 | 351 | gtk_grid_attach(grid,label[FILENAME_LOCAL],0,1,1,1); |
284 | 352 | |
... | ... | @@ -345,6 +413,8 @@ GtkWidget * v3270_ft_dialog_new(GtkWidget *parent, LIB3270_FT_OPTION options) |
345 | 413 | gtk_grid_attach(grid,label[FILENAME_LOCAL],0,0,1,1); |
346 | 414 | gtk_grid_attach(grid,label[FILENAME_HOST],0,1,1,1); |
347 | 415 | |
416 | + g_signal_connect(G_OBJECT(dialog->filename[FILENAME_LOCAL]),"changed",G_CALLBACK(test_file_exists),dialog); | |
417 | + | |
348 | 418 | gtk_grid_attach(grid,dialog->filename[FILENAME_LOCAL],1,0,3,1); |
349 | 419 | gtk_grid_attach(grid,GTK_WIDGET(browse),5,0,1,1); |
350 | 420 | |
... | ... | @@ -518,11 +588,6 @@ GtkWidget * v3270_ft_dialog_new(GtkWidget *parent, LIB3270_FT_OPTION options) |
518 | 588 | gtk_widget_set_tooltip_text(GTK_WIDGET(dialog->value[VALUE_DFT]),_( "Buffer size for DFT-mode transfers. Can range from 256 to 32768. Larger values give better performance, but some hosts may not be able to support them.")); |
519 | 589 | gtk_spin_button_set_value(dialog->value[VALUE_DFT],4096); |
520 | 590 | |
521 | - gtk_dialog_add_buttons(GTK_DIALOG(dialog), | |
522 | - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, | |
523 | - (options & LIB3270_FT_OPTION_RECEIVE) != 0 ? GTK_STOCK_SAVE : GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, | |
524 | - NULL); | |
525 | - | |
526 | 591 | gtk_widget_show_all(gtk_dialog_get_content_area(GTK_DIALOG(dialog))); |
527 | 592 | |
528 | 593 | return GTK_WIDGET(dialog); | ... | ... |
src/pw3270/ft/testprogram.c
... | ... | @@ -34,24 +34,22 @@ |
34 | 34 | |
35 | 35 | int main (int argc, char *argv[]) |
36 | 36 | { |
37 | - GtkWidget *win; | |
37 | +// GtkWidget *win; | |
38 | 38 | |
39 | 39 | gtk_init (&argc, &argv); |
40 | 40 | |
41 | - /* | |
42 | -// win = v3270_ft_dialog_new(LIB3270_FT_OPTION_RECEIVE|LIB3270_FT_OPTION_ASCII); | |
43 | - win = v3270_ft_dialog_new(LIB3270_FT_OPTION_SEND|LIB3270_FT_OPTION_REMAP); | |
44 | - v3270_ft_dialog_set_tso(win,TRUE); | |
45 | - */ | |
41 | +// gtk_dialog_run(GTK_DIALOG(v3270_ft_dialog_new(NULL,LIB3270_FT_OPTION_SEND|LIB3270_FT_OPTION_REMAP))); | |
42 | + gtk_dialog_run(GTK_DIALOG(v3270_ft_dialog_new(NULL,LIB3270_FT_OPTION_RECEIVE|LIB3270_FT_OPTION_REMAP))); | |
46 | 43 | |
47 | - win = gtk_window_new(GTK_WINDOW_TOPLEVEL); | |
48 | - gtk_container_add(GTK_CONTAINER(win),v3270_ft_progress_new()); | |
49 | 44 | |
45 | +// v3270_ft_dialog_set_tso(win,TRUE); | |
50 | 46 | |
51 | - gtk_widget_show_all(win); | |
52 | - gtk_main (); | |
47 | +// win = gtk_window_new(GTK_WINDOW_TOPLEVEL); | |
48 | +// gtk_container_add(GTK_CONTAINER(win),v3270_ft_progress_new()); | |
53 | 49 | |
54 | - gtk_dialog_run(GTK_DIALOG(win)); | |
50 | + | |
51 | +// gtk_widget_show_all(win); | |
52 | +// gtk_main (); | |
55 | 53 | |
56 | 54 | return 0; |
57 | 55 | ... | ... |