22#include <com/sun/star/beans/XPropertySet.hpp>
23#include <com/sun/star/util/XModifyBroadcaster.hpp>
24#include <com/sun/star/util/XModifiable.hpp>
25#include <com/sun/star/embed/EmbedStates.hpp>
26#include <com/sun/star/embed/EmbedMisc.hpp>
27#include <com/sun/star/embed/Aspects.hpp>
28#include <com/sun/star/embed/ObjectSaveVetoException.hpp>
29#include <com/sun/star/embed/XEmbeddedObject.hpp>
30#include <com/sun/star/embed/XEmbedPersist2.hpp>
31#include <com/sun/star/embed/XInplaceClient.hpp>
32#include <com/sun/star/embed/XInplaceObject.hpp>
33#include <com/sun/star/embed/XLinkageSupport.hpp>
34#include <com/sun/star/embed/NoVisualAreaSizeException.hpp>
35#include <com/sun/star/embed/XWindowSupplier.hpp>
36#include <com/sun/star/document/XEventListener.hpp>
37#include <com/sun/star/container/XChild.hpp>
38#include <com/sun/star/document/XStorageBasedDocument.hpp>
39#include <com/sun/star/lang/WrappedTargetRuntimeException.hpp>
66#include <svx/strings.hrc>
82#include <rtl/ustrbuf.hxx>
84#include <bitmaps.hlst>
90 uno::Reference < beans::XPropertySet >
xFrame;
104class SdrLightEmbeddedClient_Impl :
public ::cppu::WeakImplHelper
105 < embed::XStateChangeListener
106 , document::XEventListener
107 , embed::XInplaceClient
108 , embed::XEmbeddedClient
109 , embed::XWindowSupplier
112 uno::Reference< awt::XWindow > m_xWindow;
120 explicit SdrLightEmbeddedClient_Impl(
SdrOle2Obj* pObj );
121 virtual ~SdrLightEmbeddedClient_Impl()
override;
123 void SetSizeScale(
const Fraction& aScaleWidth,
const Fraction& aScaleHeight )
125 m_aScaleWidth = aScaleWidth;
126 m_aScaleHeight = aScaleHeight;
129 const Fraction& GetScaleWidth()
const {
return m_aScaleWidth; }
130 const Fraction& GetScaleHeight()
const {
return m_aScaleHeight; }
132 void setWindow(
const uno::Reference< awt::XWindow >& _xWindow);
139 virtual void SAL_CALL changingState(
const css::lang::EventObject& aEvent, ::sal_Int32 nOldState, ::sal_Int32 nNewState )
override;
140 virtual void SAL_CALL stateChanged(
const css::lang::EventObject& aEvent, ::sal_Int32 nOldState, ::sal_Int32 nNewState )
override;
141 virtual void SAL_CALL disposing(
const css::lang::EventObject& aEvent )
override;
144 virtual void SAL_CALL notifyEvent(
const document::EventObject& aEvent )
override;
147 virtual void SAL_CALL saveObject()
override;
148 virtual void SAL_CALL visibilityChanged(
sal_Bool bVisible )
override;
151 virtual uno::Reference< util::XCloseable > SAL_CALL getComponent()
override;
154 virtual sal_Bool SAL_CALL canInplaceActivate()
override;
155 virtual void SAL_CALL activatingInplace()
override;
156 virtual void SAL_CALL activatingUI()
override;
157 virtual void SAL_CALL deactivatedInplace()
override;
158 virtual void SAL_CALL deactivatedUI()
override;
159 virtual uno::Reference< css::frame::XLayoutManager > SAL_CALL getLayoutManager()
override;
160 virtual uno::Reference< frame::XDispatchProvider > SAL_CALL getInplaceDispatchProvider()
override;
161 virtual awt::Rectangle SAL_CALL getPlacement()
override;
162 virtual awt::Rectangle SAL_CALL getClipRectangle()
override;
163 virtual void SAL_CALL translateAccelerators(
const uno::Sequence< awt::KeyEvent >& aKeys )
override;
164 virtual void SAL_CALL scrollObject(
const awt::Size& aOffset )
override;
165 virtual void SAL_CALL changedPlacement(
const awt::Rectangle& aPosRect )
override;
168 virtual uno::Reference< awt::XWindow > SAL_CALL getWindow()
override;
173SdrLightEmbeddedClient_Impl::SdrLightEmbeddedClient_Impl(
SdrOle2Obj* pObj )
177SdrLightEmbeddedClient_Impl::~SdrLightEmbeddedClient_Impl()
181tools::Rectangle SdrLightEmbeddedClient_Impl::impl_getScaledRect_nothrow()
const
185 aLogicRect.SetSize(
Size(
tools::Long( aLogicRect.GetWidth() * m_aScaleWidth),
186 tools::Long( aLogicRect.GetHeight() * m_aScaleHeight) ) );
190void SAL_CALL SdrLightEmbeddedClient_Impl::changingState(
const css::lang::EventObject& , ::sal_Int32 , ::sal_Int32 )
194void SAL_CALL SdrLightEmbeddedClient_Impl::stateChanged(
const css::lang::EventObject& , ::sal_Int32 nOldState, ::sal_Int32 nNewState )
198 if ( mpObj && nOldState == embed::EmbedStates::LOADED && nNewState == embed::EmbedStates::RUNNING )
200 mpObj->ObjectLoaded();
203 else if ( mpObj && nNewState == embed::EmbedStates::LOADED && nOldState == embed::EmbedStates::RUNNING )
209void SdrLightEmbeddedClient_Impl::disconnect()
218void SAL_CALL SdrLightEmbeddedClient_Impl::disposing(
const css::lang::EventObject& )
223void SAL_CALL SdrLightEmbeddedClient_Impl::notifyEvent(
const document::EventObject& aEvent )
230 if ( !(mpObj && mpObj->GetAspect() != embed::Aspects::MSOLE_ICON &&
aEvent.EventName ==
"OnVisAreaChanged"
231 && mpObj->GetObjRef().is() && mpObj->GetObjRef()->getClientSite() == uno::Reference< embed::XEmbeddedClient >(
this )) )
236 MapUnit aContainerMapUnit( MapUnit::Map100thMM );
237 uno::Reference< embed::XVisualObject > xParentVis( mpObj->GetParentXModel(), uno::UNO_QUERY );
238 if ( xParentVis.is() )
247 aSz = mpObj->GetObjRef()->getVisualAreaSize( mpObj->GetAspect() );
249 catch( embed::NoVisualAreaSizeException& )
255 catch( uno::Exception& )
271 Size( aLogicRect.GetWidth() - aScaledSize.Width(),
272 aLogicRect.GetHeight() - aScaledSize.Height() ),
276 mpObj->SetLogicRect(
tools::Rectangle( aLogicRect.TopLeft(), aScaledSize ) );
277 mpObj->BroadcastObjectChange();
280 mpObj->ActionChanged();
282 catch( uno::Exception& )
288void SAL_CALL SdrLightEmbeddedClient_Impl::saveObject()
291 uno::Reference< embed::XCommonEmbedPersist > xPersist;
292 uno::Reference< util::XModifiable > xModifiable;
298 throw embed::ObjectSaveVetoException();
301 xPersist.set( mpObj->GetObjRef(), uno::UNO_QUERY_THROW );
302 xModifiable.set( mpObj->GetParentXModel(), uno::UNO_QUERY );
305 xPersist->storeOwn();
307 if ( xModifiable.is() )
308 xModifiable->setModified(
true );
311void SAL_CALL SdrLightEmbeddedClient_Impl::visibilityChanged(
sal_Bool )
318 Size aLogicSize( aLogicRect.GetWidth(), aLogicRect.GetHeight() );
320 if( mpObj->IsChart() )
323 mpObj->SetLogicRect(
tools::Rectangle( aLogicRect.TopLeft(), aLogicSize ) );
324 mpObj->BroadcastObjectChange();
329uno::Reference< util::XCloseable > SAL_CALL SdrLightEmbeddedClient_Impl::getComponent()
331 uno::Reference< util::XCloseable > xResult;
335 xResult.set( mpObj->GetParentXModel(), uno::UNO_QUERY );
341sal_Bool SAL_CALL SdrLightEmbeddedClient_Impl::canInplaceActivate()
347 uno::Reference< embed::XEmbeddedObject > xObject = mpObj->GetObjRef();
349 throw uno::RuntimeException();
351 bRet = ( xObject->getCurrentState() != embed::EmbedStates::ACTIVE && mpObj->GetAspect() != embed::Aspects::MSOLE_ICON );
356void SAL_CALL SdrLightEmbeddedClient_Impl::activatingInplace()
360void SAL_CALL SdrLightEmbeddedClient_Impl::activatingUI()
365 uno::Reference < frame::XFrame > xOwnFrame( xFrame,uno::UNO_QUERY);
366 uno::Reference < frame::XFramesSupplier > xParentFrame = xOwnFrame->getCreator();
367 if ( xParentFrame.is() )
368 xParentFrame->setActiveFrame( xOwnFrame );
372 for(sal_Int32 i = nCount-1 ;
i >= 0;--
i)
380 const uno::Reference< embed::XEmbeddedObject >& xObject = pObj->
GetObjRef();
383 if ( xObject->getStatus( pObj->
GetAspect() ) & embed::EmbedMisc::MS_EMBED_ACTIVATEWHENVISIBLE )
384 xObject->changeState( embed::EmbedStates::INPLACE_ACTIVE );
388 uno::Reference< embed::XLinkageSupport > xLink( xObject, uno::UNO_QUERY );
389 if ( xLink.is() && xLink->isLink() )
390 xObject->changeState( embed::EmbedStates::LOADED );
392 xObject->changeState( embed::EmbedStates::RUNNING );
395 catch (css::uno::Exception& )
402void SAL_CALL SdrLightEmbeddedClient_Impl::deactivatedInplace()
406void SAL_CALL SdrLightEmbeddedClient_Impl::deactivatedUI()
409 css::uno::Reference< css::frame::XLayoutManager > xLayoutManager(getLayoutManager());
410 if ( xLayoutManager.is() )
412 static constexpr OUStringLiteral aMenuBarURL =
u"private:resource/menubar/menubar";
413 if ( !xLayoutManager->isElementVisible( aMenuBarURL ) )
414 xLayoutManager->createElement( aMenuBarURL );
418uno::Reference< css::frame::XLayoutManager > SAL_CALL SdrLightEmbeddedClient_Impl::getLayoutManager()
420 uno::Reference< css::frame::XLayoutManager > xMan;
425 xMan.set(
xFrame->getPropertyValue(
"LayoutManager"),uno::UNO_QUERY);
427 catch ( uno::Exception& ex )
430 throw css::lang::WrappedTargetRuntimeException(
ex.Message,
437uno::Reference< frame::XDispatchProvider > SAL_CALL SdrLightEmbeddedClient_Impl::getInplaceDispatchProvider()
440 return uno::Reference < frame::XDispatchProvider >(
lcl_getFrame_throw(mpObj), uno::UNO_QUERY_THROW );
443awt::Rectangle SAL_CALL SdrLightEmbeddedClient_Impl::getPlacement()
447 throw uno::RuntimeException();
450 MapUnit aContainerMapUnit( MapUnit::Map100thMM );
451 uno::Reference< embed::XVisualObject > xParentVis( mpObj->GetParentXModel(), uno::UNO_QUERY );
452 if ( xParentVis.is() )
459awt::Rectangle SAL_CALL SdrLightEmbeddedClient_Impl::getClipRectangle()
461 return getPlacement();
464void SAL_CALL SdrLightEmbeddedClient_Impl::translateAccelerators(
const uno::Sequence< awt::KeyEvent >& )
468void SAL_CALL SdrLightEmbeddedClient_Impl::scrollObject(
const awt::Size& )
472void SAL_CALL SdrLightEmbeddedClient_Impl::changedPlacement(
const awt::Rectangle& aPosRect )
476 throw uno::RuntimeException();
478 uno::Reference< embed::XInplaceObject > xInplace( mpObj->GetObjRef(), uno::UNO_QUERY_THROW );
481 awt::Rectangle aOldRect = getPlacement();
484 if ( aOldPixelRect == aNewPixelRect )
489 MapUnit aContainerMapUnit( MapUnit::Map100thMM );
490 uno::Reference< embed::XVisualObject > xParentVis( mpObj->GetParentXModel(), uno::UNO_QUERY );
491 if ( xParentVis.is() )
497 if ( aNewLogicRect == aLogicRect )
509 aNewLogicRect.
SetSize( aNewObjSize );
514 aLogicRect.
GetHeight() - aNewObjSize.Height() ),
519 mpObj->BroadcastObjectChange();
522 mpObj->ActionChanged();
526uno::Reference< awt::XWindow > SAL_CALL SdrLightEmbeddedClient_Impl::getWindow()
529 uno::Reference< awt::XWindow > xCurrent = m_xWindow;
530 if ( !xCurrent.is() )
533 throw uno::RuntimeException();
535 xCurrent =
xFrame->getComponentWindow();
539void SdrLightEmbeddedClient_Impl::setWindow(
const uno::Reference< awt::XWindow >& _xWindow)
541 m_xWindow = _xWindow;
556 const OUString& ,
const css::uno::Any & )
561 uno::Reference< embed::XEmbeddedObject > xObject =
pObj->
GetObjRef();
562 OSL_ENSURE( xObject.is(),
"The object must exist always!" );
570 sal_Int32
nState = xObject->getCurrentState();
571 if (
nState != embed::EmbedStates::LOADED )
574 xObject->changeState( embed::EmbedStates::LOADED );
575 xObject->changeState(
nState );
578 catch ( uno::Exception& )
593 SvBaseLink::Closed();
656static bool ImplIsMathObj(
const uno::Reference < embed::XEmbeddedObject >& rObjRef )
673 return std::make_unique<sdr::properties::OleProperties>(*
this);
680 return std::make_unique<sdr::contact::ViewContactOfSdrOle2Obj>(*
this);
726 if (rSource.
mpImpl->moGraphic)
736 if( !(pDestPers && pSrcPers) )
747 mpImpl->mbTypeAsked =
false;
748 mpImpl->aPersistName = aTmp;
758 const OUString& rNewObjName,
765 mpImpl->aPersistName = rNewObjName;
767 if (
mpImpl->mxObjRef.is() && (
mpImpl->mxObjRef->getStatus(
GetAspect() ) & embed::EmbedMisc::EMBED_NEVERRESIZE ) )
781 if (
mpImpl->mxObjRef.is() &&
mpImpl->mxObjRef.IsChart())
783 strStyle =
mpImpl->mxObjRef.GetChartType();
790 if (
mpImpl->mbConnected )
795 if (
mpImpl->mxLightClient)
797 mpImpl->mxLightClient->disconnect();
798 mpImpl->mxLightClient.clear();
804 mpImpl->mxObjRef.SetViewAspect( nAspect );
814 return mpImpl->mxObjRef.GetViewAspect();
819 return mpImpl->mxObjRef.is() && embed::EmbedStates::INPLACE_ACTIVE ==
mpImpl->mxObjRef->getCurrentState();
824 return mpImpl->mxObjRef.is() && embed::EmbedStates::UI_ACTIVE ==
mpImpl->mxObjRef->getCurrentState();
830 mpImpl->moGraphic.emplace(rGrf);
838 mpImpl->moGraphic.reset();
846 mpImpl->maProgName = rName;
851 return mpImpl->maProgName;
856 return !
mpImpl->mxObjRef.is();
878 bool bResult =
false;
880 if (
mpImpl->mpObjectLink )
886 OUString aNewLinkURL;
888 if ( !aNewLinkURL.equalsIgnoreAsciiCase(
mpImpl->maLinkURL ) )
891 uno::Reference<embed::XCommonEmbedPersist> xPersObj(
mpImpl->mxObjRef.GetObject(), uno::UNO_QUERY );
892 OSL_ENSURE( xPersObj.is(),
"The object must exist!" );
897 sal_Int32 nCurState =
mpImpl->mxObjRef->getCurrentState();
898 if ( nCurState != embed::EmbedStates::LOADED )
899 mpImpl->mxObjRef->changeState(embed::EmbedStates::LOADED);
903 "URL", aNewLinkURL) };
904 xPersObj->reload( aArgs, uno::Sequence< beans::PropertyValue >() );
906 mpImpl->maLinkURL = aNewLinkURL;
909 if ( nCurState != embed::EmbedStates::LOADED )
910 mpImpl->mxObjRef->changeState(nCurState);
912 catch( css::uno::Exception
const & )
936 uno::Reference< embed::XStorage > xStorage = xDoc->getDocumentStorage();
937 if ( !xStorage.is() )
942 uno::Reference< embed::XLinkageSupport > xLinkSupport(
mpImpl->mxObjRef.GetObject(), uno::UNO_QUERY_THROW );
943 xLinkSupport->breakLink( xStorage,
mpImpl->aPersistName );
945 mpImpl->maLinkURL.clear();
947 catch( css::uno::Exception& )
957 if ( pLinkManager &&
mpImpl->mpObjectLink )
960 mpImpl->mpObjectLink =
nullptr;
966 if (!
mpImpl->mxObjRef.GetObject().is() ||
mpImpl->mpObjectLink)
971 uno::Reference< embed::XLinkageSupport > xLinkSupport(
mpImpl->mxObjRef.GetObject(), uno::UNO_QUERY );
973 if ( xLinkSupport.is() && xLinkSupport->isLink() )
975 OUString aLinkURL = xLinkSupport->getLinkURL();
977 if ( !aLinkURL.isEmpty() )
985 mpImpl->maLinkURL = aLinkURL;
987 mpImpl->mpObjectLink->Connect();
992 catch (
const css::uno::Exception&)
1000 if(
mpImpl->aPersistName.isEmpty() )
1017 if (
mpImpl->mxObjRef.is() )
1022 mpImpl->aPersistName = aTmp;
1025 else if ( !
mpImpl->mxObjRef.is() )
1028 mpImpl->mbTypeAsked =
false;
1031 if (
mpImpl->mxObjRef.GetObject().is() )
1033 mpImpl->mxObjRef.AssignToContainer( &rContainer,
mpImpl->aPersistName );
1034 mpImpl->mbConnected =
true;
1039 if (
mpImpl->mxObjRef.is() )
1041 if ( !
mpImpl->mxLightClient.is() )
1042 mpImpl->mxLightClient =
new SdrLightEmbeddedClient_Impl(
this );
1044 mpImpl->mxObjRef->addStateChangeListener(
mpImpl->mxLightClient );
1045 mpImpl->mxObjRef->addEventListener(
mpImpl->mxLightClient );
1047 if (
mpImpl->mxObjRef->getCurrentState() != embed::EmbedStates::LOADED )
1052 uno::Reference< container::XChild > xChild(
mpImpl->mxObjRef.GetObject(), uno::UNO_QUERY );
1062 catch( css::uno::Exception& )
1075 if( !(
mpImpl->mxObjRef.is() &&
mpImpl->mxObjRef->getCurrentState() != embed::EmbedStates::LOADED) )
1079 if (!
mpImpl->mxModifyListener.is())
1084 uno::Reference< util::XModifyBroadcaster > xBC(
getXModel(), uno::UNO_QUERY );
1087 xBC->addModifyListener(
mpImpl->mxModifyListener );
1096 if( !
mpImpl->mbConnected )
1098 OSL_FAIL(
"Disconnect() called on disconnected object!");
1108 if ( !
mpImpl->mxObjRef.is() ||
mpImpl->aPersistName.isEmpty() )
1113 sal_Int32
nState =
mpImpl->mxObjRef->getCurrentState();
1114 if (
nState != embed::EmbedStates::LOADED )
1116 uno::Reference< util::XModifyBroadcaster > xBC(
getXModel(), uno::UNO_QUERY );
1117 if (xBC.is() &&
mpImpl->mxModifyListener.is())
1119 xBC->removeModifyListener(
mpImpl->mxModifyListener );
1123 catch( css::uno::Exception& )
1133 if ( !
mpImpl->aPersistName.isEmpty() )
1147 mpImpl->mxObjRef.AssignToContainer(
nullptr,
mpImpl->aPersistName );
1169 else if (
mpImpl->mxObjRef.is() )
1182 mpImpl->mxObjRef.AssignToContainer(
nullptr,
mpImpl->aPersistName );
1190 if (
mpImpl->mxObjRef.is() &&
mpImpl->mxLightClient.is() )
1192 mpImpl->mxObjRef->removeStateChangeListener (
mpImpl->mxLightClient );
1193 mpImpl->mxObjRef->removeEventListener(
mpImpl->mxLightClient );
1194 mpImpl->mxObjRef->setClientSite(
nullptr );
1199 catch( css::uno::Exception& )
1204 mpImpl->mbConnected =
false;
1223 pClone->TRSetBaseGeometry(aMatrix, aPolyPolygon);
1236 pClone->NbcSetOutlinerParaObject(*pOPO);
1251 pClone->SetMergedItem(
XLineStyleItem(css::drawing::LineStyle_SOLID));
1257 pClone->SetMergedItem(
XFillStyleItem(drawing::FillStyle_BITMAP));
1273 return pRetval->DoConvertToPolyObj(bBezier, bAddText);
1281 const bool bRemove(pNewPage ==
nullptr && pOldPage !=
nullptr);
1282 const bool bInsert(pNewPage !=
nullptr && pOldPage ==
nullptr);
1284 if (bRemove &&
mpImpl->mbConnected )
1292 if (bInsert && !
mpImpl->mbConnected )
1300 DBG_ASSERT( !rNewObjRef.is() || !
mpImpl->mxObjRef.GetObject().is(),
"SetObjRef called on already initialized object!");
1301 if( rNewObjRef ==
mpImpl->mxObjRef.GetObject() )
1306 if (
mpImpl->mxObjRef.GetObject().is() )
1307 mpImpl->mxObjRef.Lock(
false );
1311 mpImpl->mxObjRef.Clear();
1313 if (
mpImpl->mbConnected )
1317 mpImpl->mbTypeAsked =
false;
1319 if (
mpImpl->mxObjRef.is() )
1321 mpImpl->moGraphic.reset();
1323 if (
mpImpl->mxObjRef->getStatus(
GetAspect() ) & embed::EmbedMisc::EMBED_NEVERRESIZE )
1353 mpImpl->aPersistName = rPersistName;
1354 mpImpl->mbLoadingOLEObjectFailed =
false;
1362 mpImpl->aPersistName.clear();
1363 mpImpl->mbLoadingOLEObjectFailed =
false;
1369 return mpImpl->aPersistName;
1398 OUStringBuffer
sName(
SvxResId(
mpImpl->mbFrame ? STR_ObjNameSingulFrame : STR_ObjNameSingulOLE2));
1402 if (!
aName.isEmpty())
1407 return sName.makeStringAndClear();
1412 return SvxResId(
mpImpl->mbFrame ? STR_ObjNamePluralFrame : STR_ObjNamePluralOLE2);
1423 if (
mpImpl->mbSuppressSetVisAreaSize)
1428 if (
GetAspect() == embed::Aspects::MSOLE_ICON )
1433 if (!
mpImpl->mxObjRef.is())
1443 mpImpl->mxObjRef.GetObject()));
1444 const bool bHasOwnClient(
1445 mpImpl->mxLightClient.is() &&
1446 mpImpl->mxObjRef->getClientSite() == uno::Reference< embed::XEmbeddedClient >(
mpImpl->mxLightClient ) );
1448 if ( pClient || bHasOwnClient )
1451 if ( ((nMiscStatus & embed::EmbedMisc::MS_EMBED_RECOMPOSEONRESIZE) &&
1453 ||
mpImpl->mxObjRef->getCurrentState() == embed::EmbedStates::INPLACE_ACTIVE
1465 aScaleWidth =
mpImpl->mxLightClient->GetScaleWidth();
1466 aScaleHeight =
mpImpl->mxLightClient->GetScaleHeight();
1476 if (sal_Int32(aScaleWidth) != 0 && sal_Int32(aScaleHeight) != 0)
1485 aSz.Width = aVisSize.
Width();
1486 aSz.Height = aVisSize.
Height();
1493 catch( embed::NoVisualAreaSizeException& )
1499 if (aVisSize != aAcceptedVisArea.
GetSize())
1520 mpImpl->mxObjRef.UpdateReplacement();
1538 mpImpl->mxLightClient->SetSizeScale( aScaleWidth, aScaleHeight );
1543 else if( (nMiscStatus & embed::EmbedMisc::MS_EMBED_RECOMPOSEONRESIZE) &&
1548 uno::Reference< embed::XVisualObject > xVisualObject(
getXModel(), uno::UNO_QUERY );
1549 if( xVisualObject.is() )
1570 xVisualObject->setVisualAreaSize(
1585 if (
mpImpl->mxObjRef.is() && (
mpImpl->mxObjRef->getStatus(
GetAspect() ) & embed::EmbedMisc::MS_EMBED_RECOMPOSEONRESIZE ) )
1634 if (
mpImpl->mxObjRef.is() )
1635 return mpImpl->mxObjRef.GetGraphic();
1636 return mpImpl->moGraphic ? &*
mpImpl->moGraphic :
nullptr;
1641 if (
mpImpl->mxObjRef.is() )
1642 mpImpl->mxObjRef.UpdateReplacement();
1647 return mpImpl->mxObjRef.GetSize( pTargetMapMode );
1652 mpImpl->mbSuppressSetVisAreaSize = bNew;
1665 uno::Reference<embed::XEmbedPersist2> xPersist(xObj, uno::UNO_QUERY);
1668 if (!xPersist->isStored())
1673 bool bResult =
false;
1675 sal_Int32
nState = xObj->getCurrentState();
1676 if (
nState == embed::EmbedStates::LOADED )
1683 uno::Reference < util::XModifiable > xModifiable( xObj->getComponent(), uno::UNO_QUERY );
1684 if ( !xModifiable.is() )
1688 sal_Int64 nMiscStatus = xObj->getStatus( nAspect );
1690 if ( embed::EmbedMisc::MS_EMBED_ALWAYSRUN != ( nMiscStatus & embed::EmbedMisc::MS_EMBED_ALWAYSRUN ) &&
1691 embed::EmbedMisc::EMBED_ACTIVATEIMMEDIATELY != ( nMiscStatus & embed::EmbedMisc::EMBED_ACTIVATEIMMEDIATELY ) &&
1692 !( xModifiable.is() && xModifiable->isModified() ) &&
1693 !(
nState == embed::EmbedStates::INPLACE_ACTIVE ||
nState == embed::EmbedStates::UI_ACTIVE ||
nState == embed::EmbedStates::ACTIVE ) )
1703bool SdrOle2Obj::Unload(
const uno::Reference< embed::XEmbeddedObject >& xObj, sal_Int64 nAspect )
1705 bool bResult =
false;
1711 xObj->changeState( embed::EmbedStates::LOADED );
1714 catch( css::uno::Exception& )
1725 if (!
mpImpl->mxObjRef.is())
1737 if(!
mpImpl->mbLoadingOLEObjectFailed)
1742 mpImpl->mbTypeAsked =
false;
1747 if(
mpImpl->mxObjRef.is() )
1749 mpImpl->mbLoadingOLEObjectFailed =
true;
1756 if (
mpImpl->mxObjRef.is() )
1777 if (
mpImpl->mxObjRef.is() )
1781 if (
mpImpl->mbConnected )
1791 return mpImpl->mxObjRef.GetObject();
1796 return mpImpl->mxObjRef.GetObject();
1802 return uno::Reference< frame::XModel >(
mpImpl->mxObjRef->getComponent(), uno::UNO_QUERY );
1804 return uno::Reference< frame::XModel >();
1809 if (!
mpImpl->mbTypeAsked)
1812 mpImpl->mbTypeAsked =
true;
1814 return mpImpl->mbIsChart;
1819 mpImpl->mxObjRef.SetGraphic( aGraphic, OUString() );
1822 if (
const Graphic* pObjGraphic =
mpImpl->mxObjRef.is() ?
nullptr :
mpImpl->mxObjRef.GetGraphic())
1823 mpImpl->moGraphic.emplace(*pObjGraphic);
1828 mpImpl->mxObjRef.SetGraphicStream( xGrStream, aMediaType );
1831 if (
const Graphic* pObjGraphic =
mpImpl->mxObjRef.is() ?
nullptr :
mpImpl->mxObjRef.GetGraphic())
1832 mpImpl->moGraphic.emplace(*pObjGraphic);
1837 if ( !
mpImpl->mxObjRef.is() )
1860 if (!
mpImpl->mxObjRef.is())
1864 aObjAreaSize =
mpImpl->mxObjRef.GetSize( &aMapMode );
1881 && !(
mpImpl->mxLightClient.is() &&
mpImpl->mxObjRef->getClientSite() == uno::Reference< embed::XEmbeddedClient >(
mpImpl->mxLightClient ) ) )
1885 if (
mpImpl->mxObjRef.is() &&
mpImpl->mxLightClient.is() )
1892 mpImpl->mxLightClient->SetSizeScale( aScaleWidth, aScaleHeight );
1894 mpImpl->mxObjRef->setClientSite(
mpImpl->mxLightClient );
1896 }
catch( uno::Exception& )
1915 if (
mpImpl->mxObjRef.is() &&
mpImpl->mxLightClient.is() )
1917 mpImpl->mxLightClient->setWindow(_xWindow);
static OutputDevice * GetDefaultDevice()
void ReduceInaccurate(unsigned nSignificantBits)
void InsertObj(SdrOle2Obj *pObj)
SVXCORE_DLLPUBLIC size_t size() const
void RemoveObj(SdrOle2Obj *pObj)
SAL_WARN_UNUSED_RESULT Point PixelToLogic(const Point &rDevicePt) const
SAL_WARN_UNUSED_RESULT Point LogicToLogic(const Point &rPtSource, const MapMode *pMapModeSource, const MapMode *pMapModeDest) const
SAL_WARN_UNUSED_RESULT Point LogicToPixel(const Point &rLogicPt) const
virtual const tools::Rectangle & GetSnapRect() const override
virtual ::sfx2::SvBaseLink::UpdateResult DataChanged(const OUString &rMimeType, const css::uno::Any &rValue) override
SdrEmbedObjectLink(SdrOle2Obj *pObj)
virtual void Closed() override
virtual ~SdrEmbedObjectLink() override
OLEObjCache & GetOLEObjCache()
This class represents an embedded or linked bitmap graphic object.
::comphelper::IEmbeddedHelper * GetPersist() const
virtual void SetChanged(bool bFlg=true)
All geometrical data of an arbitrary object for use in undo/redo.
void BroadcastObjectChange() const
bool IsEmptyPresObj() const
void SetResizeProtect(bool bProt)
SdrModel & getSdrModelFromSdrObject() const
virtual void SetGeoData(const SdrObjGeoData &rGeo)
SfxStyleSheet * GetStyleSheet() const
virtual const OUString & GetName() const
virtual void SetChanged()
const SfxItemSet & GetMergedItemSet() const
bool IsInDestruction() const
SdrOle2ObjImpl(bool bFrame, const svt::EmbeddedObjectRef &rObjRef)
svt::EmbeddedObjectRef mxObjRef
std::optional< Graphic > moGraphic
rtl::Reference< SdrLightEmbeddedClient_Impl > mxLightClient
SdrOle2ObjImpl(bool bFrame)
bool mbLoadingOLEObjectFailed
rtl::Reference< SvxUnoShapeModifyListener > mxModifyListener
SdrEmbedObjectLink * mpObjectLink
bool mbSuppressSetVisAreaSize
void SetWindow(const css::uno::Reference< css::awt::XWindow > &_xWindow)
SVX_DLLPRIVATE void Init()
static Graphic GetEmptyOLEReplacementGraphic()
virtual std::unique_ptr< sdr::properties::BaseProperties > CreateObjectSpecificProperties() override
virtual ~SdrOle2Obj() override
virtual SdrObjKind GetObjIdentifier() const override
sal_Int64 GetAspect() const
std::unique_ptr< SdrOle2ObjImpl > mpImpl
static bool CanUnloadRunningObj(const css::uno::Reference< css::embed::XEmbeddedObject > &xObj, sal_Int64 nAspect)
SVX_DLLPRIVATE void Disconnect_Impl()
css::uno::Reference< css::embed::XEmbeddedObject > const & GetObjRef() const
const svt::EmbeddedObjectRef & getEmbeddedObjectRef() const
const Graphic * GetGraphic() const
void SetProgName(const OUString &rName)
void BreakFileLink_Impl()
const OUString & GetProgName() const
virtual rtl::Reference< SdrObject > CloneSdrObject(SdrModel &rTargetModel) const override
void setSuppressSetVisAreaSize(bool bNew)
virtual rtl::Reference< SdrObject > DoConvertToPolyObj(bool bBezier, bool bAddText) const override
SVX_DLLPRIVATE void Connect_Impl()
SVX_DLLPRIVATE css::uno::Reference< css::embed::XEmbeddedObject > const & GetObjRef_NoInit() const
bool UpdateLinkURL_Impl()
const OUString & GetPersistName() const
virtual void TakeObjInfo(SdrObjTransformInfoRec &rInfo) const override
void CheckFileLink_Impl()
virtual void NbcResize(const Point &rRef, const Fraction &xFact, const Fraction &yFact) override
SVX_DLLPRIVATE void RemoveListeners_Impl()
bool isInplaceActive() const
SVX_DLLPRIVATE void AddListeners_Impl()
void SetObjRef(const css::uno::Reference< css::embed::XEmbeddedObject > &rNewObjRef)
void SetClosedObj(bool bIsClosed)
Change the IsClosedObj attribute.
bool CalculateNewScaling(Fraction &aScaleWidth, Fraction &aScaleHeight, Size &aObjAreaSize)
void SetGraphicToObj(const Graphic &aGraphic)
void SetGraphic(const Graphic &rGrf)
virtual void SetGeoData(const SdrObjGeoData &rGeo) override
virtual OUString TakeObjNameSingul() const override
Size GetOrigObjSize(MapMode const *pTargetMapMode=nullptr) const
virtual void NbcMove(const Size &rSize) override
The methods Move, Resize, Rotate, Mirror, Shear, SetSnapRect and SetLogicRect call the corresponding ...
SVX_DLLPRIVATE rtl::Reference< SdrObject > createSdrGrafObjReplacement(bool bAddText) const
SVX_DLLPRIVATE void ImpSetVisAreaSize()
virtual rtl::Reference< SdrObject > getFullDragClone() const override
OUString GetStyleString()
virtual OUString TakeObjNamePlural() const override
css::uno::Reference< css::frame::XModel > GetParentXModel() const
void SetPersistName(const OUString &rPersistName)
SVX_DLLPRIVATE void GetObjRef_Impl()
css::uno::Reference< css::frame::XModel > getXModel() const
virtual void NbcSetSnapRect(const tools::Rectangle &rRect) override
void SetAspect(sal_Int64 nAspect)
virtual void handlePageChange(SdrPage *pOldPage, SdrPage *pNewPage) override
virtual void NbcSetLogicRect(const tools::Rectangle &rRect) override
virtual std::unique_ptr< sdr::contact::ViewContact > CreateObjectSpecificViewContact() override
SdrOle2Obj(SdrModel &rSdrModel, bool bFrame_=false)
void DisconnectFileLink_Impl()
A SdrPage contains exactly one SdrObjList and a description of the physical page dimensions (size / m...
Rectangle objects (rectangle, circle, ...)
virtual void NbcSetSnapRect(const tools::Rectangle &rRect) override
virtual void NbcResize(const Point &rRef, const Fraction &xFact, const Fraction &yFact) override
virtual void NbcSetLogicRect(const tools::Rectangle &rRect) override
virtual void NbcMove(const Size &rSiz) override
The methods Move, Resize, Rotate, Mirror, Shear, SetSnapRect and SetLogicRect call the corresponding ...
tools::Rectangle const & getRectangle() const
virtual OutlinerParaObject * GetOutlinerParaObject() const override
virtual void handlePageChange(SdrPage *pOldPage, SdrPage *pNewPage) override
void setRectangleSize(sal_Int32 nWidth, sal_Int32 nHeight)
virtual bool TRGetBaseGeometry(basegfx::B2DHomMatrix &rMatrix, basegfx::B2DPolyPolygon &rPolyPolygon) const override
bool SetObjArea(const tools::Rectangle &)
void SetObjAreaAndScale(const tools::Rectangle &, const Fraction &, const Fraction &)
const Fraction & GetScaleHeight() const
const Fraction & GetScaleWidth() const
static SfxInPlaceClient * GetClient(SfxObjectShell const *pDoc, const css::uno::Reference< css::embed::XEmbeddedObject > &xObject)
constexpr tools::Long Height() const
constexpr tools::Long Width() const
static MapUnit UnoEmbed2VCLMapUnit(sal_Int32 nUnoEmbedMapUnit)
bool HasEmbeddedObject(const OUString &)
void CloseEmbeddedObject(const css::uno::Reference< css::embed::XEmbeddedObject > &)
css::uno::Reference< css::embed::XEmbeddedObject > CopyAndGetEmbeddedObject(EmbeddedObjectContainer &rSrc, const css::uno::Reference< css::embed::XEmbeddedObject > &xObj, OUString &rName, const OUString &rSrcShellID, const OUString &rDestShellID)
void RemoveEmbeddedObject(const OUString &rName, bool bKeepToTempStorage=true)
css::uno::Reference< css::embed::XEmbeddedObject > GetEmbeddedObject(const OUString &, OUString const *pBaseURL=nullptr)
bool InsertEmbeddedObject(const css::uno::Reference< css::embed::XEmbeddedObject > &, OUString &)
virtual EmbeddedObjectContainer & getEmbeddedObjectContainer() const=0
virtual OUString getDocumentBaseURL() const=0
oslInterlockedCount m_refCount
#define SO3_SC_CLASSID_30
#define SO3_SM_CLASSID_50
#define SO3_SC_CLASSID_60
#define SO3_SM_CLASSID_60
#define SO3_SC_CLASSID_40
#define SO3_SM_CLASSID_30
#define SO3_SM_CLASSID_40
#define SO3_SC_OLE_EMBED_CLASSID_60
#define SO3_SC_CLASSID_50
#define SO3_SC_OLE_EMBED_CLASSID_8
void InsertFileLink(sfx2::SvBaseLink &, SvBaseLinkObjectType nFileType, std::u16string_view rFileNm, const OUString *pFilterNm=nullptr, const OUString *pRange=nullptr)
static bool GetDisplayNames(const SvBaseLink *, OUString *pType, OUString *pFile=nullptr, OUString *pLink=nullptr, OUString *pFilter=nullptr)
void Remove(SvBaseLink const *pLink)
void SetSynchron(bool bFlag)
static bool TryRunningState(const css::uno::Reference< css::embed::XEmbeddedObject > &)
void Lock(bool bLock=true)
css::awt::Rectangle AWTRectangle(const ::tools::Rectangle &rVCLRect)
inline ::tools::Rectangle VCLRectangle(const css::awt::Rectangle &rAWTRect)
#define DBG_ASSERT(sCon, aError)
#define TOOLS_WARN_EXCEPTION(area, stream)
OUString SvxResId(TranslateId aId)
EmbeddedObjectRef * pObject
css::beans::PropertyValue makePropertyValue(const OUString &rName, T &&rValue)
Any SAL_CALL getCaughtException()
Reference< XController > xController
Reference< XFrame > xFrame
SdrGlobalData & GetSdrGlobalData()
@ OLE2
foreign graphic (StarView Graphic)
@ OLEPluginFrame
measurement object
static bool ImplIsMathObj(const uno::Reference< embed::XEmbeddedObject > &rObjRef)
static uno::Reference< beans::XPropertySet > lcl_getFrame_throw(const SdrOle2Obj *_pObject)