diff options
author | Noel Grandin <noelgrandin@gmail.com> | 2019-10-04 18:58:20 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2019-10-05 14:06:33 +0200 |
commit | 4f7c0393d5dab5c0451d16a694fab963bdc98966 (patch) | |
tree | 8409534f55d0b69307d68f69ab88c76acf7d651f | |
parent | d2c49bfde8e4e5f17cc80f5f5cc99ebb0aec1946 (diff) |
simplify SfxAllEnumItem
It is just a data carrier for an array of values for
SID_ATTR_PATHNAME, it does not need associated enum logic.
Change-Id: I547cd5580d02eb9c261feeb3545e31910a4ed644
Reviewed-on: https://gerrit.libreoffice.org/80253
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r-- | include/svl/aeitem.hxx | 29 | ||||
-rw-r--r-- | sfx2/source/appl/appcfg.cxx | 6 | ||||
-rw-r--r-- | svl/source/items/aeitem.cxx | 94 | ||||
-rw-r--r-- | svl/source/items/poolitem.cxx | 3 |
4 files changed, 27 insertions, 105 deletions
diff --git a/include/svl/aeitem.hxx b/include/svl/aeitem.hxx index 4c25643cf59d..a15d3a5e2332 100644 --- a/include/svl/aeitem.hxx +++ b/include/svl/aeitem.hxx @@ -26,37 +26,20 @@ #include <memory> #include <vector> -struct SfxAllEnumValue_Impl; -typedef std::vector<SfxAllEnumValue_Impl> SfxAllEnumValueArr; - -// MSVC hack: -class SAL_DLLPUBLIC_RTTI SfxAllEnumItem_Base: public SfxEnumItem<sal_uInt16> { -protected: - explicit SfxAllEnumItem_Base(sal_uInt16 nWhich, sal_uInt16 nValue): - SfxEnumItem(nWhich, nValue) - {} -}; - -class SVL_DLLPUBLIC SfxAllEnumItem: public SfxAllEnumItem_Base +class SVL_DLLPUBLIC SfxAllEnumItem: public SfxPoolItem { - std::unique_ptr<SfxAllEnumValueArr> pValues; - - sal_uInt16 GetPosByValue( sal_uInt16 nValue ) const; - std::size_t GetPosByValue_( sal_uInt16 nValue ) const; - sal_uInt16 GetValueByPos( sal_uInt16 nPos ) const; + std::vector<OUString> m_Values; public: explicit SfxAllEnumItem( sal_uInt16 nWhich); - SfxAllEnumItem( sal_uInt16 nWhich, sal_uInt16 nVal ); SfxAllEnumItem( const SfxAllEnumItem & ); virtual ~SfxAllEnumItem() override; - void InsertValue( sal_uInt16 nValue ); - void InsertValue( sal_uInt16 nValue, const OUString &rText ); - - virtual sal_uInt16 GetValueCount() const override; - OUString const & GetValueTextByPos( sal_uInt16 nPos ) const; + void SetTextByPos( sal_uInt16 nPos, const OUString &rText ); + OUString const & GetTextByPos( sal_uInt16 nPos ) const; + sal_Int32 GetTextCount() const; virtual SfxPoolItem* Clone( SfxItemPool *pPool = nullptr ) const override; + virtual bool operator==( SfxPoolItem const & ) const override; }; #endif diff --git a/sfx2/source/appl/appcfg.cxx b/sfx2/source/appl/appcfg.cxx index 323c87432d55..208c23aca8b5 100644 --- a/sfx2/source/appl/appcfg.cxx +++ b/sfx2/source/appl/appcfg.cxx @@ -436,7 +436,7 @@ void SfxApplication::GetOptions( SfxItemSet& rSet ) case SvtPathOptions::PATH_USERCONFIG: aValue = aPathCfg.GetUserConfigPath(); break; case SvtPathOptions::PATH_WORK: aValue = aPathCfg.GetWorkPath(); break; } - aValues.InsertValue( nProp, aValue ); + aValues.SetTextByPos( nProp, aValue ); } if (rSet.Put(aValues)) @@ -728,11 +728,11 @@ void SfxApplication::SetOptions(const SfxItemSet &rSet) { DBG_ASSERT(dynamic_cast< const SfxAllEnumItem *>( pItem ) != nullptr, "AllEnumItem expected"); const SfxAllEnumItem* pEnumItem = static_cast<const SfxAllEnumItem *>(pItem); - sal_uInt32 nCount = pEnumItem->GetValueCount(); + sal_uInt32 nCount = pEnumItem->GetTextCount(); OUString aNoChangeStr( ' ' ); for( sal_uInt32 nPath=0; nPath<nCount; ++nPath ) { - const OUString& sValue = pEnumItem->GetValueTextByPos(static_cast<sal_uInt16>(nPath)); + const OUString& sValue = pEnumItem->GetTextByPos(static_cast<sal_uInt16>(nPath)); if ( sValue != aNoChangeStr ) { switch( nPath ) diff --git a/svl/source/items/aeitem.cxx b/svl/source/items/aeitem.cxx index 2d2ce6d10ea5..00e58d27f464 100644 --- a/svl/source/items/aeitem.cxx +++ b/svl/source/items/aeitem.cxx @@ -23,50 +23,29 @@ #include <climits> #include <cstddef> -struct SfxAllEnumValue_Impl -{ - sal_uInt16 nValue; - OUString aText; -}; - - -SfxAllEnumItem::SfxAllEnumItem(sal_uInt16 which, sal_uInt16 nVal): - SfxAllEnumItem_Base(which, nVal) -{ - InsertValue( nVal ); -} - SfxAllEnumItem::SfxAllEnumItem(sal_uInt16 which): - SfxAllEnumItem_Base(which, 0) + SfxPoolItem(which) { } SfxAllEnumItem::SfxAllEnumItem(const SfxAllEnumItem &rCopy): - SfxAllEnumItem_Base(rCopy) + SfxPoolItem(rCopy), + m_Values(rCopy.m_Values) { - if ( rCopy.pValues ) - pValues.reset( new SfxAllEnumValueArr(*rCopy.pValues) ); } SfxAllEnumItem::~SfxAllEnumItem() { } -sal_uInt16 SfxAllEnumItem::GetValueCount() const -{ - return pValues ? pValues->size() : 0; -} - -OUString const & SfxAllEnumItem::GetValueTextByPos( sal_uInt16 nPos ) const +sal_Int32 SfxAllEnumItem::GetTextCount() const { - assert(pValues && nPos < pValues->size()); - return (*pValues)[nPos].aText; + return m_Values.size(); } -sal_uInt16 SfxAllEnumItem::GetValueByPos( sal_uInt16 nPos ) const +OUString const & SfxAllEnumItem::GetTextByPos( sal_uInt16 nPos ) const { - assert(pValues && nPos < pValues->size()); - return (*pValues)[nPos].nValue; + return m_Values[nPos]; } SfxPoolItem* SfxAllEnumItem::Clone( SfxItemPool * ) const @@ -74,60 +53,21 @@ SfxPoolItem* SfxAllEnumItem::Clone( SfxItemPool * ) const return new SfxAllEnumItem(*this); } -/** - * In contrast to @see GetPosByValue(sal_uInt16) const - * this internal method returns the position the value would be for non-present values. - */ -std::size_t SfxAllEnumItem::GetPosByValue_( sal_uInt16 nVal ) const +void SfxAllEnumItem::SetTextByPos( sal_uInt16 nPos, const OUString &rText ) { - if ( !pValues ) - return 0; - - //FIXME: Optimisation: use binary search or SortArray - std::size_t nPos; - for ( nPos = 0; nPos < pValues->size(); ++nPos ) - if ( (*pValues)[nPos].nValue >= nVal ) - return nPos; - return nPos; + if (nPos >= m_Values.size()) + m_Values.resize(nPos); + m_Values[nPos] = rText; } -sal_uInt16 SfxAllEnumItem::GetPosByValue( sal_uInt16 nValue ) const +bool SfxAllEnumItem::operator==( const SfxPoolItem& rCmp ) const { - if ( !pValues || pValues->empty() ) - return nValue; - - sal_uInt16 nCount = GetValueCount(); - for (sal_uInt16 i = 0; i < nCount; ++i) - if (GetValueByPos(i) == nValue) - return i; - return USHRT_MAX; + assert(dynamic_cast< const SfxAllEnumItem* >(&rCmp) && "operator==Types not matching"); + const SfxAllEnumItem& rOther = static_cast<const SfxAllEnumItem&>(rCmp); + if (!SfxPoolItem::operator==(rCmp)) + return false; + return m_Values == rOther.m_Values; } -void SfxAllEnumItem::InsertValue( sal_uInt16 nValue, const OUString &rValue ) -{ - SfxAllEnumValue_Impl aVal; - aVal.nValue = nValue; - aVal.aText = rValue; - if ( !pValues ) - pValues.reset( new SfxAllEnumValueArr ); - else if ( sal_uInt16 nPos = GetPosByValue(nValue); nPos != USHRT_MAX ) - { - // remove when exists - pValues->erase( pValues->begin() + nPos ); - } - // then insert - pValues->insert(pValues->begin() + GetPosByValue_(nValue), aVal); // FIXME: Duplicates? -} - -void SfxAllEnumItem::InsertValue( sal_uInt16 nValue ) -{ - SfxAllEnumValue_Impl aVal; - aVal.nValue = nValue; - aVal.aText = OUString::number(nValue); - if ( !pValues ) - pValues.reset( new SfxAllEnumValueArr ); - - pValues->insert(pValues->begin() + GetPosByValue_(nValue), aVal); // FIXME: Duplicates? -} /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svl/source/items/poolitem.cxx b/svl/source/items/poolitem.cxx index 1ee28f0352f0..5c4e81c89e10 100644 --- a/svl/source/items/poolitem.cxx +++ b/svl/source/items/poolitem.cxx @@ -70,6 +70,7 @@ // class SfxObjectShellItem: public SfxPoolItem // class SfxViewFrameItem: public SfxPoolItem // class SfxWatermarkItem: public SfxPoolItem +// class SfxAllEnumItem: public SfxPoolItem // class SfxEnumItemInterface: public SfxPoolItem // class SvxAdjustItem : public SfxEnumItemInterface // class SvxEscapementItem : public SfxEnumItemInterface @@ -91,8 +92,6 @@ // class SvxUnderlineItem : public SvxTextLineItem // class SvxOverlineItem : public SvxTextLineItem // class SvxWeightItem : public SfxEnumItem<FontWeight> -// class SfxAllEnumItem_Base: public SfxEnumItem<sal_uInt16> -// class SfxAllEnumItem: public SfxAllEnumItem_Base // class SvxOrientationItem: public SfxEnumItem<SvxCellOrientation> // class SvxChartRegressItem : public SfxEnumItem<SvxChartRegress> // class SvxChartTextOrderItem : public SfxEnumItem<SvxChartTextOrder> |