UI for data filtering.
Icons for plugin grid operations.
This commit is contained in:
@@ -8,6 +8,7 @@
|
||||
|
||||
#include "define.h"
|
||||
#include "core_global.h"
|
||||
#include "exprevaluator.h"
|
||||
|
||||
template<class T>
|
||||
class AutoTableModel : public QAbstractTableModel
|
||||
@@ -17,6 +18,7 @@ public:
|
||||
explicit AutoTableModel(QObject *parent = NULL)
|
||||
:QAbstractTableModel(parent)
|
||||
{
|
||||
filtered = false;
|
||||
}
|
||||
|
||||
virtual ~AutoTableModel() {}
|
||||
@@ -139,8 +141,38 @@ public:
|
||||
m_list = list;
|
||||
}
|
||||
|
||||
public slots:
|
||||
void filter(const QString &filter)
|
||||
{
|
||||
beginResetModel();
|
||||
if (!filtered)
|
||||
{
|
||||
m_fullList = m_list;
|
||||
filtered = true;
|
||||
}
|
||||
|
||||
ExprEvaluator ev;
|
||||
m_list.clear();
|
||||
std::copy_if(ALL(m_fullList), m_list.begin(), [&filter, &ev](QSharedPointer<T> obj){ return ev.evaluate((QObject*)obj.pointer, filter); });
|
||||
|
||||
endResetModel();
|
||||
}
|
||||
|
||||
void restore()
|
||||
{
|
||||
if (filtered)
|
||||
{
|
||||
beginResetModel();
|
||||
m_list = m_fullList;
|
||||
endResetModel();
|
||||
filtered = false;
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
QList<QSharedPointer<T> > m_list;
|
||||
QList<QSharedPointer<T> > m_fullList;
|
||||
bool filtered;
|
||||
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user