gui/model: Update runtime label when the model changes

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2016-08-02 17:35:17 -04:00
parent f58cc8da46
commit 5c426fc8d7
4 changed files with 24 additions and 26 deletions

View File

@ -4,6 +4,7 @@
#include <core/audio.h>
#include <core/queue.h>
#include <core/string.h>
#include <gui/builder.h>
#include <gui/model.h>
static const GTypeInfo queue_type_info;
@ -233,6 +234,13 @@ static void _queue_tree_model_init(GtkTreeModelIface *iface)
}
static void __gui_queue_model_set_runtime(void)
{
gchar *len = string_sec2str_long(queue_model->gqm_queue->q_length);
gtk_label_set_text(GTK_LABEL(gui_builder_widget("o_runtime")), len);
g_free(len);
}
void gui_queue_model_init(void)
{
queue_model = g_object_new(GUI_QUEUE_MODEL_TYPE, NULL);
@ -275,6 +283,7 @@ void gui_queue_model_add(GuiQueueModel *model, unsigned int row)
_queue_model_get_iter(GTK_TREE_MODEL(model), &iter, path);
gtk_tree_model_row_inserted(GTK_TREE_MODEL(model), path, &iter);
__gui_queue_model_set_runtime();
gtk_tree_path_free(path);
}
@ -282,6 +291,7 @@ void gui_queue_model_remove(GuiQueueModel *model, unsigned int row)
{
GtkTreePath *path = gtk_tree_path_new_from_indices(row, -1);
gtk_tree_model_row_deleted(GTK_TREE_MODEL(model), path);
__gui_queue_model_set_runtime();
gtk_tree_path_free(path);
}
@ -295,6 +305,7 @@ void gui_queue_model_clear(GuiQueueModel *model, unsigned int n)
gtk_tree_path_prev(path);
}
__gui_queue_model_set_runtime();
gtk_tree_path_free(path);
}
@ -305,6 +316,7 @@ void gui_queue_model_update(GuiQueueModel *model, unsigned int row)
_queue_model_get_iter(GTK_TREE_MODEL(model), &iter, path);
gtk_tree_model_row_changed(GTK_TREE_MODEL(model), path, &iter);
__gui_queue_model_set_runtime();
gtk_tree_path_free(path);
}
@ -316,6 +328,7 @@ void gui_queue_model_set_queue(GuiQueueModel *model, struct queue *queue)
gui_queue_model_clear(model, queue_size(cur));
model->gqm_queue = queue;
__gui_queue_model_set_runtime();
if (queue && queue_size(queue) > 0)
gui_queue_model_add(model, 0);

View File

@ -19,18 +19,6 @@ enum gq_filter_how {
};
static void __queue_set_runtime(struct gui_queue *queue)
{
gchar *len;
if (queue != gq_queue)
return;
len = string_sec2str_long(queue->gq_queue->q_length);
gtk_label_set_text(GTK_LABEL(gui_builder_widget("o_runtime")), len);
g_free(len);
}
static void __queue_toggle_flag(bool active, GtkWidget *widget,
enum queue_flags flag)
{
@ -204,7 +192,6 @@ void gui_queue_show(struct gui_queue *queue)
is_enabled = queue_has_flag(queue->gq_queue, Q_ENABLED);
gui_queue_model_set_queue(queue->gq_model, queue->gq_queue);
gui_view_set_model(GTK_TREE_MODEL_FILTER(queue->gq_filter));
__queue_set_runtime(queue);
} else
gtk_label_set_text(runtime, "");
@ -233,23 +220,19 @@ void gui_queue_show(struct gui_queue *queue)
void gui_queue_added(struct queue *queue, unsigned int row)
{
gui_queue_model_add(gui_queue(queue)->gq_model, row);
__queue_set_runtime(gui_queue(queue));
}
void gui_queue_removed(struct queue *queue, unsigned int row)
{
gui_queue_model_remove(gui_queue(queue)->gq_model, row);
__queue_set_runtime(gui_queue(queue));
}
void gui_queue_cleared(struct queue *queue, unsigned int n)
{
gui_queue_model_clear(gui_queue(queue)->gq_model, n);
__queue_set_runtime(gui_queue(queue));
}
void gui_queue_updated(struct queue *queue, unsigned int row)
{
gui_queue_model_update(gui_queue(queue)->gq_model, row);
__queue_set_runtime(gui_queue(queue));
}

