| 
									
										
										
										
											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 = >k_ui_progress__ops; | 
					
						
							| 
									
										
										
										
											2012-11-13 22:30:33 +09:00
										 |  |  | } |