ocarina/gui/queue/toolbar.cpp

94 lines
2.3 KiB
C++

/*
* Copyright 2015 (c) Anna Schumaker.
*/
#include <gui/queue/toolbar.h>
QueueToolbar :: QueueToolbar(BaseObjectType *cobject,
const Glib::RefPtr<Gtk::Builder> builder)
: Gtk::HBox(cobject), _builder(builder)
{
_builder->get_widget("q_search", q_search);
_builder->get_widget("q_switch", _q_switch);
_builder->get_widget("q_repeat", _q_repeat);
_builder->get_widget("q_random", _q_random);
q_search->signal_key_release_event().connect(sigc::mem_fun(*this,
&QueueToolbar::on_search_key_released));
q_search->signal_search_changed().connect(sigc::mem_fun(*this,
&QueueToolbar::on_search_changed));
}
QueueToolbar :: ~QueueToolbar()
{
}
void QueueToolbar :: init(queue *queue, QueueLabel *label,
QueueWindow *window, unsigned int flags)
{
_queue = queue;
_q_label = label;
_q_window = window;
if (flags & T_SWITCH) {
_q_switch->property_active().signal_changed().connect(
sigc::mem_fun(*this, &QueueToolbar::on_switch_toggled));
_q_switch->set_active(queue_has_flag(_queue, Q_ENABLED));
_q_switch->show();
}
if (flags & T_RANDOM) {
_q_random->signal_toggled().connect(sigc::mem_fun(*this,
&QueueToolbar::on_random_toggled));
_q_random->set_active(queue_has_flag(_queue, Q_RANDOM));
_q_random->show();
}
if (flags & T_REPEAT) {
_q_repeat->signal_toggled().connect(sigc::mem_fun(*this,
&QueueToolbar::on_repeat_toggled));
_q_repeat->set_active(queue_has_flag(_queue, Q_REPEAT));
_q_repeat->show();
}
}
void QueueToolbar :: on_random_toggled()
{
if (_q_random->get_active())
queue_set_flag(_queue, Q_RANDOM);
else
queue_unset_flag(_queue, Q_RANDOM);
}
void QueueToolbar :: on_repeat_toggled()
{
if (_q_repeat->get_active())
queue_set_flag(_queue, Q_REPEAT);
else
queue_unset_flag(_queue, Q_REPEAT);
}
bool QueueToolbar :: on_search_key_released(GdkEventKey *event)
{
std::string key = gdk_keyval_name(event->keyval);
return key == "space";
}
void QueueToolbar :: on_search_changed()
{
std::string text = q_search->get_text();
_q_window->filter(text);
}
void QueueToolbar :: on_switch_toggled()
{
bool active = _q_switch->get_active();
if (active)
queue_set_flag(_queue, Q_ENABLED);
else
queue_unset_flag(_queue, Q_ENABLED);
_q_label->set_sensitive(active);
_q_window->set_sensitive(active);
}