ocarina: Move some playlist setup to playlist.cpp
Signed-off-by: Bryan Schumaker <bjschuma@gmail.com>
This commit is contained in:
parent
fc5fe427a7
commit
10cdc5248a
|
@ -36,6 +36,7 @@ string run_chooser(const string &);
|
|||
|
||||
/* playlist.cpp */
|
||||
void update_playlist(notify_t, libsaria::PlaylistNotification *);
|
||||
void init_playlist(struct PlaylistWidgets *widgets);
|
||||
|
||||
/* status.cpp */
|
||||
bool update_idle_bar(int);
|
||||
|
|
|
@ -89,3 +89,42 @@ void update_playlist(notify_t event, libsaria::PlaylistNotification *data)
|
|||
else if (event == PLAYLIST_FILTER)
|
||||
playlist_refilter(data->plist);
|
||||
}
|
||||
|
||||
static gboolean is_visible(GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
|
||||
{
|
||||
libsaria::Track *track;
|
||||
libsaria::Playlist *plist = (libsaria::Playlist *)data;
|
||||
|
||||
gtk_tree_model_get(model, iter, 0, &track, -1);
|
||||
return plist->is_visible(track);
|
||||
}
|
||||
|
||||
static void do_filter(GtkWidget *entry, gpointer d)
|
||||
{
|
||||
string text = gtk_entry_get_text(GTK_ENTRY(entry));
|
||||
libsaria::Playlist *plist = (libsaria::Playlist *)d;
|
||||
plist->set_filter_text(text);
|
||||
}
|
||||
|
||||
static void track_selected(GtkWidget *treeview, GtkTreePath *path,
|
||||
GtkTreeViewColumn *col, gpointer data)
|
||||
{
|
||||
GtkTreeIter iter;
|
||||
GtkTreeModel *model;
|
||||
libsaria::Track *track;
|
||||
|
||||
model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview));
|
||||
gtk_tree_model_get_iter(model, &iter, path);
|
||||
gtk_tree_model_get(model, &iter, 0, &track, -1);
|
||||
track->load(true);
|
||||
}
|
||||
|
||||
void init_playlist(struct PlaylistWidgets *widgets)
|
||||
{
|
||||
gtk_tree_view_set_model(widgets->treeview, widgets->filter);
|
||||
gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(widgets->filter),
|
||||
is_visible, widgets->playlist, NULL);
|
||||
|
||||
g_signal_connect(widgets->treeview, "row-activated", G_CALLBACK(track_selected), NULL);
|
||||
g_signal_connect(widgets->entry, "changed", G_CALLBACK(do_filter), widgets->playlist);
|
||||
}
|
||||
|
|
|
@ -7,9 +7,6 @@
|
|||
|
||||
#include <ocarina/ocarina.h>
|
||||
|
||||
#include <cstdio>
|
||||
using namespace std;
|
||||
|
||||
static PlaylistWidgets library_widgets;
|
||||
static PlaylistWidgets recent_widgets;
|
||||
static PlaylistWidgets banned_widgets;
|
||||
|
@ -75,22 +72,6 @@ void playlist_switch_to(string &key)
|
|||
gtk_notebook_set_current_page(tabs, size + 2);
|
||||
}
|
||||
|
||||
static gboolean is_visible(GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
|
||||
{
|
||||
libsaria::Track *track;
|
||||
libsaria::Playlist *plist = (libsaria::Playlist *)data;
|
||||
|
||||
gtk_tree_model_get(model, iter, 0, &track, -1);
|
||||
return plist->is_visible(track);
|
||||
}
|
||||
|
||||
static void do_filter(GtkWidget *entry, gpointer d)
|
||||
{
|
||||
string text = gtk_entry_get_text(GTK_ENTRY(entry));
|
||||
libsaria::Playlist *plist = (libsaria::Playlist *)d;
|
||||
plist->set_filter_text(text);
|
||||
}
|
||||
|
||||
static gboolean on_focus_change(GtkWidget *entry, GdkEvent *event, gpointer data)
|
||||
{
|
||||
if (gtk_widget_is_focus(entry))
|
||||
|
@ -115,19 +96,6 @@ void playlist_focus_treeview()
|
|||
gtk_widget_grab_focus(GTK_WIDGET(current_widgets()->treeview));
|
||||
}
|
||||
|
||||
static void track_selected(GtkWidget *treeview, GtkTreePath *path,
|
||||
GtkTreeViewColumn *col, gpointer data)
|
||||
{
|
||||
GtkTreeIter iter;
|
||||
GtkTreeModel *model;
|
||||
libsaria::Track *track;
|
||||
|
||||
model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview));
|
||||
gtk_tree_model_get_iter(model, &iter, path);
|
||||
gtk_tree_model_get(model, &iter, 0, &track, -1);
|
||||
track->load(true);
|
||||
}
|
||||
|
||||
static void on_switch_page(GtkNotebook *tabs, gpointer page,
|
||||
unsigned int page_num, gpointer data)
|
||||
{
|
||||
|
@ -159,12 +127,12 @@ static void init_tab_action()
|
|||
box, GTK_PACK_END);
|
||||
}
|
||||
|
||||
static void init_playlist_tab(struct PlaylistWidgets *widgets,
|
||||
libsaria::Playlist *playlist,
|
||||
const string &list_name,
|
||||
const string &view_name,
|
||||
const string &label_name,
|
||||
const string &entry_name)
|
||||
static void init_static_tab(struct PlaylistWidgets *widgets,
|
||||
libsaria::Playlist *playlist,
|
||||
const string &list_name,
|
||||
const string &view_name,
|
||||
const string &label_name,
|
||||
const string &entry_name)
|
||||
{
|
||||
widgets->playlist = playlist;
|
||||
widgets->liststore = GTK_LIST_STORE(get_object(list_name));
|
||||
|
@ -174,12 +142,7 @@ static void init_playlist_tab(struct PlaylistWidgets *widgets,
|
|||
widgets->label = GTK_LABEL(get_widget(label_name));
|
||||
widgets->entry = GTK_ENTRY(get_widget(entry_name));
|
||||
|
||||
gtk_tree_view_set_model(widgets->treeview, widgets->filter);
|
||||
gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(widgets->filter),
|
||||
is_visible, playlist, NULL);
|
||||
|
||||
connect_signal(view_name, "row-activated", G_CALLBACK(track_selected), NULL);
|
||||
connect_signal(entry_name, "changed", G_CALLBACK(do_filter), playlist);
|
||||
init_playlist(widgets);
|
||||
connect_signal(entry_name, "focus-in-event", G_CALLBACK(on_focus_change), NULL);
|
||||
}
|
||||
|
||||
|
@ -187,15 +150,15 @@ void init_tabs()
|
|||
{
|
||||
init_tab_action();
|
||||
|
||||
init_playlist_tab(&library_widgets, libsaria::library::get_playlist(),
|
||||
"LibraryPlist", "LibraryPlistView",
|
||||
"LibrarySize", "LibraryEntry");
|
||||
init_playlist_tab(&recent_widgets, libsaria::deck::get_recent_plist(),
|
||||
"RecentPlist", "RecentView",
|
||||
"RecentSize", "RecentEntry");
|
||||
init_playlist_tab(&banned_widgets, libsaria::ban::get_banned_plist(),
|
||||
"BannedPlist", "BannedView",
|
||||
"BannedSize", "BannedEntry");
|
||||
init_static_tab(&library_widgets, libsaria::library::get_playlist(),
|
||||
"LibraryPlist", "LibraryPlistView",
|
||||
"LibrarySize", "LibraryEntry");
|
||||
init_static_tab(&recent_widgets, libsaria::deck::get_recent_plist(),
|
||||
"RecentPlist", "RecentView",
|
||||
"RecentSize", "RecentEntry");
|
||||
init_static_tab(&banned_widgets, libsaria::ban::get_banned_plist(),
|
||||
"BannedPlist", "BannedView",
|
||||
"BannedSize", "BannedEntry");
|
||||
|
||||
connect_signal("PlaylistTabs", "switch-page", G_CALLBACK(on_switch_page), NULL);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue