/* * Copyright 2015 (c) Anna Schumaker. */ extern "C" { #include } #include QueueWindow :: QueueWindow(BaseObjectType *cobject, const Glib::RefPtr builder) : Gtk::ScrolledWindow(cobject), _builder(builder), _q_search_empty(true) { _q_search_res = SET_INIT(); _builder->get_widget("q_treeview", q_treeview); } QueueWindow :: ~QueueWindow() { set_deinit(&_q_search_res); } void QueueWindow :: init(queue *queue) { _queue = queue; q_model = Glib::RefPtr(new QueueModel(queue)); q_filter = Gtk::TreeModelFilter::create(q_model); q_filter->set_visible_func(sigc::mem_fun(*this, &QueueWindow::filter_ids)); q_treeview->signal_row_activated().connect(sigc::mem_fun(*this, &QueueWindow :: on_row_activated)); q_treeview->signal_key_press_event().connect(sigc::mem_fun(*this, &QueueWindow :: on_key_press), false); q_treeview->set_model(q_filter); } void QueueWindow :: filter(std::string &text) { _q_search_empty = (text.find_first_not_of(" \t") == std::string::npos); if (!_q_search_empty) filter_search(text.c_str(), &_q_search_res); q_filter->refilter(); } bool QueueWindow :: filter_ids(const Gtk::TreeIter &iter) { unsigned int id; if (_q_search_empty) return true; id = q_model->iter_to_id(iter); return set_has(&_q_search_res, queue_at(_queue, id)->tr_dbe.dbe_index); } bool QueueWindow :: on_key_press(GdkEventKey *event) { std::string key = gdk_keyval_name(event->keyval); if (key == "space") return true; return false; } void QueueWindow :: on_row_activated(const Gtk::TreePath &path, Gtk::TreeViewColumn *col) { Gtk::TreePath real_path = q_filter->convert_path_to_child_path(path); q_model->on_path_selected(real_path); }