git-svn-id: svn://db.shs.com.ru/libs@919 a8b55f48-bf90-11e4-a774-851b48703e85
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QMouseEvent>
|
#include <QMouseEvent>
|
||||||
|
#include <QSortFilterProxyModel>
|
||||||
#include "cdutils_k.h"
|
#include "cdutils_k.h"
|
||||||
#include "cdutils_x.h"
|
#include "cdutils_x.h"
|
||||||
#include "cdutils_c.h"
|
#include "cdutils_c.h"
|
||||||
@@ -16,6 +17,7 @@ using namespace CDUtils;
|
|||||||
CDView::CDView(QWidget * parent) : QTreeView(parent) {
|
CDView::CDView(QWidget * parent) : QTreeView(parent) {
|
||||||
type_ = -1;
|
type_ = -1;
|
||||||
model_ = 0;
|
model_ = 0;
|
||||||
|
proxy_ = 0;
|
||||||
connect(this, SIGNAL(clicked(QModelIndex)), this, SLOT(indexClicked(QModelIndex)));
|
connect(this, SIGNAL(clicked(QModelIndex)), this, SLOT(indexClicked(QModelIndex)));
|
||||||
connect(this, SIGNAL(_qcd_sendFailed()), this, SLOT(cd_sendFailed()), Qt::QueuedConnection);
|
connect(this, SIGNAL(_qcd_sendFailed()), this, SLOT(cd_sendFailed()), Qt::QueuedConnection);
|
||||||
connect(this, SIGNAL(_qcd_sendSucceed()), this, SLOT(cd_sendSucceed()), 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() {
|
CDView::~CDView() {
|
||||||
if (model_) delete model_;
|
if (model_) {
|
||||||
|
delete model_;
|
||||||
|
delete proxy_;
|
||||||
|
}
|
||||||
model_ = 0;
|
model_ = 0;
|
||||||
|
proxy_ = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -106,7 +112,12 @@ void CDView::refresh() {
|
|||||||
if (type_ < 0) return;
|
if (type_ < 0) return;
|
||||||
if (!model_) {
|
if (!model_) {
|
||||||
model_ = new CDItemModel(type_);
|
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());
|
setItemDelegateForColumn(type_ == CDType::cdC ? cName_Cmd : cValue, new CDDelegate());
|
||||||
if (type_ == CDType::cdX)
|
if (type_ == CDType::cdX)
|
||||||
setItemDelegateForColumn(cXMode, new CDDelegate());
|
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) {
|
void CDView::indexClicked(const QModelIndex & i) {
|
||||||
if (!model_ || !i.isValid() || type_ != CDType::cdC || i.column() != cName_Cmd) return;
|
if (!model_ || !i.isValid() || type_ != CDType::cdC || i.column() != cName_Cmd) return;
|
||||||
CDItem * item = model_->getItem(i);
|
CDItem * item = model_->getItem(i);
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ namespace CDUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class CDItemModel;
|
class CDItemModel;
|
||||||
|
class QSortFilterProxyModel;
|
||||||
|
|
||||||
class CDView: public QTreeView, public PIObject
|
class CDView: public QTreeView, public PIObject
|
||||||
{
|
{
|
||||||
@@ -43,6 +44,7 @@ public slots:
|
|||||||
void clear();
|
void clear();
|
||||||
void buildFromHeader(const QString & description, int mode = 2);
|
void buildFromHeader(const QString & description, int mode = 2);
|
||||||
void calculate();
|
void calculate();
|
||||||
|
void filter(const QString & f);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void indexClicked(const QModelIndex & i);
|
void indexClicked(const QModelIndex & i);
|
||||||
@@ -54,6 +56,7 @@ private slots:
|
|||||||
void cd_changedGlobal();
|
void cd_changedGlobal();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
bool filterTree(const QModelIndex & ti, const QString & filter);
|
||||||
EVENT_HANDLER(void, pi_cd_sendFailed) {emit _qcd_sendFailed();}
|
EVENT_HANDLER(void, pi_cd_sendFailed) {emit _qcd_sendFailed();}
|
||||||
EVENT_HANDLER(void, pi_cd_sendSucceed) {emit _qcd_sendSucceed();}
|
EVENT_HANDLER(void, pi_cd_sendSucceed) {emit _qcd_sendSucceed();}
|
||||||
EVENT_HANDLER(void, pi_cd_receiveFailed) {emit _qcd_receiveFailed();}
|
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);
|
EVENT_HANDLER3(void, pi_cd_messageReceived, PIDeque<int>, path, int, type, PIString, msg);
|
||||||
|
|
||||||
CDItemModel * model_;
|
CDItemModel * model_;
|
||||||
|
QSortFilterProxyModel * proxy_;
|
||||||
int type_;
|
int type_;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|||||||
Reference in New Issue
Block a user