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,7 +55,10 @@ | ||
55 | GtkDialog parent; | 55 | GtkDialog parent; |
56 | GtkWidget * filename[FILENAME_COUNT]; /**< Filenames for the transfer */ | 56 | GtkWidget * filename[FILENAME_COUNT]; /**< Filenames for the transfer */ |
57 | GtkWidget * units; /**< Units frame box */ | 57 | GtkWidget * units; /**< Units frame box */ |
58 | + GtkWidget * ready; /**< Send/Save button */ | ||
58 | GtkSpinButton * value[VALUE_COUNT]; | 59 | GtkSpinButton * value[VALUE_COUNT]; |
60 | + gboolean local; /**< TRUE if local filename is ok */ | ||
61 | + gboolean remote; /**< TRUE if remote filename is ok */ | ||
59 | LIB3270_FT_OPTION options; | 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,6 +235,59 @@ static GtkWidget * ftradio_new(v3270FTD *dialog, const gchar *title, const gchar | ||
232 | return GTK_WIDGET(frame); | 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 | GtkWidget * v3270_ft_dialog_new(GtkWidget *parent, LIB3270_FT_OPTION options) | 291 | GtkWidget * v3270_ft_dialog_new(GtkWidget *parent, LIB3270_FT_OPTION options) |
236 | { | 292 | { |
237 | v3270FTD *dialog = g_object_new(GTK_TYPE_V3270FTD, NULL); | 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,11 +330,23 @@ GtkWidget * v3270_ft_dialog_new(GtkWidget *parent, LIB3270_FT_OPTION options) | ||
274 | gtk_widget_set_tooltip_text(GTK_WIDGET(browse),_("Select file")); | 330 | gtk_widget_set_tooltip_text(GTK_WIDGET(browse),_("Select file")); |
275 | g_signal_connect(G_OBJECT(browse),"clicked",G_CALLBACK(browse_file),dialog); | 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 | if(options & LIB3270_FT_OPTION_RECEIVE) | 342 | if(options & LIB3270_FT_OPTION_RECEIVE) |
278 | { | 343 | { |
279 | // It's receiving file first host filename, then local filename | 344 | // It's receiving file first host filename, then local filename |
280 | gtk_window_set_title(GTK_WINDOW(dialog),_( "Receive file from host" )); | 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 | gtk_grid_attach(grid,label[FILENAME_HOST],0,0,1,1); | 350 | gtk_grid_attach(grid,label[FILENAME_HOST],0,0,1,1); |
283 | gtk_grid_attach(grid,label[FILENAME_LOCAL],0,1,1,1); | 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,6 +413,8 @@ GtkWidget * v3270_ft_dialog_new(GtkWidget *parent, LIB3270_FT_OPTION options) | ||
345 | gtk_grid_attach(grid,label[FILENAME_LOCAL],0,0,1,1); | 413 | gtk_grid_attach(grid,label[FILENAME_LOCAL],0,0,1,1); |
346 | gtk_grid_attach(grid,label[FILENAME_HOST],0,1,1,1); | 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 | gtk_grid_attach(grid,dialog->filename[FILENAME_LOCAL],1,0,3,1); | 418 | gtk_grid_attach(grid,dialog->filename[FILENAME_LOCAL],1,0,3,1); |
349 | gtk_grid_attach(grid,GTK_WIDGET(browse),5,0,1,1); | 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,11 +588,6 @@ GtkWidget * v3270_ft_dialog_new(GtkWidget *parent, LIB3270_FT_OPTION options) | ||
518 | 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.")); | 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 | gtk_spin_button_set_value(dialog->value[VALUE_DFT],4096); | 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 | gtk_widget_show_all(gtk_dialog_get_content_area(GTK_DIALOG(dialog))); | 591 | gtk_widget_show_all(gtk_dialog_get_content_area(GTK_DIALOG(dialog))); |
527 | 592 | ||
528 | return GTK_WIDGET(dialog); | 593 | return GTK_WIDGET(dialog); |
src/pw3270/ft/testprogram.c
@@ -34,24 +34,22 @@ | @@ -34,24 +34,22 @@ | ||
34 | 34 | ||
35 | int main (int argc, char *argv[]) | 35 | int main (int argc, char *argv[]) |
36 | { | 36 | { |
37 | - GtkWidget *win; | 37 | +// GtkWidget *win; |
38 | 38 | ||
39 | gtk_init (&argc, &argv); | 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 | return 0; | 54 | return 0; |
57 | 55 |