Gui: add new API ViewProviderDocumentObject::allowOverride()

This API is used to delcare if a view provider can be used as an
override for a give object.

Conflicts:
	src/App/DocumentObject.h
This commit is contained in:
Zheng, Lei
2019-09-22 21:18:54 +08:00
committed by wmayer
parent 7305343e10
commit 2df3052ecf
10 changed files with 89 additions and 103 deletions

View File

@@ -1711,15 +1711,22 @@ QPixmap ViewProviderLink::getOverlayPixmap() const {
void ViewProviderLink::onChanged(const App::Property* prop) {
if(prop==&ChildViewProvider) {
childVp = freecad_dynamic_cast<ViewProviderDocumentObject>(ChildViewProvider.getObject().get());
if(childVp) {
childVp->setPropertyPrefix("ChildViewProvider.");
childVp->Visibility.setValue(getObject()->Visibility.getValue());
childVp->attach(getObject());
childVp->updateView();
childVp->setActiveMode();
if(pcModeSwitch->getNumChildren()>1){
childVpLink = LinkInfo::get(childVp,0);
pcModeSwitch->replaceChild(1,childVpLink->getSnapshot(LinkView::SnapshotTransform));
if(childVp && getObject()) {
if(strcmp(childVp->getTypeId().getName(),getObject()->getViewProviderName())!=0
&& !childVp->allowOverride(*getObject()))
{
FC_ERR("Child view provider type '" << childVp->getTypeId().getName()
<< "' does not support " << getObject()->getFullName());
} else {
childVp->setPropertyPrefix("ChildViewProvider.");
childVp->Visibility.setValue(getObject()->Visibility.getValue());
childVp->attach(getObject());
childVp->updateView();
childVp->setActiveMode();
if(pcModeSwitch->getNumChildren()>1){
childVpLink = LinkInfo::get(childVp,0);
pcModeSwitch->replaceChild(1,childVpLink->getSnapshot(LinkView::SnapshotTransform));
}
}
}
}else if(!isRestoring()) {