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 | 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 | 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 | 458 | [Cancel] |
402 | 459 | */ |
403 | 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 | 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 | 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 | 476 | GtkWidget * frame = gtk_frame_new( _( "Informations" ) ); |
419 | 477 | GtkWidget * table = gtk_table_new(G_N_ELEMENTS(text),2,FALSE); |
420 | 478 | int f; |
421 | 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 | 482 | gtk_container_set_border_width(GTK_CONTAINER(frame),3); |
425 | 483 | |
426 | 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 | 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 | 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 | 504 | gtk_label_set_mnemonic_widget(GTK_LABEL(label),entry[f]); |
438 | 505 | } |
439 | 506 | |
440 | 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 | 510 | gtk_container_add(GTK_CONTAINER(frame),table); |
444 | 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 | 589 | lib3270_ft_destroy(ft); |
455 | 590 | |
591 | + gtk_widget_destroy(ftdialog); | |
456 | 592 | } |
457 | 593 | |
458 | 594 | gtk_widget_destroy(dlg->dialog); | ... | ... |