From c057b23ab3de85d1b0e39a9d3b6d911bddbbc903 Mon Sep 17 00:00:00 2001 From: Thai Pangsakulyanont Date: Sun, 12 Jun 2011 13:24:39 +0700 Subject: [PATCH] progress bar for Linux partially done: no indeterminate progress bar yet. --- src/arch/LoadingWindow/LoadingWindow_Gtk.cpp | 17 ++++++++++++++--- .../LoadingWindow/LoadingWindow_GtkModule.cpp | 19 +++++++++++++++++++ .../LoadingWindow/LoadingWindow_GtkModule.h | 2 ++ 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/arch/LoadingWindow/LoadingWindow_Gtk.cpp b/src/arch/LoadingWindow/LoadingWindow_Gtk.cpp index d7f542b2e9..ec82aa8f3d 100644 --- a/src/arch/LoadingWindow/LoadingWindow_Gtk.cpp +++ b/src/arch/LoadingWindow/LoadingWindow_Gtk.cpp @@ -11,6 +11,8 @@ static void *Handle = NULL; static INIT Module_Init; static SHUTDOWN Module_Shutdown; static SETTEXT Module_SetText; +static SETPROGRESS Module_SetProgress; +static SETINDETERMINATE Module_SetIndeterminate; LoadingWindow_Gtk::LoadingWindow_Gtk() { @@ -33,6 +35,12 @@ RString LoadingWindow_Gtk::Init() Module_SetText = (SETTEXT) dlsym(Handle, "SetText"); if( !Module_SetText ) return "Couldn't load symbol Module_SetText"; + Module_SetProgress = (SETPROGRESS) dlsym(Handle, "SetProgress"); + if( !Module_SetProgress ) + return "Couldn't load symbol Module_SetProgress"; + Module_SetIndeterminate = (SETINDETERMINATE) dlsym(Handle, "SetIndeterminate"); + if( !Module_SetIndeterminate ) + return "Couldn't load symbol Module_SetIndeterminate"; const char *ret = Module_Init( &g_argc, &g_argv ); if( ret != NULL ) @@ -58,17 +66,20 @@ void LoadingWindow_Gtk::SetText( RString s ) void LoadingWindow_Gtk::SetProgress( const int progress ) { - ; // stub, needs to be finished. + LoadingWindow::SetProgress( progress ); + Module_SetProgress( m_progress, m_totalWork ); } void LoadingWindow_Gtk::SetTotalWork( const int totalWork ) { - ; // stub, needs to be finished. + LoadingWindow::SetTotalWork( totalWork ); + Module_SetProgress( m_progress, m_totalWork ); } void LoadingWindow_Gtk::SetIndeterminate( bool indeterminate ) { - ; // stub, needs to be finished. + LoadingWindow::SetIndeterminate( indeterminate ); + Module_SetIndeterminate( m_indeterminate ); } /* diff --git a/src/arch/LoadingWindow/LoadingWindow_GtkModule.cpp b/src/arch/LoadingWindow/LoadingWindow_GtkModule.cpp index 78c65d1fb2..445654b7f1 100644 --- a/src/arch/LoadingWindow/LoadingWindow_GtkModule.cpp +++ b/src/arch/LoadingWindow/LoadingWindow_GtkModule.cpp @@ -5,6 +5,7 @@ static GtkWidget *label; static GtkWidget *window; +static GtkWidget *progressBar; extern "C" const char *Init( int *argc, char ***argv ) { @@ -22,9 +23,12 @@ extern "C" const char *Init( int *argc, char ***argv ) loadimage = gtk_image_new_from_file(splash_image_path); label = gtk_label_new(NULL); gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_CENTER); + progressBar = gtk_progress_bar_new(); + gtk_progress_bar_set_fraction( GTK_PROGRESS_BAR(progressBar), 0.0 ); vbox = gtk_vbox_new(FALSE,5); gtk_container_add(GTK_CONTAINER(window),vbox); gtk_box_pack_start(GTK_BOX(vbox),loadimage,FALSE,FALSE,0); + gtk_box_pack_end(GTK_BOX(vbox),progressBar,TRUE,TRUE,0); gtk_box_pack_end(GTK_BOX(vbox),label,TRUE,TRUE,0); gtk_widget_show_all(window); @@ -47,6 +51,21 @@ extern "C" void SetText( const char *s ) gtk_main_iteration_do(FALSE); } +extern "C" void SetProgress( int progress, int totalWork ) +{ + gdouble fraction = ( totalWork > 0 ? progress / (gdouble)totalWork : 0 ); + if( fraction > 1.0 ) fraction = 1.0; + if( fraction < 0.0 ) fraction = 0.0; + gtk_progress_bar_set_fraction( GTK_PROGRESS_BAR(progressBar), fraction ); + gtk_main_iteration_do(FALSE); +} + +extern "C" void SetIndeterminate( bool indeterminate ) +{ + // TODO: Implement this! + gtk_main_iteration_do(FALSE); +} + /* * (c) 2003-2004 Glenn Maynard, Sean Burke * All rights reserved. diff --git a/src/arch/LoadingWindow/LoadingWindow_GtkModule.h b/src/arch/LoadingWindow/LoadingWindow_GtkModule.h index 77ad5a3233..350e1375d2 100644 --- a/src/arch/LoadingWindow/LoadingWindow_GtkModule.h +++ b/src/arch/LoadingWindow/LoadingWindow_GtkModule.h @@ -4,6 +4,8 @@ typedef const char *(*INIT)(int *argc, char ***argv); typedef void (*SHUTDOWN)(); typedef void (*SETTEXT)( const char *s ); +typedef void (*SETPROGRESS)( int progress, int totalWork ); +typedef void (*SETINDETERMINATE)( bool indeterminate ); #endif