From dc53ae271b0e285d22e198513a699fab334ca5e0 Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Tue, 4 Apr 2017 09:46:15 -0400 Subject: [PATCH] gui/sidebar: Store the row expanded setting for later use I want to use this to track if the user has expanded or collapsed any of the sidebar rows. Signed-off-by: Anna Schumaker --- gui/playlist.c | 12 ++++++++++ gui/sidebar.c | 19 ++++++++++++++++ include/gui/sidebar.h | 3 +++ share/ocarina/ocarina.ui | 2 ++ tests/gui/sidebar.c | 47 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 83 insertions(+) diff --git a/gui/playlist.c b/gui/playlist.c index 69fb5ee0..35a928e3 100644 --- a/gui/playlist.c +++ b/gui/playlist.c @@ -27,6 +27,18 @@ void __playlist_row_activated(GtkTreeView *treeview, GtkTreePath *path, __gui_playlist_update_size(playlist_cur()); } +void __playlist_row_collapsed(GtkTreeView *treeview, GtkTreeIter *iter, + GtkTreePath *path, gpointer data) +{ + gui_sidebar_filter_row_expanded(iter, false); +} + +void __playlist_row_expanded(GtkTreeView *treeview, GtkTreeIter *iter, + GtkTreePath *path, gpointer data) +{ + gui_sidebar_filter_row_expanded(iter, true); +} + static void *__playlist_init(struct queue *queue, void *data) { struct playlist *playlist = (struct playlist *)data; diff --git a/gui/sidebar.c b/gui/sidebar.c index 2511d9c1..f9d8e90e 100644 --- a/gui/sidebar.c +++ b/gui/sidebar.c @@ -83,6 +83,14 @@ static inline void __gui_sidebar_filter_iter_convert(GtkTreeIter *iter, child, iter); } +static gchar *__gui_sidebar_filter_iter_name(GtkTreeIter *iter) +{ + GtkTreeIter child; + + __gui_sidebar_filter_iter_convert(iter, &child); + return gui_sidebar_iter_name(&child); +} + static gboolean __gui_sidebar_visible_func(GtkTreeModel *model, GtkTreeIter *iter, gpointer data) @@ -317,6 +325,17 @@ void gui_sidebar_filter_path_select(GtkTreePath *path) g_free(name); } +void gui_sidebar_filter_row_expanded(GtkTreeIter *iter, bool expanded) +{ + gchar *name = __gui_sidebar_filter_iter_name(iter); + gchar *setting = g_strdup_printf("gui.sidebar.expand.%s", name); + + settings_set(setting, expanded); + + g_free(setting); + g_free(name); +} + gboolean gui_sidebar_iter_find(GtkTreeIter *iter, const gchar *name, enum playlist_type_t type) { diff --git a/include/gui/sidebar.h b/include/gui/sidebar.h index 184e9c89..de03efae 100644 --- a/include/gui/sidebar.h +++ b/include/gui/sidebar.h @@ -44,6 +44,9 @@ void gui_sidebar_iter_update(GtkTreeIter *); /* Called to set the playlist at the given iterator as the default. */ void gui_sidebar_filter_path_select(GtkTreePath *); +/* Called when a playlist treeview row is expanded or collapsed. */ +void gui_sidebar_filter_row_expanded(GtkTreeIter *, bool); + /* * Called to find a playlist with the given name and type, * starting from the current iterator position. diff --git a/share/ocarina/ocarina.ui b/share/ocarina/ocarina.ui index 0fd5c721..b50b39a9 100644 --- a/share/ocarina/ocarina.ui +++ b/share/ocarina/ocarina.ui @@ -749,6 +749,8 @@ audio-volume-medium True + + diff --git a/tests/gui/sidebar.c b/tests/gui/sidebar.c index 22bd18bf..a6937867 100644 --- a/tests/gui/sidebar.c +++ b/tests/gui/sidebar.c @@ -179,6 +179,52 @@ static void test_sidebar_pos() g_assert_cmpuint(gtk_paned_get_position(gui_sidebar()), ==, 250); } +static void test_sidebar_expand() +{ + GtkTreeModel *model = GTK_TREE_MODEL(gui_sidebar_filter()); + GtkTreeIter iter; + + g_assert_true(gtk_tree_model_get_iter_first(model, &iter)); + + g_assert_false( settings_has("gui.sidebar.expand.Collection")); + gui_sidebar_filter_row_expanded(&iter, true); + g_assert_cmpuint(settings_get("gui.sidebar.expand.Collection"), ==, 1); + g_assert_true( settings_has("gui.sidebar.expand.Collection")); + gui_sidebar_filter_row_expanded(&iter, false); + g_assert_cmpuint(settings_get("gui.sidebar.expand.Collection"), ==, 0); + + gtk_tree_model_iter_next(model, &iter); + gtk_tree_model_iter_next(model, &iter); + gtk_tree_model_iter_next(model, &iter); + + g_assert_false( settings_has("gui.sidebar.expand.Playlists")); + gui_sidebar_filter_row_expanded(&iter, true); + g_assert_cmpuint(settings_get("gui.sidebar.expand.Playlists"), ==, 1); + g_assert_true( settings_has("gui.sidebar.expand.Playlists")); + gui_sidebar_filter_row_expanded(&iter, false); + g_assert_cmpuint(settings_get("gui.sidebar.expand.Playlists"), ==, 0); + + gtk_tree_model_iter_next(model, &iter); + gtk_tree_model_iter_next(model, &iter); + + g_assert_false( settings_has("gui.sidebar.expand.Dynamic")); + gui_sidebar_filter_row_expanded(&iter, true); + g_assert_cmpuint(settings_get("gui.sidebar.expand.Dynamic"), ==, 1); + g_assert_true( settings_has("gui.sidebar.expand.Dynamic")); + gui_sidebar_filter_row_expanded(&iter, false); + g_assert_cmpuint(settings_get("gui.sidebar.expand.Dynamic"), ==, 0); + + gtk_tree_model_iter_next(model, &iter); + gtk_tree_model_iter_next(model, &iter); + + g_assert_false( settings_has("gui.sidebar.expand.Library")); + gui_sidebar_filter_row_expanded(&iter, true); + g_assert_cmpuint(settings_get("gui.sidebar.expand.Library"), ==, 1); + g_assert_true( settings_has("gui.sidebar.expand.Library")); + gui_sidebar_filter_row_expanded(&iter, false); + g_assert_cmpuint(settings_get("gui.sidebar.expand.Library"), ==, 0); +} + int main(int argc, char **argv) { int ret; @@ -195,6 +241,7 @@ int main(int argc, char **argv) g_test_add_func("/Gui/Sidebar", test_sidebar); g_test_add_func("/Gui/Sidebar/Selection", test_sidebar_selection); g_test_add_func("/Gui/Sidebar/Pos", test_sidebar_pos); + g_test_add_func("/Gui/Sidebar/Expand", test_sidebar_expand); ret = g_test_run(); core_deinit();