Gui: Use proper placement property for Link

Links require different placement property (LinkPlacement) to be used,
otherwise it breaks the transform.

Fixes: #20776
This commit is contained in:
Kacper Donat
2025-06-22 13:12:00 +02:00
committed by Chris Hennes
parent dff2127bc3
commit d35b638039
2 changed files with 19 additions and 2 deletions

View File

@@ -170,6 +170,20 @@ bool ViewProviderDragger::forwardToLink()
return forwardedViewProvider != nullptr;
}
App::PropertyPlacement* ViewProviderDragger::getPlacementProperty() const
{
auto object = getObject();
if (auto linkExtension = object->getExtensionByType<App::LinkBaseExtension>()) {
if (auto linkPlacementProp = linkExtension->getLinkPlacementProperty()) {
return linkPlacementProp;
}
return linkExtension->getPlacementProperty();
}
return getObject()->getPropertyByName<App::PropertyPlacement>("Placement");
}
bool ViewProviderDragger::setEdit(int ModNum)
{
@@ -254,7 +268,7 @@ void ViewProviderDragger::dragMotionCallback(void* data, [[maybe_unused]] SoDrag
void ViewProviderDragger::updatePlacementFromDragger(DraggerComponents components)
{
const auto placement = getObject()->getPropertyByName<App::PropertyPlacement>("Placement");
const auto placement = getPlacementProperty();
if (!placement) {
return;
@@ -379,7 +393,7 @@ void ViewProviderDragger::updateTransformFromDragger()
Base::Placement ViewProviderDragger::getObjectPlacement() const
{
if (auto placement = getObject()->getPropertyByName<App::PropertyPlacement>("Placement")) {
if (auto placement = getPlacementProperty()) {
return placement->getValue();
}

View File

@@ -120,6 +120,9 @@ protected:
bool forwardToLink();
/// Gets placement property of the object
App::PropertyPlacement* getPlacementProperty() const;
/**
* Returns a newly create dialog for the part to be placed in the task view
* Must be reimplemented in subclasses.