summaryrefslogtreecommitdiffstats
path: root/mappingtreewidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'mappingtreewidget.cpp')
-rw-r--r--mappingtreewidget.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/mappingtreewidget.cpp b/mappingtreewidget.cpp
index 7ad16a1..8477b0e 100644
--- a/mappingtreewidget.cpp
+++ b/mappingtreewidget.cpp
@@ -384,6 +384,7 @@ MappingEditWidget::MappingEditWidget(QWidget *parent) : QWidget(parent){
connect(mMappingTree->mappingTreeView(), &MappingTreeView::shiftFocus, this, &MappingEditWidget::shiftFocusResult);
connect(mMappingResult, &MappingTreeResultView::shiftFocus, this, &MappingEditWidget::shiftFocusMappings);
connect(mMappingResult, &MappingTreeResultView::removeMapping, this, &MappingEditWidget::removeMapping);
+ connect(mMappingResult->selectionModel(), &QItemSelectionModel::currentChanged, this, &MappingEditWidget::resultSelectionChanged);
//buttons
mAddMapping = new QPushButton(tr(">>"));
@@ -491,6 +492,33 @@ void MappingEditWidget::loadMappings(QString from){
expandAllResults();
}
+void MappingEditWidget::resultSelectionChanged(const QModelIndex &current, const QModelIndex &previous){
+ Q_UNUSED(previous)
+ QStringList path;
+ QModelIndex c = current;
+ // gather elements from leaf to root
+ while(c != QModelIndex()){
+ path << c.data().toString();
+ c = c.parent();
+ }
+ std::reverse(path.begin(), path.end());
+ MappingTreeModel *srcModel = mMappingTree->mappingTreeModel();
+ QModelIndex srcIdx = srcModel->rootIndex();
+ // now search the source tree starting at the top,
+ // that's why we reversed the QStringList above
+ for(const QString &p : path){
+ srcIdx = srcModel->find(p, 0, srcIdx);
+ if(!srcIdx.isValid()){
+ return;
+ }
+ }
+ // yes, we have a valid index. Map it to the Proxy...
+ QModelIndex real = mMappingTree->mappingTreeProxy()->mapFromSource(srcIdx);
+ // select it and make sure it's visible!
+ mMappingTree->mappingTreeView()->selectionModel()->select(real, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);
+ mMappingTree->mappingTreeView()->scrollTo(real, QAbstractItemView::PositionAtCenter);
+}
+
MappingInputDialog::MappingInputDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f){
mOk = new QPushButton(tr("Ok"));
connect(mOk, &QPushButton::clicked, this, &MappingInputDialog::accept);