gui/idle: Add a function for getting the progress bar
And add in various cleanups while we're at it. Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
f9238c34e4
commit
3383f9e32a
31
gui/idle.c
31
gui/idle.c
|
@ -1,38 +1,27 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2016 (c) Anna Schumaker.
|
* Copyright 2016 (c) Anna Schumaker.
|
||||||
*/
|
*/
|
||||||
#include <core/idle.h>
|
#include <gui/idle.h>
|
||||||
#include <gui/builder.h>
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
|
|
||||||
static guint idle_id = 0;
|
static guint idle_id = 0;
|
||||||
|
|
||||||
static gboolean __on_idle(gpointer data)
|
static gboolean __on_idle(gpointer data)
|
||||||
{
|
{
|
||||||
GtkProgressBar *progress = GTK_PROGRESS_BAR(data);
|
bool more = idle_run_task();
|
||||||
unsigned int percent = idle_progress() * 100;
|
gchar *text = g_strdup_printf("%f%%", idle_progress() * 100);
|
||||||
gchar *text;
|
|
||||||
|
|
||||||
if (idle_run_task()) {
|
gtk_widget_set_visible(GTK_WIDGET(gui_progress_bar()), more);
|
||||||
gtk_progress_bar_set_fraction(progress, idle_progress());
|
gtk_progress_bar_set_fraction(gui_progress_bar(), idle_progress());
|
||||||
|
gtk_widget_set_tooltip_text(GTK_WIDGET(gui_progress_bar()), text);
|
||||||
|
g_free(text);
|
||||||
|
|
||||||
text = g_strdup_printf("%u%%", percent);
|
idle_id = more ? idle_id : 0;
|
||||||
gtk_widget_set_tooltip_text(GTK_WIDGET(progress), text);
|
return more ? G_SOURCE_CONTINUE : G_SOURCE_REMOVE;
|
||||||
g_free(text);
|
|
||||||
return G_SOURCE_CONTINUE;
|
|
||||||
} else {
|
|
||||||
gtk_widget_hide(GTK_WIDGET(progress));
|
|
||||||
idle_id = 0;
|
|
||||||
return G_SOURCE_REMOVE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void gui_idle_enable()
|
void gui_idle_enable()
|
||||||
{
|
{
|
||||||
GtkWidget *progress = gui_builder_widget("o_idle_progress");
|
idle_id = g_idle_add(__on_idle, NULL);
|
||||||
|
|
||||||
gtk_widget_show(progress);
|
|
||||||
idle_id = g_idle_add(__on_idle, progress);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void gui_idle_disable()
|
void gui_idle_disable()
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
*/
|
*/
|
||||||
#ifndef OCARINA_GUI_IDLE_H
|
#ifndef OCARINA_GUI_IDLE_H
|
||||||
#define OCARINA_GUI_IDLE_H
|
#define OCARINA_GUI_IDLE_H
|
||||||
|
#include <core/idle.h>
|
||||||
|
#include <gui/builder.h>
|
||||||
|
|
||||||
/* Called to enable processing idle queue tasks. */
|
/* Called to enable processing idle queue tasks. */
|
||||||
void gui_idle_enable();
|
void gui_idle_enable();
|
||||||
|
@ -10,4 +12,10 @@ void gui_idle_enable();
|
||||||
/* Called to disable processing idle queue tasks. */
|
/* Called to disable processing idle queue tasks. */
|
||||||
void gui_idle_disable();
|
void gui_idle_disable();
|
||||||
|
|
||||||
|
/* Called to get a pointer to the idle progress bar. */
|
||||||
|
static inline GtkProgressBar *gui_progress_bar()
|
||||||
|
{
|
||||||
|
return GTK_PROGRESS_BAR(gui_builder_widget("o_idle_progress"));
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* OCARINA_GUI_IDLE_H */
|
#endif /* OCARINA_GUI_IDLE_H */
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
builder
|
builder
|
||||||
window
|
window
|
||||||
|
idle
|
||||||
model
|
model
|
||||||
view
|
view
|
||||||
queue
|
queue
|
||||||
idle
|
|
||||||
sidebar
|
sidebar
|
||||||
playlist
|
playlist
|
||||||
audio
|
audio
|
||||||
|
|
|
@ -6,10 +6,10 @@ endfunction()
|
||||||
|
|
||||||
gui_unit_test(Builder)
|
gui_unit_test(Builder)
|
||||||
gui_unit_test(Window)
|
gui_unit_test(Window)
|
||||||
|
gui_unit_test(Idle)
|
||||||
gui_unit_test(Model)
|
gui_unit_test(Model)
|
||||||
gui_unit_test(View)
|
gui_unit_test(View)
|
||||||
gui_unit_test(Queue)
|
gui_unit_test(Queue)
|
||||||
gui_unit_test(Idle)
|
|
||||||
gui_unit_test(Sidebar)
|
gui_unit_test(Sidebar)
|
||||||
gui_unit_test(Playlist)
|
gui_unit_test(Playlist)
|
||||||
gui_unit_test(Audio)
|
gui_unit_test(Audio)
|
||||||
|
|
|
@ -2,50 +2,41 @@
|
||||||
* Copyright 2016 (c) Anna Schumaker.
|
* Copyright 2016 (c) Anna Schumaker.
|
||||||
*/
|
*/
|
||||||
#include <core/core.h>
|
#include <core/core.h>
|
||||||
#include <core/idle.h>
|
|
||||||
#include <core/settings.h>
|
|
||||||
#include <gui/builder.h>
|
|
||||||
#include <gui/idle.h>
|
#include <gui/idle.h>
|
||||||
#include <gui/view.h>
|
|
||||||
#include <gui/window.h>
|
|
||||||
#include <tests/test.h>
|
#include <tests/test.h>
|
||||||
#include <tests/gui.h>
|
#include <tests/gui.h>
|
||||||
|
|
||||||
static const unsigned int N = 100;
|
static const unsigned int N = 100;
|
||||||
static unsigned int cur = -1;
|
static unsigned int cur = -1;
|
||||||
struct core_init_data init_data;
|
struct core_init_data init_data;
|
||||||
|
|
||||||
static bool inc_cur(void *data)
|
static bool inc_cur(void *data)
|
||||||
{
|
{
|
||||||
cur++;
|
g_assert_cmpuint(++cur, ==, GPOINTER_TO_UINT(data));
|
||||||
g_assert_cmpuint(cur, ==, GPOINTER_TO_UINT(data));
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_idle()
|
static void test_idle()
|
||||||
{
|
{
|
||||||
GtkProgressBar *progress;
|
GtkProgressBar *progress = gui_progress_bar();
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
float fraction;
|
|
||||||
|
|
||||||
progress = GTK_PROGRESS_BAR(gui_builder_widget("o_idle_progress"));
|
|
||||||
g_assert_false(gtk_widget_is_visible(GTK_WIDGET(progress)));
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
for (i = 0; i < N; i++)
|
||||||
idle_schedule(IDLE_SYNC, inc_cur, GINT_TO_POINTER(i));
|
idle_schedule(IDLE_SYNC, inc_cur, GINT_TO_POINTER(i));
|
||||||
|
|
||||||
|
g_assert_false(gtk_widget_is_visible(GTK_WIDGET(progress)));
|
||||||
gui_idle_enable();
|
gui_idle_enable();
|
||||||
|
g_assert_false(gtk_widget_is_visible(GTK_WIDGET(progress)));
|
||||||
|
|
||||||
for (i = 0; i < N; i++) {
|
for (i = 0; i < (N - 1); i++) {
|
||||||
g_assert_true(gtk_widget_is_visible(GTK_WIDGET(progress)));
|
|
||||||
gui_test_main_loop();
|
gui_test_main_loop();
|
||||||
|
g_assert_true(gtk_widget_is_visible(GTK_WIDGET(progress)));
|
||||||
g_assert_cmpfloat(idle_progress(), ==, (float)(i + 1) / N);
|
g_assert_cmpfloat(idle_progress(), ==, (float)(i + 1) / N);
|
||||||
if (i != (N - 1)) {
|
g_assert_cmpfloat(gtk_progress_bar_get_fraction(progress),
|
||||||
fraction = gtk_progress_bar_get_fraction(progress);
|
==, (float)(i + 1) / N);
|
||||||
g_assert_cmpfloat(fraction, ==, idle_progress());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gui_test_main_loop();
|
||||||
g_assert_false(gtk_widget_is_visible(GTK_WIDGET(progress)));
|
g_assert_false(gtk_widget_is_visible(GTK_WIDGET(progress)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,7 +47,6 @@ int main(int argc, char **argv)
|
||||||
gtk_init(&argc, NULL);
|
gtk_init(&argc, NULL);
|
||||||
core_init(&argc, NULL, &init_data);
|
core_init(&argc, NULL, &init_data);
|
||||||
gui_builder_init("share/ocarina/ocarina.ui");
|
gui_builder_init("share/ocarina/ocarina.ui");
|
||||||
gui_view_init();
|
|
||||||
gui_test_init();
|
gui_test_init();
|
||||||
while (idle_run_task()) {}
|
while (idle_run_task()) {}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue