TechDraw: Fix child not moving when drag and dropping a view between pages.
This commit is contained in:
committed by
WandererFan
parent
beda33d9e6
commit
ffb34ebe54
@@ -232,7 +232,7 @@ int DrawPage::getOrientation() const
|
||||
throw Base::RuntimeError("Template not set for Page");
|
||||
}
|
||||
|
||||
int DrawPage::addView(App::DocumentObject* docObj)
|
||||
int DrawPage::addView(App::DocumentObject* docObj, bool setPosition)
|
||||
{
|
||||
if (!docObj->isDerivedFrom<DrawView>()
|
||||
&& !docObj->isDerivedFrom<App::Link>()) {
|
||||
@@ -256,7 +256,8 @@ int DrawPage::addView(App::DocumentObject* docObj)
|
||||
//position all new views without owners in center of Page (exceptDVDimension)
|
||||
if (!view->claimParent()
|
||||
&& !docObj->isDerivedFrom<DrawViewDimension>()
|
||||
&& !docObj->isDerivedFrom<DrawViewBalloon>()) {
|
||||
&& !docObj->isDerivedFrom<DrawViewBalloon>()
|
||||
&& setPosition) {
|
||||
view->X.setValue(getPageWidth() / 2.0);
|
||||
view->Y.setValue(getPageHeight() / 2.0);
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ public:
|
||||
void handleChangedPropertyType(Base::XMLReader& reader, const char* TypeName,
|
||||
App::Property* prop) override;
|
||||
|
||||
int addView(App::DocumentObject* docObj);
|
||||
int addView(App::DocumentObject* docObj, bool setPosition = true);
|
||||
int removeView(App::DocumentObject* docObj);
|
||||
short mustExecute() const override;
|
||||
boost::signals2::signal<void(const DrawPage*)> signalGuiPaint;
|
||||
|
||||
@@ -154,10 +154,27 @@ void ViewProviderPageExtension::dropObject(App::DocumentObject* obj)
|
||||
|
||||
if (obj->isDerivedFrom<TechDraw::DrawView>()) {
|
||||
auto dv = static_cast<TechDraw::DrawView*>(obj);
|
||||
if (dv->findParentPage()) {
|
||||
dv->findParentPage()->removeView(dv);
|
||||
|
||||
std::vector<App::DocumentObject*> deps;
|
||||
for (auto* dep : dv->getInList()) {
|
||||
if (dep && dep->isDerivedFrom<TechDraw::DrawView>()) {
|
||||
deps.push_back(dep);
|
||||
}
|
||||
}
|
||||
getViewProviderPage()->getDrawPage()->addView(dv);
|
||||
|
||||
auto* parentPage = dv->findParentPage();
|
||||
if (parentPage) {
|
||||
for (auto* dep : deps) {
|
||||
parentPage->removeView(dep);
|
||||
}
|
||||
parentPage->removeView(dv);
|
||||
}
|
||||
|
||||
getViewProviderPage()->getDrawPage()->addView(dv, false);
|
||||
for (auto* dep : deps) {
|
||||
getViewProviderPage()->getDrawPage()->addView(dep, false);
|
||||
}
|
||||
|
||||
//don't run ancestor's method as addView does everything we need
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user