Commit 4aaf5c14e8a14f410c1bc6d34ebfb256b017732c
1 parent
f9c59e98
Exists in
master
and in
5 other branches
Dialogo de transferência de arquivos
Showing
1 changed file
with
152 additions
and
16 deletions
Show diff stats
src/pw3270/filetransfer.c
@@ -294,6 +294,63 @@ static void ft_complete(H3270FT *ft, const char *errmsg,unsigned long length,dou | @@ -294,6 +294,63 @@ static void ft_complete(H3270FT *ft, const char *errmsg,unsigned long length,dou | ||
294 | ft->widget = NULL; | 294 | ft->widget = NULL; |
295 | } | 295 | } |
296 | 296 | ||
297 | +static void ft_update(H3270FT *ft, unsigned long current, unsigned long length, double kbytes_sec) | ||
298 | +{ | ||
299 | + GtkLabel **info = (GtkLabel **) g_object_get_data(G_OBJECT(ft->widget),"info"); | ||
300 | + GtkProgressBar * pbar = g_object_get_data(G_OBJECT(ft->widget),"progress"); | ||
301 | + | ||
302 | + if(info) | ||
303 | + { | ||
304 | + gchar *str; | ||
305 | + | ||
306 | + if(length && info[0]) | ||
307 | + { | ||
308 | + str = g_strdup_printf("%ld",length); | ||
309 | + gtk_label_set_text(info[0],str); | ||
310 | + g_free(str); | ||
311 | + } | ||
312 | + | ||
313 | + if(current && info[1]) | ||
314 | + { | ||
315 | + str = g_strdup_printf("%ld",current); | ||
316 | + gtk_label_set_text(info[1],str); | ||
317 | + g_free(str); | ||
318 | + } | ||
319 | + | ||
320 | + if(kbytes_sec && info[2]) | ||
321 | + { | ||
322 | + str = g_strdup_printf("%ld KB/s",(unsigned long) kbytes_sec); | ||
323 | + gtk_label_set_text(info[2],str); | ||
324 | + g_free(str); | ||
325 | + } | ||
326 | + | ||
327 | + } | ||
328 | + | ||
329 | + if(pbar) | ||
330 | + { | ||
331 | + if(length) | ||
332 | + gtk_progress_bar_set_fraction(pbar,((gdouble) current) / ((gdouble) length)); | ||
333 | + else | ||
334 | + gtk_progress_bar_pulse(pbar); | ||
335 | + } | ||
336 | + | ||
337 | + | ||
338 | +} | ||
339 | + | ||
340 | +static void ft_running(H3270FT *ft, int is_cut) | ||
341 | +{ | ||
342 | + | ||
343 | +} | ||
344 | + | ||
345 | +static void ft_aborting(H3270FT *ft) | ||
346 | +{ | ||
347 | + | ||
348 | +} | ||
349 | + | ||
350 | +static void ft_state_changed(H3270FT *ft, LIB3270_FT_STATE state) | ||
351 | +{ | ||
352 | + | ||
353 | +} | ||
297 | 354 | ||
298 | static void run_ft_dialog(GObject *action, GtkWidget *widget, struct ftdialog *dlg) | 355 | static void run_ft_dialog(GObject *action, GtkWidget *widget, struct ftdialog *dlg) |
299 | { | 356 | { |
@@ -401,58 +458,137 @@ static void run_ft_dialog(GObject *action, GtkWidget *widget, struct ftdialog *d | @@ -401,58 +458,137 @@ static void run_ft_dialog(GObject *action, GtkWidget *widget, struct ftdialog *d | ||
401 | [Cancel] | 458 | [Cancel] |
402 | */ | 459 | */ |
403 | GtkWidget *container; | 460 | GtkWidget *container; |
461 | + GtkWidget *ftdialog; | ||
404 | 462 | ||
405 | - ft->widget = gtk_dialog_new_with_buttons( _( "File transfer" ), | ||
406 | - GTK_WINDOW(gtk_widget_get_toplevel(widget)), | ||
407 | - GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, | ||
408 | - GTK_STOCK_CLOSE,GTK_RESPONSE_CLOSE ); | 463 | + ftdialog = gtk_dialog_new_with_buttons( _( "File transfer" ), |
464 | + GTK_WINDOW(gtk_widget_get_toplevel(widget)), | ||
465 | + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, | ||
466 | + GTK_STOCK_CLOSE,GTK_RESPONSE_CLOSE ); | ||
409 | 467 | ||
410 | 468 | ||
411 | container = gtk_vbox_new(FALSE,2); | 469 | container = gtk_vbox_new(FALSE,2); |
412 | - gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(ft->widget))),container,TRUE,TRUE,2); | 470 | + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(ftdialog))),container,TRUE,TRUE,2); |
413 | 471 | ||
414 | // Information frame | 472 | // Information frame |
415 | { | 473 | { |
416 | - static const gchar *text[] = { N_( "_From:" ), N_( "_To:" ), N_( "_Status:" ) }; | 474 | + static const gchar *text[] = { N_( "_From" ), N_( "_To" ), N_( "_Status" ) }; |
417 | 475 | ||
418 | GtkWidget * frame = gtk_frame_new( _( "Informations" ) ); | 476 | GtkWidget * frame = gtk_frame_new( _( "Informations" ) ); |
419 | GtkWidget * table = gtk_table_new(G_N_ELEMENTS(text),2,FALSE); | 477 | GtkWidget * table = gtk_table_new(G_N_ELEMENTS(text),2,FALSE); |
420 | int f; | 478 | int f; |
421 | GtkWidget **entry = g_new0(GtkWidget *, G_N_ELEMENTS(text)); | 479 | GtkWidget **entry = g_new0(GtkWidget *, G_N_ELEMENTS(text)); |
422 | 480 | ||
423 | - g_object_set_data_full(G_OBJECT(ft->widget),"info",entry,g_free); | 481 | + g_object_set_data_full(G_OBJECT(ftdialog),"msg",entry,g_free); |
424 | gtk_container_set_border_width(GTK_CONTAINER(frame),3); | 482 | gtk_container_set_border_width(GTK_CONTAINER(frame),3); |
425 | 483 | ||
426 | for(f=0;f<G_N_ELEMENTS(text);f++) | 484 | for(f=0;f<G_N_ELEMENTS(text);f++) |
427 | { | 485 | { |
428 | - GtkWidget *label = gtk_label_new_with_mnemonic(gettext(text[f])); | ||
429 | - gtk_misc_set_alignment(GTK_MISC(label),0,.5); | 486 | + GtkWidget * label = gtk_label_new_with_mnemonic(""); |
487 | + gchar * str = g_strdup_printf("<b>%s:</b>",gettext(text[f])); | ||
488 | + | ||
489 | + gtk_label_set_markup_with_mnemonic(GTK_LABEL(label),str); | ||
490 | + g_free(str); | ||
491 | + | ||
492 | + gtk_misc_set_alignment(GTK_MISC(label),0,0); | ||
430 | gtk_table_attach(GTK_TABLE(table),label,0,1,f,f+1,GTK_FILL,GTK_FILL,2,2); | 493 | gtk_table_attach(GTK_TABLE(table),label,0,1,f,f+1,GTK_FILL,GTK_FILL,2,2); |
431 | 494 | ||
432 | - entry[f] = gtk_entry_new(); | ||
433 | - gtk_entry_set_width_chars(GTK_ENTRY(entry[f]),70); | ||
434 | - gtk_editable_set_editable(GTK_EDITABLE(entry[f]),FALSE); | 495 | + entry[f] = gtk_label_new(""); |
496 | + gtk_label_set_width_chars(GTK_LABEL(entry[f]),70); | ||
497 | + gtk_misc_set_alignment(GTK_MISC(entry[f]),0,0); | ||
498 | + | ||
499 | +// gtk_entry_set_width_chars(GTK_ENTRY(entry[f]),70); | ||
500 | +// gtk_editable_set_editable(GTK_EDITABLE(entry[f]),FALSE); | ||
501 | + | ||
435 | gtk_table_attach(GTK_TABLE(table),entry[f],1,2,f,f+1,GTK_FILL|GTK_EXPAND,GTK_FILL|GTK_EXPAND,2,2); | 502 | gtk_table_attach(GTK_TABLE(table),entry[f],1,2,f,f+1,GTK_FILL|GTK_EXPAND,GTK_FILL|GTK_EXPAND,2,2); |
436 | 503 | ||
437 | gtk_label_set_mnemonic_widget(GTK_LABEL(label),entry[f]); | 504 | gtk_label_set_mnemonic_widget(GTK_LABEL(label),entry[f]); |
438 | } | 505 | } |
439 | 506 | ||
440 | for(f=0;f<2;f++) | 507 | for(f=0;f<2;f++) |
441 | - gtk_entry_set_text(GTK_ENTRY(entry[f]),gtk_entry_get_text(dlg->file[f])); | 508 | + gtk_label_set_text(GTK_LABEL(entry[f]),gtk_entry_get_text(dlg->file[f])); |
442 | 509 | ||
443 | gtk_container_add(GTK_CONTAINER(frame),table); | 510 | gtk_container_add(GTK_CONTAINER(frame),table); |
444 | gtk_box_pack_start(GTK_BOX(container),frame,TRUE,TRUE,2); | 511 | gtk_box_pack_start(GTK_BOX(container),frame,TRUE,TRUE,2); |
445 | 512 | ||
446 | } | 513 | } |
447 | 514 | ||
515 | + // Progress frame | ||
516 | + { | ||
517 | + static const gchar *text[] = { N_( "T_otal" ), N_( "C_urrent" ), N_( "Spee_d" ), N_( "ET_A" ) }; | ||
518 | + | ||
519 | + GtkWidget * frame = gtk_frame_new( _( "Progress" ) ); | ||
520 | + GtkWidget * table = gtk_table_new(3,4,TRUE); | ||
521 | + GtkWidget **entry = g_new0(GtkWidget *, G_N_ELEMENTS(text)); | ||
522 | + GtkWidget * progress = gtk_progress_bar_new(); | ||
523 | + int pos = 0; | ||
524 | + | ||
525 | + g_object_set_data_full(G_OBJECT(ftdialog),"info",entry,g_free); | ||
526 | + g_object_set_data(G_OBJECT(ftdialog),"progress",progress); | ||
527 | + | ||
528 | + gtk_container_set_border_width(GTK_CONTAINER(frame),3); | ||
529 | + gtk_container_set_border_width(GTK_CONTAINER(table),6); | ||
530 | + | ||
531 | + for(f=0;f<2;f++) | ||
532 | + { | ||
533 | + // Left box | ||
534 | + GtkWidget * label; | ||
535 | + gchar * str; | ||
536 | + | ||
537 | + str = g_strdup_printf("<b>%s:</b>",gettext(text[pos])); | ||
538 | + label = gtk_label_new(""); | ||
539 | + gtk_label_set_markup_with_mnemonic(GTK_LABEL(label),str); | ||
540 | + g_free(str); | ||
541 | + | ||
542 | + gtk_misc_set_alignment(GTK_MISC(label),0,0); | ||
543 | + gtk_table_attach(GTK_TABLE(table),label,0,1,f,f+1,GTK_FILL,GTK_FILL,2,2); | ||
544 | + | ||
545 | + entry[pos] = gtk_label_new(""); | ||
546 | + gtk_misc_set_alignment(GTK_MISC(entry[f]),0,0); | ||
547 | + | ||
548 | + gtk_table_attach(GTK_TABLE(table),entry[pos],1,2,f,f+1,GTK_EXPAND,GTK_FILL,2,2); | ||
549 | + | ||
550 | + gtk_label_set_mnemonic_widget(GTK_LABEL(label),entry[pos++]); | ||
551 | + | ||
552 | + // Right box | ||
553 | + str = g_strdup_printf("<b>%s:</b>",gettext(text[pos])); | ||
554 | + label = gtk_label_new(""); | ||
555 | + gtk_label_set_markup_with_mnemonic(GTK_LABEL(label),str); | ||
556 | + g_free(str); | ||
557 | + | ||
558 | + gtk_misc_set_alignment(GTK_MISC(label),0,0); | ||
559 | + gtk_table_attach(GTK_TABLE(table),label,2,3,f,f+1,GTK_FILL,GTK_FILL,2,2); | ||
560 | + | ||
561 | + entry[pos] = gtk_label_new(""); | ||
562 | + gtk_misc_set_alignment(GTK_MISC(entry[f]),0,0); | ||
563 | + | ||
564 | + gtk_label_set_mnemonic_widget(GTK_LABEL(label),entry[pos++]); | ||
565 | + | ||
566 | + } | ||
567 | + | ||
568 | + gtk_table_attach(GTK_TABLE(table),progress,0,4,f,f+1,GTK_EXPAND|GTK_FILL,GTK_EXPAND|GTK_FILL,2,2); | ||
569 | + | ||
570 | + gtk_container_add(GTK_CONTAINER(frame),table); | ||
571 | + gtk_box_pack_start(GTK_BOX(container),frame,TRUE,TRUE,2); | ||
572 | + | ||
573 | + | ||
574 | + } | ||
575 | + | ||
576 | + ft->widget = ftdialog; | ||
577 | + ft->complete = ft_complete; | ||
578 | + ft->update = ft_update; | ||
579 | + ft->running = ft_running; | ||
580 | + ft->aborting = ft_aborting; | ||
581 | + ft->state_changed = ft_state_changed; | ||
448 | 582 | ||
583 | + gtk_widget_show_all(ftdialog); | ||
449 | 584 | ||
450 | - gtk_widget_show_all(ft->widget); | ||
451 | - gtk_dialog_run(GTK_DIALOG(ft->widget)); | ||
452 | - gtk_widget_destroy(ft->widget); | 585 | + trace("%s: Running dialog %p",ftdialog); |
586 | + gtk_dialog_run(GTK_DIALOG(ftdialog)); | ||
587 | + trace("%s: Dialog %p ends",ftdialog); | ||
453 | 588 | ||
454 | lib3270_ft_destroy(ft); | 589 | lib3270_ft_destroy(ft); |
455 | 590 | ||
591 | + gtk_widget_destroy(ftdialog); | ||
456 | } | 592 | } |
457 | 593 | ||
458 | gtk_widget_destroy(dlg->dialog); | 594 | gtk_widget_destroy(dlg->dialog); |