Gui: fix view object global coordinate space showable checking
This commit is contained in:
@@ -288,6 +288,9 @@ public:
|
||||
std::set<App::DocumentObject *> newSet;
|
||||
bool updated = false;
|
||||
for (auto child : newChildren) {
|
||||
auto childVp = docItem->getViewProvider(child);
|
||||
if (!childVp)
|
||||
continue;
|
||||
if(child && child->getNameInDocument()) {
|
||||
if(!newSet.insert(child).second) {
|
||||
TREE_WARN("duplicate child item " << obj->getFullName()
|
||||
@@ -309,18 +312,21 @@ public:
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!showable)
|
||||
child->Visibility.setValue(false);
|
||||
childVp->setShowable(showable);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for (auto child : childSet) {
|
||||
if(newSet.find(child) == newSet.end()) {
|
||||
if (newSet.find(child) == newSet.end()) {
|
||||
// this means old child removed
|
||||
updated = true;
|
||||
docItem->_ParentMap[child].erase(obj);
|
||||
|
||||
auto childVp = docItem->getViewProvider(child);
|
||||
if (childVp && child->getDocument() == obj->getDocument())
|
||||
childVp->setShowable(docItem->isObjectShowable(child));
|
||||
}
|
||||
}
|
||||
// We still need to check the order of the children
|
||||
@@ -330,10 +336,9 @@ public:
|
||||
|
||||
if(updated && checkVisibility) {
|
||||
for(auto child : children) {
|
||||
if(!child || !child->getNameInDocument() || !child->Visibility.getValue())
|
||||
continue;
|
||||
if(child->getDocument()==obj->getDocument() && !docItem->isObjectShowable(child))
|
||||
child->Visibility.setValue(false);
|
||||
auto childVp = docItem->getViewProvider(child);
|
||||
if (childVp && child->getDocument() == obj->getDocument())
|
||||
childVp->setShowable(docItem->isObjectShowable(child));
|
||||
}
|
||||
}
|
||||
return updated;
|
||||
@@ -3240,24 +3245,23 @@ void TreeWidget::_slotDeleteObject(const Gui::ViewProviderDocumentObject& view,
|
||||
// Check for any child of the deleted object that is not in the tree, and put it
|
||||
// under document item.
|
||||
for(auto child : data->children) {
|
||||
if(!child || !child->getNameInDocument() || child->getDocument()!=doc)
|
||||
auto childVp = docItem->getViewProvider(child);
|
||||
if (!childVp || child->getDocument() != doc)
|
||||
continue;
|
||||
docItem->_ParentMap[child].erase(obj);
|
||||
auto cit = docItem->ObjectMap.find(child);
|
||||
if(cit==docItem->ObjectMap.end() || cit->second->items.empty()) {
|
||||
auto vpd = docItem->getViewProvider(child);
|
||||
if(!vpd) continue;
|
||||
if(docItem->createNewItem(*vpd))
|
||||
if (cit==docItem->ObjectMap.end() || cit->second->items.empty()) {
|
||||
if (docItem->createNewItem(*childVp))
|
||||
needUpdate = true;
|
||||
}else {
|
||||
}
|
||||
else {
|
||||
auto childItem = *cit->second->items.begin();
|
||||
if(childItem->requiredAtRoot(false)) {
|
||||
if(docItem->createNewItem(*childItem->object(),docItem,-1,childItem->myData))
|
||||
if (childItem->requiredAtRoot(false)) {
|
||||
if (docItem->createNewItem(*childItem->object(),docItem,-1,childItem->myData))
|
||||
needUpdate = true;
|
||||
}
|
||||
}
|
||||
if(child->Visibility.getValue() && !docItem->isObjectShowable(child))
|
||||
child->Visibility.setValue(false);
|
||||
childVp->setShowable(docItem->isObjectShowable(child));
|
||||
}
|
||||
docItem->ObjectMap.erase(obj);
|
||||
}
|
||||
@@ -4126,7 +4130,7 @@ DocumentObjectItem *DocumentItem::findItem(
|
||||
auto subObj = obj->getSubObject(name.c_str());
|
||||
if(!subObj || subObj==obj) {
|
||||
if(!subObj && !getTree()->searchDoc)
|
||||
TREE_WARN("sub object not found " << item->getName() << '.' << name.c_str());
|
||||
TREE_LOG("sub object not found " << item->getName() << '.' << name.c_str());
|
||||
if(select) {
|
||||
item->selected += 2;
|
||||
if(std::find(item->mySubs.begin(),item->mySubs.end(),subname)==item->mySubs.end())
|
||||
|
||||
Reference in New Issue
Block a user