Fix keep selection on multiple trees

This commit is contained in:
Miodrag Milanovic 2018-10-27 17:04:08 +02:00
parent f66c5a0094
commit 436c2a0444

View File

@ -487,8 +487,14 @@ void DesignWidget::onClickedBel(BelId bel, bool keep)
Q_EMIT selected(getDecals(ElementType::BEL, ctx->getBelName(bel)), keep); Q_EMIT selected(getDecals(ElementType::BEL, ctx->getBelName(bel)), keep);
} }
int index = getIndexByElementType(ElementType::BEL); 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); tabWidget->setCurrentIndex(index);
}
selectionModel[index]->setCurrentIndex(getTreeByElementType(ElementType::BEL)->indexFromNode(*item), selectionModel[index]->setCurrentIndex(getTreeByElementType(ElementType::BEL)->indexFromNode(*item),
keep ? QItemSelectionModel::Select : QItemSelectionModel::ClearAndSelect); 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); Q_EMIT selected(getDecals(ElementType::WIRE, ctx->getWireName(wire)), keep);
} }
int index = getIndexByElementType(ElementType::WIRE); int index = getIndexByElementType(ElementType::WIRE);
if (!keep)
{
for(int i=0;i<6;i++)
selectionModel[i]->clearSelection();
}
if (tabWidget->currentIndex() != index) if (tabWidget->currentIndex() != index)
tabWidget->setCurrentIndex(index); tabWidget->setCurrentIndex(index);
selectionModel[index]->setCurrentIndex(getTreeByElementType(ElementType::WIRE)->indexFromNode(*item), selectionModel[index]->setCurrentIndex(getTreeByElementType(ElementType::WIRE)->indexFromNode(*item),
@ -528,6 +539,11 @@ void DesignWidget::onClickedPip(PipId pip, bool keep)
} }
int index = getIndexByElementType(ElementType::PIP); int index = getIndexByElementType(ElementType::PIP);
if (!keep)
{
for(int i=0;i<6;i++)
selectionModel[i]->clearSelection();
}
if (tabWidget->currentIndex() != index) if (tabWidget->currentIndex() != index)
tabWidget->setCurrentIndex(index); tabWidget->setCurrentIndex(index);
selectionModel[index]->setCurrentIndex(getTreeByElementType(ElementType::PIP)->indexFromNode(*item), 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) if (selectionModel[num]->selectedIndexes().size() == 0)
return; return;
if (selectionModel[num]->selectedIndexes().size() > 1) { int num_selected = 0;
std::vector<DecalXY> decals; std::vector<DecalXY> decals;
for (auto index : selectionModel[num]->selectedIndexes()) { for(int i=0;i<6;i++) {
TreeModel::Item *item = treeModel[num]->nodeFromIndex(index); 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::vector<DecalXY> d = getDecals(item->type(), item->id());
std::move(d.begin(), d.end(), std::back_inserter(decals)); std::move(d.begin(), d.end(), std::back_inserter(decals));
} }
}
if (num_selected>1) {
Q_EMIT selected(decals, false); Q_EMIT selected(decals, false);
return; return;
} }
@ -913,10 +933,12 @@ void DesignWidget::prepareMenuTree(int num, const QPoint &pos)
return; return;
QList<TreeModel::Item *> items; QList<TreeModel::Item *> items;
for (auto index : selectionModel[num]->selectedIndexes()) { for(int i=0;i<6;i++) {
TreeModel::Item *item = treeModel[num]->nodeFromIndex(index); for (auto index : selectionModel[i]->selectedIndexes()) {
TreeModel::Item *item = treeModel[i]->nodeFromIndex(index);
items.append(item); items.append(item);
} }
}
if (items.size() == 1) { if (items.size() == 1) {
TreeModel::Item *item = items.at(0); TreeModel::Item *item = items.at(0);
if (highlightSelected.contains(item)) if (highlightSelected.contains(item))
@ -949,6 +971,8 @@ void DesignWidget::onItemDoubleClicked(QTreeWidgetItem *item, int column)
auto it = getTreeByElementType(type)->nodeForId(ctx->id(selectedProperty->valueText().toStdString())); auto it = getTreeByElementType(type)->nodeForId(ctx->id(selectedProperty->valueText().toStdString()));
if (it) { if (it) {
int num = getIndexByElementType(type); int num = getIndexByElementType(type);
for(int i=0;i<6;i++)
selectionModel[i]->clearSelection();
if (tabWidget->currentIndex() != num) if (tabWidget->currentIndex() != num)
tabWidget->setCurrentIndex(num); tabWidget->setCurrentIndex(num);
selectionModel[num]->setCurrentIndex(getTreeByElementType(type)->indexFromNode(*it), selectionModel[num]->setCurrentIndex(getTreeByElementType(type)->indexFromNode(*it),