ocarina: Refilter the playlist
I don't change what can play as a result, but at least I can find songs again! Signed-off-by: Bryan Schumaker <bjschuma@gmail.com>
This commit is contained in:
parent
235ac70033
commit
3caea974fe
|
@ -14,8 +14,10 @@ namespace ocarina
|
|||
GtkWidget *name;
|
||||
GtkWidget *number;
|
||||
GtkWidget *box;
|
||||
GtkWidget *entry;
|
||||
GtkWidget *treeview;
|
||||
GtkListStore *liststore;
|
||||
GtkTreeModel *filter;
|
||||
GtkTreeSelection *treesel;
|
||||
|
||||
void set_label_text();
|
||||
|
@ -36,6 +38,7 @@ namespace ocarina
|
|||
|
||||
void set_playlist(libsaria::Playlist *);
|
||||
void renumbered(int);
|
||||
void refilter();
|
||||
void prepare_for_removal();
|
||||
|
||||
void goto_index(unsigned int);
|
||||
|
|
|
@ -16,6 +16,7 @@ namespace ocarina
|
|||
void Playlist::modify_prepare()
|
||||
{
|
||||
gtk_widget_freeze_child_notify(treeview);
|
||||
gtk_tree_view_set_model(GTK_TREE_VIEW(treeview), NULL);
|
||||
}
|
||||
|
||||
void Playlist::insert(libsaria::Track *track, unsigned int index)
|
||||
|
@ -35,6 +36,7 @@ namespace ocarina
|
|||
void Playlist::modify_done()
|
||||
{
|
||||
gtk_widget_thaw_child_notify(treeview);
|
||||
gtk_tree_view_set_model(GTK_TREE_VIEW(treeview), filter);
|
||||
set_label_text();
|
||||
}
|
||||
|
||||
|
|
|
@ -18,6 +18,13 @@ static void selected_foreach_list(GtkTreeModel *model, GtkTreePath *path,
|
|||
tracks->push_back(track);
|
||||
}
|
||||
|
||||
static void do_filter(GtkWidget *entry, gpointer d)
|
||||
{
|
||||
string text = gtk_entry_get_text(GTK_ENTRY(entry));
|
||||
ocarina::Playlist *plist = (ocarina::Playlist *)d;
|
||||
plist->get_playlist()->set_filter_text(text);
|
||||
}
|
||||
|
||||
namespace ocarina
|
||||
{
|
||||
|
||||
|
@ -131,6 +138,11 @@ namespace ocarina
|
|||
|
||||
gtk_label_set_justify(GTK_LABEL(name), GTK_JUSTIFY_RIGHT);
|
||||
gtk_misc_set_alignment(GTK_MISC(name), 1.0, 0.0);
|
||||
|
||||
entry = gtk_entry_new();
|
||||
g_signal_connect(entry, "changed", G_CALLBACK(do_filter), this);
|
||||
//g_signal_connect(entry, "key-press-event", G_CALLBACK(entry_keypress), this);
|
||||
gtk_box_pack_start(GTK_BOX(box), entry, FALSE, FALSE, 0);
|
||||
setup_treeview();
|
||||
|
||||
gtk_box_pack_start(GTK_BOX(label_box), number, FALSE, FALSE, 0);
|
||||
|
|
|
@ -46,6 +46,15 @@ static void track_selected(GtkWidget *treeview, GtkTreePath *path,
|
|||
track->play_now();
|
||||
}
|
||||
|
||||
static gboolean do_filter(GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
|
||||
{
|
||||
libsaria::Track *track;
|
||||
ocarina::Playlist *plist = (ocarina::Playlist *)data;
|
||||
|
||||
gtk_tree_model_get(model, iter, 0, &track, -1);
|
||||
return plist->get_playlist()->is_visible(track);
|
||||
}
|
||||
|
||||
static GtkListStore *setup_liststore(GtkWidget *treeview)
|
||||
{
|
||||
GtkListStore *liststore;
|
||||
|
@ -100,6 +109,10 @@ namespace ocarina
|
|||
treeview = gtk_tree_view_new();
|
||||
liststore = setup_liststore(treeview);
|
||||
|
||||
filter = gtk_tree_model_filter_new(GTK_TREE_MODEL(liststore), NULL);
|
||||
gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(filter),
|
||||
do_filter, this, NULL);
|
||||
|
||||
treesel = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
|
||||
gtk_tree_selection_set_mode(treesel, GTK_SELECTION_MULTIPLE);
|
||||
|
||||
|
@ -110,7 +123,7 @@ namespace ocarina
|
|||
g_signal_connect(treeview, "unmap", G_CALLBACK(unmapped), this);
|
||||
|
||||
gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(treeview), TRUE);
|
||||
gtk_tree_view_set_model(GTK_TREE_VIEW(treeview), GTK_TREE_MODEL(liststore));
|
||||
gtk_tree_view_set_model(GTK_TREE_VIEW(treeview), filter);
|
||||
gtk_tree_view_set_tooltip_column(GTK_TREE_VIEW(treeview), 7);
|
||||
gtk_tree_view_set_search_column(GTK_TREE_VIEW(treeview), -1);
|
||||
|
||||
|
@ -121,4 +134,11 @@ namespace ocarina
|
|||
gtk_box_pack_start(GTK_BOX(box), scroll_win, TRUE, TRUE, 0);
|
||||
}
|
||||
|
||||
void Playlist::refilter()
|
||||
{
|
||||
modify_prepare();
|
||||
gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(filter));
|
||||
modify_done();
|
||||
}
|
||||
|
||||
}; /* Namespace: ocarina */
|
||||
|
|
|
@ -73,7 +73,11 @@ static void window_state(GtkWidget *widget, GdkEvent *event, gpointer data)
|
|||
static gboolean key_pressed(GtkWidget *widget, GdkEvent *event, gpointer data)
|
||||
{
|
||||
string key = gdk_keyval_name(event->key.keyval);
|
||||
println("Window handling key press (1)");
|
||||
GtkWidget *focus = gtk_window_get_focus(GTK_WINDOW(win));
|
||||
|
||||
if (!(focus == NULL || focus == win))
|
||||
return FALSE;
|
||||
println("Window handling key press (1): " + key);
|
||||
|
||||
if (key == "l" || key == "L")
|
||||
ocarina::playlist::switch_to_library();
|
||||
|
@ -93,7 +97,7 @@ static gboolean key_pressed(GtkWidget *widget, GdkEvent *event, gpointer data)
|
|||
static gboolean key_pressed_after(GtkWidget *widget, GdkEvent *event, gpointer data)
|
||||
{
|
||||
string key = gdk_keyval_name(event->key.keyval);
|
||||
println("Window handling key press (2)");
|
||||
println("Window handling key press (2): " + key);
|
||||
|
||||
if (key >= "0" && key <= "9") {
|
||||
unsigned int k;
|
||||
|
@ -101,7 +105,7 @@ static gboolean key_pressed_after(GtkWidget *widget, GdkEvent *event, gpointer d
|
|||
s >> k;
|
||||
ocarina::playlist::switch_to_plist(k);
|
||||
} else if (key == "Escape")
|
||||
gtk_widget_grab_focus(win);
|
||||
gtk_window_set_focus(GTK_WINDOW(win), NULL);
|
||||
else {
|
||||
println("Unhandled key: " + key);
|
||||
return FALSE;
|
||||
|
|
Loading…
Reference in New Issue