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