Commit 4aaf5c14e8a14f410c1bc6d34ebfb256b017732c

Authored by perry.werneck@gmail.com
1 parent f9c59e98

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