UI: Fix select all instances of an object in the tree
Signed-off-by: Yash Suthar <yashsuthar983@gmail.com>
This commit is contained in:
committed by
Kacper Donat
parent
176ef6da4e
commit
60bd277d7a
@@ -5451,7 +5451,7 @@ void DocumentItem::updateItemSelection(DocumentObjectItem* item)
|
||||
item->setCheckState(false);
|
||||
}
|
||||
|
||||
if ((selected && item->selected > 0) || (!selected && !item->selected)) {
|
||||
if (!selected && !item->selected) {
|
||||
return;
|
||||
}
|
||||
if (item->selected != -1) {
|
||||
@@ -5484,7 +5484,38 @@ void DocumentItem::updateItemSelection(DocumentObjectItem* item)
|
||||
#endif
|
||||
|
||||
if (!selected) {
|
||||
Gui::Selection().rmvSelection(docname, objname, subname.c_str());
|
||||
// Handles deselection for same name object and subname
|
||||
bool keep = false;
|
||||
auto items = getTree()->selectedItems();
|
||||
for (auto it : items) {
|
||||
if (it->type() == TreeWidget::ObjectType) {
|
||||
auto docitem = static_cast<DocumentObjectItem*>(it);
|
||||
auto obj2 = docitem->object()->getObject();
|
||||
if (!obj2 || !obj2->isAttachedToDocument()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
std::ostringstream str2;
|
||||
App::DocumentObject* topParent2 = nullptr;
|
||||
docitem->getSubName(str2, topParent2);
|
||||
|
||||
if (topParent2) {
|
||||
if (!obj2->redirectSubName(str2, topParent2, nullptr)) {
|
||||
str2 << obj2->getNameInDocument() << '.';
|
||||
}
|
||||
obj2 = topParent2;
|
||||
}
|
||||
|
||||
if (obj2 == obj && str2.str() == subname) {
|
||||
keep = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!keep) {
|
||||
Gui::Selection().rmvSelection(docname, objname, subname.c_str());
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -5492,14 +5523,16 @@ void DocumentItem::updateItemSelection(DocumentObjectItem* item)
|
||||
selected = false;
|
||||
if (!item->mySubs.empty()) {
|
||||
for (auto& sub : item->mySubs) {
|
||||
if (Gui::Selection().addSelection(docname, objname, (subname + sub).c_str())) {
|
||||
if (Gui::Selection().isSelected(docname, objname, (subname + sub).c_str())
|
||||
|| Gui::Selection().addSelection(docname, objname, (subname + sub).c_str())) {
|
||||
selected = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!selected) {
|
||||
item->mySubs.clear();
|
||||
if (!Gui::Selection().addSelection(docname, objname, subname.c_str())) {
|
||||
if (!Gui::Selection().isSelected(docname, objname, subname.c_str())
|
||||
&& !Gui::Selection().addSelection(docname, objname, subname.c_str())) {
|
||||
// Safely re-access the item
|
||||
DocumentObjectItem* item2 = findItem(vobj->getObject(), subname);
|
||||
if (item2) {
|
||||
|
||||
Reference in New Issue
Block a user