2012-11-13 22:30:33 +09:00
# include <inttypes.h>
# include "gtk.h"
# include "../progress.h"
# include "util.h"
static GtkWidget * dialog ;
static GtkWidget * progress ;
2013-10-23 15:40:38 -03:00
static void gtk_ui_progress__update ( struct ui_progress * p )
2012-11-13 22:30:33 +09:00
{
2013-10-23 15:40:38 -03:00
double fraction = p - > total ? 1.0 * p - > curr / p - > total : 0.0 ;
2012-11-13 22:30:33 +09:00
char buf [ 1024 ] ;
if ( dialog = = NULL ) {
GtkWidget * vbox = gtk_vbox_new ( TRUE , 5 ) ;
2013-10-23 15:40:38 -03:00
GtkWidget * label = gtk_label_new ( p - > title ) ;
2012-11-13 22:30:33 +09:00
dialog = gtk_window_new ( GTK_WINDOW_TOPLEVEL ) ;
progress = gtk_progress_bar_new ( ) ;
gtk_box_pack_start ( GTK_BOX ( vbox ) , label , TRUE , FALSE , 3 ) ;
gtk_box_pack_start ( GTK_BOX ( vbox ) , progress , TRUE , TRUE , 3 ) ;
gtk_container_add ( GTK_CONTAINER ( dialog ) , vbox ) ;
gtk_window_set_title ( GTK_WINDOW ( dialog ) , " perf " ) ;
gtk_window_resize ( GTK_WINDOW ( dialog ) , 300 , 80 ) ;
gtk_window_set_position ( GTK_WINDOW ( dialog ) , GTK_WIN_POS_CENTER ) ;
gtk_widget_show_all ( dialog ) ;
}
gtk_progress_bar_set_fraction ( GTK_PROGRESS_BAR ( progress ) , fraction ) ;
2013-10-23 15:40:38 -03:00
snprintf ( buf , sizeof ( buf ) , " % " PRIu64 " / % " PRIu64 , p - > curr , p - > total ) ;
2012-11-13 22:30:33 +09:00
gtk_progress_bar_set_text ( GTK_PROGRESS_BAR ( progress ) , buf ) ;
/* we didn't call gtk_main yet, so do it manually */
while ( gtk_events_pending ( ) )
gtk_main_iteration ( ) ;
}
2013-10-23 14:08:48 -03:00
static void gtk_ui_progress__finish ( void )
2012-11-13 22:30:34 +09:00
{
/* this will also destroy all of its children */
gtk_widget_destroy ( dialog ) ;
dialog = NULL ;
}
2013-10-23 14:08:48 -03:00
static struct ui_progress_ops gtk_ui_progress__ops = {
. update = gtk_ui_progress__update ,
. finish = gtk_ui_progress__finish ,
2012-11-13 22:30:33 +09:00
} ;
2013-10-23 14:08:48 -03:00
void gtk_ui_progress__init ( void )
2012-11-13 22:30:33 +09:00
{
2013-10-23 14:08:48 -03:00
ui_progress__ops = & gtk_ui_progress__ops ;
2012-11-13 22:30:33 +09:00
}