gui/sidebar: Add functions for appending child playlists

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2016-08-25 11:41:40 -04:00
parent 831a5379e5
commit 9885c60bff
4 changed files with 55 additions and 10 deletions

View File

@ -323,14 +323,19 @@ void gui_playlist_init()
/* Add "Playlists" header and playlists. */
gui_sidebar_iter_find(&parent, "Playlists", PL_MAX_TYPE);
__playlist_add(&parent, "Favorites", "emblem-favorite", PL_SYSTEM);
__playlist_add(&parent, "Hidden", "window-close", PL_SYSTEM);
gui_sidebar_iter_append_child(&parent, playlist_get(PL_SYSTEM, "Favorites"),
"emblem-favorite");
gui_sidebar_iter_append_child(&parent, playlist_get(PL_SYSTEM, "Hidden"),
"window-close");
/* Add "Dynamic" header. */
gui_sidebar_iter_find(&parent, "Dynamic", PL_MAX_TYPE);
__playlist_add(&parent, "Most Played", "go-up", PL_SYSTEM);
__playlist_add(&parent, "Least Played", "go-down", PL_SYSTEM);
__playlist_add(&parent, "Unplayed", "audio-x-generic", PL_SYSTEM);
gui_sidebar_iter_append_child(&parent, playlist_get(PL_SYSTEM, "Most Played"),
"go-up");
gui_sidebar_iter_append_child(&parent, playlist_get(PL_SYSTEM, "Least Played"),
"go-down");
gui_sidebar_iter_append_child(&parent, playlist_get(PL_SYSTEM, "Unplayed"),
"audio-x-generic");
gtk_tree_selection_set_select_function(
gtk_tree_view_get_selection(treeview),

View File

@ -36,6 +36,15 @@ static void __gui_sidebar_set(GtkTreeIter *iter, const gchar *name,
SB_TYPE, type, -1);
}
static void __gui_sidebar_set_playlist(GtkTreeIter *iter,
struct playlist *playlist,
const gchar *image)
{
gchar *text = __gui_sidebar_size_str(playlist);
__gui_sidebar_set(iter, text, image, playlist->pl_type);
g_free(text);
}
static void __gui_sidebar_add_header(GtkTreeIter *iter, const gchar *name,
const gchar *image)
{
@ -79,6 +88,11 @@ gboolean gui_sidebar_iter_next(GtkTreeIter *iter)
return gtk_tree_model_iter_next(gui_sidebar_model(), iter);
}
gboolean gui_sidebar_iter_down(GtkTreeIter *iter, GtkTreeIter *child)
{
return gtk_tree_model_iter_children(gui_sidebar_model(), child, iter);
}
gchar *gui_sidebar_iter_name(GtkTreeIter *iter)
{
gchar *text = NULL, *parsed = NULL, *name, **split;
@ -110,12 +124,17 @@ enum playlist_type_t gui_sidebar_iter_type(GtkTreeIter *iter)
void gui_sidebar_iter_add(GtkTreeIter *iter, struct playlist *playlist,
const gchar *image)
{
gchar *text = __gui_sidebar_size_str(playlist);
GtkTreeIter new;
gtk_tree_store_insert_before(gui_sidebar_store(), &new, NULL, iter);
__gui_sidebar_set(&new, text, image, playlist->pl_type);
g_free(text);
__gui_sidebar_set_playlist(&new, playlist, image);
}
void gui_sidebar_iter_append_child(GtkTreeIter *iter, struct playlist *playlist,
const gchar *image)
{
GtkTreeIter new;
gtk_tree_store_insert_before(gui_sidebar_store(), &new, iter, NULL);
__gui_sidebar_set_playlist(&new, playlist, image);
}
gboolean gui_sidebar_iter_find(GtkTreeIter *iter, const gchar *name,

View File

@ -15,6 +15,9 @@ gboolean gui_sidebar_iter_first(GtkTreeIter *);
/* Called to advance the iterator to the next playlist. */
gboolean gui_sidebar_iter_next(GtkTreeIter *);
/* Called to set an iterator to the first child of the parent iterator. */
gboolean gui_sidebar_iter_down(GtkTreeIter *, GtkTreeIter *);
/*
* Called to find the name of the playlist at the given iterator.
* NOTE: This function returns a new string that must be freed with g_free().
@ -27,6 +30,10 @@ enum playlist_type_t gui_sidebar_iter_type(GtkTreeIter *);
/* Called to add a playlist at the current iterator. */
void gui_sidebar_iter_add(GtkTreeIter *, struct playlist *, const gchar *);
/* Called to append a child playlist to the current iterator. */
void gui_sidebar_iter_append_child(GtkTreeIter *, struct playlist *,
const gchar *);
/*
* Called to find a playlist with the given name and type,
* starting from the current iterator position.

View File

@ -15,7 +15,7 @@ struct core_init_data init_data;
static void test_sidebar()
{
GtkTreeIter iter;
GtkTreeIter iter, child;
unsigned int i;
g_assert_nonnull(gui_sidebar_store());
@ -51,6 +51,20 @@ static void test_sidebar()
g_assert_cmpstr_free(gui_sidebar_iter_name(&iter), ==, "Playlists");
g_assert_cmpuint(gui_sidebar_iter_type(&iter), ==, PL_MAX_TYPE);
g_assert_false(gui_sidebar_iter_down(&iter, &child));
gui_sidebar_iter_append_child(&iter, playlist_get(PL_SYSTEM, "Favorites"),
NULL);
gui_sidebar_iter_append_child(&iter, playlist_get(PL_SYSTEM, "Hidden"),
NULL);
g_assert_true(gui_sidebar_iter_down(&iter, &child));
for (i = 0; i < 2; i++) {
g_assert_cmpstr_free(gui_sidebar_iter_name(&child), ==,
(i == 0) ? "Favorites" : "Hidden");
g_assert_cmpuint(gui_sidebar_iter_type(&child), ==, PL_SYSTEM);
gui_sidebar_iter_next(&child);
}
g_assert_false(gui_sidebar_iter_find(&iter, "History", PL_SYSTEM));
gui_sidebar_iter_first(&iter);
g_assert_true(gui_sidebar_iter_find(&iter, "History", PL_SYSTEM));