115 lines
2.2 KiB
C++
115 lines
2.2 KiB
C++
/*
|
|
* Copyright 2014 (c) Anna Schumaker.
|
|
*/
|
|
#include <playlist.h>
|
|
#include <ocarina.h>
|
|
|
|
static Glib::RefPtr<PlayqueueModel> model;
|
|
|
|
static class PlaylistColumns : public Gtk::TreeModelColumnRecord {
|
|
public:
|
|
PlaylistColumns()
|
|
{ add(plist_col_name); }
|
|
|
|
Gtk::TreeModelColumn<std::string> plist_col_name;
|
|
} plist_cols;
|
|
|
|
|
|
/*
|
|
* Basic helper functions
|
|
*/
|
|
static inline Playqueue *playlist_pq()
|
|
{
|
|
return playlist::get_pq();
|
|
}
|
|
|
|
static Gtk::TreeView *get_playlist_treeview()
|
|
{
|
|
return get_widget<Gtk::TreeView>("o_playlist_treeview");
|
|
}
|
|
|
|
static Glib::RefPtr<Gtk::ListStore> get_playlists()
|
|
{
|
|
return get_object<Gtk::ListStore>("o_playlists");
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
* Gtk signal functions
|
|
*/
|
|
|
|
static void on_playlist_cursor_changed()
|
|
{
|
|
Gtk::TreePath path;
|
|
Gtk::TreeViewColumn *col;
|
|
Gtk::TreeModel::Row row;
|
|
|
|
get_playlist_treeview()->get_cursor(path, col);
|
|
row = *(get_playlists()->get_iter(path));
|
|
|
|
print("%s\n", row[plist_cols.plist_col_name]);
|
|
//playlist::select(row[plist_cols.plist_col_name]);
|
|
}
|
|
|
|
static bool on_playlist_clicked(GdkEventButton *button)
|
|
{
|
|
if (button->button != 3)
|
|
return false;
|
|
return true;
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
* Functions exposed through a TabFuncs structure
|
|
*/
|
|
|
|
static void playlist_init_late() {}
|
|
static void playlist_cleanup() {}
|
|
|
|
static bool playlist_has_queue(Playqueue *pq)
|
|
{
|
|
return pq == playlist_pq();
|
|
}
|
|
|
|
static void playlist_track_added(Playqueue *pq, unsigned int row)
|
|
{
|
|
model->on_row_inserted(row);
|
|
}
|
|
|
|
static void playlist_track_deleted(Playqueue *pq, unsigned int row)
|
|
{
|
|
model->on_row_deleted(row);
|
|
}
|
|
|
|
|
|
static struct TabFuncs playlist_funcs = {
|
|
.init_late = playlist_init_late,
|
|
.cleanup = playlist_cleanup,
|
|
|
|
.has_queue = playlist_has_queue,
|
|
.track_added = playlist_track_added,
|
|
.track_deleted = playlist_track_deleted,
|
|
};
|
|
|
|
|
|
|
|
/*
|
|
* Basic tab setup
|
|
*/
|
|
|
|
struct TabFuncs *init_playlist_tab()
|
|
{
|
|
Gtk::TreeView *playlist = get_playlist_treeview();
|
|
|
|
model = Glib::RefPtr<PlayqueueModel>(new PlayqueueModel(playlist_pq()));
|
|
get_widget<Gtk::TreeView>("o_playlist_pq_treeview")->set_model(model);
|
|
|
|
playlist->signal_cursor_changed().connect(sigc::ptr_fun(on_playlist_cursor_changed));
|
|
playlist->signal_button_press_event().connect(sigc::ptr_fun(on_playlist_clicked));
|
|
playlist->set_cursor(Gtk::TreePath("0"));
|
|
|
|
return &playlist_funcs;
|
|
}
|