diff options
author | Noel Grandin <noel@peralex.com> | 2012-06-27 10:27:36 +0200 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2012-07-04 23:23:21 +0200 |
commit | 8d89d1a4a73835a0859de8a6bfabe22eb49e45f2 (patch) | |
tree | 161ff54684f1be7fc6bbc416cd25b924f99b3fbe | |
parent | 7ce275e463584283c62b915cb798edcf8f0d8ef1 (diff) |
Convert Svptrarr to boost::ptr_map<sal_uInt16, SvxIconChoiceCtrlColumnInfo>
Much better than trying to make an array behave like a map
Change-Id: Ifbebc9a98b475788f0db349954bc6aba18fddf18
-rw-r--r-- | svtools/source/contnr/imivctl.hxx | 6 | ||||
-rw-r--r-- | svtools/source/contnr/imivctl1.cxx | 34 |
2 files changed, 14 insertions, 26 deletions
diff --git a/svtools/source/contnr/imivctl.hxx b/svtools/source/contnr/imivctl.hxx index f3c6aedbf8c7..96512aab5880 100644 --- a/svtools/source/contnr/imivctl.hxx +++ b/svtools/source/contnr/imivctl.hxx @@ -40,6 +40,7 @@ #include <svtools/ivctrl.hxx> #include <svl/svarray.hxx> +#include <boost/ptr_container/ptr_map.hpp> class IcnCursor_Impl; class SvtIconChoiceCtrl; @@ -156,6 +157,9 @@ public: // // Implementation-class of IconChoiceCtrl // + +typedef boost::ptr_map<sal_uInt16, SvxIconChoiceCtrlColumnInfo> SvxIconChoiceCtrlColumnInfoMap; + class SvxIconChoiceCtrl_Impl { friend class IcnCursor_Impl; @@ -188,7 +192,7 @@ class SvxIconChoiceCtrl_Impl long nMaxVirtWidth; // max. width aVirtOutputSize for ALIGN_TOP long nMaxVirtHeight; // max. height aVirtOutputSize for ALIGN_LEFT SvxIconChoiceCtrlEntryList_impl* pZOrderList; - SvPtrarr* pColumns; + SvxIconChoiceCtrlColumnInfoMap* pColumns; IcnViewEdit_Impl* pEdit; WinBits nWinBits; long nMaxBoundHeight; // height of highest BoundRects diff --git a/svtools/source/contnr/imivctl1.cxx b/svtools/source/contnr/imivctl1.cxx index 26ee6bc16a12..eeff926154ef 100644 --- a/svtools/source/contnr/imivctl1.cxx +++ b/svtools/source/contnr/imivctl1.cxx @@ -3718,36 +3718,17 @@ void SvxIconChoiceCtrl_Impl::ClearColumnList() if( !pColumns ) return; - const sal_uInt16 nCount = pColumns->Count(); - for( sal_uInt16 nCur = 0; nCur < nCount; nCur++ ) - { - SvxIconChoiceCtrlColumnInfo* pInfo = (SvxIconChoiceCtrlColumnInfo*) - pColumns->GetObject( nCur ); - delete pInfo; - } + pColumns->clear(); DELETEZ(pColumns); } void SvxIconChoiceCtrl_Impl::SetColumn( sal_uInt16 nIndex, const SvxIconChoiceCtrlColumnInfo& rInfo) { if( !pColumns ) - pColumns = new SvPtrarr; - while( pColumns->Count() < nIndex + 1 ) - pColumns->Insert( (void*)0, pColumns->Count() ); + pColumns = new SvxIconChoiceCtrlColumnInfoMap; - SvxIconChoiceCtrlColumnInfo* pInfo = - (SvxIconChoiceCtrlColumnInfo*)pColumns->GetObject(nIndex); - if( !pInfo ) - { - pInfo = new SvxIconChoiceCtrlColumnInfo( rInfo ); - pColumns->Insert( (void*)pInfo, nIndex ); - } - else - { - delete pInfo; - pInfo = new SvxIconChoiceCtrlColumnInfo( rInfo ); - pColumns->Replace( pInfo, nIndex ); - } + SvxIconChoiceCtrlColumnInfo* pInfo = new SvxIconChoiceCtrlColumnInfo( rInfo ); + pColumns->insert( nIndex, pInfo ); // HACK: Detail mode is not yet fully implemented, this workaround makes it // fly with a single column @@ -3760,9 +3741,12 @@ void SvxIconChoiceCtrl_Impl::SetColumn( sal_uInt16 nIndex, const SvxIconChoiceCt const SvxIconChoiceCtrlColumnInfo* SvxIconChoiceCtrl_Impl::GetColumn( sal_uInt16 nIndex ) const { - if( !pColumns || nIndex >= pColumns->Count() ) + if( !pColumns || nIndex >= pColumns->size() ) + return 0; + SvxIconChoiceCtrlColumnInfoMap::const_iterator it = pColumns->find( nIndex ); + if( it == pColumns->end() ) return 0; - return (const SvxIconChoiceCtrlColumnInfo*)pColumns->GetObject( nIndex ); + return it->second; } void SvxIconChoiceCtrl_Impl::DrawHighlightFrame( |