30#include <svx/strings.hrc>
35#include <com/sun/star/util/XModifyBroadcaster.hpp>
36#include <com/sun/star/beans/PropertyAttribute.hpp>
37#include <com/sun/star/container/XContainer.hpp>
38#include <com/sun/star/container/XContainerListener.hpp>
39#include <com/sun/star/script/XEventAttacherManager.hpp>
40#include <com/sun/star/form/binding/XBindableValue.hpp>
41#include <com/sun/star/form/binding/XListEntrySink.hpp>
42#include <com/sun/star/sdbc/XConnection.hpp>
43#include <com/sun/star/uno/XComponentContext.hpp>
50#include <osl/mutex.hxx>
64using namespace ::com::sun::star::form::binding;
70#include <com/sun/star/script/XScriptListener.hpp>
76class ScriptEventListenerWrapper :
public cppu::WeakImplHelper< XScriptListener >
80 explicit ScriptEventListenerWrapper(
FmFormModel& _rModel)
82 ,m_attemptedListenerCreation( false )
87 virtual void SAL_CALL disposing(
const EventObject& )
override {}
90 virtual void SAL_CALL firing(
const ScriptEvent& evt)
override
92 attemptListenerCreation();
93 if ( m_vbaListener.is() )
95 m_vbaListener->firing( evt );
99 virtual Any SAL_CALL approveFiring(
const ScriptEvent& evt)
override
101 attemptListenerCreation();
102 if ( m_vbaListener.is() )
104 return m_vbaListener->approveFiring( evt );
110 void attemptListenerCreation()
112 if ( m_attemptedListenerCreation )
114 m_attemptedListenerCreation =
true;
118 css::uno::Reference<css::uno::XComponentContext> context(
120 Reference< XScriptListener >
const xScriptListener(
121 context->getServiceManager()->createInstanceWithContext(
122 "ooo.vba.EventListener", context),
124 Reference< XPropertySet >
const xListenerProps( xScriptListener, UNO_QUERY_THROW );
128 xListenerProps->setPropertyValue(
"Model",
Any( xObjectShell->GetModel() ) );
130 m_vbaListener = xScriptListener;
132 catch( Exception
const & )
138 Reference< XScriptListener > m_vbaListener;
139 bool m_attemptedListenerCreation;
149 bool bIsTransientOrReadOnly : 1;
150 bool bIsValueProperty : 1;
154struct PropertySetInfo
159 bool bHasEmptyControlSource;
173 ,m_pPropertySetCache( nullptr )
174 ,m_pScriptingEnv( new
svxform::FormScriptingEnvironment( _rModel ) )
199 OSL_ENSURE( !
m_bDisposed,
"FmXUndoEnvironment::dispose: disposed twice?" );
212 Reference< css::form::XForms > xForms = pPage->
GetForms(
false );
224 Reference< css::form::XForms > xForms = pPage->
GetForms(
false );
232 OSL_PRECOND(
rModel.
GetObjectShell(),
"FmXUndoEnvironment::dispose: no object shell anymore!" );
247 OSL_PRECOND(
rModel.
GetObjectShell(),
"FmXUndoEnvironment::ModeChanged: no object shell anymore!" );
263 Reference< css::form::XForms > xForms = pPage->
GetForms(
false );
275 Reference< css::form::XForms > xForms = pPage->
GetForms(
false );
290 if (rHint.
GetId() == SfxHintId::ThisIsAnSdrHint)
310 else if (rHint.
GetId() != SfxHintId::NONE)
312 switch (rHint.
GetId())
314 case SfxHintId::Dying:
318 case SfxHintId::ModeChanged:
326 switch (pEventHint->GetEventId())
328 case SfxEventHintId::CreateDoc:
329 case SfxEventHintId::OpenDoc:
341 FmFormObj* pFormObj =
dynamic_cast<FmFormObj*
>( pObj );
355 bool lcl_searchElement(
const Reference< XIndexAccess>& xCont,
const Reference< XInterface >& xElement)
357 if (!xCont.is() || !xElement.is())
360 sal_Int32
nCount = xCont->getCount();
361 Reference< XInterface > xComp;
362 for (sal_Int32 i = 0;
i <
nCount;
i++)
366 xCont->getByIndex(i) >>= xComp;
369 if ( xElement == xComp )
373 Reference< XIndexAccess> xCont2(xComp, UNO_QUERY);
374 if (xCont2.is() && lcl_searchElement(xCont2, xElement))
379 catch(
const Exception&)
391 DBG_ASSERT( pObj,
"FmXUndoEnvironment::Inserted: invalid object!" );
396 Reference< XInterface >
xModel(pObj->GetUnoControlModel(), UNO_QUERY);
397 Reference< XFormComponent > xContent(
xModel, UNO_QUERY);
398 if (!(xContent.is() && pObj->getSdrPageFromSdrObject()))
402 if (!xContent->getParent().is())
406 const Reference< XIndexContainer >& xObjectParent = pObj->GetOriginalParent();
409 Reference< XIndexAccess > xForms( rPage.
GetForms(), UNO_QUERY_THROW );
411 Reference< XIndexContainer > xNewParent;
412 Reference< XForm > xForm;
414 if ( lcl_searchElement( xForms, xObjectParent ) )
418 xNewParent = xObjectParent;
419 xForm.set( xNewParent, UNO_QUERY_THROW );
420 nPos = ::std::min( pObj->GetOriginalIndex(), xNewParent->getCount() );
425 xNewParent.set( xForm, UNO_QUERY_THROW );
426 nPos = xNewParent->getCount();
430 xNewParent->insertByIndex(
nPos,
Any( xContent ) );
432 Reference< XEventAttacherManager > xManager( xNewParent, UNO_QUERY_THROW );
433 xManager->registerScriptEvents(
nPos, pObj->GetOriginalEvents() );
455 FmFormObj* pFormObj =
dynamic_cast<FmFormObj*
>( pObj );
469 DBG_ASSERT( pObj,
"FmXUndoEnvironment::Removed: invalid object!" );
474 Reference< XFormComponent > xContent(pObj->GetUnoControlModel(), UNO_QUERY);
483 Reference< XIndexContainer > xForm(xContent->getParent(), UNO_QUERY);
492 Sequence< ScriptEventDescriptor > aEvts;
493 Reference< XEventAttacherManager > xManager(xForm, UNO_QUERY);
495 aEvts = xManager->getScriptEvents(
nPos);
499 pObj->SetObjEnv(xForm,
nPos, aEvts);
500 xForm->removeByIndex(
nPos);
515 Reference< XPropertySet > xSourceSet(e.Source, UNO_QUERY);
519 PropertySetInfoCache::iterator aSetPos = pCache->find(xSourceSet);
520 if (aSetPos != pCache->end())
521 pCache->erase(aSetPos);
530 ::osl::ClearableMutexGuard aGuard(
m_aMutex );
534 Reference< XPropertySet > xSet(evt.Source, UNO_QUERY);
539 static constexpr rtl::OUStringConstExpr pDefaultValueProperties[] = {
543 static constexpr rtl::OUStringConstExpr aValueProperties[] = {
547 sal_Int32 nDefaultValueProps =
SAL_N_ELEMENTS(pDefaultValueProperties);
548 OSL_ENSURE(
SAL_N_ELEMENTS(aValueProperties) == nDefaultValueProps,
549 "FmXUndoEnvironment::propertyChange: inconsistence!");
550 for (sal_Int32
i=0;
i<nDefaultValueProps; ++
i)
552 if (evt.PropertyName == pDefaultValueProperties[
i])
556 xSet->setPropertyValue(aValueProperties[
i], evt.NewValue);
560 OSL_FAIL(
"FmXUndoEnvironment::propertyChange: could not adjust the value property!");
580 PropertySetInfoCache::iterator aSetPos = pCache->find(xSet);
581 if (aSetPos == pCache->end())
583 PropertySetInfo aNewEntry;
586 aNewEntry.bHasEmptyControlSource =
false;
593 aNewEntry.bHasEmptyControlSource = !aCurrentControlSource.hasValue() || ::comphelper::getString(aCurrentControlSource).isEmpty();
600 aSetPos = pCache->emplace(xSet,aNewEntry).first;
601 DBG_ASSERT(aSetPos != pCache->end(),
"FmXUndoEnvironment::propertyChange : just inserted it ... why it's not there ?");
607 aSetPos->second.bHasEmptyControlSource = !evt.NewValue.hasValue() || ::comphelper::getString(evt.NewValue).isEmpty();
613 PropertySetInfo::AllProperties& rPropInfos = aSetPos->second.aProps;
614 PropertySetInfo::AllProperties::iterator aPropertyPos = rPropInfos.find(evt.PropertyName);
615 if (aPropertyPos == rPropInfos.end())
617 PropertyInfo aNewEntry;
620 sal_Int32
nAttributes = xSet->getPropertySetInfo()->getPropertyByName(evt.PropertyName).Attributes;
621 aNewEntry.bIsTransientOrReadOnly = ((
nAttributes & PropertyAttribute::READONLY) != 0) || ((
nAttributes & PropertyAttribute::TRANSIENT) != 0);
624 aNewEntry.bIsValueProperty =
false;
630 OUString sControlSourceProperty;
631 aControlSourceProperty >>= sControlSourceProperty;
633 aNewEntry.bIsValueProperty = (sControlSourceProperty == evt.PropertyName);
642 aPropertyPos = rPropInfos.emplace(evt.PropertyName,aNewEntry).first;
643 DBG_ASSERT(aPropertyPos != rPropInfos.end(),
"FmXUndoEnvironment::propertyChange : just inserted it ... why it's not there ?");
651 if ( bAddUndoAction && aPropertyPos->second.bIsTransientOrReadOnly )
652 bAddUndoAction =
false;
654 if ( bAddUndoAction && aPropertyPos->second.bIsValueProperty )
658 if ( !aSetPos->second.bHasEmptyControlSource )
659 bAddUndoAction =
false;
662 if ( bAddUndoAction )
664 Reference< XBindableValue > xBindable( evt.Source, UNO_QUERY );
665 Reference< XValueBinding > xBinding;
666 if ( xBindable.is() )
667 xBinding = xBindable->getValueBinding();
669 Reference< XPropertySet > xBindingProps;
670 Reference< XPropertySetInfo > xBindingPropsPSI;
671 if ( xBindable.is() )
672 xBindingProps.set( xBinding, UNO_QUERY );
673 if ( xBindingProps.is() )
674 xBindingPropsPSI = xBindingProps->getPropertySetInfo();
678 static constexpr OUStringLiteral s_sExternalData =
u"ExternalData";
679 if ( xBindingPropsPSI.is() && xBindingPropsPSI->hasPropertyByName( s_sExternalData ) )
681 bool bExternalData =
true;
682 OSL_VERIFY( xBindingProps->getPropertyValue( s_sExternalData ) >>= bExternalData );
683 bAddUndoAction = !bExternalData;
686 bAddUndoAction = !xBinding.is();
692 Reference< XListEntrySink >
xSink( evt.Source, UNO_QUERY );
693 if (
xSink.is() &&
xSink->getListEntrySource().is() )
695 bAddUndoAction =
false;
698 if ( bAddUndoAction )
713 Reference< XPropertySet > xSet(evt.Source, UNO_QUERY);
715 PropertySetInfo& rSetInfo = (*pCache)[xSet];
716 rSetInfo.bHasEmptyControlSource = !evt.NewValue.hasValue() || ::comphelper::getString(evt.NewValue).isEmpty();
726 ::osl::MutexGuard aGuard(
m_aMutex );
729 Reference< XInterface > xIface;
730 evt.Element >>= xIface;
731 OSL_ENSURE(xIface.is(),
"FmXUndoEnvironment::elementInserted: invalid container notification!");
750 ::osl::MutexGuard aGuard(
m_aMutex );
752 Reference< XInterface > xIface;
753 evt.ReplacedElement >>= xIface;
754 OSL_ENSURE(xIface.is(),
"FmXUndoEnvironment::elementReplaced: invalid container notification!");
757 evt.Element >>= xIface;
767 ::osl::MutexGuard aGuard(
m_aMutex );
769 Reference< XInterface > xIface( evt.Element, UNO_QUERY );
770 OSL_ENSURE(xIface.is(),
"FmXUndoEnvironment::elementRemoved: invalid container notification!");
786 AddElement(Reference<XInterface>( rForms, UNO_QUERY ));
802 Reference< XIndexContainer > xContainer(Element, UNO_QUERY);
805 sal_uInt32
nCount = xContainer->getCount();
806 Reference< XInterface > xIface;
809 xContainer->getByIndex(
i) >>= xIface;
814 Reference< XPropertySet > xSet(Element, UNO_QUERY);
818 xSet->addPropertyChangeListener( OUString(),
this );
820 xSet->removePropertyChangeListener( OUString(),
this );
827 OSL_PRECOND( _rxContainer.is(),
"FmXUndoEnvironment::switchListening: invalid container!" );
828 if ( !_rxContainer.is() )
835 Reference< XEventAttacherManager > xManager( _rxContainer, UNO_QUERY );
838 if ( _bStartListening )
853 sal_uInt32
nCount = _rxContainer->getCount();
854 Reference< XInterface > xInterface;
855 for ( sal_uInt32 i = 0;
i <
nCount; ++
i )
857 _rxContainer->getByIndex( i ) >>= xInterface;
858 if ( _bStartListening )
865 Reference< XContainer > xSimpleContainer( _rxContainer, UNO_QUERY );
866 OSL_ENSURE( xSimpleContainer.is(),
"FmXUndoEnvironment::switchListening: how are we expected to be notified of changes in the container?" );
867 if ( xSimpleContainer.is() )
869 if ( _bStartListening )
870 xSimpleContainer->addContainerListener(
this );
872 xSimpleContainer->removeContainerListener(
this );
875 catch(
const Exception& )
884 OSL_PRECOND( _rxObject.is(),
"FmXUndoEnvironment::switchListening: how should I listen at a NULL object?" );
890 Reference< XPropertySet > xProps( _rxObject, UNO_QUERY );
893 if ( _bStartListening )
894 xProps->addPropertyChangeListener( OUString(),
this );
896 xProps->removePropertyChangeListener( OUString(),
this );
900 Reference< XModifyBroadcaster > xBroadcaster( _rxObject, UNO_QUERY );
901 if ( xBroadcaster.is() )
903 if ( _bStartListening )
904 xBroadcaster->addModifyListener(
this );
906 xBroadcaster->removeModifyListener(
this );
909 catch(
const Exception& )
918 OSL_ENSURE( !
m_bDisposed,
"FmXUndoEnvironment::AddElement: not when I'm already disposed!" );
921 Reference< XIndexContainer > xContainer( _rxElement, UNO_QUERY );
922 if ( xContainer.is() )
941 Reference< XForm > xForm( _rxElement, UNO_QUERY );
942 Reference< XPropertySet > xFormProperties( xForm, UNO_QUERY );
943 if ( xFormProperties.is() )
945 Reference< XConnection > xDummy;
954 Reference< XIndexContainer > xContainer( _rxElement, UNO_QUERY );
955 if ( xContainer.is() )
962 ,xObj(evt.
Source, UNO_QUERY)
963 ,aPropertyName(evt.PropertyName)
964 ,aNewValue(evt.NewValue)
965 ,aOldValue(evt.OldValue)
1023 const Reference< XIndexContainer > & xCont,
1024 const Reference< XInterface > & xElem,
1031 OSL_ENSURE( nIdx >= 0,
"FmUndoContainerAction::FmUndoContainerAction: invalid index!" );
1035 if ( !(xCont.is() && xElem.is()) )
1045 Reference< XEventAttacherManager > xManager( xCont, UNO_QUERY );
1046 if ( xManager.is() )
1066 Reference< XComponent > xComp( xElem, UNO_QUERY );
1070 Reference< XChild > xChild( xElem, UNO_QUERY );
1071 if ( xChild.is() && !xChild->getParent().is() )
1087 aVal <<= Reference< XFormComponent >(
m_xElement, UNO_QUERY );
1091 aVal <<= Reference< XForm >(
m_xElement, UNO_QUERY );
1098 Reference< XEventAttacherManager > xManager(
m_xContainer, UNO_QUERY );
1099 if ( xManager.is() )
1109 Reference< XInterface > xElement;
1110 if ( (
m_nIndex >= 0 ) && ( m_nIndex < m_xContainer->getCount() ) )
1122 OSL_ENSURE( xElement ==
m_xElement,
"FmUndoContainerAction::implReRemove: cannot find the element which I'm responsible for!" );
1125 Reference< XEventAttacherManager > xManager(
m_xContainer, UNO_QUERY );
1126 if ( xManager.is() )
1194 ,m_xReplaced(_xReplaced)
1195 ,m_pObject(_pObject)
1209 Reference< XComponent > xComp(xReplaced, UNO_QUERY);
1212 Reference< XChild > xChild(xReplaced, UNO_QUERY);
1213 if (!xChild.is() || !xChild->getParent().is())
1226 Reference< XChild > xCurrentAsChild( xCurrentModel, UNO_QUERY );
1227 Reference< XNameContainer > xCurrentsParent;
1228 if ( xCurrentAsChild.is() )
1229 xCurrentsParent.set(xCurrentAsChild->getParent(), css::uno::UNO_QUERY);
1230 DBG_ASSERT( xCurrentsParent.is(),
"FmUndoModelReplaceAction::Undo: invalid current model!" );
1232 if ( xCurrentsParent.is() )
1235 Reference< XFormComponent > xComponent(
m_xReplaced, UNO_QUERY );
1236 DBG_ASSERT( xComponent.is(),
"FmUndoModelReplaceAction::Undo: the new model is no form component !" );
1238 Reference< XPropertySet > xCurrentAsSet( xCurrentModel, UNO_QUERY );
1239 DBG_ASSERT( ::comphelper::hasProperty(
FM_PROP_NAME, xCurrentAsSet ),
"FmUndoModelReplaceAction::Undo : one of the models is invalid !");
1243 xCurrentsParent->replaceByName(
sName,
Any( xComponent ) );
1253 OSL_FAIL(
"FmUndoModelReplaceAction::Undo : could not replace the model !");
1260 return SvxResId(RID_STR_UNDO_MODEL_REPLACE);
SectionViewAction m_eAction
static OUString setUniqueName(const css::uno::Reference< css::form::XFormComponent > &xFormComponent, const css::uno::Reference< css::form::XForm > &xControls)
css::uno::Reference< css::form::XForm > findPlaceInFormComponentHierarchy(const css::uno::Reference< css::form::XFormComponent > &rContent, const css::uno::Reference< css::sdbc::XDataSource > &rDatabase=css::uno::Reference< css::sdbc::XDataSource >(), const OUString &rDBTitle=OUString(), const OUString &rCursorSource=OUString(), sal_Int32 nCommandType=0)
finds a place in the form component hierarchy where to insert the given component
const css::uno::Reference< css::form::XForms > & GetForms(bool _bForceCreate=true) const
FmFormPageImpl & GetImpl() const
virtual ~FmUndoContainerAction() override
virtual void Redo() override
css::uno::Sequence< css::script::ScriptEventDescriptor > m_aEvents
css::uno::Reference< css::container::XIndexContainer > m_xContainer
virtual void Undo() override
static void DisposeElement(const css::uno::Reference< css::uno::XInterface > &xElem)
FmUndoContainerAction(FmFormModel &rMod, Action _eAction, const css::uno::Reference< css::container::XIndexContainer > &xCont, const css::uno::Reference< css::uno::XInterface > &xElem, sal_Int32 nIdx)
css::uno::Reference< css::uno::XInterface > m_xElement
css::uno::Reference< css::uno::XInterface > m_xOwnElement
FmUndoModelReplaceAction(FmFormModel &rMod, SdrUnoObj *pObject, const css::uno::Reference< css::awt::XControlModel > &xReplaced)
virtual void Undo() override
css::uno::Reference< css::awt::XControlModel > m_xReplaced
static void DisposeElement(const css::uno::Reference< css::awt::XControlModel > &xReplaced)
virtual OUString GetComment() const override
virtual ~FmUndoModelReplaceAction() override
virtual void Undo() override
FmUndoPropertyAction(FmFormModel &rMod, const css::beans::PropertyChangeEvent &evt)
virtual void Redo() override
virtual OUString GetComment() const override
css::uno::Reference< css::beans::XPropertySet > xObj
virtual void SAL_CALL elementRemoved(const css::container::ContainerEvent &rEvent) override
void RemoveElement(const css::uno::Reference< css::uno::XInterface > &Element)
void AddForms(const css::uno::Reference< css::container::XNameContainer > &rForms)
virtual void SAL_CALL disposing(const css::lang::EventObject &Source) override
void AddElement(const css::uno::Reference< css::uno::XInterface > &Element)
void TogglePropertyListening(const css::uno::Reference< css::uno::XInterface > &Element)
void Inserted(SdrObject *pObj)
void * m_pPropertySetCache
virtual ~FmXUndoEnvironment() override
virtual void SAL_CALL propertyChange(const css::beans::PropertyChangeEvent &evt) override
virtual void SAL_CALL elementReplaced(const css::container::ContainerEvent &rEvent) override
FmXUndoEnvironment(FmFormModel &_rModel)
void Removed(SdrObject *pObj)
void switchListening(const css::uno::Reference< css::container::XIndexContainer > &_rxContainer, bool _bStartListening)
css::uno::Reference< css::script::XScriptListener > m_vbaListener
virtual void SAL_CALL modified(const css::lang::EventObject &aEvent) override
virtual void Notify(SfxBroadcaster &rBC, const SfxHint &rHint) override
virtual void SAL_CALL elementInserted(const css::container::ContainerEvent &rEvent) override
::rtl::Reference< svxform::FormScriptingEnvironment > m_pScriptingEnv
void RemoveForms(const css::uno::Reference< css::container::XNameContainer > &rForms)
SdrHintKind GetKind() const
const SdrObject * GetObject() const
const SdrPage * GetMasterPage(sal_uInt16 nPgNum) const
void AddUndo(std::unique_ptr< SdrUndoAction > pUndo)
sal_uInt16 GetMasterPageCount() const
bool IsUndoEnabled() const
returns true if undo is currently enabled This returns false if undo was disabled using EnableUndo( f...
const SdrPage * GetPage(sal_uInt16 nPgNum) const
sal_uInt16 GetPageCount() const
virtual SdrInventor GetObjInventor() const
virtual SdrObjList * GetSubList() const
bool IsVirtualObj() const
bool IsGroupObject() const
virtual void SetChanged()
Abstract base class (ABC) for all UndoActions of DrawingEngine.
const css::uno::Reference< css::awt::XControlModel > & GetUnoControlModel() const
virtual void SetUnoControlModel(const css::uno::Reference< css::awt::XControlModel > &xModel)
void StartListening(SfxBroadcaster &rBroadcaster, DuplicateHandling eDuplicateHanding=DuplicateHandling::Unexpected)
bool IsListening(SfxBroadcaster &rBroadcaster) const
void EndListening(SfxBroadcaster &rBroadcaster, bool bRemoveAllDuplicates=false)
bool IsReadOnlyUI() const
virtual void SetModified(bool bModified=true)
#define DBG_ASSERT(sCon, aError)
#define TOOLS_WARN_EXCEPTION(area, stream)
#define ENSURE_OR_THROW(c, m)
#define DBG_UNHANDLED_EXCEPTION(...)
OUString SvxResId(TranslateId aId)
constexpr OUStringLiteral FM_PROP_ACTIVE_CONNECTION
constexpr OUStringLiteral FM_PROP_TIME
constexpr OUStringLiteral FM_PROP_DEFAULT_TEXT
constexpr OUStringLiteral FM_PROP_EFFECTIVE_DEFAULT
constexpr OUStringLiteral FM_PROP_DEFAULT_DATE
constexpr OUStringLiteral FM_PROP_EFFECTIVE_VALUE
constexpr OUStringLiteral FM_PROP_STRINGITEMLIST
constexpr OUStringLiteral FM_PROP_TEXT
constexpr OUStringLiteral FM_PROP_CONTROLSOURCE
constexpr OUStringLiteral FM_PROP_DEFAULT_TIME
constexpr OUStringLiteral FM_PROP_NAME
constexpr OUStringLiteral FM_PROP_DEFAULTCHECKED
constexpr OUStringLiteral FM_PROP_STATE
constexpr OUStringLiteral FM_PROP_DATE
constexpr OUStringLiteral FM_PROP_CONTROLSOURCEPROPERTY
constexpr OUStringLiteral FM_PROP_DEFAULT_SELECT_SEQ
constexpr OUStringLiteral FM_PROP_DEFAULT_VALUE
constexpr OUStringLiteral FM_PROP_VALUE
constexpr OUStringLiteral FM_PROP_SELECT_SEQ
std::map< Reference< XPropertySet >, PropertySetInfo > PropertySetInfoCache
static OUString static_STR_UNDO_PROPERTY
tools::SvRef< SvBaseLink > xSink
#define SAL_N_ELEMENTS(arr)
Reference< XComponentContext > getProcessComponentContext()
std::map< OUString, bool > AllProperties
::std::map< Reference< XPropertySet >, ObjectInfo > PropertySetInfoCache
Reference< XNameAccess > m_xContainer
Reference< XModel > xModel