summaryrefslogtreecommitdiff
path: root/sw/source/core/unocore
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/core/unocore')
-rw-r--r--sw/source/core/unocore/unostyle.cxx145
1 files changed, 41 insertions, 104 deletions
diff --git a/sw/source/core/unocore/unostyle.cxx b/sw/source/core/unocore/unostyle.cxx
index 9a5409157726..7eb0e9405e21 100644
--- a/sw/source/core/unocore/unostyle.cxx
+++ b/sw/source/core/unocore/unostyle.cxx
@@ -755,114 +755,52 @@ static const std::vector<StyleFamilyEntry>* lcl_GetStyleFamilyEntries()
class SwStyleProperties_Impl
{
const PropertyEntryVector_t aPropertyEntries;
- uno::Any** pAnyArr;
- sal_uInt32 nArrLen;
-
+ std::map<OUString, uno::Any> m_vPropertyValues;
public:
- explicit SwStyleProperties_Impl(const SfxItemPropertyMap& rMap);
- ~SwStyleProperties_Impl();
-
- bool SetProperty(const OUString& rName, const uno::Any& rVal);
- bool GetProperty(const OUString& rName, uno::Any*& rpAny);
- bool ClearProperty( const OUString& rPropertyName );
- void ClearAllProperties( );
- static void GetProperty(const OUString &rPropertyName, const uno::Reference < beans::XPropertySet > &rxPropertySet, uno::Any& rAny );
-
- const PropertyEntryVector_t& GetPropertyVector() const {return aPropertyEntries; }
-
-};
-
-SwStyleProperties_Impl::SwStyleProperties_Impl(const SfxItemPropertyMap& rMap) :
- aPropertyEntries( rMap.getPropertyEntries() ),
- nArrLen(0)
-{
- nArrLen = aPropertyEntries.size();
-
- pAnyArr = new uno::Any* [nArrLen];
- for ( sal_uInt32 i =0 ; i < nArrLen; i++ )
- pAnyArr[i] = nullptr;
-}
-
-SwStyleProperties_Impl::~SwStyleProperties_Impl()
-{
- for ( sal_uInt32 i =0 ; i < nArrLen; i++ )
- delete pAnyArr[i];
- delete[] pAnyArr;
-}
+ explicit SwStyleProperties_Impl(const SfxItemPropertyMap& rMap)
+ : aPropertyEntries(rMap.getPropertyEntries())
+ { }
+ ~SwStyleProperties_Impl()
+ { }
-bool SwStyleProperties_Impl::SetProperty(const OUString& rName, const uno::Any& rVal)
-{
- sal_uInt32 nPos = 0;
- bool bRet = false;
- PropertyEntryVector_t::const_iterator aIt = aPropertyEntries.begin();
- while( aIt != aPropertyEntries.end() )
+ bool AllowsKey(const OUString& rName)
{
- if(rName == aIt->sName)
- {
- delete pAnyArr[nPos];
- pAnyArr[nPos] = new uno::Any(rVal);
- bRet = true;
- break;
- }
- ++nPos;
- ++aIt;
+ return aPropertyEntries.end() != std::find_if(aPropertyEntries.begin(), aPropertyEntries.end(),
+ [rName] (const SfxItemPropertyNamedEntry& rEntry) {return rName == rEntry.sName;} );
}
- return bRet;
-}
-
-bool SwStyleProperties_Impl::ClearProperty( const OUString& rName )
-{
- bool bRet = false;
- sal_uInt32 nPos = 0;
- PropertyEntryVector_t::const_iterator aIt = aPropertyEntries.begin();
- while( aIt != aPropertyEntries.end() )
+ bool SetProperty(const OUString& rName, const uno::Any& rValue)
{
- if( rName == aIt->sName )
+ if(!AllowsKey(rName))
+ return false;
+ m_vPropertyValues[rName] = rValue;
+ return true;
+ }
+ bool GetProperty(const OUString& rName, const uno::Any*& pAny)
+ {
+ if(!AllowsKey(rName))
{
- delete pAnyArr[nPos];
- pAnyArr[ nPos ] = nullptr;
- bRet = true;
- break;
+ pAny = nullptr;
+ return false;
}
- ++nPos;
- ++aIt;
+ pAny = &m_vPropertyValues[rName];
+ return true;
}
- return bRet;
-}
-
-void SwStyleProperties_Impl::ClearAllProperties( )
-{
- for ( sal_uInt32 i = 0; i < nArrLen; i++ )
+ bool ClearProperty( const OUString& rName )
{
- delete pAnyArr[i];
- pAnyArr[ i ] = nullptr;
+ if(!AllowsKey(rName))
+ return false;
+ m_vPropertyValues[rName] = uno::Any();
+ return true;
}
-}
-
-bool SwStyleProperties_Impl::GetProperty(const OUString& rName, uno::Any*& rpAny )
-{
- bool bRet = false;
- sal_uInt32 nPos = 0;
- PropertyEntryVector_t::const_iterator aIt = aPropertyEntries.begin();
- while( aIt != aPropertyEntries.end() )
+ void ClearAllProperties( )
+ { m_vPropertyValues.clear(); }
+ static void GetProperty(const OUString &rPropertyName, const uno::Reference < beans::XPropertySet > &rxPropertySet, uno::Any& rAny )
{
- if( rName == aIt->sName )
- {
- rpAny = pAnyArr[nPos];
- bRet = true;
- break;
- }
- ++nPos;
- ++aIt;
+ rAny = rxPropertySet->getPropertyValue( rPropertyName );
}
-
- return bRet;
-}
-
-void SwStyleProperties_Impl::GetProperty( const OUString &rPropertyName, const uno::Reference < beans::XPropertySet > &rxPropertySet, uno::Any & rAny )
-{
- rAny = rxPropertySet->getPropertyValue( rPropertyName );
-}
+ const PropertyEntryVector_t& GetPropertyVector() const
+ { return aPropertyEntries; }
+};
static SwGetPoolIdFromName lcl_GetSwEnumFromSfxEnum(SfxStyleFamily eFamily)
{
@@ -1287,9 +1225,9 @@ void SwXStyle::ApplyDescriptorProperties()
PropertyEntryVector_t::const_iterator aIt = rPropertyVector.begin();
while(aIt != rPropertyVector.end())
{
- uno::Any* pAny(nullptr);
+ const uno::Any* pAny(nullptr);
m_pPropertiesImpl->GetProperty(aIt->sName, pAny);
- if (pAny)
+ if(pAny->hasValue())
setPropertyValue(aIt->sName, *pAny);
++aIt;
}
@@ -2423,9 +2361,9 @@ uno::Sequence< uno::Any > SAL_CALL SwXStyle::GetPropertyValues_Impl(
}
else if(m_bIsDescriptor)
{
- uno::Any *pAny = nullptr;
- m_pPropertiesImpl->GetProperty ( pNames[nProp], pAny );
- if( !pAny )
+ const uno::Any* pAny = nullptr;
+ m_pPropertiesImpl->GetProperty(pNames[nProp], pAny);
+ if(!pAny->hasValue())
{
bool bExcept = false;
switch( m_eFamily )
@@ -3667,10 +3605,9 @@ uno::Sequence< uno::Any > SAL_CALL SwXPageStyle::GetPropertyValues_Impl(
}
else if(IsDescriptor())
{
- uno::Any* pAny = nullptr;
+ const uno::Any* pAny = nullptr;
GetPropImpl()->GetProperty(rPropName, pAny);
-
- if ( !pAny )
+ if (!pAny->hasValue())
{
SwStyleProperties_Impl::GetProperty(rPropName, mxStyleData, pRet[nProp]);
}