gui/model: Store a GList in the GtkTreeIter

Storing the current link from the playlist should give us immediate
access to the track, rather than needing to use playlist_at() all the
time.  Additionally, we can now use g_list_next() whenever we need to do
a gtk_tree_model_iter_next()

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2016-09-21 16:15:53 -04:00
parent 1c6305e24e
commit a808cac04c
2 changed files with 16 additions and 17 deletions

View File

@ -61,23 +61,25 @@ static gboolean __gui_model_get_iter(GtkTreeModel *model, GtkTreeIter *iter,
static GtkTreePath *__gui_model_get_path(GtkTreeModel *model, GtkTreeIter *iter)
{
GtkTreePath *path;
unsigned int pos;
g_return_val_if_fail(iter != NULL, FALSE);
g_return_val_if_fail(iter->user_data2, FALSE);
g_return_val_if_fail(iter != NULL, FALSE);
g_return_val_if_fail(iter->user_data, FALSE);
path = gtk_tree_path_new();
gtk_tree_path_append_index(path, GPOINTER_TO_UINT(iter->user_data));
pos = playlist_iter_index(cur_playlist, iter->user_data);
gtk_tree_path_append_index(path, pos);
return path;
}
static void __gui_model_get_value(GtkTreeModel *model, GtkTreeIter *iter,
gint column, GValue *value)
{
struct track *track = iter->user_data2;
struct track *track = playlist_iter_track(iter->user_data);
gchar *str;
g_return_if_fail(iter != NULL);
g_return_if_fail(iter->user_data2 != NULL);
g_return_if_fail(iter->user_data != NULL);
g_return_if_fail(column < GUI_MODEL_N_COLUMNS);
g_value_init(value, gui_model_columns[column]);
@ -124,13 +126,11 @@ static void __gui_model_get_value(GtkTreeModel *model, GtkTreeIter *iter,
static gboolean __gui_model_iter_next(GtkTreeModel *model, GtkTreeIter *iter)
{
unsigned int pos;
g_return_val_if_fail(iter != NULL, FALSE);
g_return_val_if_fail(iter->user_data, FALSE);
g_return_val_if_fail(iter != NULL, FALSE);
g_return_val_if_fail(iter->user_data2, FALSE);
pos = GPOINTER_TO_UINT(iter->user_data) + 1;
return __gui_model_iter_nth_child(model, iter, NULL, pos);
iter->user_data = playlist_iter_next(iter->user_data);
return iter->user_data != NULL;
}
static gboolean __gui_model_iter_children(GtkTreeModel *model, GtkTreeIter *iter,
@ -159,10 +159,9 @@ static gboolean __gui_model_iter_nth_child(GtkTreeModel *model,
if (parent || !cur_playlist || n >= playlist_size(cur_playlist))
return FALSE;
iter->stamp = gui_model->gm_stamp;
iter->user_data = GUINT_TO_POINTER(n);
iter->user_data2 = playlist_at(cur_playlist, n);
return TRUE;
iter->stamp = gui_model->gm_stamp;
iter->user_data = playlist_iter_get(cur_playlist, n);
return iter->user_data != NULL;
}
static gboolean __gui_model_iter_parent(GtkTreeModel *model, GtkTreeIter *iter,

View File

@ -74,8 +74,8 @@ struct playlist *gui_model_get_playlist(void);
static inline struct track *gui_model_iter_get_track(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;
g_return_val_if_fail(iter->user_data != NULL, NULL);
return playlist_iter_track(iter->user_data);
}
/* Called to convert a GtkTreePath into a struct track */