gui: Trigger refiltering from the QueueToolbar
I also modify the QueueWindow to do the actual filtering. Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
parent
8c3b1489bd
commit
83414ca3ad
|
@ -11,6 +11,11 @@ QueueToolbar :: QueueToolbar(BaseObjectType *cobject,
|
|||
_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()
|
||||
|
@ -38,7 +43,6 @@ void QueueToolbar :: init(Queue *queue, QueueLabel *label,
|
|||
_q_random->show();
|
||||
}
|
||||
|
||||
|
||||
if (flags & T_REPEAT) {
|
||||
_q_repeat->signal_toggled().connect(sigc::mem_fun(*this,
|
||||
&QueueToolbar::on_repeat_toggled));
|
||||
|
@ -63,6 +67,18 @@ void QueueToolbar :: on_repeat_toggled()
|
|||
_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();
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
/*
|
||||
* Copyright 2015 (c) Anna Schumaker.
|
||||
*/
|
||||
#include <core/filter.h>
|
||||
#include <gui/queue/window.h>
|
||||
|
||||
QueueWindow :: QueueWindow(BaseObjectType *cobject,
|
||||
const Glib::RefPtr<Gtk::Builder> builder)
|
||||
: Gtk::ScrolledWindow(cobject), _builder(builder)
|
||||
: Gtk::ScrolledWindow(cobject), _builder(builder), _q_search_empty(true)
|
||||
{
|
||||
_builder->get_widget("q_treeview", q_treeview);
|
||||
}
|
||||
|
@ -20,4 +21,26 @@ void QueueWindow :: init(Queue *queue)
|
|||
q_model = Glib::RefPtr<QueueModel>(new QueueModel(queue));
|
||||
q_filter = Gtk::TreeModelFilter::create(q_model);
|
||||
q_treeview->set_model(q_filter);
|
||||
q_filter->set_visible_func(sigc::mem_fun(*this, &QueueWindow::filter_ids));
|
||||
}
|
||||
|
||||
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, _q_search_res);
|
||||
q_filter->refilter();
|
||||
}
|
||||
|
||||
bool QueueWindow :: filter_ids(const Gtk::TreeIter &iter)
|
||||
{
|
||||
unsigned int id;
|
||||
std::set<unsigned int>::iterator it;
|
||||
|
||||
if (_q_search_empty)
|
||||
return true;
|
||||
|
||||
id = q_model->iter_to_id(iter);
|
||||
it = _q_search_res.find(_queue->operator[](id)->index());
|
||||
return it != _q_search_res.end();
|
||||
}
|
||||
|
|
41
gui/tabs.cpp
41
gui/tabs.cpp
|
@ -2,7 +2,6 @@
|
|||
* Copyright 2014 (c) Anna Schumaker.
|
||||
*/
|
||||
#include <core/deck.h>
|
||||
#include <core/filter.h>
|
||||
#include <core/playlist.h>
|
||||
#include <core/string.h>
|
||||
#include <gui/tabs.h>
|
||||
|
@ -38,13 +37,6 @@ Tab :: ~Tab() {}
|
|||
|
||||
void Tab :: tab_finish_init()
|
||||
{
|
||||
tab_filter->set_visible_func(sigc::mem_fun(*this,
|
||||
&Tab::on_filter_visible));
|
||||
tab_search->signal_key_release_event().connect(sigc::mem_fun(*this,
|
||||
&Tab::on_entry_key_released));
|
||||
tab_search->signal_search_changed().connect(sigc::mem_fun(*this,
|
||||
&Tab::on_entry_changed));
|
||||
|
||||
tab_treeview->signal_row_activated().connect(sigc::mem_fun(*this,
|
||||
&Tab :: on_row_activated));
|
||||
tab_treeview->signal_key_press_event().connect(sigc::mem_fun(*this,
|
||||
|
@ -311,39 +303,6 @@ bool Tab :: on_button_pressed(GdkEventButton *button)
|
|||
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Tab filtering functions
|
||||
*
|
||||
*/
|
||||
|
||||
bool Tab :: on_filter_visible(const Gtk::TreeIter &iter)
|
||||
{
|
||||
unsigned int pq_id;
|
||||
std::set<unsigned int>::iterator it;
|
||||
|
||||
if (tab_search->get_text_length() == 0)
|
||||
return true;
|
||||
|
||||
pq_id = tab_model->iter_to_id(iter);
|
||||
it = visible_ids.find(tab_pq->operator[](pq_id)->index());
|
||||
return it != visible_ids.end();
|
||||
}
|
||||
|
||||
bool Tab :: on_entry_key_released(GdkEventKey *event)
|
||||
{
|
||||
std::string key = gdk_keyval_name(event->keyval);
|
||||
return key == "space";
|
||||
}
|
||||
|
||||
void Tab :: on_entry_changed()
|
||||
{
|
||||
filter :: search(tab_search->get_text(), visible_ids);
|
||||
tab_filter->refilter();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Global functions
|
||||
|
|
|
@ -38,6 +38,8 @@ public:
|
|||
|
||||
void on_random_toggled();
|
||||
void on_repeat_toggled();
|
||||
bool on_search_key_released(GdkEventKey *event);
|
||||
void on_search_changed();
|
||||
void on_switch_toggled();
|
||||
};
|
||||
|
||||
|
|
|
@ -6,12 +6,16 @@
|
|||
|
||||
#include <gui/queue/model.h>
|
||||
#include <gtkmm.h>
|
||||
#include <set>
|
||||
|
||||
class QueueWindow : public Gtk::ScrolledWindow {
|
||||
private:
|
||||
Glib::RefPtr<Gtk::Builder> _builder;
|
||||
Queue *_queue;
|
||||
|
||||
std::set<unsigned int> _q_search_res;
|
||||
bool _q_search_empty;
|
||||
|
||||
public:
|
||||
Gtk::TreeView *q_treeview;
|
||||
Glib::RefPtr<QueueModel> q_model;
|
||||
|
@ -19,8 +23,10 @@ public:
|
|||
|
||||
QueueWindow(BaseObjectType *, const Glib::RefPtr<Gtk::Builder>);
|
||||
~QueueWindow();
|
||||
|
||||
void init(Queue *);
|
||||
|
||||
void filter(std::string &);
|
||||
bool filter_ids(const Gtk::TreeIter &);
|
||||
};
|
||||
|
||||
#endif /* OCARINA_GUI_QUEUE_WINDOW_H */
|
||||
|
|
|
@ -7,11 +7,9 @@
|
|||
#include <gui/ocarina.h>
|
||||
#include <gui/queue/model.h>
|
||||
#include <core/queue.h>
|
||||
#include <set>
|
||||
|
||||
class Tab : public QNotifier {
|
||||
private:
|
||||
std::set<unsigned int> visible_ids;
|
||||
unsigned int tab_sorting_count;
|
||||
std::string tab_sorting_title;
|
||||
|
||||
|
@ -83,11 +81,6 @@ public:
|
|||
bool on_key_pressed(GdkEventKey *);
|
||||
void on_column_clicked(unsigned int);
|
||||
bool on_button_pressed(GdkEventButton *);
|
||||
|
||||
/* Filtering functions */
|
||||
bool on_filter_visible(const Gtk::TreeIter &);
|
||||
bool on_entry_key_released(GdkEventKey *);
|
||||
void on_entry_changed();
|
||||
};
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue