gui/treeview: Add a function for listing selected tracks

This will be used by higher layers to add tracks to playlists.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2016-09-03 10:39:26 -04:00
parent 155b9c3ee6
commit e7d2fa5c4d
3 changed files with 45 additions and 0 deletions

View File

@ -217,3 +217,22 @@ void gui_treeview_scroll()
gtk_tree_view_scroll_to_cell(gui_treeview(), path, NULL, true, 0.5, 0.5);
gtk_tree_path_free(path);
}
GList *gui_treeview_list_selected_tracks(void)
{
GList *rows, *cur, *list = NULL;
GtkTreeSelection *selection;
selection = gtk_tree_view_get_selection(gui_treeview());
rows = gtk_tree_selection_get_selected_rows(selection, NULL);
cur = g_list_first(rows);
while (cur) {
list = g_list_append(list, gui_filter_path_get_track(cur->data));
cur = g_list_next(cur);
}
g_list_free_full(rows, (GDestroyNotify) gtk_tree_path_free);
gtk_tree_selection_unselect_all(selection);
return list;
}

View File

@ -17,6 +17,12 @@ void gui_treeview_set_playlist(struct playlist *);
/* Called to scroll the treeview to the current track. */
void gui_treeview_scroll();
/*
* Called to get a list of selected tracks.
* NOTE: The caller is responsible for freeing the list with g_list_free().
*/
GList *gui_treeview_list_selected_tracks(void);
/* Called to access the treeview widget. */
static inline GtkTreeView *gui_treeview()
{

View File

@ -76,7 +76,13 @@ void test_treeview_init()
void test_treeview_select()
{
GtkTreeSelection *selection;
struct track *track;
GtkTreePath *path;
GList *list;
unsigned int i;
selection = gtk_tree_view_get_selection(gui_treeview());
gui_treeview_set_playlist(playlist_get(PL_SYSTEM, "Collection"));
g_assert(gui_model_get_playlist() ==
@ -88,6 +94,20 @@ void test_treeview_select()
gtk_tree_view_row_activated(gui_treeview(), path, NULL);
g_assert_cmpuint(audio_cur_track()->tr_track, ==, 2);
gtk_tree_path_free(path);
gtk_tree_selection_unselect_all(selection);
g_assert_null(gui_treeview_list_selected_tracks());
gtk_tree_selection_select_all(selection);
list = gui_treeview_list_selected_tracks();
g_assert_cmpuint(g_list_length(list), ==, 13);
for (i = 0; i < 13; i++) {
track = (struct track *)g_list_nth_data(list, i);
g_assert_nonnull(track);
g_assert_cmpuint(track->tr_track, ==, i + 1);
}
g_list_free(list);
g_assert_cmpuint(gtk_tree_selection_count_selected_rows(selection), ==, 0);
}
void test_treeview_sort()