ocarina/gui/queue/window.cpp

70 lines
1.7 KiB
C++

/*
* Copyright 2015 (c) Anna Schumaker.
*/
extern "C" {
#include <core/filter.h>
}
#include <gui/queue/window.h>
QueueWindow :: QueueWindow(BaseObjectType *cobject,
const Glib::RefPtr<Gtk::Builder> 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<QueueModel>(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->operator[](id)->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);
}