gui/sidebar: Add functions for setting and getting editable state

I want to be able to change this when the user middle-clicks a row, so
let's start by adding in some support functions.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2017-08-25 13:13:15 -04:00
parent 79accb5bb0
commit 7e303fa2b1
4 changed files with 40 additions and 0 deletions

View File

@ -236,6 +236,13 @@ enum playlist_type_t gui_sidebar_iter_type(GtkTreeIter *iter)
return type;
}
bool gui_sidebar_iter_editable(GtkTreeIter *iter)
{
gboolean editable;
gtk_tree_model_get(gui_sidebar_model(), iter, SB_EDITABLE, &editable, -1);
return editable == TRUE;
}
struct playlist *gui_sidebar_iter_playlist(GtkTreeIter *iter)
{
enum playlist_type_t type = gui_sidebar_iter_type(iter);
@ -314,6 +321,15 @@ void gui_sidebar_iter_select(GtkTreeIter *iter)
gtk_tree_selection_select_iter(selection, &filter);
}
bool gui_sidebar_iter_set_editable(GtkTreeIter *iter, bool editable)
{
enum playlist_type_t type = gui_sidebar_iter_type(iter);
if (type != PL_USER)
return false;
gtk_tree_store_set(gui_sidebar_store(), iter, SB_EDITABLE, editable, -1);
return true;
}
void gui_sidebar_filter_path_select(GtkTreePath *path)
{
GtkTreeModel *model = GTK_TREE_MODEL(gui_sidebar_filter());

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 editable state of the playlist at the given iterator. */
bool gui_sidebar_iter_editable(GtkTreeIter *);
/* Called to find the playlist at the given iterator. */
struct playlist *gui_sidebar_iter_playlist(GtkTreeIter *);
@ -48,6 +51,9 @@ void gui_sidebar_iter_update(GtkTreeIter *);
/* Called to select the row at the current iterator. */
void gui_sidebar_iter_select(GtkTreeIter *);
/* Called to set the current iterator as editable. */
bool gui_sidebar_iter_set_editable(GtkTreeIter *, bool);
/* Called to set the playlist at the given iterator as the default. */
void gui_sidebar_filter_path_select(GtkTreePath *);

View File

@ -32,18 +32,30 @@ static void test_user()
g_assert_true(gui_sidebar_iter_down(&iter, &child));
g_assert_cmpstr_free(gui_sidebar_iter_name(&child), ==, "Favorites");
g_assert_cmpuint(gui_sidebar_iter_type(&child), ==, PL_SYSTEM);
g_assert_false(gui_sidebar_iter_editable(&child));
g_assert_true(gui_sidebar_iter_next(&child));
g_assert_cmpstr_free(gui_sidebar_iter_name(&child), ==, "Hidden");
g_assert_cmpuint(gui_sidebar_iter_type(&child), ==, PL_SYSTEM);
g_assert_false(gui_sidebar_iter_editable(&child));
g_assert_true(gui_sidebar_iter_next(&child));
g_assert_cmpstr_free(gui_sidebar_iter_name(&child), ==, "Test 1");
g_assert_cmpuint(gui_sidebar_iter_type(&child), ==, PL_USER);
g_assert_true(gui_sidebar_iter_editable(&child));
g_assert_true( gui_sidebar_iter_set_editable(&child, false));
g_assert_false(gui_sidebar_iter_editable(&child));
g_assert_true( gui_sidebar_iter_set_editable(&child, true));
g_assert_true( gui_sidebar_iter_editable(&child));
g_assert_true(gui_sidebar_iter_next(&child));
g_assert_cmpstr_free(gui_sidebar_iter_name(&child), ==, "Test 2");
g_assert_cmpuint(gui_sidebar_iter_type(&child), ==, PL_USER);
g_assert_true(gui_sidebar_iter_editable(&child));
g_assert_true( gui_sidebar_iter_set_editable(&child, false));
g_assert_false(gui_sidebar_iter_editable(&child));
g_assert_true( gui_sidebar_iter_set_editable(&child, true));
g_assert_true( gui_sidebar_iter_editable(&child));
list = gui_pl_user_list();
g_assert_nonnull(list);

View File

@ -156,6 +156,12 @@ static void test_sidebar_selection()
gui_sidebar_filter_path_select(path);
g_assert(playlist_current() == playlist_lookup(PL_SYSTEM, "Collection"));
g_assert_false(gui_sidebar_iter_editable(&iter));
g_assert_false(gui_sidebar_iter_set_editable(&iter, true));
g_assert_false(gui_sidebar_iter_editable(&iter));
g_assert_false(gui_sidebar_iter_set_editable(&iter, false));
g_assert_false(gui_sidebar_iter_editable(&iter));
gtk_tree_selection_unselect_all(selection);
gui_sidebar_iter_next(&iter);
gtk_tree_path_next(path);