gui/model: Use queue positions instead of queue iterator

This helps simplify the code, since we can reuse
gui_model_iter_nth_child() here.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2016-08-21 09:50:13 -04:00
parent 010969c7b3
commit 619ea0b559
2 changed files with 9 additions and 21 deletions

View File

@ -60,16 +60,13 @@ static gboolean __gui_model_get_iter(GtkTreeModel *model, GtkTreeIter *iter,
static GtkTreePath *__gui_model_get_path(GtkTreeModel *model, GtkTreeIter *iter) static GtkTreePath *__gui_model_get_path(GtkTreeModel *model, GtkTreeIter *iter)
{ {
struct queue_iter *q_it;
GtkTreePath *path; GtkTreePath *path;
g_return_val_if_fail(iter != NULL, FALSE); g_return_val_if_fail(iter != NULL, FALSE);
g_return_val_if_fail(iter->user_data, FALSE);
g_return_val_if_fail(iter->user_data2, FALSE); g_return_val_if_fail(iter->user_data2, FALSE);
q_it = iter->user_data;
path = gtk_tree_path_new(); path = gtk_tree_path_new();
gtk_tree_path_append_index(path, q_it->it_pos); gtk_tree_path_append_index(path, GPOINTER_TO_UINT(iter->user_data));
return path; return path;
} }
@ -127,20 +124,13 @@ static void __gui_model_get_value(GtkTreeModel *model, GtkTreeIter *iter,
static gboolean __gui_model_iter_next(GtkTreeModel *model, GtkTreeIter *iter) static gboolean __gui_model_iter_next(GtkTreeModel *model, GtkTreeIter *iter)
{ {
GuiModel *gqm = GUI_MODEL(model); unsigned int pos;
g_return_val_if_fail(iter != NULL, FALSE); g_return_val_if_fail(iter != NULL, FALSE);
g_return_val_if_fail(iter->user_data, FALSE);
g_return_val_if_fail(iter->user_data2, FALSE); g_return_val_if_fail(iter->user_data2, FALSE);
queue_iter_next(&gqm->gm_iter); pos = GPOINTER_TO_UINT(iter->user_data) + 1;
if (gqm->gm_iter.it_iter == NULL) return __gui_model_iter_nth_child(model, iter, NULL, pos);
return FALSE;
iter->stamp = gqm->gm_stamp;
iter->user_data = &gqm->gm_iter;
iter->user_data2 = queue_iter_val(&gqm->gm_iter);
return TRUE;
} }
static gboolean __gui_model_iter_children(GtkTreeModel *model, GtkTreeIter *iter, static gboolean __gui_model_iter_children(GtkTreeModel *model, GtkTreeIter *iter,
@ -166,14 +156,14 @@ static gboolean __gui_model_iter_nth_child(GtkTreeModel *model,
GtkTreeIter *parent, GtkTreeIter *parent,
gint n) gint n)
{ {
if (parent || !cur_playlist || struct queue *queue = &cur_playlist->pl_queue;
n >= queue_size(&cur_playlist->pl_queue))
if (parent || !cur_playlist || n >= queue_size(queue))
return FALSE; return FALSE;
queue_iter_set(&cur_playlist->pl_queue, &queue_model->gm_iter, n);
iter->stamp = queue_model->gm_stamp; iter->stamp = queue_model->gm_stamp;
iter->user_data = &queue_model->gm_iter; iter->user_data = GUINT_TO_POINTER(n);
iter->user_data2 = queue_iter_val(&queue_model->gm_iter); iter->user_data2 = queue_at(queue, n);
return TRUE; return TRUE;
} }

View File

@ -28,8 +28,6 @@ enum gui_model_columns {
struct gui_model { struct gui_model {
GObject gm_parent; /* This MUST be the first member. */ GObject gm_parent; /* This MUST be the first member. */
gint gm_stamp; /* This is used to check iter validity. */ gint gm_stamp; /* This is used to check iter validity. */
struct queue_iter gm_iter; /* The current _q_iter. */
}; };
typedef struct gui_model GuiModel; typedef struct gui_model GuiModel;