83414ca3ad
I also modify the QueueWindow to do the actual filtering. Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
94 lines
2.2 KiB
C++
94 lines
2.2 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(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(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(Q_REPEAT));
|
|
_q_repeat->show();
|
|
}
|
|
}
|
|
|
|
void QueueToolbar :: on_random_toggled()
|
|
{
|
|
if (_q_random->get_active())
|
|
_queue->set_flag(Q_RANDOM);
|
|
else
|
|
_queue->unset_flag(Q_RANDOM);
|
|
}
|
|
|
|
void QueueToolbar :: on_repeat_toggled()
|
|
{
|
|
if (_q_repeat->get_active())
|
|
_queue->set_flag(Q_REPEAT);
|
|
else
|
|
_queue->unset_flag(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(Q_ENABLED);
|
|
else
|
|
_queue->unset_flag(Q_ENABLED);
|
|
|
|
_q_label->set_sensitive(active);
|
|
_q_window->set_sensitive(active);
|
|
}
|