summaryrefslogtreecommitdiffstats
path: root/mappingtreewidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'mappingtreewidget.cpp')
-rw-r--r--mappingtreewidget.cpp50
1 files changed, 47 insertions, 3 deletions
diff --git a/mappingtreewidget.cpp b/mappingtreewidget.cpp
index 873afd2..dcf96e1 100644
--- a/mappingtreewidget.cpp
+++ b/mappingtreewidget.cpp
@@ -30,7 +30,7 @@
MappingTreeWidget::MappingTreeWidget(QWidget *parent) : QWidget(parent){
//setup model
mModel = static_cast<MappingTreeModel*>(SmGlobals::instance()->model("MappingTree"));
- mProxy = new QSortFilterProxyModel(this);
+ mProxy = new MappingTreeProxy(this);
mProxy->setSourceModel(mModel);
mTypesModel = new QStringListModel(this);
mTypesModel->setStringList(mModel->mappingTypeNames());
@@ -46,11 +46,12 @@ MappingTreeWidget::MappingTreeWidget(QWidget *parent) : QWidget(parent){
mTree->expandAll();
connect(mModel, SIGNAL(needExpansion()), mTree, SLOT(expandAll()));
connect(mTree->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(selectionChanged()));
+ /* Hide buttons, this doesn't really work,
+ * but keep them for future use :) */
mTypeBox = new QComboBox;
mTypeBox->setModel(mTypesModel);
connect(mTypeBox, SIGNAL(currentIndexChanged(QString)), this, SLOT(typeChanged(QString)));
- /* Hide buttons, this doesn't really work,
- * but keep them for future use :) */
+ mTypeBox->setHidden(true);
mAddType = new QPushButton(tr("Add &type"));
connect(mAddType, SIGNAL(clicked()), this, SLOT(addType()));
mAddType->setHidden(true);
@@ -76,6 +77,20 @@ MappingTreeWidget::MappingTreeWidget(QWidget *parent) : QWidget(parent){
typeChanged(lastType);
}
+ // filter
+ mFilter = new QLineEdit;
+ connect(mFilter, SIGNAL(returnPressed()), this, SLOT(filter()));
+ mDoFilter = new QPushButton(tr("Filter"));
+ connect(mDoFilter, SIGNAL(clicked()), this, SLOT(filter()));
+ mClearFilter = new QPushButton(tr("Clear"));
+ connect(mClearFilter, SIGNAL(clicked()), this, SLOT(clearFilter()));
+ QLabel *filterLabel = new QLabel(tr("Filter"));
+ QHBoxLayout *filterLayout = new QHBoxLayout;
+ filterLayout->addWidget(filterLabel);
+ filterLayout->addWidget(mFilter);
+ filterLayout->addWidget(mDoFilter);
+ filterLayout->addWidget(mClearFilter);
+
//setup actions
mAddChildA = new QAction(tr("Add..."), this);
connect(mAddChildA, SIGNAL(triggered()), this, SLOT(addChild()));
@@ -93,6 +108,7 @@ MappingTreeWidget::MappingTreeWidget(QWidget *parent) : QWidget(parent){
//widget layout and tab order
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(mTypeBox);
+ mainLayout->addLayout(filterLayout);
mainLayout->addLayout(typesButtonLayout);
mainLayout->addWidget(mTree);
setLayout(mainLayout);
@@ -259,6 +275,18 @@ void MappingTreeWidget::moveChild(){
}
}
+void MappingTreeWidget::filter(){
+ QString filter = mFilter->text();
+ mProxy->setFilter(filter);
+ mTree->expandAll();
+}
+
+void MappingTreeWidget::clearFilter(){
+ mFilter->clear();
+ mProxy->setFilter(QString());
+ mTree->expandAll();
+}
+
const QModelIndex MappingTreeWidget::selected() const{
QModelIndexList sel = mTree->selectionModel()->selectedRows();
if(sel.isEmpty()){
@@ -392,3 +420,19 @@ MappingEditDialog::MappingEditDialog(QWidget *parent, Qt::WindowFlags f) : QDial
mainLayout->addLayout(buttonLayout);
setLayout(mainLayout);
}
+
+MappingTreeProxy::MappingTreeProxy(QObject *parent) : QSortFilterProxyModel(parent) {}
+
+void MappingTreeProxy::setFilter(const QString &filter){
+ mFilter = QRegExp(filter);
+ invalidateFilter();
+}
+
+bool MappingTreeProxy::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const{
+ if(mFilter.isEmpty()){
+ return true;
+ }
+ QModelIndex nameIdx = sourceModel()->index(sourceRow, MappingTreeModel::Name, sourceParent);
+ MappingTreeModel *model = qobject_cast<MappingTreeModel*>(sourceModel());
+ return model->matchRecursive(nameIdx, mFilter);
+}