/* * Copyright 2015 (c) Anna Schumaker. */ #include QueueToolbar :: QueueToolbar(BaseObjectType *cobject, const Glib::RefPtr 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); }