gui/model: Convert iters and paths into tracks

Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
Anna Schumaker 2016-01-18 10:14:29 -05:00
parent 87e547d85d
commit ea149d57df
3 changed files with 30 additions and 4 deletions

View File

@ -286,6 +286,15 @@ void gui_queue_model_update(GuiQueueModel *model, unsigned int row)
gtk_tree_path_free(path);
}
struct track * gui_queue_model_path_get_track(GuiQueueModel *model,
GtkTreePath *path)
{
GtkTreeIter iter;
_queue_model_get_iter(GTK_TREE_MODEL(model), &iter, path);
return gui_queue_model_iter_get_track(model, &iter);
}
static const GTypeInfo queue_type_info = {
.class_size = sizeof(GuiQueueModelClass),

View File

@ -59,4 +59,17 @@ void gui_queue_model_clear(GuiQueueModel *, unsigned int);
/* Called to update a row in the model */
void gui_queue_model_update(GuiQueueModel *, unsigned int);
/* Called to convert a GtkTreeIter into a struct track */
static inline
struct track *gui_queue_model_iter_get_track(GuiQueueModel *model,
GtkTreeIter *iter)
{
g_return_val_if_fail(iter != NULL, NULL);
g_return_val_if_fail(iter->user_data2 != NULL, NULL);
return (struct track *)iter->user_data2;
}
/* Called to convert a GtkTreePath into a struct track */
struct track *gui_queue_model_path_get_track(GuiQueueModel *, GtkTreePath *);
#endif /* OCARINA_GUI_MODEL_H */

View File

@ -101,6 +101,8 @@ static void test_empty()
test_equal(gtk_tree_model_get_iter_first(model, &iter), false);
test_equal((void *)gtk_tree_model_get_path(model, &iter), NULL);
test_equal((void *)gui_queue_model_iter_get_track(GUI_QUEUE_MODEL(model),
&iter), NULL);
/* These will all trigger assertion failures ... sorry */
gtk_tree_model_get_value(model, &iter, Q_MODEL_TRACK_NR, &value);
@ -163,12 +165,14 @@ static void test_model()
/* ... and test again */
test_equal(gtk_tree_model_get_iter_first(model, &iter), true);
track = iter.user_data2;
track = gui_queue_model_iter_get_track(GUI_QUEUE_MODEL(model), &iter);
test_equal(track->tr_track, 1);
path = gtk_tree_model_get_path(model, &iter);
test_not_equal((void *)path, NULL);
test_equal(gtk_tree_path_get_indices(path)[0], 0);
test_equal((void *)gui_queue_model_path_get_track(GUI_QUEUE_MODEL(model),
path), (void *)track);
gtk_tree_path_free(path);
gtk_tree_model_get_value(model, &iter, Q_MODEL_TRACK_NR, &value);
@ -204,11 +208,11 @@ static void test_model()
g_value_unset(&value);
test_equal(gtk_tree_model_iter_next(model, &iter), true);
track = iter.user_data2;
track = gui_queue_model_iter_get_track(GUI_QUEUE_MODEL(model), &iter);
test_equal(track->tr_track, 2);
test_equal(gtk_tree_model_iter_children(model, &iter, NULL), true);
track = iter.user_data2;
track = gui_queue_model_iter_get_track(GUI_QUEUE_MODEL(model), &iter);
test_equal(track->tr_track, 1);
test_equal(gtk_tree_model_iter_has_child(model, &iter), false);
@ -216,7 +220,7 @@ static void test_model()
test_equal(gtk_tree_model_iter_n_children(model, NULL), 13);
test_equal(gtk_tree_model_iter_nth_child(model, &iter, NULL, 3), true);
track = iter.user_data2;
track = gui_queue_model_iter_get_track(GUI_QUEUE_MODEL(model), &iter);
test_equal(track->tr_track, 4);
test_equal(gtk_tree_model_iter_parent(model, &iter, &iter), false);