ocarina: Get list of selected IDs from the songlist

This commit is contained in:
Bryan Schumaker 2011-12-11 15:33:10 -05:00
parent 781dedfe13
commit 74ab92ea6f
3 changed files with 25 additions and 0 deletions

View File

@ -43,6 +43,7 @@ class SongList : public libsaria::SourceModel
GtkWidget *treeview;
GtkListStore *liststore;
GtkTreeModel *filter;
GtkTreeSelection *selection;
GtkCellRenderer *textcell;
void set_label_text();
@ -61,6 +62,7 @@ class SongList : public libsaria::SourceModel
void fill();
void clear();
void refilter();
void list_selected_ids(list<ino_t> &);
gint right_click(guint, guint64);
};

View File

@ -51,6 +51,13 @@ static GtkWidget *setup_treeview(GtkTreeModel *model, SongList *list)
return treeview;
}
static GtkTreeSelection *setup_selection(GtkWidget *treeview)
{
GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE);
return selection;
}
static GtkWidget *setup_window(GtkWidget *treeview)
{
GtkWidget *window = gtk_scrolled_window_new(NULL, NULL);
@ -98,6 +105,7 @@ void SongList::init(string text, SongListFuncs *funcs, list <MenuItem> *menu)
liststore = setup_liststore();
filter = setup_filter(liststore);
treeview = setup_treeview(filter, this);
selection = setup_selection(treeview);
window = setup_window(treeview);
setup_columns(textcell, treeview);

View File

@ -1,4 +1,5 @@
#include <list>
#include <sstream>
using namespace std;
@ -30,6 +31,20 @@ void songlist_row_activated(GtkTreeView *treeview, GtkTreePath *path,
libsaria::library::play_id(inode);
}
static void selected_foreach_func(GtkTreeModel *model, GtkTreePath *path,
GtkTreeIter *iter, gpointer data)
{
list<ino_t> *res = (list<ino_t> *) data;
ino_t inode;
gtk_tree_model_get(model, iter, 0, &inode, -1);
res->push_back(inode);
}
void SongList::list_selected_ids(list<ino_t> &res)
{
gtk_tree_selection_selected_foreach(selection, selected_foreach_func, &res);
}
GtkWidget *SongList::get_window()
{
return window;