ocarina: Move some playlist setup to playlist.cpp

Signed-off-by: Bryan Schumaker <bjschuma@gmail.com>
This commit is contained in:
Bryan Schumaker 2012-09-01 12:34:42 -04:00
parent fc5fe427a7
commit 10cdc5248a
3 changed files with 56 additions and 53 deletions

View File

@ -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);

View File

@ -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);
}

View File

@ -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);
}