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 <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2017-04-04 09:46:15 -04:00
parent c9e9e3a340
commit dc53ae271b
5 changed files with 83 additions and 0 deletions

View File

@ -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;

View File

@ -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)
{

View File

@ -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.

View File

@ -749,6 +749,8 @@ audio-volume-medium</property>
<property name="enable_tree_lines">True</property>
<signal name="key-press-event" handler="__gui_sidebar_keypress" swapped="no"/>
<signal name="row-activated" handler="__playlist_row_activated" swapped="no"/>
<signal name="row-collapsed" handler="__playlist_row_collapsed" swapped="no"/>
<signal name="row-expanded" handler="__playlist_row_expanded" swapped="no"/>
<child internal-child="selection">
<object class="GtkTreeSelection" id="treeview-selection3">
<signal name="changed" handler="__gui_sidebar_selection_changed" swapped="no"/>

View File

@ -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();