less copying in SfxItemPropertyMap::getPropertyEntries

we can just expose the map now, and avoid copying all the properties

Change-Id: Icb22975508582268dfa96e41eb98ac01e7f51317
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113982
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
This commit is contained in:
Noel Grandin
2021-04-12 17:45:19 +02:00
committed by Noel Grandin
parent 27911b0455
commit fe23e35ba5
13 changed files with 237 additions and 373 deletions
+1 -1
View File
@@ -1270,7 +1270,7 @@ void SAL_CALL SvxUnoTextRangeBase::setAllPropertiesToDefault()
{
for (auto & entry : mpPropSet->getPropertyMap().getPropertyEntries())
{
_setPropertyToDefault( pForwarder, &entry, -1 );
_setPropertyToDefault( pForwarder, &entry.second, -1 );
}
}
}
+2 -2
View File
@@ -114,7 +114,6 @@ struct SfxItemPropertyNamedEntry : public SfxItemPropertySimpleEntry
}
};
typedef std::vector< SfxItemPropertyNamedEntry > PropertyEntryVector_t;
class SVL_DLLPUBLIC SfxItemPropertyMap
{
std::unordered_map< std::u16string_view,
@@ -132,7 +131,8 @@ public:
bool hasPropertyByName( std::u16string_view rName ) const;
void mergeProperties( const css::uno::Sequence< css::beans::Property >& rPropSeq );
PropertyEntryVector_t getPropertyEntries() const;
const std::unordered_map< std::u16string_view,
SfxItemPropertySimpleEntry >& getPropertyEntries() const { return m_aMap; }
sal_uInt32 getSize() const;
};
+5 -8
View File
@@ -317,15 +317,12 @@ Sequence< PropertyValue > SAL_CALL
{
MutexGuard aGuard( GetLinguMutex() );
PropertyEntryVector_t aPropEntries = aPropertyMap.getPropertyEntries();
std::vector<PropertyValue> aProps;
aProps.reserve(aPropertyMap.getSize());
std::transform(aPropEntries.begin(), aPropEntries.end(), std::back_inserter(aProps),
[this](PropertyEntryVector_t::const_reference rPropEntry) {
return PropertyValue(rPropEntry.sName, rPropEntry.nWID,
aConfig.GetProperty(rPropEntry.nWID),
css::beans::PropertyState_DIRECT_VALUE); });
aProps.reserve(aPropertyMap.getPropertyEntries().size());
for(auto & rPair : aPropertyMap.getPropertyEntries())
aProps.push_back(PropertyValue(OUString(rPair.first), rPair.second.nWID,
aConfig.GetProperty(rPair.second.nWID),
css::beans::PropertyState_DIRECT_VALUE));
return comphelper::containerToSequence(aProps);
}
+11 -13
View File
@@ -276,16 +276,15 @@ namespace
uno::Reference< beans::XPropertySetInfo> xInfo = _xShape->getPropertySetInfo();
SvxUnoPropertyMapProvider aMap;
const SfxItemPropertyMap& rPropertyMap = aMap.GetPropertySet(SVXMAP_CUSTOMSHAPE, SdrObject::GetGlobalDrawObjectItemPool())->getPropertyMap();
PropertyEntryVector_t aPropVector = rPropertyMap.getPropertyEntries();
for (const auto& rProp : aPropVector)
for (const auto& rProp : rPropertyMap.getPropertyEntries())
{
if ( xInfo->hasPropertyByName(rProp.sName) )
if ( xInfo->hasPropertyByName(OUString(rProp.first)) )
{
const SfxPoolItem* pItem = _rItemSet.GetItem(rProp.nWID);
const SfxPoolItem* pItem = _rItemSet.GetItem(rProp.second.nWID);
if ( pItem )
{
::std::unique_ptr<SfxPoolItem> pClone(pItem->CloneSetWhich(rProp.nWID));
pClone->PutValue(_xShape->getPropertyValue(rProp.sName), rProp.nMemberId);
::std::unique_ptr<SfxPoolItem> pClone(pItem->CloneSetWhich(rProp.second.nWID));
pClone->PutValue(_xShape->getPropertyValue(OUString(rProp.first)), rProp.second.nMemberId);
_rItemSet.Put(std::move(pClone));
}
}
@@ -297,21 +296,20 @@ namespace
const uno::Reference< beans::XPropertySetInfo> xInfo = _xShape->getPropertySetInfo();
SvxUnoPropertyMapProvider aMap;
const SfxItemPropertyMap& rPropertyMap = aMap.GetPropertySet(SVXMAP_CUSTOMSHAPE, SdrObject::GetGlobalDrawObjectItemPool())->getPropertyMap();
PropertyEntryVector_t aPropVector = rPropertyMap.getPropertyEntries();
for (const auto& rProp : aPropVector)
for (const auto& rProp : rPropertyMap.getPropertyEntries())
{
if ( SfxItemState::SET == _rItemSet.GetItemState(rProp.nWID) && xInfo->hasPropertyByName(rProp.sName) )
if ( SfxItemState::SET == _rItemSet.GetItemState(rProp.second.nWID) && xInfo->hasPropertyByName(OUString(rProp.first)) )
{
if ( ( rProp.nFlags & beans::PropertyAttribute::READONLY ) != beans::PropertyAttribute::READONLY )
if ( ( rProp.second.nFlags & beans::PropertyAttribute::READONLY ) != beans::PropertyAttribute::READONLY )
{
const SfxPoolItem* pItem = _rItemSet.GetItem(rProp.nWID);
const SfxPoolItem* pItem = _rItemSet.GetItem(rProp.second.nWID);
if ( pItem )
{
uno::Any aValue;
pItem->QueryValue(aValue,rProp.nMemberId);
pItem->QueryValue(aValue,rProp.second.nMemberId);
try
{
_xShape->setPropertyValue(rProp.sName, aValue);
_xShape->setPropertyValue(OUString(rProp.first), aValue);
}
catch(uno::Exception&)
{ // shapes have a bug so we ignore this one.
+4 -5
View File
@@ -1247,20 +1247,19 @@ void ScViewFunc::ApplySelectionPattern( const ScPatternAttr& rAttr, bool bCursor
css::uno::Sequence< css::beans::PropertyValue > aProperties;
sal_Int32 nCount = 0;
const SfxItemPropertyMap& rMap = ScCellObj::GetCellPropertyMap();
PropertyEntryVector_t aPropVector = rMap.getPropertyEntries();
for ( sal_uInt16 nWhich = ATTR_PATTERN_START; nWhich <= ATTR_PATTERN_END; ++nWhich )
{
const SfxPoolItem* pItem = nullptr;
if ( rNewSet.GetItemState( nWhich, true, &pItem ) == SfxItemState::SET && pItem )
{
for ( const auto& rProp : aPropVector)
for ( const auto& rProp : rMap.getPropertyEntries())
{
if ( rProp.nWID == nWhich )
if ( rProp.second.nWID == nWhich )
{
css::uno::Any aVal;
pItem->QueryValue( aVal, rProp.nMemberId );
pItem->QueryValue( aVal, rProp.second.nMemberId );
aProperties.realloc( nCount + 1 );
aProperties[ nCount ].Name = rProp.sName;
aProperties[ nCount ].Name = rProp.first;
aProperties[ nCount ].Value = aVal;
++nCount;
}
+5 -6
View File
@@ -2780,15 +2780,14 @@ void SdMasterPage::setBackground( const Any& rValue )
Reference< beans::XPropertySetInfo > xSetInfo( xInputSet->getPropertySetInfo(), UNO_SET_THROW );
Reference< beans::XPropertyState > xSetStates( xInputSet, UNO_QUERY );
PropertyEntryVector_t aBackgroundProperties = ImplGetPageBackgroundPropertySet()->getPropertyMap().getPropertyEntries();
for( const auto& rProp : aBackgroundProperties )
for( const auto& rProp : ImplGetPageBackgroundPropertySet()->getPropertyMap().getPropertyEntries() )
{
if( xSetInfo->hasPropertyByName( rProp.sName ) )
if( xSetInfo->hasPropertyByName( OUString(rProp.first) ) )
{
if( !xSetStates.is() || xSetStates->getPropertyState( rProp.sName ) == beans::PropertyState_DIRECT_VALUE )
xStyleSet->setPropertyValue( rProp.sName, xInputSet->getPropertyValue( rProp.sName ) );
if( !xSetStates.is() || xSetStates->getPropertyState( OUString(rProp.first) ) == beans::PropertyState_DIRECT_VALUE )
xStyleSet->setPropertyValue( OUString(rProp.first), xInputSet->getPropertyValue( OUString(rProp.first) ) );
else
xSetStates->setPropertyToDefault( rProp.sName );
xSetStates->setPropertyToDefault( OUString(rProp.first) );
}
}
}
+10 -12
View File
@@ -100,26 +100,24 @@ void SdUnoPageBackground::fillItemSet( SdDrawDocument* pDoc, SfxItemSet& rSet )
if( mpPropSet->AreThereOwnUsrAnys() )
{
PropertyEntryVector_t aProperties = mpPropSet->getPropertyMap().getPropertyEntries();
for( const auto& rProp : aProperties )
for( const auto& rProp : mpPropSet->getPropertyMap().getPropertyEntries() )
{
uno::Any* pAny = mpPropSet->GetUsrAnyForID( rProp );
uno::Any* pAny = mpPropSet->GetUsrAnyForID( rProp.second );
if( pAny )
{
OUString aPropertyName( rProp.sName );
switch( rProp.nWID )
OUString aPropertyName( rProp.first );
switch( rProp.second.nWID )
{
case XATTR_FILLFLOATTRANSPARENCE :
case XATTR_FILLGRADIENT :
{
if ( ( pAny->getValueType() == ::cppu::UnoType< css::awt::Gradient>::get() )
&& ( rProp.nMemberId == MID_FILLGRADIENT ) )
&& ( rProp.second.nMemberId == MID_FILLGRADIENT ) )
{
setPropertyValue( aPropertyName, *pAny );
}
else if ( ( pAny->getValueType() == ::cppu::UnoType<OUString>::get() ) &&
( rProp.nMemberId == MID_NAME ) )
( rProp.second.nMemberId == MID_NAME ) )
{
setPropertyValue( aPropertyName, *pAny );
}
@@ -128,12 +126,12 @@ void SdUnoPageBackground::fillItemSet( SdDrawDocument* pDoc, SfxItemSet& rSet )
case XATTR_FILLHATCH :
{
if ( ( pAny->getValueType() == ::cppu::UnoType< css::drawing::Hatch>::get() )
&& ( rProp.nMemberId == MID_FILLHATCH ) )
&& ( rProp.second.nMemberId == MID_FILLHATCH ) )
{
setPropertyValue( aPropertyName, *pAny );
}
else if ( ( pAny->getValueType() == ::cppu::UnoType<OUString>::get() ) &&
( rProp.nMemberId == MID_NAME ) )
( rProp.second.nMemberId == MID_NAME ) )
{
setPropertyValue( aPropertyName, *pAny );
}
@@ -141,13 +139,13 @@ void SdUnoPageBackground::fillItemSet( SdDrawDocument* pDoc, SfxItemSet& rSet )
break;
case XATTR_FILLBITMAP :
{
if (rProp.nMemberId == MID_BITMAP &&
if (rProp.second.nMemberId == MID_BITMAP &&
(pAny->getValueType() == cppu::UnoType<css::awt::XBitmap>::get() ||
pAny->getValueType() == cppu::UnoType<css::graphic::XGraphic>::get()))
{
setPropertyValue( aPropertyName, *pAny );
}
else if (pAny->getValueType() == ::cppu::UnoType<OUString>::get() && rProp.nMemberId == MID_NAME)
else if (pAny->getValueType() == ::cppu::UnoType<OUString>::get() && rProp.second.nMemberId == MID_NAME)
{
setPropertyValue( aPropertyName, *pAny );
}
-13
View File
@@ -112,19 +112,6 @@ void SfxItemPropertyMap::mergeProperties( const uno::Sequence< beans::Property >
}
}
PropertyEntryVector_t SfxItemPropertyMap::getPropertyEntries() const
{
PropertyEntryVector_t aRet;
aRet.reserve(m_aMap.size());
for( const auto& rPair : m_aMap )
{
const SfxItemPropertySimpleEntry* pEntry = &rPair.second;
aRet.emplace_back( OUString(rPair.first), *pEntry );
}
return aRet;
}
sal_uInt32 SfxItemPropertyMap::getSize() const
{
return m_aMap.size();
+8 -9
View File
@@ -591,26 +591,25 @@ static void SvxItemPropertySet_ObtainSettingsFromPropertySet(const SvxItemProper
return;
const SfxItemPropertyMap& rSrc = rPropSet.getPropertyMap();
PropertyEntryVector_t aSrcPropVector = rSrc.getPropertyEntries();
for(const auto& rSrcProp : aSrcPropVector)
for(const auto& rSrcProp : rSrc.getPropertyEntries())
{
const sal_uInt16 nWID = rSrcProp.nWID;
const sal_uInt16 nWID = rSrcProp.second.nWID;
if(SfxItemPool::IsWhich(nWID)
&& (nWID < OWN_ATTR_VALUE_START || nWID > OWN_ATTR_VALUE_END)
&& rPropSet.GetUsrAnyForID(rSrcProp))
&& rPropSet.GetUsrAnyForID(rSrcProp.second))
rSet.Put(rSet.GetPool()->GetDefaultItem(nWID));
}
for(const auto& rSrcProp : aSrcPropVector)
for(const auto& rSrcProp : rSrc.getPropertyEntries())
{
if(rSrcProp.nWID)
if(rSrcProp.second.nWID)
{
uno::Any* pUsrAny = rPropSet.GetUsrAnyForID(rSrcProp);
uno::Any* pUsrAny = rPropSet.GetUsrAnyForID(rSrcProp.second);
if(pUsrAny)
{
// search for equivalent entry in pDst
const SfxItemPropertySimpleEntry* pEntry = pMap->getByName( rSrcProp.sName );
const SfxItemPropertySimpleEntry* pEntry = pMap->getByName( rSrcProp.first );
if(pEntry)
{
// entry found
@@ -618,7 +617,7 @@ static void SvxItemPropertySet_ObtainSettingsFromPropertySet(const SvxItemProper
{
// special ID in PropertySet, can only be set
// directly at the object
xSet->setPropertyValue( rSrcProp.sName, *pUsrAny);
xSet->setPropertyValue( OUString(rSrcProp.first), *pUsrAny);
}
else
{
+8 -10
View File
@@ -1488,17 +1488,16 @@ void SwAccessibleParagraph::_getDefaultAttributesImpl(
{
const SfxItemPropertyMap& rPropMap =
aSwMapProvider.GetPropertySet( PROPERTY_MAP_TEXT_CURSOR )->getPropertyMap();
PropertyEntryVector_t aPropertyEntries = rPropMap.getPropertyEntries();
for ( const auto& rProp : aPropertyEntries )
for ( const auto& rPair : rPropMap.getPropertyEntries() )
{
const SfxPoolItem* pItem = pSet->GetItem( rProp.nWID );
const SfxPoolItem* pItem = pSet->GetItem( rPair.second.nWID );
if ( pItem )
{
uno::Any aVal;
pItem->QueryValue( aVal, rProp.nMemberId );
pItem->QueryValue( aVal, rPair.second.nMemberId );
PropertyValue rPropVal;
rPropVal.Name = rProp.sName;
rPropVal.Name = rPair.first;
rPropVal.Value = aVal;
rPropVal.Handle = -1;
rPropVal.State = beans::PropertyState_DEFAULT_VALUE;
@@ -1681,19 +1680,18 @@ void SwAccessibleParagraph::_getRunAttributesImpl(
const SfxItemPropertyMap& rPropMap =
aSwMapProvider.GetPropertySet( PROPERTY_MAP_TEXT_CURSOR )->getPropertyMap();
PropertyEntryVector_t aPropertyEntries = rPropMap.getPropertyEntries();
for ( const auto& rProp : aPropertyEntries )
for ( const auto& rPair : rPropMap.getPropertyEntries() )
{
const SfxPoolItem* pItem( nullptr );
// #i82637# - Found character attributes, whose value equals the value of
// the corresponding default character attributes, are excluded.
if ( aSet.GetItemState( rProp.nWID, true, &pItem ) == SfxItemState::SET )
if ( aSet.GetItemState( rPair.second.nWID, true, &pItem ) == SfxItemState::SET )
{
uno::Any aVal;
pItem->QueryValue( aVal, rProp.nMemberId );
pItem->QueryValue( aVal, rPair.second.nMemberId );
PropertyValue rPropVal;
rPropVal.Name = rProp.sName;
rPropVal.Name = rPair.first;
rPropVal.Value = aVal;
rPropVal.Handle = -1;
rPropVal.State = PropertyState_DIRECT_VALUE;
+4 -4
View File
@@ -317,13 +317,13 @@ static uno::Any GetParaListAutoFormat(SwTextNode const& rNode)
SfxItemPropertyMap const& rMap(rPropSet.getPropertyMap());
std::vector<beans::NamedValue> props;
// have to iterate the map, not the item set?
for (auto const& rEntry : rMap.getPropertyEntries())
for (auto const& rPair : rMap.getPropertyEntries())
{
if (rPropSet.getPropertyState(rEntry, rSet) == PropertyState_DIRECT_VALUE)
if (rPropSet.getPropertyState(rPair.second, rSet) == PropertyState_DIRECT_VALUE)
{
Any value;
rPropSet.getPropertyValue(rEntry, rSet, value);
props.emplace_back(rEntry.sName, value);
rPropSet.getPropertyValue(rPair.second, rSet, value);
props.emplace_back(OUString(rPair.first), value);
}
}
return uno::makeAny(comphelper::containerToSequence(props));
+171 -280
View File
@@ -40,8 +40,8 @@ using namespace ::com::sun::star;
class SwSearchProperties_Impl
{
std::unique_ptr<std::unique_ptr<beans::PropertyValue>[]> pValueArr;
const PropertyEntryVector_t aPropertyEntries;
std::unordered_map<OUString, beans::PropertyValue> maValues;
SfxItemPropertyMap mrMap;
SwSearchProperties_Impl(const SwSearchProperties_Impl&) = delete;
SwSearchProperties_Impl& operator=(const SwSearchProperties_Impl&) = delete;
@@ -60,48 +60,32 @@ public:
};
SwSearchProperties_Impl::SwSearchProperties_Impl() :
aPropertyEntries( aSwMapProvider.GetPropertySet(PROPERTY_MAP_TEXT_CURSOR)->getPropertyMap().getPropertyEntries() )
mrMap( aSwMapProvider.GetPropertySet(PROPERTY_MAP_TEXT_CURSOR)->getPropertyMap() )
{
size_t nArrLen = aPropertyEntries.size();
pValueArr.reset( new std::unique_ptr<beans::PropertyValue>[nArrLen] );
}
void SwSearchProperties_Impl::SetProperties(const uno::Sequence< beans::PropertyValue >& aSearchAttribs)
{
//delete all existing values
for(size_t i = 0; i < aPropertyEntries.size(); ++i)
{
pValueArr[i].reset();
}
maValues.clear();
for(const beans::PropertyValue& rSearchAttrib : aSearchAttribs)
{
const OUString& sName = rSearchAttrib.Name;
auto aIt = std::find_if(aPropertyEntries.begin(), aPropertyEntries.end(),
[&sName](const SfxItemPropertyNamedEntry& rProp) { return rProp.sName == sName; });
if( aIt == aPropertyEntries.end() )
if( !mrMap.hasPropertyByName(sName) )
throw beans::UnknownPropertyException(sName);
auto nIndex = static_cast<sal_uInt32>(std::distance(aPropertyEntries.begin(), aIt));
pValueArr[nIndex].reset( new beans::PropertyValue(rSearchAttrib) );
maValues[sName] = rSearchAttrib;
}
}
uno::Sequence< beans::PropertyValue > SwSearchProperties_Impl::GetProperties() const
{
sal_uInt32 nPropCount = 0;
for( size_t i = 0; i < aPropertyEntries.size(); i++)
if(pValueArr[i])
nPropCount++;
uno::Sequence< beans::PropertyValue > aRet(nPropCount);
uno::Sequence< beans::PropertyValue > aRet(maValues.size());
beans::PropertyValue* pProps = aRet.getArray();
nPropCount = 0;
for(size_t i = 0; i < aPropertyEntries.size(); i++)
sal_Int32 nPropCount = 0;
for(auto const & rPair : maValues)
{
if(pValueArr[i])
{
pProps[nPropCount++] = *(pValueArr[i]);
}
pProps[nPropCount++] = rPair.second;
}
return aRet;
}
@@ -157,270 +141,177 @@ void SwSearchProperties_Impl::FillItemSet(SfxItemSet& rSet, bool bIsValueSearch)
pCTLWeightItem,
pShadowItem ;
PropertyEntryVector_t::const_iterator aIt = aPropertyEntries.begin();
for(size_t i = 0; i < aPropertyEntries.size(); i++, ++aIt)
auto funcClone = [&rSet](sal_uInt16 nWID, std::unique_ptr<SfxPoolItem> & rpPoolItem)
{
if(pValueArr[i])
if(!rpPoolItem)
rpPoolItem.reset(rSet.GetPool()->GetDefaultItem(nWID).Clone());
return rpPoolItem.get();
};
for(auto const & rPair : maValues)
{
SfxPoolItem* pTempItem = nullptr;
const SfxItemPropertySimpleEntry & rPropEntry = mrMap.getPropertyEntries().find(std::u16string_view(rPair.first))->second;
sal_uInt16 nWID = rPropEntry.nWID;
switch(nWID)
{
SfxPoolItem* pTempItem = nullptr;
switch(aIt->nWID)
case RES_BOX:
pTempItem = funcClone(nWID, pBoxItem);
break;
case RES_CHRATR_BOX:
pTempItem = funcClone(nWID, pCharBoxItem);
break;
case RES_BREAK:
pTempItem = funcClone(nWID, pBreakItem);
break;
case RES_CHRATR_AUTOKERN:
pTempItem = funcClone(nWID, pAutoKernItem);
break;
case RES_CHRATR_BACKGROUND:
pTempItem = funcClone(nWID, pBrushItem);
break;
case RES_CHRATR_CASEMAP:
pTempItem = funcClone(nWID, pCasemapItem);
break;
case RES_CHRATR_COLOR:
pTempItem = funcClone(nWID, pCharColorItem);
break;
case RES_CHRATR_CONTOUR:
pTempItem = funcClone(nWID, pContourItem);
break;
case RES_CHRATR_CROSSEDOUT:
pTempItem = funcClone(nWID, pCrossedOutItem);
break;
case RES_CHRATR_ESCAPEMENT:
pTempItem = funcClone(nWID, pEscItem);
break;
case RES_CHRATR_BLINK:
pTempItem = funcClone(nWID, pBlinkItem);
break;
case RES_CHRATR_FONT:
pTempItem = funcClone(nWID, pFontItem);
break;
case RES_CHRATR_FONTSIZE:
pTempItem = funcClone(nWID, pFontSizeItem);
break;
case RES_CHRATR_KERNING:
pTempItem = funcClone(nWID, pKernItem);
break;
case RES_CHRATR_LANGUAGE:
pTempItem = funcClone(nWID, pLangItem);
break;
case RES_CHRATR_NOHYPHEN:
pTempItem = funcClone(nWID, pNHyphItem);
break;
case RES_CHRATR_POSTURE:
pTempItem = funcClone(nWID, pPostItem);
break;
case RES_CHRATR_SHADOWED:
pTempItem = funcClone(nWID, pShadItem);
break;
case RES_TXTATR_CHARFMT:
pTempItem = funcClone(nWID, pCharFormatItem);
break;
case RES_CHRATR_UNDERLINE:
pTempItem = funcClone(nWID, pULineItem);
break;
case RES_CHRATR_OVERLINE:
pTempItem = funcClone(nWID, pOLineItem);
break;
case RES_CHRATR_WEIGHT:
pTempItem = funcClone(nWID, pWeightItem);
break;
case RES_PARATR_DROP:
pTempItem = funcClone(nWID, pDropItem);
break;
case RES_TXTATR_INETFMT:
pTempItem = funcClone(nWID, pInetItem);
break;
case RES_PAGEDESC:
pTempItem = funcClone(nWID, pDescItem);
break;
case RES_PARATR_ADJUST:
pTempItem = funcClone(nWID, pAdjItem);
break;
case RES_BACKGROUND:
pTempItem = funcClone(nWID, pBackItem);
break;
case RES_UL_SPACE:
pTempItem = funcClone(nWID, pULItem);
break;
case RES_LR_SPACE:
pTempItem = funcClone(nWID, pLRItem);
break;
case RES_KEEP:
pTempItem = funcClone(nWID, pKeepItem);
break;
case RES_LINENUMBER:
pTempItem = funcClone(nWID, pLineNumItem);
break;
case RES_PARATR_LINESPACING:
pTempItem = funcClone(nWID, pLineSpaceItem);
break;
case RES_PARATR_REGISTER:
pTempItem = funcClone(nWID, pRegItem);
break;
case RES_PARATR_SPLIT:
pTempItem = funcClone(nWID, pSplitItem);
break;
case RES_PARATR_TABSTOP:
pTempItem = funcClone(nWID, pTabItem);
break;
case RES_CHRATR_WORDLINEMODE:
pTempItem = funcClone(nWID, pWLineItem);
break;
case RES_CHRATR_CJK_FONT:
pTempItem = funcClone(nWID, pFontCJKItem);
break;
case RES_CHRATR_CJK_FONTSIZE:
pTempItem = funcClone(nWID, pFontSizeCJKItem);
break;
case RES_CHRATR_CJK_LANGUAGE:
pTempItem = funcClone(nWID, pCJKLangItem);
break;
case RES_CHRATR_CJK_POSTURE:
pTempItem = funcClone(nWID, pCJKPostureItem);
break;
case RES_CHRATR_CJK_WEIGHT:
pTempItem = funcClone(nWID, pCJKWeightItem);
break;
case RES_CHRATR_CTL_FONT:
pTempItem = funcClone(nWID, pFontCTLItem);
break;
case RES_CHRATR_CTL_FONTSIZE:
pTempItem = funcClone(nWID, pFontSizeCTLItem);
break;
case RES_CHRATR_CTL_LANGUAGE:
pTempItem = funcClone(nWID, pCTLLangItem);
break;
case RES_CHRATR_CTL_POSTURE:
pTempItem = funcClone(nWID, pCTLPostureItem);
break;
case RES_CHRATR_CTL_WEIGHT:
pTempItem = funcClone(nWID, pCTLWeightItem);
break;
case RES_CHRATR_SHADOW:
pTempItem = funcClone(nWID, pShadowItem);
break;
}
if(pTempItem)
{
if(bIsValueSearch)
{
case RES_BOX:
if(!pBoxItem)
pBoxItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pBoxItem.get();
break;
case RES_CHRATR_BOX:
if(!pCharBoxItem)
pCharBoxItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pCharBoxItem.get();
break;
case RES_BREAK:
if(!pBreakItem)
pBreakItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pBreakItem.get();
break;
case RES_CHRATR_AUTOKERN:
if(!pAutoKernItem)
pAutoKernItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pAutoKernItem.get();
break;
case RES_CHRATR_BACKGROUND:
if(!pBrushItem)
pBrushItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pBrushItem.get();
break;
case RES_CHRATR_CASEMAP:
if(!pCasemapItem)
pCasemapItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pCasemapItem.get();
break;
case RES_CHRATR_COLOR:
if(!pCharColorItem)
pCharColorItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pCharColorItem.get();
break;
case RES_CHRATR_CONTOUR:
if(!pContourItem)
pContourItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pContourItem.get();
break;
case RES_CHRATR_CROSSEDOUT:
if(!pCrossedOutItem)
pCrossedOutItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pCrossedOutItem.get();
break;
case RES_CHRATR_ESCAPEMENT:
if(!pEscItem)
pEscItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pEscItem.get();
break;
case RES_CHRATR_BLINK:
if(!pBlinkItem)
pBlinkItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pBlinkItem.get();
break;
case RES_CHRATR_FONT:
if(!pFontItem)
pFontItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pFontItem.get();
break;
case RES_CHRATR_FONTSIZE:
if(!pFontSizeItem)
pFontSizeItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pFontSizeItem.get();
break;
case RES_CHRATR_KERNING:
if(!pKernItem)
pKernItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pKernItem.get();
break;
case RES_CHRATR_LANGUAGE:
if(!pLangItem)
pLangItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pLangItem.get();
break;
case RES_CHRATR_NOHYPHEN:
if(!pNHyphItem)
pNHyphItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pNHyphItem.get();
break;
case RES_CHRATR_POSTURE:
if(!pPostItem)
pPostItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pPostItem.get();
break;
case RES_CHRATR_SHADOWED:
if(!pShadItem)
pShadItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pShadItem.get();
break;
case RES_TXTATR_CHARFMT:
if(!pCharFormatItem)
pCharFormatItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pCharFormatItem.get();
break;
case RES_CHRATR_UNDERLINE:
if(!pULineItem)
pULineItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pULineItem.get();
break;
case RES_CHRATR_OVERLINE:
if(!pOLineItem)
pOLineItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pOLineItem.get();
break;
case RES_CHRATR_WEIGHT:
if(!pWeightItem)
pWeightItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pWeightItem.get();
break;
case RES_PARATR_DROP:
if(!pDropItem)
pDropItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pDropItem.get();
break;
case RES_TXTATR_INETFMT:
if(!pInetItem)
pInetItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pInetItem.get();
break;
case RES_PAGEDESC:
if(!pDescItem)
pDescItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pDescItem.get();
break;
case RES_PARATR_ADJUST:
if(!pAdjItem)
pAdjItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pAdjItem.get();
break;
case RES_BACKGROUND:
if(!pBackItem)
pBackItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pBackItem.get();
break;
case RES_UL_SPACE:
if(!pULItem)
pULItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pULItem.get();
break;
case RES_LR_SPACE:
if(!pLRItem)
pLRItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pLRItem.get();
break;
case RES_KEEP:
if(!pKeepItem)
pKeepItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pKeepItem.get();
break;
case RES_LINENUMBER:
if(!pLineNumItem)
pLineNumItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pLineNumItem.get();
break;
case RES_PARATR_LINESPACING:
if(!pLineSpaceItem)
pLineSpaceItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pLineSpaceItem.get();
break;
case RES_PARATR_REGISTER:
if(!pRegItem)
pRegItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pRegItem.get();
break;
case RES_PARATR_SPLIT:
if(!pSplitItem)
pSplitItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pSplitItem.get();
break;
case RES_PARATR_TABSTOP:
if(!pTabItem)
pTabItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pTabItem.get();
break;
case RES_CHRATR_WORDLINEMODE:
if(!pWLineItem)
pWLineItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pWLineItem.get();
break;
case RES_CHRATR_CJK_FONT:
if(!pFontCJKItem )
pFontCJKItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pFontCJKItem.get();
break;
case RES_CHRATR_CJK_FONTSIZE:
if(!pFontSizeCJKItem )
pFontSizeCJKItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pFontSizeCJKItem.get();
break;
case RES_CHRATR_CJK_LANGUAGE:
if(!pCJKLangItem )
pCJKLangItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pCJKLangItem.get();
break;
case RES_CHRATR_CJK_POSTURE:
if(!pCJKPostureItem )
pCJKPostureItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pCJKPostureItem.get();
break;
case RES_CHRATR_CJK_WEIGHT:
if(!pCJKWeightItem )
pCJKWeightItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pCJKWeightItem.get();
break;
case RES_CHRATR_CTL_FONT:
if(!pFontCTLItem )
pFontCTLItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pFontCTLItem.get();
break;
case RES_CHRATR_CTL_FONTSIZE:
if(!pFontSizeCTLItem )
pFontSizeCTLItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pFontSizeCTLItem.get();
break;
case RES_CHRATR_CTL_LANGUAGE:
if(!pCTLLangItem )
pCTLLangItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pCTLLangItem.get();
break;
case RES_CHRATR_CTL_POSTURE:
if(!pCTLPostureItem )
pCTLPostureItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pCTLPostureItem.get();
break;
case RES_CHRATR_CTL_WEIGHT:
if(!pCTLWeightItem )
pCTLWeightItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pCTLWeightItem.get();
break;
case RES_CHRATR_SHADOW:
if(!pShadowItem )
pShadowItem.reset(rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone());
pTempItem = pShadowItem.get();
break;
}
if(pTempItem)
{
if(bIsValueSearch)
{
pTempItem->PutValue(pValueArr[i]->Value, aIt->nMemberId);
rSet.Put(*pTempItem);
}
else
rSet.InvalidateItem( pTempItem->Which() );
pTempItem->PutValue(rPair.second.Value, rPropEntry.nMemberId);
rSet.Put(*pTempItem);
}
else
rSet.InvalidateItem( pTempItem->Which() );
}
}
}
bool SwSearchProperties_Impl::HasAttributes() const
{
for(size_t i = 0; i < aPropertyEntries.size(); i++)
if(pValueArr[i])
return true;
return false;
return !maValues.empty();
}
SwXTextSearch::SwXTextSearch() :
+8 -10
View File
@@ -1138,17 +1138,16 @@ namespace {
class SwStyleProperties_Impl
{
const PropertyEntryVector_t aPropertyEntries;
const SfxItemPropertyMap& mrMap;
std::map<OUString, uno::Any> m_vPropertyValues;
public:
explicit SwStyleProperties_Impl(const SfxItemPropertyMap& rMap)
: aPropertyEntries(rMap.getPropertyEntries())
: mrMap(rMap)
{ }
bool AllowsKey(const OUString& rName)
bool AllowsKey(std::u16string_view rName)
{
return std::any_of(aPropertyEntries.begin(), aPropertyEntries.end(),
[rName] (const SfxItemPropertyNamedEntry& rEntry) {return rName == rEntry.sName;} );
return mrMap.hasPropertyByName(rName);
}
bool SetProperty(const OUString& rName, const uno::Any& rValue)
{
@@ -4269,7 +4268,6 @@ uno::Sequence< beans::PropertyValue > SwXAutoStyle::getProperties()
const SfxItemPropertySet* pPropSet = aSwMapProvider.GetPropertySet(nPropSetId);
const SfxItemPropertyMap &rMap = pPropSet->getPropertyMap();
PropertyEntryVector_t aPropVector = rMap.getPropertyEntries();
SfxItemSet& rSet = *mpSet;
SfxItemIter aIter(rSet);
@@ -4280,13 +4278,13 @@ uno::Sequence< beans::PropertyValue > SwXAutoStyle::getProperties()
// TODO: Optimize - and fix! the old iteration filled each WhichId
// only once but there are more properties than WhichIds
for( const auto& rProp : aPropVector )
for( const auto& rPair : rMap.getPropertyEntries() )
{
if ( rProp.nWID == nWID )
if ( rPair.second.nWID == nWID )
{
beans::PropertyValue aPropertyValue;
aPropertyValue.Name = rProp.sName;
pItem->QueryValue( aPropertyValue.Value, rProp.nMemberId );
aPropertyValue.Name = rPair.first;
pItem->QueryValue( aPropertyValue.Value, rPair.second.nMemberId );
aPropertyVector.push_back( aPropertyValue );
}
}