summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Grandin <noel@peralex.com>2012-06-27 10:27:36 +0200
committerMichael Stahl <mstahl@redhat.com>2012-07-04 23:23:21 +0200
commit8d89d1a4a73835a0859de8a6bfabe22eb49e45f2 (patch)
tree161ff54684f1be7fc6bbc416cd25b924f99b3fbe
parent7ce275e463584283c62b915cb798edcf8f0d8ef1 (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.hxx6
-rw-r--r--svtools/source/contnr/imivctl1.cxx34
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(