22 #include <com/sun/star/container/XChild.hpp>
23 #include <com/sun/star/beans/XPropertySet.hpp>
24 #include <com/sun/star/util/XCloneable.hpp>
25 #include <com/sun/star/uno/XComponentContext.hpp>
31 #include <svx/strings.hrc>
35 #include <rtl/ref.hxx>
50 #include <com/sun/star/lang/XEventListener.hpp>
66 virtual void SAL_CALL disposing(
const css::lang::EventObject& Source )
override;
68 void StopListening(
const uno::Reference< lang::XComponent >& xComp);
69 void StartListening(
const uno::Reference< lang::XComponent >& xComp);
77 pObj->xUnoControlModel =
nullptr;
84 xComp->removeEventListener(
this);
90 xComp->addEventListener(
this);
96 mutable ::rtl::Reference< SdrControlEventListenerImpl >
103 void lcl_ensureControlVisibility(
SdrView const * _pView,
const SdrUnoObj* _pObject,
bool _bVisible )
105 OSL_PRECOND( _pObject,
"lcl_ensureControlVisibility: no object -> no survival!" );
108 DBG_ASSERT( pPageView,
"lcl_ensureControlVisibility: no view found!" );
117 DBG_ASSERT( pPageWindow,
"lcl_ensureControlVisibility: invalid PageViewWindow!" );
125 const ViewObjectContact& rViewObjectContact( rUnoControlContact.GetViewObjectContact( rPageViewContact ) );
127 DBG_ASSERT( pUnoControlContact,
"lcl_ensureControlVisibility: wrong ViewObjectContact type!" );
128 if ( !pUnoControlContact )
131 pUnoControlContact->ensureControlVisibility( _bVisible );
138 const OUString& rModelName)
147 if (!rModelName.isEmpty())
163 const uno::Reference< awt::XControlModel > xSourceControlModel = rSource.
GetUnoControlModel();
164 if ( xSourceControlModel.is() )
168 uno::Reference< util::XCloneable > xClone( xSourceControlModel, uno::UNO_QUERY_THROW );
171 catch(
const uno::Exception& )
178 uno::Reference< beans::XPropertySet > xSet(
xUnoControlModel, uno::UNO_QUERY);
181 uno::Any aValue( xSet->getPropertyValue(
"DefaultControl") );
184 if( aValue >>= aStr )
190 m_pImpl->pEventListener->StartListening(xComp);
195 const OUString& rModelName,
196 const uno::Reference< lang::XMultiServiceFactory >& rxSFac)
205 if (!rModelName.isEmpty())
219 if (xContent.is() && !xContent->getParent().is())
222 m_pImpl->pEventListener->StopListening(xComp);
225 catch(
const uno::Exception& )
258 uno::Reference< beans::XPropertySet > xModelProperties(
GetUnoControlModel(), uno::UNO_QUERY_THROW );
259 xModelProperties->setPropertyValue(
"ContextWritingMode",
uno::Any( _nContextWritingMode ) );
261 catch(
const uno::Exception& )
272 if (!aName.isEmpty())
273 sName +=
" '" + aName +
"'";
280 return SvxResId(STR_ObjNamePluralUno);
285 return new SdrUnoObj(rTargetModel, *
this);
337 aPreviouslyVisible.
insert( pView );
349 if ( aPreviouslyVisible.
erase(pView) == 0 )
354 aNewlyVisible.
insert( pView );
360 for (
const auto& rpView : aPreviouslyVisible)
362 lcl_ensureControlVisibility( rpView,
this,
false );
366 for (
const auto& rpView : aNewlyVisible)
368 lcl_ensureControlVisibility( rpView,
this,
true );
378 uno::Reference< awt::XControlModel >
xModel;
380 if (!aUnoControlModelTypeName.isEmpty() )
382 xModel.set(xContext->getServiceManager()->createInstanceWithContext(
383 aUnoControlModelTypeName, xContext), uno::UNO_QUERY);
393 const uno::Reference< lang::XMultiServiceFactory >& rxSFac)
399 uno::Reference< awt::XControlModel >
xModel;
400 if (!aUnoControlModelTypeName.isEmpty() && rxSFac.is() )
402 xModel.set(rxSFac->createInstance(aUnoControlModelTypeName), uno::UNO_QUERY);
417 m_pImpl->pEventListener->StopListening(xComp);
425 uno::Reference< beans::XPropertySet > xSet(
xUnoControlModel, uno::UNO_QUERY);
428 uno::Any aValue( xSet->getPropertyValue(
"DefaultControl") );
430 if( aValue >>= aStr )
436 m_pImpl->pEventListener->StartListening(xComp);
452 uno::Reference< awt::XControl > xControl;
455 OSL_ENSURE( pPageView &&
getSdrPageFromSdrObject() == pPageView->
GetPage(),
"SdrUnoObj::GetUnoControl: This object is not displayed in that particular view!" );
460 OSL_ENSURE( pPageWindow,
"SdrUnoObj::GetUnoControl: did not find my SdrPageWindow!" );
466 OSL_ENSURE( pUnoContact,
"SdrUnoObj::GetUnoControl: wrong contact type!" );
475 const vcl::Window& _rWindow, uno::Reference< awt::XControlContainer >& _inout_ControlContainer )
const
477 uno::Reference< awt::XControl > xControl;
491 DBG_ASSERT( _out_rpContact,
"SdrUnoObj::impl_getViewContact: could not find my ViewContact!" );
492 return ( _out_rpContact !=
nullptr );
498 return std::make_unique<sdr::contact::ViewContactOfUnoControl>( *this );
SVX_DLLPRIVATE bool impl_getViewContact(sdr::contact::ViewContactOfUnoControl *&_out_rpContact) const
Retrieves the typed ViewContact for the object.
virtual void SAL_CALL disposing(const css::lang::EventObject &Source) override
void StartListening(const uno::Reference< lang::XComponent > &xComp)
virtual SdrObjKind GetObjIdentifier() const override
virtual void TakeObjInfo(SdrObjTransformInfoRec &rInfo) const override
double mfSinRotationAngle
continuously activated OLE (PlugIn-Frame or similar)
virtual void SetContextWritingMode(const sal_Int16 _nContextWritingMode) override
SdrUnoObj(SdrModel &rSdrModel, const OUString &rModelName)
SdrPageWindow * FindPageWindow(const SdrPaintWindow &rPaintWindow) const
sdr::contact::ViewContact & GetViewContact() const
Rectangle objects (rectangle, circle, ...)
virtual void NbcSetLayer(SdrLayerID nLayer) override
SdrPageWindow * GetPageWindow(sal_uInt32 nIndex) const
SdrPage * getSdrPageFromSdrObject() const
SVX_DLLPRIVATE void CreateUnoControlModel(const OUString &rModelName)
OUString SvxResId(TranslateId aId)
virtual std::unique_ptr< sdr::contact::ViewContact > CreateObjectSpecificViewContact() override
virtual ~SdrUnoObj() override
void StopListening(const uno::Reference< lang::XComponent > &xComp)
virtual void NbcResize(const Point &rRef, const Fraction &xFact, const Fraction &yFact) override
virtual OUString TakeObjNamePlural() const override
virtual void SetBoundAndSnapRectsDirty(bool bNotMyself=false, bool bRecursive=true)
OUString aUnoControlTypeName
#define DBG_UNHANDLED_EXCEPTION(...)
#define TOOLS_WARN_EXCEPTION(area, stream)
#define DBG_ASSERT(sCon, aError)
friend class SdrControlEventListenerImpl
css::uno::Reference< css::awt::XControl > GetTemporaryControlForWindow(const vcl::Window &_rWindow, css::uno::Reference< css::awt::XControlContainer > &_inout_ControlContainer) const
Retrieves a temporary XControl instance for a given output device.
virtual void SetUnoControlModel(const css::uno::Reference< css::awt::XControlModel > &xModel)
const sdr::contact::ObjectContact & GetObjectContact() const
virtual SdrLayerID GetLayer() const
virtual bool hasSpecialDrag() const override
The standard transformations (Move,Resize,Rotate,Mirror,Shear) are taken over by the View (TakeXorPol...
SdrControlEventListenerImpl(SdrUnoObj *_pObj)
mutable::rtl::Reference< SdrControlEventListenerImpl > pEventListener
std::unique_ptr< SdrUnoObjDataHolder > m_pImpl
SdrPage * GetPage() const
virtual void NbcResize(const Point &rRef, const Fraction &xFact, const Fraction &yFact) override
bool HasObjectContact() const
determines whether there already exists an ObjectContact
double mfCosRotationAngle
Reference< XComponentContext > getProcessComponentContext()
virtual OUString TakeObjNameSingul() const override
css::uno::Reference< css::awt::XControl > GetUnoControl(const SdrView &_rView, const OutputDevice &_rOut) const
SdrPageView * GetSdrPageView() const
const css::uno::Reference< css::awt::XControlModel > & GetUnoControlModel() const
::rtl::Reference< OContentHelper > xContent
Reference< XModel > xModel
css::uno::Reference< css::awt::XControlModel > xUnoControlModel
std::pair< const_iterator, bool > insert(Value &&x)
virtual void SetChanged()
virtual SdrUnoObj * CloneSdrObject(SdrModel &rTargetModel) const override
const OUString & GetName() const
OUString aUnoControlModelTypeName
size_type erase(const Value &x)
virtual void NbcSetLayer(SdrLayerID nLayer)
sal_uInt32 PageWindowCount() const