gui/model: Various cleanups to code and test
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
cdbe96c575
commit
e522475d38
91
gui/model.c
91
gui/model.c
|
@ -7,12 +7,11 @@
|
|||
#include <gui/builder.h>
|
||||
#include <gui/model.h>
|
||||
|
||||
static const GInterfaceInfo gui_tree_model;
|
||||
static const GTypeInfo gui_model_type_info;
|
||||
static gboolean __gui_model_iter_nth_child(GtkTreeModel *, GtkTreeIter *,
|
||||
GtkTreeIter *, gint);
|
||||
|
||||
static GObjectClass *parent_class = NULL;
|
||||
static GuiModel *queue_model = NULL;
|
||||
static gchar *font_current = "bold";
|
||||
static gchar *font_regular = "";
|
||||
|
||||
static GType gui_model_columns[GUI_MODEL_N_COLUMNS] = {
|
||||
[GUI_MODEL_TRACK_NR] = G_TYPE_UINT,
|
||||
|
@ -28,19 +27,6 @@ static GType gui_model_columns[GUI_MODEL_N_COLUMNS] = {
|
|||
[GUI_MODEL_FONT] = G_TYPE_STRING,
|
||||
};
|
||||
|
||||
static gboolean __gui_model_iter_nth(GuiModel *model, GtkTreeIter *iter, gint n)
|
||||
{
|
||||
if (!model->gm_queue || n >= queue_size(model->gm_queue))
|
||||
return FALSE;
|
||||
|
||||
queue_iter_set(model->gm_queue, &model->gm_iter, n);
|
||||
iter->stamp = model->gm_stamp;
|
||||
iter->user_data = &model->gm_iter;
|
||||
iter->user_data2 = queue_iter_val(&model->gm_iter);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
static GtkTreeModelFlags __gui_model_get_flags(GtkTreeModel *model)
|
||||
{
|
||||
return GTK_TREE_MODEL_LIST_ONLY;
|
||||
|
@ -53,8 +39,8 @@ static gint __gui_model_get_n_columns(GtkTreeModel *model)
|
|||
|
||||
static GType __gui_model_get_column_type(GtkTreeModel *model, gint index)
|
||||
{
|
||||
g_return_val_if_fail(index >= 0 && index < GUI_MODEL_N_COLUMNS,
|
||||
G_TYPE_INVALID);
|
||||
g_return_val_if_fail(index >= 0, G_TYPE_INVALID);
|
||||
g_return_val_if_fail(index < GUI_MODEL_N_COLUMNS, G_TYPE_INVALID);
|
||||
return gui_model_columns[index];
|
||||
}
|
||||
|
||||
|
@ -67,7 +53,7 @@ static gboolean __gui_model_get_iter(GtkTreeModel *model, GtkTreeIter *iter,
|
|||
indices = gtk_tree_path_get_indices_with_depth(path, &depth);
|
||||
g_assert(depth == 1);
|
||||
|
||||
return __gui_model_iter_nth(GUI_MODEL(model), iter, indices[0]);
|
||||
return __gui_model_iter_nth_child(model, iter, NULL, indices[0]);
|
||||
}
|
||||
|
||||
static GtkTreePath *__gui_model_get_path(GtkTreeModel *model, GtkTreeIter *iter)
|
||||
|
@ -131,8 +117,8 @@ static void __gui_model_get_value(GtkTreeModel *model, GtkTreeIter *iter,
|
|||
g_free(str);
|
||||
break;
|
||||
case GUI_MODEL_FONT:
|
||||
str = (track == audio_cur_track()) ? font_current : font_regular;
|
||||
g_value_set_static_string(value, str);
|
||||
str = (track == audio_cur_track()) ? "bold" : "";
|
||||
g_value_take_string(value, g_strdup(str));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -158,9 +144,7 @@ static gboolean __gui_model_iter_next(GtkTreeModel *model, GtkTreeIter *iter)
|
|||
static gboolean __gui_model_iter_children(GtkTreeModel *model, GtkTreeIter *iter,
|
||||
GtkTreeIter *parent)
|
||||
{
|
||||
if (parent)
|
||||
return FALSE;
|
||||
return __gui_model_iter_nth(GUI_MODEL(model), iter, 0);
|
||||
return __gui_model_iter_nth_child(model, iter, parent, 0);
|
||||
}
|
||||
|
||||
static gboolean __gui_model_iter_has_child(GtkTreeModel *model, GtkTreeIter *iter)
|
||||
|
@ -180,9 +164,15 @@ static gboolean __gui_model_iter_nth_child(GtkTreeModel *model,
|
|||
GtkTreeIter *parent,
|
||||
gint n)
|
||||
{
|
||||
if (parent)
|
||||
if (parent || !queue_model->gm_queue ||
|
||||
n >= queue_size(queue_model->gm_queue))
|
||||
return FALSE;
|
||||
return __gui_model_iter_nth(GUI_MODEL(model), iter, n);
|
||||
|
||||
queue_iter_set(queue_model->gm_queue, &queue_model->gm_iter, n);
|
||||
iter->stamp = queue_model->gm_stamp;
|
||||
iter->user_data = &queue_model->gm_iter;
|
||||
iter->user_data2 = queue_iter_val(&queue_model->gm_iter);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean __gui_model_iter_parent(GtkTreeModel *model, GtkTreeIter *iter,
|
||||
|
@ -203,12 +193,10 @@ static void __gui_model_finalize(GObject *object)
|
|||
|
||||
static void __gui_model_class_init(GuiModelClass *class)
|
||||
{
|
||||
GObjectClass *object_class;
|
||||
|
||||
parent_class = g_type_class_peek_parent(class);
|
||||
object_class = (GObjectClass *)class;
|
||||
GObjectClass *object_class = (GObjectClass *)class;
|
||||
|
||||
object_class->finalize = __gui_model_finalize;
|
||||
parent_class = g_type_class_peek_parent(class);
|
||||
}
|
||||
|
||||
static void __gui_tree_model_init(GtkTreeModelIface *iface)
|
||||
|
@ -227,6 +215,24 @@ static void __gui_tree_model_init(GtkTreeModelIface *iface)
|
|||
iface->iter_parent = __gui_model_iter_parent;
|
||||
}
|
||||
|
||||
static const GTypeInfo gui_model_type_info = {
|
||||
.class_size = sizeof(GuiModelClass),
|
||||
.base_init = NULL,
|
||||
.base_finalize = NULL,
|
||||
.class_init = (GClassInitFunc)__gui_model_class_init,
|
||||
.class_finalize = NULL,
|
||||
.class_data = NULL,
|
||||
.instance_size = sizeof(GuiModel),
|
||||
.n_preallocs = 0,
|
||||
.instance_init = (GInstanceInitFunc)__gui_model_init,
|
||||
};
|
||||
|
||||
static const GInterfaceInfo gui_tree_model = {
|
||||
.interface_init = (GInterfaceInitFunc)__gui_tree_model_init,
|
||||
.interface_finalize = NULL,
|
||||
.interface_data = NULL,
|
||||
};
|
||||
|
||||
|
||||
static void __gui_model_set_runtime(void)
|
||||
{
|
||||
|
@ -307,7 +313,7 @@ void gui_model_clear(struct queue *queue, unsigned int n)
|
|||
GtkTreePath *path;
|
||||
unsigned int i;
|
||||
|
||||
if (queue != queue_model->gm_queue)
|
||||
if (!queue_model || queue != queue_model->gm_queue)
|
||||
return;
|
||||
|
||||
path = gtk_tree_path_new_from_indices(n - 1, -1);
|
||||
|
@ -351,7 +357,7 @@ void gui_model_set_queue(struct queue *queue)
|
|||
|
||||
struct queue *gui_model_get_queue(void)
|
||||
{
|
||||
return queue_model->gm_queue;
|
||||
return queue_model ? queue_model->gm_queue : NULL;
|
||||
}
|
||||
|
||||
struct track * gui_model_path_get_track(GtkTreePath *path)
|
||||
|
@ -361,22 +367,3 @@ struct track * gui_model_path_get_track(GtkTreePath *path)
|
|||
__gui_model_get_iter(GTK_TREE_MODEL(queue_model), &iter, path);
|
||||
return gui_model_iter_get_track(&iter);
|
||||
}
|
||||
|
||||
|
||||
static const GTypeInfo gui_model_type_info = {
|
||||
.class_size = sizeof(GuiModelClass),
|
||||
.base_init = NULL,
|
||||
.base_finalize = NULL,
|
||||
.class_init = (GClassInitFunc)__gui_model_class_init,
|
||||
.class_finalize = NULL,
|
||||
.class_data = NULL,
|
||||
.instance_size = sizeof(GuiModel),
|
||||
.n_preallocs = 0,
|
||||
.instance_init = (GInstanceInitFunc)__gui_model_init,
|
||||
};
|
||||
|
||||
static const GInterfaceInfo gui_tree_model = {
|
||||
.interface_init = (GInterfaceInitFunc)__gui_tree_model_init,
|
||||
.interface_finalize = NULL,
|
||||
.interface_data = NULL,
|
||||
};
|
||||
|
|
|
@ -55,20 +55,18 @@ struct core_init_data init_data = {
|
|||
|
||||
static void test_init()
|
||||
{
|
||||
GtkTreeModel *treemodel;
|
||||
GuiModel *model;
|
||||
GuiModel *model = gui_model_get();
|
||||
GtkTreeModel *treemodel = GTK_TREE_MODEL(model);
|
||||
GType type;
|
||||
|
||||
gui_model_init();
|
||||
model = gui_model_get();
|
||||
g_assert_null(gui_model_get_queue());
|
||||
gui_model_set_queue(playlist_get_queue(PL_SYSTEM, "Collection"));
|
||||
g_assert_nonnull(model);
|
||||
g_assert_true(GTK_IS_TREE_MODEL(model));
|
||||
g_assert(gui_model_get_queue() == playlist_get_queue(PL_SYSTEM, "Collection"));
|
||||
|
||||
treemodel = GTK_TREE_MODEL(model);
|
||||
g_assert_cmpuint(gtk_tree_model_get_flags(treemodel), ==, GTK_TREE_MODEL_LIST_ONLY);
|
||||
g_assert_cmpuint(gtk_tree_model_get_flags(treemodel), ==,
|
||||
GTK_TREE_MODEL_LIST_ONLY);
|
||||
g_assert_cmpuint(gtk_tree_model_get_n_columns(treemodel), ==, 11);
|
||||
|
||||
type = gtk_tree_model_get_column_type(treemodel, GUI_MODEL_TRACK_NR);
|
||||
|
@ -93,20 +91,15 @@ static void test_init()
|
|||
g_assert_cmpuint(type, ==, G_TYPE_STRING);
|
||||
type = gtk_tree_model_get_column_type(treemodel, GUI_MODEL_FONT);
|
||||
g_assert_cmpuint(type, ==, G_TYPE_STRING);
|
||||
|
||||
gui_model_deinit();
|
||||
g_assert_false(G_IS_OBJECT(model));
|
||||
}
|
||||
|
||||
static void __test_empty_subprocess()
|
||||
{
|
||||
GtkTreeModel *model;
|
||||
GtkTreeModel *model = GTK_TREE_MODEL(gui_model_get());
|
||||
GtkTreeIter iter;
|
||||
GValue value;
|
||||
GType type;
|
||||
|
||||
gui_model_init();
|
||||
model = GTK_TREE_MODEL(gui_model_get());
|
||||
gui_model_set_queue(playlist_get_queue(PL_SYSTEM, "Collection"));
|
||||
memset(&value, 0, sizeof(GValue));
|
||||
|
||||
|
@ -148,8 +141,6 @@ static void __test_empty_subprocess()
|
|||
g_assert_cmpuint(gtk_tree_model_iter_n_children(model, NULL), ==, 0);
|
||||
g_assert_false(gtk_tree_model_iter_nth_child(model, &iter, NULL, 3));
|
||||
g_assert_false(gtk_tree_model_iter_parent(model, &iter, &iter));
|
||||
|
||||
gui_model_deinit();
|
||||
}
|
||||
|
||||
static void test_empty()
|
||||
|
@ -165,16 +156,14 @@ static void test_empty()
|
|||
|
||||
static void test_model()
|
||||
{
|
||||
GtkLabel *label = GTK_LABEL(gui_builder_widget("o_runtime"));
|
||||
GtkTreeModel *model = GTK_TREE_MODEL(gui_model_get());
|
||||
struct db_entry *dbe, *next;
|
||||
struct track *track;
|
||||
GtkTreeModel *model;
|
||||
GtkTreePath *path;
|
||||
GtkTreeIter iter;
|
||||
GtkLabel *label;
|
||||
GValue value;
|
||||
|
||||
model = GTK_TREE_MODEL(gui_model_get());
|
||||
label = GTK_LABEL(gui_builder_widget("o_runtime"));
|
||||
gui_model_set_queue(playlist_get_queue(PL_SYSTEM, "Collection"));
|
||||
g_assert_cmpstr(gtk_label_get_text(label), ==, "");
|
||||
memset(&value, 0, sizeof(GValue));
|
||||
|
@ -285,13 +274,12 @@ static void test_model()
|
|||
db_for_each(dbe, next, track_db_get())
|
||||
playlist_remove(PL_SYSTEM, "Collection", TRACK(dbe));
|
||||
g_assert_cmpuint(count_delete, ==, 29);
|
||||
|
||||
core_deinit();
|
||||
gui_model_deinit();
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int ret;
|
||||
|
||||
gtk_init(&argc, NULL);
|
||||
core_init(&argc, NULL, &init_data);
|
||||
gui_builder_init("share/ocarina/ocarina.ui");
|
||||
|
@ -299,8 +287,16 @@ int main(int argc, char **argv)
|
|||
while (idle_run_task()) {};
|
||||
|
||||
g_test_init(&argc, &argv, NULL);
|
||||
g_test_add_func("/Gui/Queue Model/Init", test_init);
|
||||
g_test_add_func("/Gui/Queue Model/Empty", test_empty);
|
||||
g_test_add_func("/Gui/Queue Model", test_model);
|
||||
return g_test_run();
|
||||
g_test_add_func("/Gui/Model/Init", test_init);
|
||||
g_test_add_func("/Gui/Model/Empty", test_empty);
|
||||
g_test_add_func("/Gui/Model/Tracks", test_model);
|
||||
ret = g_test_run();
|
||||
|
||||
gui_model_deinit();
|
||||
gui_builder_deinit();
|
||||
core_deinit();
|
||||
|
||||
g_assert_false(G_IS_OBJECT(gui_model_get()));
|
||||
g_assert_null(gui_model_get_queue());
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue