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:
parent
155b9c3ee6
commit
e7d2fa5c4d
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
{
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue