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_switch", _q_switch);
|
||||||
_builder->get_widget("q_repeat", _q_repeat);
|
_builder->get_widget("q_repeat", _q_repeat);
|
||||||
_builder->get_widget("q_random", _q_random);
|
_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()
|
QueueToolbar :: ~QueueToolbar()
|
||||||
|
@ -38,7 +43,6 @@ void QueueToolbar :: init(Queue *queue, QueueLabel *label,
|
||||||
_q_random->show();
|
_q_random->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (flags & T_REPEAT) {
|
if (flags & T_REPEAT) {
|
||||||
_q_repeat->signal_toggled().connect(sigc::mem_fun(*this,
|
_q_repeat->signal_toggled().connect(sigc::mem_fun(*this,
|
||||||
&QueueToolbar::on_repeat_toggled));
|
&QueueToolbar::on_repeat_toggled));
|
||||||
|
@ -63,6 +67,18 @@ void QueueToolbar :: on_repeat_toggled()
|
||||||
_queue->unset_flag(Q_REPEAT);
|
_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()
|
void QueueToolbar :: on_switch_toggled()
|
||||||
{
|
{
|
||||||
bool active = _q_switch->get_active();
|
bool active = _q_switch->get_active();
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2015 (c) Anna Schumaker.
|
* Copyright 2015 (c) Anna Schumaker.
|
||||||
*/
|
*/
|
||||||
|
#include <core/filter.h>
|
||||||
#include <gui/queue/window.h>
|
#include <gui/queue/window.h>
|
||||||
|
|
||||||
QueueWindow :: QueueWindow(BaseObjectType *cobject,
|
QueueWindow :: QueueWindow(BaseObjectType *cobject,
|
||||||
const Glib::RefPtr<Gtk::Builder> builder)
|
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);
|
_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_model = Glib::RefPtr<QueueModel>(new QueueModel(queue));
|
||||||
q_filter = Gtk::TreeModelFilter::create(q_model);
|
q_filter = Gtk::TreeModelFilter::create(q_model);
|
||||||
q_treeview->set_model(q_filter);
|
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.
|
* Copyright 2014 (c) Anna Schumaker.
|
||||||
*/
|
*/
|
||||||
#include <core/deck.h>
|
#include <core/deck.h>
|
||||||
#include <core/filter.h>
|
|
||||||
#include <core/playlist.h>
|
#include <core/playlist.h>
|
||||||
#include <core/string.h>
|
#include <core/string.h>
|
||||||
#include <gui/tabs.h>
|
#include <gui/tabs.h>
|
||||||
|
@ -38,13 +37,6 @@ Tab :: ~Tab() {}
|
||||||
|
|
||||||
void Tab :: tab_finish_init()
|
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_treeview->signal_row_activated().connect(sigc::mem_fun(*this,
|
||||||
&Tab :: on_row_activated));
|
&Tab :: on_row_activated));
|
||||||
tab_treeview->signal_key_press_event().connect(sigc::mem_fun(*this,
|
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
|
* Global functions
|
||||||
|
|
|
@ -38,6 +38,8 @@ public:
|
||||||
|
|
||||||
void on_random_toggled();
|
void on_random_toggled();
|
||||||
void on_repeat_toggled();
|
void on_repeat_toggled();
|
||||||
|
bool on_search_key_released(GdkEventKey *event);
|
||||||
|
void on_search_changed();
|
||||||
void on_switch_toggled();
|
void on_switch_toggled();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -6,12 +6,16 @@
|
||||||
|
|
||||||
#include <gui/queue/model.h>
|
#include <gui/queue/model.h>
|
||||||
#include <gtkmm.h>
|
#include <gtkmm.h>
|
||||||
|
#include <set>
|
||||||
|
|
||||||
class QueueWindow : public Gtk::ScrolledWindow {
|
class QueueWindow : public Gtk::ScrolledWindow {
|
||||||
private:
|
private:
|
||||||
Glib::RefPtr<Gtk::Builder> _builder;
|
Glib::RefPtr<Gtk::Builder> _builder;
|
||||||
Queue *_queue;
|
Queue *_queue;
|
||||||
|
|
||||||
|
std::set<unsigned int> _q_search_res;
|
||||||
|
bool _q_search_empty;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Gtk::TreeView *q_treeview;
|
Gtk::TreeView *q_treeview;
|
||||||
Glib::RefPtr<QueueModel> q_model;
|
Glib::RefPtr<QueueModel> q_model;
|
||||||
|
@ -19,8 +23,10 @@ public:
|
||||||
|
|
||||||
QueueWindow(BaseObjectType *, const Glib::RefPtr<Gtk::Builder>);
|
QueueWindow(BaseObjectType *, const Glib::RefPtr<Gtk::Builder>);
|
||||||
~QueueWindow();
|
~QueueWindow();
|
||||||
|
|
||||||
void init(Queue *);
|
void init(Queue *);
|
||||||
|
|
||||||
|
void filter(std::string &);
|
||||||
|
bool filter_ids(const Gtk::TreeIter &);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* OCARINA_GUI_QUEUE_WINDOW_H */
|
#endif /* OCARINA_GUI_QUEUE_WINDOW_H */
|
||||||
|
|
|
@ -7,11 +7,9 @@
|
||||||
#include <gui/ocarina.h>
|
#include <gui/ocarina.h>
|
||||||
#include <gui/queue/model.h>
|
#include <gui/queue/model.h>
|
||||||
#include <core/queue.h>
|
#include <core/queue.h>
|
||||||
#include <set>
|
|
||||||
|
|
||||||
class Tab : public QNotifier {
|
class Tab : public QNotifier {
|
||||||
private:
|
private:
|
||||||
std::set<unsigned int> visible_ids;
|
|
||||||
unsigned int tab_sorting_count;
|
unsigned int tab_sorting_count;
|
||||||
std::string tab_sorting_title;
|
std::string tab_sorting_title;
|
||||||
|
|
||||||
|
@ -83,11 +81,6 @@ public:
|
||||||
bool on_key_pressed(GdkEventKey *);
|
bool on_key_pressed(GdkEventKey *);
|
||||||
void on_column_clicked(unsigned int);
|
void on_column_clicked(unsigned int);
|
||||||
bool on_button_pressed(GdkEventButton *);
|
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