git-svn-id: svn://db.shs.com.ru/libs@919 a8b55f48-bf90-11e4-a774-851b48703e85

This commit is contained in:
2020-03-27 13:26:49 +00:00
parent 22fc859b50
commit fa35235809
2 changed files with 22 additions and 2 deletions

View File

@@ -1,5 +1,6 @@
#include <QDir>
#include <QMouseEvent>
#include <QSortFilterProxyModel>
#include "cdutils_k.h"
#include "cdutils_x.h"
#include "cdutils_c.h"
@@ -16,6 +17,7 @@ using namespace CDUtils;
CDView::CDView(QWidget * parent) : QTreeView(parent) {
type_ = -1;
model_ = 0;
proxy_ = 0;
connect(this, SIGNAL(clicked(QModelIndex)), this, SLOT(indexClicked(QModelIndex)));
connect(this, SIGNAL(_qcd_sendFailed()), this, SLOT(cd_sendFailed()), Qt::QueuedConnection);
connect(this, SIGNAL(_qcd_sendSucceed()), this, SLOT(cd_sendSucceed()), Qt::QueuedConnection);
@@ -27,8 +29,12 @@ CDView::CDView(QWidget * parent) : QTreeView(parent) {
CDView::~CDView() {
if (model_) delete model_;
if (model_) {
delete model_;
delete proxy_;
}
model_ = 0;
proxy_ = 0;
}
@@ -106,7 +112,12 @@ void CDView::refresh() {
if (type_ < 0) return;
if (!model_) {
model_ = new CDItemModel(type_);
setModel(model_);
proxy_ = new QSortFilterProxyModel();
proxy_->setRecursiveFilteringEnabled(true);
proxy_->setFilterKeyColumn(-1);
proxy_->setFilterCaseSensitivity(Qt::CaseInsensitive);
proxy_->setSourceModel(model_);
setModel(proxy_);
setItemDelegateForColumn(type_ == CDType::cdC ? cName_Cmd : cValue, new CDDelegate());
if (type_ == CDType::cdX)
setItemDelegateForColumn(cXMode, new CDDelegate());
@@ -280,6 +291,11 @@ void CDView::calculate() {
}
void CDView::filter(const QString & f) {
proxy_->setFilterRegExp(QRegExp(f, Qt::CaseInsensitive));
}
void CDView::indexClicked(const QModelIndex & i) {
if (!model_ || !i.isValid() || type_ != CDType::cdC || i.column() != cName_Cmd) return;
CDItem * item = model_->getItem(i);

View File

@@ -10,6 +10,7 @@ namespace CDUtils {
}
class CDItemModel;
class QSortFilterProxyModel;
class CDView: public QTreeView, public PIObject
{
@@ -43,6 +44,7 @@ public slots:
void clear();
void buildFromHeader(const QString & description, int mode = 2);
void calculate();
void filter(const QString & f);
private slots:
void indexClicked(const QModelIndex & i);
@@ -54,6 +56,7 @@ private slots:
void cd_changedGlobal();
private:
bool filterTree(const QModelIndex & ti, const QString & filter);
EVENT_HANDLER(void, pi_cd_sendFailed) {emit _qcd_sendFailed();}
EVENT_HANDLER(void, pi_cd_sendSucceed) {emit _qcd_sendSucceed();}
EVENT_HANDLER(void, pi_cd_receiveFailed) {emit _qcd_receiveFailed();}
@@ -63,6 +66,7 @@ private:
EVENT_HANDLER3(void, pi_cd_messageReceived, PIDeque<int>, path, int, type, PIString, msg);
CDItemModel * model_;
QSortFilterProxyModel * proxy_;
int type_;
signals: