ocarina/gui/collection.cpp

99 lines
1.8 KiB
C++

/*
* Copyright 2014 (c) Anna Schumaker.
*/
#include <deck.h>
#include <ocarina.h>
static Glib::RefPtr<PlayqueueModel> model;
/*
* Basic helper functions
*/
static inline Playqueue *library_pq()
{
return deck::get_library_pq();
}
static Gtk::ToggleButton *get_random_button()
{
return get_widget<Gtk::ToggleButton>("o_collection_random");
}
static void set_queue_size()
{
Gtk::Label *label = get_widget<Gtk::Label>("o_collection_size");
label->set_text(itoa(library_pq()->size()));
}
/*
* Gtk signal functions
*/
static void on_random_toggled()
{
if (get_random_button()->get_active())
library_pq()->set_flag(PQ_RANDOM);
else
library_pq()->unset_flag(PQ_RANDOM);
}
/*
* Functions exposed through a TabFuncs structure
*/
static void collection_init_late()
{
set_queue_size();
get_random_button()->set_active(library_pq()->get_flags() & PQ_RANDOM);
}
static void collection_cleanup() {}
static bool collection_has_queue(Playqueue *pq)
{
return pq == library_pq();
}
static void collection_track_added(Playqueue *pq, unsigned int row)
{
model->on_row_inserted(row);
set_queue_size();
}
static void collection_track_deleted(Playqueue *pq, unsigned int row)
{
model->on_row_deleted(row);
set_queue_size();
}
static struct TabFuncs collection_funcs = {
.init_late = collection_init_late,
.cleanup = collection_cleanup,
.has_queue = collection_has_queue,
.track_added = collection_track_added,
.track_deleted = collection_track_deleted,
};
/*
* Basic tab setup
*/
struct TabFuncs *init_collection_tab()
{
model = Glib::RefPtr<PlayqueueModel>(new PlayqueueModel(library_pq()));
get_widget<Gtk::TreeView>("o_collection_pq_treeview")->set_model(model);
get_random_button()->signal_toggled().connect(sigc::ptr_fun(on_random_toggled));
return &collection_funcs;
}