aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiodrag Milanovic <mmicko@gmail.com>2018-10-27 17:04:08 +0200
committerMiodrag Milanovic <mmicko@gmail.com>2018-10-27 17:04:08 +0200
commit436c2a0444a38b2f25e39a400de3bf805b6adbe8 (patch)
tree2840504df909864781164c70354871cd74a1ba15
parentf66c5a0094c42ae57398f4d91eaba5f2b9015d55 (diff)
downloadnextpnr-436c2a0444a38b2f25e39a400de3bf805b6adbe8.tar.gz
nextpnr-436c2a0444a38b2f25e39a400de3bf805b6adbe8.tar.bz2
nextpnr-436c2a0444a38b2f25e39a400de3bf805b6adbe8.zip
Fix keep selection on multiple trees
-rw-r--r--gui/designwidget.cc40
1 files changed, 32 insertions, 8 deletions
diff --git a/gui/designwidget.cc b/gui/designwidget.cc
index 5356258f..069f4cfa 100644
--- a/gui/designwidget.cc
+++ b/gui/designwidget.cc
@@ -487,8 +487,14 @@ void DesignWidget::onClickedBel(BelId bel, bool keep)
Q_EMIT selected(getDecals(ElementType::BEL, ctx->getBelName(bel)), keep);
}
int index = getIndexByElementType(ElementType::BEL);
- if (tabWidget->currentIndex() != index)
+ if (!keep)
+ {
+ for(int i=0;i<6;i++)
+ selectionModel[i]->clearSelection();
+ }
+ if (tabWidget->currentIndex() != index) {
tabWidget->setCurrentIndex(index);
+ }
selectionModel[index]->setCurrentIndex(getTreeByElementType(ElementType::BEL)->indexFromNode(*item),
keep ? QItemSelectionModel::Select : QItemSelectionModel::ClearAndSelect);
}
@@ -507,6 +513,11 @@ void DesignWidget::onClickedWire(WireId wire, bool keep)
Q_EMIT selected(getDecals(ElementType::WIRE, ctx->getWireName(wire)), keep);
}
int index = getIndexByElementType(ElementType::WIRE);
+ if (!keep)
+ {
+ for(int i=0;i<6;i++)
+ selectionModel[i]->clearSelection();
+ }
if (tabWidget->currentIndex() != index)
tabWidget->setCurrentIndex(index);
selectionModel[index]->setCurrentIndex(getTreeByElementType(ElementType::WIRE)->indexFromNode(*item),
@@ -528,6 +539,11 @@ void DesignWidget::onClickedPip(PipId pip, bool keep)
}
int index = getIndexByElementType(ElementType::PIP);
+ if (!keep)
+ {
+ for(int i=0;i<6;i++)
+ selectionModel[i]->clearSelection();
+ }
if (tabWidget->currentIndex() != index)
tabWidget->setCurrentIndex(index);
selectionModel[index]->setCurrentIndex(getTreeByElementType(ElementType::PIP)->indexFromNode(*item),
@@ -539,13 +555,17 @@ void DesignWidget::onSelectionChanged(int num, const QItemSelection &, const QIt
if (selectionModel[num]->selectedIndexes().size() == 0)
return;
- if (selectionModel[num]->selectedIndexes().size() > 1) {
- std::vector<DecalXY> decals;
- for (auto index : selectionModel[num]->selectedIndexes()) {
- TreeModel::Item *item = treeModel[num]->nodeFromIndex(index);
+ int num_selected = 0;
+ std::vector<DecalXY> decals;
+ for(int i=0;i<6;i++) {
+ num_selected += selectionModel[i]->selectedIndexes().size();
+ for (auto index : selectionModel[i]->selectedIndexes()) {
+ TreeModel::Item *item = treeModel[i]->nodeFromIndex(index);
std::vector<DecalXY> d = getDecals(item->type(), item->id());
std::move(d.begin(), d.end(), std::back_inserter(decals));
}
+ }
+ if (num_selected>1) {
Q_EMIT selected(decals, false);
return;
}
@@ -913,9 +933,11 @@ void DesignWidget::prepareMenuTree(int num, const QPoint &pos)
return;
QList<TreeModel::Item *> items;
- for (auto index : selectionModel[num]->selectedIndexes()) {
- TreeModel::Item *item = treeModel[num]->nodeFromIndex(index);
- items.append(item);
+ for(int i=0;i<6;i++) {
+ for (auto index : selectionModel[i]->selectedIndexes()) {
+ TreeModel::Item *item = treeModel[i]->nodeFromIndex(index);
+ items.append(item);
+ }
}
if (items.size() == 1) {
TreeModel::Item *item = items.at(0);
@@ -949,6 +971,8 @@ void DesignWidget::onItemDoubleClicked(QTreeWidgetItem *item, int column)
auto it = getTreeByElementType(type)->nodeForId(ctx->id(selectedProperty->valueText().toStdString()));
if (it) {
int num = getIndexByElementType(type);
+ for(int i=0;i<6;i++)
+ selectionModel[i]->clearSelection();
if (tabWidget->currentIndex() != num)
tabWidget->setCurrentIndex(num);
selectionModel[num]->setCurrentIndex(getTreeByElementType(type)->indexFromNode(*it),