22 #include <com/sun/star/util/XModifyBroadcaster.hpp>
23 #include <com/sun/star/util/XModifiable.hpp>
24 #include <com/sun/star/chart2/XChartDocument.hpp>
25 #include <com/sun/star/embed/EmbedStates.hpp>
26 #include <com/sun/star/embed/ElementModes.hpp>
27 #include <com/sun/star/embed/EmbedMisc.hpp>
28 #include <com/sun/star/embed/Aspects.hpp>
29 #include <com/sun/star/embed/ObjectSaveVetoException.hpp>
30 #include <com/sun/star/embed/XEmbeddedObject.hpp>
31 #include <com/sun/star/embed/XEmbedPersist2.hpp>
32 #include <com/sun/star/embed/XInplaceClient.hpp>
33 #include <com/sun/star/embed/XInplaceObject.hpp>
34 #include <com/sun/star/embed/XLinkageSupport.hpp>
35 #include <com/sun/star/embed/NoVisualAreaSizeException.hpp>
36 #include <com/sun/star/embed/XWindowSupplier.hpp>
37 #include <com/sun/star/document/XEventListener.hpp>
38 #include <com/sun/star/container/XChild.hpp>
39 #include <com/sun/star/document/XStorageBasedDocument.hpp>
40 #include <com/sun/star/lang/WrappedTargetRuntimeException.hpp>
67 #include <svl/solar.hrc>
74 #include <svx/strings.hrc>
91 #include <rtl/ref.hxx>
92 #include <bitmaps.hlst>
99 uno::Reference < beans::XPropertySet >
xFrame;
103 if ( xController.is() )
105 xFrame.set( xController->getFrame(),uno::UNO_QUERY_THROW);
113 class SdrLightEmbeddedClient_Impl :
public ::cppu::WeakImplHelper
114 < embed::XStateChangeListener
115 , document::XEventListener
116 , embed::XInplaceClient
117 , embed::XEmbeddedClient
118 , embed::XWindowSupplier
121 uno::Reference< awt::XWindow > m_xWindow;
129 explicit SdrLightEmbeddedClient_Impl(
SdrOle2Obj* pObj );
130 virtual ~SdrLightEmbeddedClient_Impl()
override;
132 void SetSizeScale(
const Fraction& aScaleWidth,
const Fraction& aScaleHeight )
134 m_aScaleWidth = aScaleWidth;
135 m_aScaleHeight = aScaleHeight;
138 const Fraction& GetScaleWidth()
const {
return m_aScaleWidth; }
139 const Fraction& GetScaleHeight()
const {
return m_aScaleHeight; }
141 void setWindow(
const uno::Reference< awt::XWindow >& _xWindow);
148 virtual void SAL_CALL changingState(
const css::lang::EventObject& aEvent, ::sal_Int32 nOldState, ::sal_Int32 nNewState )
override;
149 virtual void SAL_CALL stateChanged(
const css::lang::EventObject& aEvent, ::sal_Int32 nOldState, ::sal_Int32 nNewState )
override;
150 virtual void SAL_CALL disposing(
const css::lang::EventObject& aEvent )
override;
153 virtual void SAL_CALL notifyEvent(
const document::EventObject& aEvent )
override;
156 virtual void SAL_CALL saveObject()
override;
157 virtual void SAL_CALL visibilityChanged(
sal_Bool bVisible )
override;
160 virtual uno::Reference< util::XCloseable > SAL_CALL getComponent()
override;
163 virtual sal_Bool SAL_CALL canInplaceActivate()
override;
164 virtual void SAL_CALL activatingInplace()
override;
165 virtual void SAL_CALL activatingUI()
override;
166 virtual void SAL_CALL deactivatedInplace()
override;
167 virtual void SAL_CALL deactivatedUI()
override;
168 virtual uno::Reference< css::frame::XLayoutManager > SAL_CALL getLayoutManager()
override;
169 virtual uno::Reference< frame::XDispatchProvider > SAL_CALL getInplaceDispatchProvider()
override;
170 virtual awt::Rectangle SAL_CALL getPlacement()
override;
171 virtual awt::Rectangle SAL_CALL getClipRectangle()
override;
172 virtual void SAL_CALL translateAccelerators(
const uno::Sequence< awt::KeyEvent >& aKeys )
override;
173 virtual void SAL_CALL scrollObject(
const awt::Size& aOffset )
override;
174 virtual void SAL_CALL changedPlacement(
const awt::Rectangle& aPosRect )
override;
177 virtual uno::Reference< awt::XWindow > SAL_CALL getWindow()
override;
182 SdrLightEmbeddedClient_Impl::SdrLightEmbeddedClient_Impl(
SdrOle2Obj* pObj )
186 SdrLightEmbeddedClient_Impl::~SdrLightEmbeddedClient_Impl()
190 tools::Rectangle SdrLightEmbeddedClient_Impl::impl_getScaledRect_nothrow()
const
194 aLogicRect.
SetSize(
Size(
long( aLogicRect.GetWidth() * m_aScaleWidth),
195 long( aLogicRect.GetHeight() * m_aScaleHeight) ) );
199 void SAL_CALL SdrLightEmbeddedClient_Impl::changingState(
const css::lang::EventObject& , ::sal_Int32 , ::sal_Int32 )
203 void SAL_CALL SdrLightEmbeddedClient_Impl::stateChanged(
const css::lang::EventObject& , ::sal_Int32 nOldState, ::sal_Int32 nNewState )
207 if ( mpObj && nOldState == embed::EmbedStates::LOADED && nNewState == embed::EmbedStates::RUNNING )
209 mpObj->ObjectLoaded();
212 else if ( mpObj && nNewState == embed::EmbedStates::LOADED && nOldState == embed::EmbedStates::RUNNING )
218 void SdrLightEmbeddedClient_Impl::disconnect()
227 void SAL_CALL SdrLightEmbeddedClient_Impl::disposing(
const css::lang::EventObject& )
232 void SAL_CALL SdrLightEmbeddedClient_Impl::notifyEvent(
const document::EventObject& aEvent )
239 if ( mpObj && mpObj->GetAspect() != embed::Aspects::MSOLE_ICON && aEvent.EventName ==
"OnVisAreaChanged"
240 && mpObj->GetObjRef().is() && mpObj->GetObjRef()->getClientSite() == uno::Reference< embed::XEmbeddedClient >( this ) )
244 MapUnit aContainerMapUnit( MapUnit::Map100thMM );
245 uno::Reference< embed::XVisualObject > xParentVis( mpObj->GetParentXModel(), uno::UNO_QUERY );
246 if ( xParentVis.is() )
255 aSz = mpObj->GetObjRef()->getVisualAreaSize( mpObj->GetAspect() );
257 catch( embed::NoVisualAreaSizeException& )
259 OSL_FAIL(
"No visual area size!" );
263 catch( uno::Exception& )
265 OSL_FAIL(
"Unexpected exception!" );
279 Size( aLogicRect.GetWidth() - aScaledSize.Width(),
280 aLogicRect.GetHeight() - aScaledSize.Height() ),
282 if( aPixelDiff.Width() || aPixelDiff.Height() )
284 mpObj->SetLogicRect(
tools::Rectangle( aLogicRect.TopLeft(), aScaledSize ) );
285 mpObj->BroadcastObjectChange();
288 mpObj->ActionChanged();
290 catch( uno::Exception& )
292 OSL_FAIL(
"Unexpected exception!" );
297 void SAL_CALL SdrLightEmbeddedClient_Impl::saveObject()
300 uno::Reference< embed::XCommonEmbedPersist > xPersist;
301 uno::Reference< util::XModifiable > xModifiable;
307 throw embed::ObjectSaveVetoException();
310 xPersist.set( mpObj->GetObjRef(), uno::UNO_QUERY_THROW );
311 xModifiable.set( mpObj->GetParentXModel(), uno::UNO_QUERY );
314 xPersist->storeOwn();
316 if ( xModifiable.is() )
317 xModifiable->setModified(
true );
320 void SAL_CALL SdrLightEmbeddedClient_Impl::visibilityChanged(
sal_Bool )
327 Size aLogicSize( aLogicRect.GetWidth(), aLogicRect.GetHeight() );
329 if( mpObj->IsChart() )
332 mpObj->SetLogicRect(
tools::Rectangle( aLogicRect.TopLeft(), aLogicSize ) );
333 mpObj->BroadcastObjectChange();
338 uno::Reference< util::XCloseable > SAL_CALL SdrLightEmbeddedClient_Impl::getComponent()
340 uno::Reference< util::XCloseable > xResult;
344 xResult.set( mpObj->GetParentXModel(), uno::UNO_QUERY );
350 sal_Bool SAL_CALL SdrLightEmbeddedClient_Impl::canInplaceActivate()
356 uno::Reference< embed::XEmbeddedObject > xObject = mpObj->GetObjRef();
358 throw uno::RuntimeException();
360 bRet = !( xObject->getCurrentState() == embed::EmbedStates::ACTIVE || mpObj->GetAspect() == embed::Aspects::MSOLE_ICON );
365 void SAL_CALL SdrLightEmbeddedClient_Impl::activatingInplace()
369 void SAL_CALL SdrLightEmbeddedClient_Impl::activatingUI()
374 uno::Reference < frame::XFrame > xOwnFrame( xFrame,uno::UNO_QUERY);
375 uno::Reference < frame::XFramesSupplier > xParentFrame = xOwnFrame->getCreator();
376 if ( xParentFrame.is() )
377 xParentFrame->setActiveFrame( xOwnFrame );
381 for(sal_Int32 i = nCount-1 ;
i >= 0;--
i)
389 const uno::Reference< embed::XEmbeddedObject >& xObject = pObj->
GetObjRef();
392 if ( xObject->getStatus( pObj->
GetAspect() ) & embed::EmbedMisc::MS_EMBED_ACTIVATEWHENVISIBLE )
393 xObject->changeState( embed::EmbedStates::INPLACE_ACTIVE );
397 uno::Reference< embed::XLinkageSupport > xLink( xObject, uno::UNO_QUERY );
398 if ( xLink.is() && xLink->isLink() )
399 xObject->changeState( embed::EmbedStates::LOADED );
401 xObject->changeState( embed::EmbedStates::RUNNING );
404 catch (css::uno::Exception& )
411 void SAL_CALL SdrLightEmbeddedClient_Impl::deactivatedInplace()
415 void SAL_CALL SdrLightEmbeddedClient_Impl::deactivatedUI()
418 css::uno::Reference< css::frame::XLayoutManager > xLayoutManager(getLayoutManager());
419 if ( xLayoutManager.is() )
421 static const char aMenuBarURL[] =
"private:resource/menubar/menubar";
422 if ( !xLayoutManager->isElementVisible( aMenuBarURL ) )
423 xLayoutManager->createElement( aMenuBarURL );
427 uno::Reference< css::frame::XLayoutManager > SAL_CALL SdrLightEmbeddedClient_Impl::getLayoutManager()
429 uno::Reference< css::frame::XLayoutManager > xMan;
434 xMan.set(
xFrame->getPropertyValue(
"LayoutManager"),uno::UNO_QUERY);
436 catch ( uno::Exception& ex )
439 throw css::lang::WrappedTargetRuntimeException( ex.Message,
446 uno::Reference< frame::XDispatchProvider > SAL_CALL SdrLightEmbeddedClient_Impl::getInplaceDispatchProvider()
449 return uno::Reference < frame::XDispatchProvider >(
lcl_getFrame_throw(mpObj), uno::UNO_QUERY_THROW );
452 awt::Rectangle SAL_CALL SdrLightEmbeddedClient_Impl::getPlacement()
456 throw uno::RuntimeException();
459 MapUnit aContainerMapUnit( MapUnit::Map100thMM );
460 uno::Reference< embed::XVisualObject > xParentVis( mpObj->GetParentXModel(), uno::UNO_QUERY );
461 if ( xParentVis.is() )
468 awt::Rectangle SAL_CALL SdrLightEmbeddedClient_Impl::getClipRectangle()
470 return getPlacement();
473 void SAL_CALL SdrLightEmbeddedClient_Impl::translateAccelerators(
const uno::Sequence< awt::KeyEvent >& )
477 void SAL_CALL SdrLightEmbeddedClient_Impl::scrollObject(
const awt::Size& )
481 void SAL_CALL SdrLightEmbeddedClient_Impl::changedPlacement(
const awt::Rectangle& aPosRect )
485 throw uno::RuntimeException();
487 uno::Reference< embed::XInplaceObject > xInplace( mpObj->GetObjRef(), uno::UNO_QUERY_THROW );
490 awt::Rectangle aOldRect = getPlacement();
493 if ( aOldPixelRect == aNewPixelRect )
498 MapUnit aContainerMapUnit( MapUnit::Map100thMM );
499 uno::Reference< embed::XVisualObject > xParentVis( mpObj->GetParentXModel(), uno::UNO_QUERY );
500 if ( xParentVis.is() )
506 if ( aNewLogicRect != aLogicRect )
513 Size aNewObjSize(
long( aNewLogicRect.
GetWidth() / m_aScaleWidth ),
514 long( aNewLogicRect.
GetHeight() / m_aScaleHeight ) );
517 aNewLogicRect.
SetSize( aNewObjSize );
522 aLogicRect.
GetHeight() - aNewObjSize.Height() ),
527 mpObj->BroadcastObjectChange();
530 mpObj->ActionChanged();
535 uno::Reference< awt::XWindow > SAL_CALL SdrLightEmbeddedClient_Impl::getWindow()
538 uno::Reference< awt::XWindow > xCurrent = m_xWindow;
539 if ( !xCurrent.is() )
542 throw uno::RuntimeException();
544 xCurrent =
xFrame->getComponentWindow();
548 void SdrLightEmbeddedClient_Impl::setWindow(
const uno::Reference< awt::XWindow >& _xWindow)
550 m_xWindow = _xWindow;
565 const OUString& ,
const css::uno::Any & )
570 uno::Reference< embed::XEmbeddedObject > xObject = pObj->
GetObjRef();
571 OSL_ENSURE( xObject.is(),
"The object must exist always!" );
579 sal_Int32
nState = xObject->getCurrentState();
580 if ( nState != embed::EmbedStates::LOADED )
583 xObject->changeState( embed::EmbedStates::LOADED );
584 xObject->changeState( nState );
587 catch ( uno::Exception& )
602 SvBaseLink::Closed();
634 mpObjectLink(nullptr)
647 mpObjectLink(nullptr)
656 if (mxModifyListener.is())
658 mxModifyListener->invalidate();
665 static bool ImplIsMathObj(
const uno::Reference < embed::XEmbeddedObject >& rObjRef )
682 return std::make_unique<sdr::properties::OleProperties>(*this);
689 return std::make_unique<sdr::contact::ViewContactOfSdrOle2Obj>(*this);
725 const OUString& rNewObjName,
730 mpImpl->aPersistName = rNewObjName;
732 if (
mpImpl->mxObjRef.is() && (
mpImpl->mxObjRef->getStatus(
GetAspect() ) & embed::EmbedMisc::EMBED_NEVERRESIZE ) )
744 if (
mpImpl->mxObjRef.is() &&
mpImpl->mxObjRef.IsChart())
746 strStyle =
mpImpl->mxObjRef.GetChartType();
753 if (
mpImpl->mbConnected )
758 if (
mpImpl->mxLightClient)
760 mpImpl->mxLightClient->disconnect();
761 mpImpl->mxLightClient.clear();
767 mpImpl->mxObjRef.SetViewAspect( nAspect );
777 return mpImpl->mxObjRef.GetViewAspect();
782 return mpImpl->mxObjRef.is() && embed::EmbedStates::INPLACE_ACTIVE ==
mpImpl->mxObjRef->getCurrentState();
787 return mpImpl->mxObjRef.is() && embed::EmbedStates::UI_ACTIVE ==
mpImpl->mxObjRef->getCurrentState();
801 mpImpl->mxGraphic.reset();
809 mpImpl->maProgName = rName;
814 return mpImpl->maProgName;
819 return !
mpImpl->mxObjRef.is();
841 bool bResult =
false;
843 if (
mpImpl->mpObjectLink )
849 OUString aNewLinkURL;
851 if ( !aNewLinkURL.equalsIgnoreAsciiCase(
mpImpl->maLinkURL ) )
854 uno::Reference<embed::XCommonEmbedPersist> xPersObj(
mpImpl->mxObjRef.GetObject(), uno::UNO_QUERY );
855 OSL_ENSURE( xPersObj.is(),
"The object must exist!" );
860 sal_Int32 nCurState =
mpImpl->mxObjRef->getCurrentState();
861 if ( nCurState != embed::EmbedStates::LOADED )
862 mpImpl->mxObjRef->changeState(embed::EmbedStates::LOADED);
865 uno::Sequence< beans::PropertyValue > aArgs( 1 );
866 aArgs[0].Name =
"URL";
867 aArgs[0].Value <<= aNewLinkURL;
868 xPersObj->reload( aArgs, uno::Sequence< beans::PropertyValue >() );
870 mpImpl->maLinkURL = aNewLinkURL;
873 if ( nCurState != embed::EmbedStates::LOADED )
874 mpImpl->mxObjRef->changeState(nCurState);
876 catch( css::uno::Exception
const & )
899 uno::Reference< embed::XStorage > xStorage = xDoc->getDocumentStorage();
904 uno::Reference< embed::XLinkageSupport > xLinkSupport(
mpImpl->mxObjRef.GetObject(), uno::UNO_QUERY_THROW );
905 xLinkSupport->breakLink( xStorage,
mpImpl->aPersistName );
907 mpImpl->maLinkURL.clear();
909 catch( css::uno::Exception& )
921 if ( pLinkManager &&
mpImpl->mpObjectLink )
924 mpImpl->mpObjectLink =
nullptr;
930 if (
mpImpl->mxObjRef.GetObject().is() && !
mpImpl->mpObjectLink)
934 uno::Reference< embed::XLinkageSupport > xLinkSupport(
mpImpl->mxObjRef.GetObject(), uno::UNO_QUERY );
936 if ( xLinkSupport.is() && xLinkSupport->isLink() )
938 OUString aLinkURL = xLinkSupport->getLinkURL();
940 if ( !aLinkURL.isEmpty() )
948 mpImpl->maLinkURL = aLinkURL;
950 mpImpl->mpObjectLink->Connect();
955 catch (
const css::uno::Exception&)
964 if(!
mpImpl->aPersistName.isEmpty() )
980 if (
mpImpl->mxObjRef.is() )
985 mpImpl->aPersistName = aTmp;
988 else if ( !
mpImpl->mxObjRef.is() )
991 mpImpl->mbTypeAsked =
false;
994 if (
mpImpl->mxObjRef.GetObject().is() )
996 mpImpl->mxObjRef.AssignToContainer( &rContainer,
mpImpl->aPersistName );
997 mpImpl->mbConnected =
true;
1002 if (
mpImpl->mxObjRef.is() )
1004 if ( !
mpImpl->mxLightClient.is() )
1005 mpImpl->mxLightClient =
new SdrLightEmbeddedClient_Impl(
this );
1007 mpImpl->mxObjRef->addStateChangeListener(
mpImpl->mxLightClient.get() );
1008 mpImpl->mxObjRef->addEventListener( uno::Reference< document::XEventListener >(
mpImpl->mxLightClient.get() ) );
1010 if (
mpImpl->mxObjRef->getCurrentState() != embed::EmbedStates::LOADED )
1015 uno::Reference< container::XChild > xChild(
mpImpl->mxObjRef.GetObject(), uno::UNO_QUERY );
1025 catch( css::uno::Exception& )
1039 if(
mpImpl->mxObjRef.is() &&
mpImpl->mxObjRef->getCurrentState() != embed::EmbedStates::LOADED )
1042 if (!
mpImpl->mxModifyListener.is())
1047 uno::Reference< util::XModifyBroadcaster > xBC(
getXModel(), uno::UNO_QUERY );
1050 uno::Reference<util::XModifyListener> xListener(
mpImpl->mxModifyListener.get());
1051 xBC->addModifyListener( xListener );
1061 if( !
mpImpl->mbConnected )
1063 OSL_FAIL(
"Disconnect() called on disconnected object!");
1073 if (
mpImpl->mxObjRef.is() && !
mpImpl->aPersistName.isEmpty() )
1077 sal_Int32
nState =
mpImpl->mxObjRef->getCurrentState();
1078 if ( nState != embed::EmbedStates::LOADED )
1080 uno::Reference< util::XModifyBroadcaster > xBC(
getXModel(), uno::UNO_QUERY );
1081 if (xBC.is() &&
mpImpl->mxModifyListener.is())
1083 uno::Reference<util::XModifyListener> xListener(
mpImpl->mxModifyListener.get());
1084 xBC->removeModifyListener( xListener );
1088 catch( css::uno::Exception& )
1099 if ( !
mpImpl->aPersistName.isEmpty() )
1113 mpImpl->mxObjRef.AssignToContainer(
nullptr,
mpImpl->aPersistName );
1135 else if (
mpImpl->mxObjRef.is() )
1148 mpImpl->mxObjRef.AssignToContainer(
nullptr,
mpImpl->aPersistName );
1156 if (
mpImpl->mxObjRef.is() &&
mpImpl->mxLightClient.is() )
1158 mpImpl->mxObjRef->removeStateChangeListener (
mpImpl->mxLightClient.get() );
1159 mpImpl->mxObjRef->removeEventListener( uno::Reference< document::XEventListener >(
mpImpl->mxLightClient.get() ) );
1160 mpImpl->mxObjRef->setClientSite(
nullptr );
1165 catch( css::uno::Exception& )
1170 mpImpl->mbConnected =
false;
1239 return pRetval->DoConvertToPolyObj(bBezier, bAddText);
1247 const bool bRemove(pNewPage ==
nullptr && pOldPage !=
nullptr);
1248 const bool bInsert(pNewPage !=
nullptr && pOldPage ==
nullptr);
1250 if (bRemove &&
mpImpl->mbConnected )
1258 if (bInsert && !
mpImpl->mbConnected )
1266 DBG_ASSERT( !rNewObjRef.is() || !
mpImpl->mxObjRef.GetObject().is(),
"SetObjRef called on already initialized object!");
1267 if( rNewObjRef ==
mpImpl->mxObjRef.GetObject() )
1272 if (
mpImpl->mxObjRef.GetObject().is() )
1273 mpImpl->mxObjRef.Lock(
false );
1277 mpImpl->mxObjRef.Clear();
1279 if (
mpImpl->mbConnected )
1283 mpImpl->mbTypeAsked =
false;
1285 if (
mpImpl->mxObjRef.is() )
1287 mpImpl->mxGraphic.reset();
1289 if (
mpImpl->mxObjRef->getStatus(
GetAspect() ) & embed::EmbedMisc::EMBED_NEVERRESIZE )
1319 mpImpl->aPersistName = rPersistName;
1320 mpImpl->mbLoadingOLEObjectFailed =
false;
1328 mpImpl->aPersistName.clear();
1329 mpImpl->mbLoadingOLEObjectFailed =
false;
1335 return mpImpl->aPersistName;
1364 OUStringBuffer
sName(
SvxResId(
mpImpl->mbFrame ? STR_ObjNameSingulFrame : STR_ObjNameSingulOLE2));
1368 if (!aName.isEmpty())
1371 sName.append(aName);
1375 return sName.makeStringAndClear();
1380 return SvxResId(
mpImpl->mbFrame ? STR_ObjNamePluralFrame : STR_ObjNamePluralOLE2);
1385 return CloneHelper< SdrOle2Obj >(rTargetModel);
1404 if(
mpImpl->mbConnected )
1416 if (rOle2Obj.
mpImpl->mxGraphic)
1425 if( pDestPers && pSrcPers )
1435 mpImpl->mbTypeAsked =
false;
1436 mpImpl->aPersistName = aTmp;
1450 if (
mpImpl->mbSuppressSetVisAreaSize)
1455 if (
GetAspect() == embed::Aspects::MSOLE_ICON )
1460 if (
mpImpl->mxObjRef.is())
1467 dynamic_cast<SfxObjectShell*>(
1469 mpImpl->mxObjRef.GetObject()));
1470 const bool bHasOwnClient(
1471 mpImpl->mxLightClient.is() &&
1472 mpImpl->mxObjRef->getClientSite() == uno::Reference< embed::XEmbeddedClient >(
mpImpl->mxLightClient.get() ) );
1474 if ( pClient || bHasOwnClient )
1477 if ( ((nMiscStatus & embed::EmbedMisc::MS_EMBED_RECOMPOSEONRESIZE) &&
1479 ||
mpImpl->mxObjRef->getCurrentState() == embed::EmbedStates::INPLACE_ACTIVE
1491 aScaleWidth =
mpImpl->mxLightClient->GetScaleWidth();
1492 aScaleHeight =
mpImpl->mxLightClient->GetScaleHeight();
1509 aSz.Width = aVisSize.Width();
1510 aSz.Height = aVisSize.Height();
1517 catch( embed::NoVisualAreaSizeException& )
1521 aAcceptedVisArea.
SetSize(
Size( static_cast<long>(
Fraction(
long( aSz.Width ) ) * aScaleWidth ),
1522 static_cast<long>(
Fraction(
long( aSz.Height ) ) * aScaleHeight ) ) );
1523 if (aVisSize != aAcceptedVisArea.
GetSize())
1547 mpImpl->mxObjRef.UpdateReplacement();
1565 mpImpl->mxLightClient->SetSizeScale( aScaleWidth, aScaleHeight );
1570 else if( (nMiscStatus & embed::EmbedMisc::MS_EMBED_RECOMPOSEONRESIZE) &&
1575 uno::Reference< embed::XVisualObject > xVisualObject(
getXModel(), uno::UNO_QUERY );
1576 if( xVisualObject.is() )
1597 xVisualObject->setVisualAreaSize(
1613 if (
mpImpl->mxObjRef.is() && (
mpImpl->mxObjRef->getStatus(
GetAspect() ) & embed::EmbedMisc::MS_EMBED_RECOMPOSEONRESIZE ) )
1662 if (
mpImpl->mxObjRef.is() )
1663 return mpImpl->mxObjRef.GetGraphic();
1664 return mpImpl->mxGraphic.get();
1669 if (
mpImpl->mxObjRef.is() )
1670 mpImpl->mxObjRef.UpdateReplacement();
1675 return mpImpl->mxObjRef.GetSize( pTargetMapMode );
1680 mpImpl->mbSuppressSetVisAreaSize = bNew;
1693 uno::Reference<embed::XEmbedPersist2> xPersist(xObj, uno::UNO_QUERY);
1696 if (!xPersist->isStored())
1701 bool bResult =
false;
1703 sal_Int32
nState = xObj->getCurrentState();
1704 if ( nState == embed::EmbedStates::LOADED )
1711 uno::Reference < util::XModifiable > xModifiable( xObj->getComponent(), uno::UNO_QUERY );
1712 if ( !xModifiable.is() )
1716 sal_Int64 nMiscStatus = xObj->getStatus( nAspect );
1718 if ( embed::EmbedMisc::MS_EMBED_ALWAYSRUN != ( nMiscStatus & embed::EmbedMisc::MS_EMBED_ALWAYSRUN ) &&
1719 embed::EmbedMisc::EMBED_ACTIVATEIMMEDIATELY != ( nMiscStatus & embed::EmbedMisc::EMBED_ACTIVATEIMMEDIATELY ) &&
1720 !( xModifiable.is() && xModifiable->isModified() ) &&
1721 !( nState == embed::EmbedStates::INPLACE_ACTIVE || nState == embed::EmbedStates::UI_ACTIVE || nState == embed::EmbedStates::ACTIVE ) )
1731 bool SdrOle2Obj::Unload(
const uno::Reference< embed::XEmbeddedObject >& xObj, sal_Int64 nAspect )
1733 bool bResult =
false;
1739 xObj->changeState( embed::EmbedStates::LOADED );
1742 catch( css::uno::Exception& )
1753 if (!
mpImpl->mxObjRef.is())
1757 bool bUnloaded =
false;
1759 if (
mpImpl->mxObjRef.is() )
1772 if(!
mpImpl->mbLoadingOLEObjectFailed)
1777 mpImpl->mbTypeAsked =
false;
1782 if(
mpImpl->mxObjRef.is() )
1784 mpImpl->mbLoadingOLEObjectFailed =
true;
1791 if (
mpImpl->mxObjRef.is() )
1812 if (
mpImpl->mxObjRef.is() )
1816 if (
mpImpl->mbConnected )
1826 return mpImpl->mxObjRef.GetObject();
1831 return mpImpl->mxObjRef.GetObject();
1838 return uno::Reference< frame::XModel >(
mpImpl->mxObjRef->getComponent(), uno::UNO_QUERY );
1840 return uno::Reference< frame::XModel >();
1845 if (!
mpImpl->mbTypeAsked)
1848 mpImpl->mbTypeAsked =
true;
1850 return mpImpl->mbIsChart;
1855 mpImpl->mxObjRef.SetGraphic( aGraphic, OUString() );
1858 if (
const Graphic* pObjGraphic =
mpImpl->mxObjRef.is() ?
nullptr :
mpImpl->mxObjRef.GetGraphic())
1864 mpImpl->mxObjRef.SetGraphicStream( xGrStream, aMediaType );
1867 if (
const Graphic* pObjGraphic =
mpImpl->mxObjRef.is() ?
nullptr :
mpImpl->mxObjRef.GetGraphic())
1873 if ( !
mpImpl->mxObjRef.is() )
1896 if (!
mpImpl->mxObjRef.is())
1900 aObjAreaSize =
mpImpl->mxObjRef.GetSize( &aMapMode );
1917 && !(
mpImpl->mxLightClient.is() &&
mpImpl->mxObjRef->getClientSite() == uno::Reference< embed::XEmbeddedClient >(
mpImpl->mxLightClient.get() ) ) )
1921 if (
mpImpl->mxObjRef.is() &&
mpImpl->mxLightClient.is() )
1928 mpImpl->mxLightClient->SetSizeScale( aScaleWidth, aScaleHeight );
1930 mpImpl->mxObjRef->setClientSite(
mpImpl->mxLightClient.get() );
1932 }
catch( uno::Exception& )
1951 if (
mpImpl->mxObjRef.is() &&
mpImpl->mxLightClient.is() )
1953 mpImpl->mxLightClient->setWindow(_xWindow);
const Fraction & GetScaleWidth() const
virtual void NbcMove(const Size &rSiz) override
The methods Move, Resize, Rotate, Mirror, Shear, SetSnapRect and SetLogicRect call the corresponding ...
rtl::Reference< SvxUnoShapeModifyListener > mxModifyListener
#define SO3_SM_CLASSID_60
SdrRectObj(SdrModel &rSdrModel)
The corner radius parameter is dropped at some point.
std::unique_ptr< SdrOle2ObjImpl > mpImpl
foreign graphic (StarView Graphic)
css::uno::Reference< css::embed::XEmbeddedObject > const & GetObjRef() const
void SetResizeProtect(bool bProt)
bool SetObjArea(const tools::Rectangle &)
virtual ::sfx2::SvBaseLink::UpdateResult DataChanged(const OUString &rMimeType, const css::uno::Any &rValue) override
virtual OUString TakeObjNameSingul() const override
virtual void TakeObjInfo(SdrObjTransformInfoRec &rInfo) const override
virtual void NbcSetLogicRect(const tools::Rectangle &rRect) override
Point LogicToLogic(const Point &rPtSource, const MapMode *pMapModeSource, const MapMode *pMapModeDest) const
void SetPersistName(const OUString &rPersistName)
void SetProgName(const OUString &rName)
bool isInplaceActive() const
Reference< XFrame > xFrame
void SetStyleSheet(SfxStyleSheet *pNewStyleSheet, bool bDontRemoveHardAttr)
virtual ~SdrEmbedObjectLink() override
#define OBJECT_CLIENT_OLE
void CloseEmbeddedObject(const css::uno::Reference< css::embed::XEmbeddedObject > &)
virtual void handlePageChange(SdrPage *pOldPage, SdrPage *pNewPage) override
virtual OUString getDocumentBaseURL() const =0
SVX_DLLPRIVATE void Connect_Impl()
bool HasEmbeddedObject(const OUString &)
css::uno::Reference< css::uno::XInterface > const & getUnoModel()
Size GetOrigObjSize(MapMode const *pTargetMapMode=nullptr) const
#define SO3_SC_CLASSID_40
virtual void NbcMove(const Size &rSize) override
The methods Move, Resize, Rotate, Mirror, Shear, SetSnapRect and SetLogicRect call the corresponding ...
virtual void TRSetBaseGeometry(const basegfx::B2DHomMatrix &rMatrix, const basegfx::B2DPolyPolygon &rPolyPolygon) override
virtual const tools::Rectangle & GetSnapRect() const override
All geometrical data of an arbitrary object for use in undo/redo.
SdrOle2ObjImpl(bool bFrame, const svt::EmbeddedObjectRef &rObjRef)
virtual std::unique_ptr< sdr::contact::ViewContact > CreateObjectSpecificViewContact() override
SdrEmbedObjectLink(SdrOle2Obj *pObj)
css::uno::Reference< css::frame::XModel > getXModel() const
Rectangle objects (rectangle, circle, ...)
static OutputDevice * GetDefaultDevice()
void SetObjRef(const css::uno::Reference< css::embed::XEmbeddedObject > &rNewObjRef)
SVX_DLLPRIVATE void GetObjRef_Impl()
Reference< XController > xController
OUString SvxResId(const char *pId)
Any SAL_CALL getCaughtException()
#define SO3_SC_CLASSID_30
void RemoveObj(SdrOle2Obj *pObj)
virtual EmbeddedObjectContainer & getEmbeddedObjectContainer() const =0
SfxStyleSheet * GetStyleSheet() const
virtual std::unique_ptr< sdr::properties::BaseProperties > CreateObjectSpecificProperties() override
void SetMergedItemSet(const SfxItemSet &rSet, bool bClearAllItems=false)
SVX_DLLPRIVATE void Disconnect_Impl()
OLEObjCache & GetOLEObjCache()
virtual SdrOle2Obj * CloneSdrObject(SdrModel &rTargetModel) const override
#define SO3_SC_CLASSID_60
SVX_DLLPRIVATE css::uno::Reference< css::embed::XEmbeddedObject > const & GetObjRef_NoInit() const
virtual void SetChanged(bool bFlg=true)
virtual OUString TakeObjNamePlural() const override
#define SO3_SC_CLASSID_50
virtual void NbcSetSnapRect(const tools::Rectangle &rRect) override
void SetGraphicToObj(const Graphic &aGraphic)
virtual SdrObjectUniquePtr DoConvertToPolyObj(bool bBezier, bool bAddText) const override
void ReduceInaccurate(unsigned nSignificantBits)
#define SO3_SM_CLASSID_50
virtual void handlePageChange(SdrPage *pOldPage, SdrPage *pNewPage) override
const svt::EmbeddedObjectRef & getEmbeddedObjectRef() const
#define TOOLS_WARN_EXCEPTION(area, stream)
bool mbSuppressSetVisAreaSize
void SetWindow(const css::uno::Reference< css::awt::XWindow > &_xWindow)
static bool ImplIsMathObj(const uno::Reference< embed::XEmbeddedObject > &rObjRef)
rtl::Reference< SdrLightEmbeddedClient_Impl > mxLightClient
#define DBG_ASSERT(sCon, aError)
void SetClosedObj(bool bIsClosed)
Change the IsClosedObj attribute.
virtual sal_uInt16 GetObjIdentifier() const override
static Graphic GetEmptyOLEReplacementGraphic()
void Remove(SvBaseLink const *pLink)
void InsertFileLink(sfx2::SvBaseLink &, sal_uInt16 nFileType, const OUString &rFileNm, const OUString *pFilterNm=nullptr, const OUString *pRange=nullptr)
inline::tools::Rectangle VCLRectangle(const css::awt::Rectangle &rAWTRect)
void BroadcastObjectChange() const
virtual void SetGeoData(const SdrObjGeoData &rGeo)
SVX_DLLPRIVATE void ImpSetVisAreaSize()
static bool CanUnloadRunningObj(const css::uno::Reference< css::embed::XEmbeddedObject > &xObj, sal_Int64 nAspect)
void BreakFileLink_Impl()
SdrModel & getSdrModelFromSdrObject() const
void DisconnectFileLink_Impl()
virtual void SetGeoData(const SdrObjGeoData &rGeo) override
virtual void Closed() override
void SetMergedItem(const SfxPoolItem &rItem)
This class represents an embedded or linked bitmap graphic object.
bool mbLoadingOLEObjectFailed
virtual void NbcResize(const Point &rRef, const Fraction &xFact, const Fraction &yFact) override
SdrOle2Obj & operator=(const SdrOle2Obj &rObj)
void CheckFileLink_Impl()
SdrOle2ObjImpl(bool bFrame)
SVX_DLLPRIVATE void Init()
OUString GetStyleString()
SdrEmbedObjectLink * mpObjectLink
void SetGraphic(const Graphic &rGrf)
bool CalculateNewScaling(Fraction &aScaleWidth, Fraction &aScaleHeight, Size &aObjAreaSize)
SdrOle2Obj & assignFrom(const SdrOle2Obj &rObj)
Point PixelToLogic(const Point &rDevicePt) const
Point LogicToPixel(const Point &rLogicPt) const
css::uno::Reference< css::embed::XEmbeddedObject > GetEmbeddedObject(const OUString &, OUString const *pBaseURL=nullptr)
std::unique_ptr< Graphic > mxGraphic
static bool GetDisplayNames(const SvBaseLink *, OUString *pType, OUString *pFile=nullptr, OUString *pLink=nullptr, OUString *pFilter=nullptr)
SdrGlobalData & GetSdrGlobalData()
static SfxInPlaceClient * GetClient(SfxObjectShell const *pDoc, const css::uno::Reference< css::embed::XEmbeddedObject > &xObject)
virtual void NbcSetOutlinerParaObject(std::unique_ptr< OutlinerParaObject > pTextObject) override
void RemoveEmbeddedObject(const OUString &rName, bool bKeepToTempStorage=true)
virtual void NbcSetLogicRect(const tools::Rectangle &rRect) override
SdrRectObj & operator=(const SdrRectObj &rCopy)
svt::EmbeddedObjectRef mxObjRef
sal_Int64 GetAspect() const
static MapUnit UnoEmbed2VCLMapUnit(sal_Int32 nUnoEmbedMapUnit)
virtual OutlinerParaObject * GetOutlinerParaObject() const override
SdrOle2Obj(SdrModel &rSdrModel, bool bFrame_=false)
virtual void NbcResize(const Point &rRef, const Fraction &xFact, const Fraction &yFact) override
::comphelper::IEmbeddedHelper * GetPersist() const
#define SO3_SM_CLASSID_40
const SfxItemSet & GetMergedItemSet() const
void setSuppressSetVisAreaSize(bool bNew)
const OUString & GetPersistName() const
virtual ~SdrOle2Obj() override
void SetObjAreaAndScale(const tools::Rectangle &, const Fraction &, const Fraction &)
std::unique_ptr< SdrObject, SdrObjectFreeOp > SdrObjectUniquePtr
SVX_DLLPRIVATE void AddListeners_Impl()
bool InsertEmbeddedObject(const css::uno::Reference< css::embed::XEmbeddedObject > &, OUString &)
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)
SVX_DLLPRIVATE void RemoveListeners_Impl()
static uno::Reference< beans::XPropertySet > lcl_getFrame_throw(const SdrOle2Obj *_pObject)
virtual bool TRGetBaseGeometry(basegfx::B2DHomMatrix &rMatrix, basegfx::B2DPolyPolygon &rPolyPolygon) const override
static bool TryRunningState(const css::uno::Reference< css::embed::XEmbeddedObject > &)
virtual void NbcSetSnapRect(const tools::Rectangle &rRect) override
A SdrPage contains exactly one SdrObjList and a description of the physical page dimensions (size / m...
void InsertObj(SdrOle2Obj *pObj)
void SetSynchron(bool bFlag)
void SetAspect(sal_Int64 nAspect)
bool IsInDestruction() const
virtual void SetChanged()
virtual SdrObjectUniquePtr getFullDragClone() const override
#define SO3_SC_OLE_EMBED_CLASSID_60
const Fraction & GetScaleHeight() const
#define SO3_SM_CLASSID_30
void Lock(bool bLock=true)
SVX_DLLPUBLIC size_t size() const
#define SO3_SC_OLE_EMBED_CLASSID_8
css::awt::Rectangle AWTRectangle(const ::tools::Rectangle &rVCLRect)
css::uno::Reference< css::frame::XModel > GetParentXModel() const
const OUString & GetProgName() const
const Graphic * GetGraphic() const
bool UpdateLinkURL_Impl()
SVX_DLLPRIVATE SdrObjectUniquePtr createSdrGrafObjReplacement(bool bAddText) const
bool IsEmptyPresObj() const