View File

@ -5,6 +5,7 @@
#include <core/idle.h>
#include <core/core.h>
#include <core/playlist.h>
#include <gui/builder.h>
#include <gui/model.h>
#include <tests/test.h>
@ -171,16 +172,21 @@ static void test_model()
GtkTreeModel *model;
GtkTreePath *path;
GtkTreeIter iter;
GtkLabel *label;
GValue value;
int argc = 0;
gtk_init(&argc, NULL);
core_init(&argc, NULL, &init_data);
gui_builder_init("share/ocarina/ocarina6.glade");
gui_queue_model_init();
while (idle_run_task() == true) {}
model = GTK_TREE_MODEL(gui_queue_model_get());
label = GTK_LABEL(gui_builder_widget("o_runtime"));
gui_queue_model_set_queue(GUI_QUEUE_MODEL(model),
playlist_get_queue(PL_SYSTEM, "Collection"));
test_equal(gtk_label_get_text(label), "");
memset(&value, 0, sizeof(GValue));
g_signal_connect(model, "row-inserted", (GCallback)on_row_inserted, NULL);
@ -199,6 +205,7 @@ static void test_model()
playlist_add(PL_SYSTEM, "Favorites", track_get(1));
playlist_add(PL_SYSTEM, "Favorites", track_get(2));
test_equal(playlist_size(PL_SYSTEM, "Favorites"), 3);
test_equal(gtk_label_get_text(label), "42 minutes, 45 seconds");
/* ... and test again */
test_equal(gtk_tree_model_get_iter_first(model, &iter), true);
@ -268,8 +275,11 @@ static void test_model()
test_equal(count_delete, 13);
test_equal(count_insert, 14);
test_equal(gtk_tree_model_iter_n_children(model, NULL), 3);
test_equal(gtk_label_get_text(label), "10 minutes, 46 seconds");
gui_queue_model_set_queue(GUI_QUEUE_MODEL(model),
playlist_get_queue(PL_SYSTEM, "Collection"));
test_equal(gtk_label_get_text(label), "42 minutes, 45 seconds");
test_equal(count_delete, 16);
test_equal(count_insert, 15);

View File

@ -154,22 +154,17 @@ static void test_tracks()
{
struct db_entry *dbe, *next;
struct gui_queue *gq;
GtkLabel *runtime;
GtkEntry *search;
int argc = 0;
runtime = GTK_LABEL(gui_builder_widget("o_runtime"));
search = GTK_ENTRY(gui_builder_widget("o_search"));
search = GTK_ENTRY(gui_builder_widget("o_search"));
core_init(&argc, NULL, &init_data);
gq = gui_queue(playlist_get_queue(PL_SYSTEM, "Collection"));
gui_queue_show(gq);
test_equal(gtk_label_get_text(runtime), "");
playlist_new(PL_LIBRARY, "tests/Music/Hyrule Symphony");
while (idle_run_task() == true) {}
test_equal(gtk_label_get_text(runtime), "42 minutes, 45 seconds");
test_not_equal((void *)gq, NULL);
test_not_equal((void *)gq->gq_filter, NULL);
@ -191,10 +186,7 @@ static void test_tracks()
}
test_equal(gtk_tree_model_iter_n_children(gq->gq_filter, NULL), 12);
test_equal(gtk_label_get_text(runtime), "40 minutes, 35 seconds");
gui_queue_show(NULL);
test_equal(gtk_label_get_text(runtime), "");
core_deinit();
gui_builder_deinit();