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