gui/sidebar: Add a gui_sidebar_iter_playlist() function

It's frequently useful to get the playlist directly, rather than looking
up type and name first.  Let's add a function to do just that!

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2016-09-10 14:03:11 -04:00
parent 4d68ce8ce6
commit 846f7df9c1
3 changed files with 23 additions and 18 deletions

View File

@ -126,22 +126,15 @@ void __gui_sidebar_selection_changed(GtkTreeSelection *selection, gpointer data)
GtkTreeModel *model = GTK_TREE_MODEL(gui_sidebar_filter());
bool active = false, sensitive = false;
struct playlist *playlist = NULL;
enum playlist_type_t type;
GtkTreeIter iter, child;
gchar *name;
if (gtk_tree_selection_get_selected(selection, &model, &iter)) {
__gui_sidebar_filter_iter_convert(&iter, &child);
name = gui_sidebar_iter_name(&child);
type = gui_sidebar_iter_type(&child);
playlist = playlist_get(type, name);
active = playlist_get_random(type, name);
sensitive = (type != PL_SYSTEM) ||
!string_match(name, "History");
g_free(name);
playlist = gui_sidebar_iter_playlist(&child);
active = playlist_get_random(playlist->pl_type,
playlist->pl_name);
sensitive = (playlist != playlist_get(PL_SYSTEM, "History"));
}
gui_treeview_set_playlist(playlist);
@ -251,6 +244,16 @@ enum playlist_type_t gui_sidebar_iter_type(GtkTreeIter *iter)
return type;
}
struct playlist *gui_sidebar_iter_playlist(GtkTreeIter *iter)
{
enum playlist_type_t type = gui_sidebar_iter_type(iter);
gchar *name = gui_sidebar_iter_name(iter);
struct playlist *playlist = playlist_get(type, name);
g_free(name);
return playlist;
}
void gui_sidebar_iter_add(GtkTreeIter *iter, struct playlist *playlist,
const gchar *image)
{
@ -291,17 +294,14 @@ void gui_sidebar_iter_append_child(GtkTreeIter *iter, struct playlist *playlist,
void gui_sidebar_iter_update(GtkTreeIter *iter)
{
enum playlist_type_t type = gui_sidebar_iter_type(iter);
gchar *name, *text;
struct playlist *playlist = gui_sidebar_iter_playlist(iter);
gchar *text;
if (type >= PL_MAX_TYPE)
if (!playlist)
return;
name = gui_sidebar_iter_name(iter);
text = __gui_sidebar_size_str(playlist_get(type, name));
text = __gui_sidebar_size_str(playlist);
gtk_tree_store_set(gui_sidebar_store(), iter, SB_NAME, text, -1);
g_free(name);
g_free(text);
}

View File

@ -27,6 +27,9 @@ gchar *gui_sidebar_iter_name(GtkTreeIter *);
/* Called to find the type of the playlist at the given iterator. */
enum playlist_type_t gui_sidebar_iter_type(GtkTreeIter *);
/* Called to find the playlist at the given iterator. */
struct playlist *gui_sidebar_iter_playlist(GtkTreeIter *);
/* Called to add a playlist at the current iterator. */
void gui_sidebar_iter_add(GtkTreeIter *, struct playlist *, const gchar *);

View File

@ -78,6 +78,8 @@ static void test_sidebar()
g_assert_true(gui_sidebar_iter_find(&iter, "History", PL_SYSTEM));
g_assert_cmpstr_free(gui_sidebar_iter_name(&iter), ==, "History");
g_assert_cmpuint(gui_sidebar_iter_type(&iter), ==, PL_SYSTEM);
g_assert(gui_sidebar_iter_playlist(&iter) ==
playlist_get(PL_SYSTEM, "History"));
g_assert_true(gui_sidebar_iter_find(&iter, "Dynamic", PL_MAX_TYPE));
g_assert_false(gui_sidebar_iter_down(&iter, &child));