diff options
-rw-r--r-- | sc/inc/autoform.hxx | 56 | ||||
-rw-r--r-- | sc/source/core/data/table4.cxx | 6 | ||||
-rw-r--r-- | sc/source/core/tool/autoform.cxx | 145 | ||||
-rw-r--r-- | sc/source/ui/docshell/docfunc.cxx | 8 | ||||
-rw-r--r-- | sc/source/ui/inc/docfunc.hxx | 4 | ||||
-rw-r--r-- | sc/source/ui/inc/scuiautofmt.hxx | 4 | ||||
-rw-r--r-- | sc/source/ui/miscdlgs/scuiautofmt.cxx | 87 | ||||
-rw-r--r-- | sc/source/ui/unoobj/afmtuno.cxx | 69 | ||||
-rw-r--r-- | sc/source/ui/unoobj/cellsuno.cxx | 14 | ||||
-rw-r--r-- | sc/source/ui/view/cellsh3.cxx | 4 |
10 files changed, 237 insertions, 160 deletions
diff --git a/sc/inc/autoform.hxx b/sc/inc/autoform.hxx index 5ab5ac1560bc..724d63fd9f19 100644 --- a/sc/inc/autoform.hxx +++ b/sc/inc/autoform.hxx @@ -69,6 +69,7 @@ #include "global.hxx" #include "zforauto.hxx" +#include <boost/ptr_container/ptr_map.hpp> struct ScAfVersions; @@ -197,7 +198,7 @@ public: }; -class SC_DLLPUBLIC ScAutoFormatData : public ScDataObject +class SC_DLLPUBLIC ScAutoFormatData { private: rtl::OUString aName; @@ -218,11 +219,9 @@ private: SC_DLLPRIVATE const ScAutoFormatDataField& GetField( sal_uInt16 nIndex ) const; public: - ScAutoFormatData(); - ScAutoFormatData( const ScAutoFormatData& rData ); - virtual ~ScAutoFormatData(); - - virtual ScDataObject* Clone() const { return new ScAutoFormatData( *this ); } + ScAutoFormatData(); + ScAutoFormatData( const ScAutoFormatData& rData ); + ~ScAutoFormatData(); void SetName( const rtl::OUString& rName ) { aName = rName; nStrResId = USHRT_MAX; } const rtl::OUString& GetName() const { return aName; } @@ -260,23 +259,40 @@ public: #endif }; -class SC_DLLPUBLIC ScAutoFormat : public ScSortedCollection +class SC_DLLPUBLIC ScAutoFormat { -private: - bool bSaveLater; + typedef boost::ptr_map<rtl::OUString, ScAutoFormatData> MapType; + MapType maData; + bool mbSaveLater; public: - ScAutoFormat( sal_uInt16 nLim = 4, sal_uInt16 nDel = 4, sal_Bool bDup = false ); - ScAutoFormat( const ScAutoFormat& AutoFormat ); - virtual ~ScAutoFormat(); - virtual ScDataObject* Clone() const { return new ScAutoFormat( *this ); } - ScAutoFormatData* operator[]( const sal_uInt16 nIndex ) const {return (ScAutoFormatData*)At( nIndex );} - virtual short Compare( ScDataObject* pKey1, ScDataObject* pKey2 ) const; - bool Load(); - bool Save(); - sal_uInt16 FindIndexPerName( const rtl::OUString& rName ) const; - void SetSaveLater( bool bSet ); - bool IsSaveLater() const { return bSaveLater; } + typedef MapType::const_iterator const_iterator; + typedef MapType::iterator iterator; + + ScAutoFormat(); + ScAutoFormat(const ScAutoFormat& r); + ~ScAutoFormat(); + bool Load(); + bool Save(); + + void SetSaveLater( bool bSet ); + bool IsSaveLater() const { return mbSaveLater; } + + const ScAutoFormatData* findByIndex(size_t nIndex) const; + ScAutoFormatData* findByIndex(size_t nIndex); + const_iterator find(const ScAutoFormatData* pData) const; + iterator find(const ScAutoFormatData* pData); + const_iterator find(const rtl::OUString& rName) const; + iterator find(const rtl::OUString& rName); + + bool insert(ScAutoFormatData* pNew); + void erase(const iterator& it); + + size_t size() const; + const_iterator begin() const; + const_iterator end() const; + iterator begin(); + iterator end(); }; diff --git a/sc/source/core/data/table4.cxx b/sc/source/core/data/table4.cxx index dac41110b777..7990d28704c9 100644 --- a/sc/source/core/data/table4.cxx +++ b/sc/source/core/data/table4.cxx @@ -1591,7 +1591,8 @@ void ScTable::Fill( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, void ScTable::AutoFormatArea(SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, const ScPatternAttr& rAttr, sal_uInt16 nFormatNo) { - ScAutoFormatData* pData = (*ScGlobal::GetOrCreateAutoFormat())[nFormatNo]; + ScAutoFormat& rFormat = *ScGlobal::GetOrCreateAutoFormat(); + ScAutoFormatData* pData = rFormat.findByIndex(nFormatNo); if (pData) { ApplyPatternArea(nStartCol, nStartRow, nEndCol, nEndRow, rAttr); @@ -1603,7 +1604,8 @@ void ScTable::AutoFormat( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW { if (ValidColRow(nStartCol, nStartRow) && ValidColRow(nEndCol, nEndRow)) { - ScAutoFormatData* pData = (*ScGlobal::GetOrCreateAutoFormat())[nFormatNo]; + ScAutoFormat& rFormat = *ScGlobal::GetOrCreateAutoFormat(); + ScAutoFormatData* pData = rFormat.findByIndex(nFormatNo); if (pData) { ScPatternAttr* pPatternAttrs[16]; diff --git a/sc/source/core/tool/autoform.cxx b/sc/source/core/tool/autoform.cxx index 76dc8b5d7f02..515110571fd3 100644 --- a/sc/source/core/tool/autoform.cxx +++ b/sc/source/core/tool/autoform.cxx @@ -495,7 +495,6 @@ ScAutoFormatData::ScAutoFormatData() } ScAutoFormatData::ScAutoFormatData( const ScAutoFormatData& rData ) : - ScDataObject(), aName( rData.aName ), nStrResId( rData.nStrResId ), bIncludeFont( rData.bIncludeFont ), @@ -889,9 +888,8 @@ bool ScAutoFormatData::Save(SvStream& rStream) //--------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------- -ScAutoFormat::ScAutoFormat(sal_uInt16 nLim, sal_uInt16 nDel, sal_Bool bDup): - ScSortedCollection (nLim, nDel, bDup), - bSaveLater (false) +ScAutoFormat::ScAutoFormat() : + mbSaveLater(false) { // create default autoformat ScAutoFormatData* pData = new ScAutoFormatData; @@ -971,38 +969,113 @@ ScAutoFormat::ScAutoFormat(sal_uInt16 nLim, sal_uInt16 nDel, sal_Bool bDup): } } - Insert(pData); + insert(pData); } -ScAutoFormat::ScAutoFormat(const ScAutoFormat& rAutoFormat) : - ScSortedCollection (rAutoFormat), - bSaveLater (false) -{} +ScAutoFormat::ScAutoFormat(const ScAutoFormat& r) : + maData(r.maData), + mbSaveLater(false) {} ScAutoFormat::~ScAutoFormat() { // Bei Aenderungen per StarOne wird nicht sofort gespeichert, sondern zuerst nur // das SaveLater Flag gesetzt. Wenn das Flag noch gesetzt ist, jetzt speichern. - if (bSaveLater) + if (mbSaveLater) Save(); } void ScAutoFormat::SetSaveLater( bool bSet ) { - bSaveLater = bSet; + mbSaveLater = bSet; } -short ScAutoFormat::Compare(ScDataObject* pKey1, ScDataObject* pKey2) const +const ScAutoFormatData* ScAutoFormat::findByIndex(size_t nIndex) const { - rtl::OUString aStr1 = ((ScAutoFormatData*)pKey1)->GetName(); - rtl::OUString aStr2 = ((ScAutoFormatData*)pKey2)->GetName(); - String aStrStandard = ScGlobal::GetRscString(STR_STYLENAME_STANDARD); - if ( ScGlobal::GetpTransliteration()->isEqual( aStr1, aStrStandard ) ) - return -1; - if ( ScGlobal::GetpTransliteration()->isEqual( aStr2, aStrStandard ) ) - return 1; - return (short) ScGlobal::GetpTransliteration()->compareString( aStr1, aStr2 ); + if (nIndex >= maData.size()) + return NULL; + + MapType::const_iterator it = maData.begin(); + std::advance(it, nIndex); + return it->second; +} + +ScAutoFormatData* ScAutoFormat::findByIndex(size_t nIndex) +{ + if (nIndex >= maData.size()) + return NULL; + + MapType::iterator it = maData.begin(); + std::advance(it, nIndex); + return it->second; +} + +ScAutoFormat::const_iterator ScAutoFormat::find(const ScAutoFormatData* pData) const +{ + MapType::const_iterator it = maData.begin(), itEnd = maData.end(); + for (; it != itEnd; ++it) + { + if (it->second == pData) + return it; + } + return itEnd; +} + +ScAutoFormat::iterator ScAutoFormat::find(const ScAutoFormatData* pData) +{ + MapType::iterator it = maData.begin(), itEnd = maData.end(); + for (; it != itEnd; ++it) + { + if (it->second == pData) + return it; + } + return itEnd; +} + +ScAutoFormat::const_iterator ScAutoFormat::find(const rtl::OUString& rName) const +{ + return maData.find(rName); +} + +ScAutoFormat::iterator ScAutoFormat::find(const rtl::OUString& rName) +{ + return maData.find(rName); +} + +bool ScAutoFormat::insert(ScAutoFormatData* pNew) +{ + rtl::OUString aName = pNew->GetName(); + return maData.insert(aName, pNew).second; +} + +void ScAutoFormat::erase(const iterator& it) +{ + maData.erase(it); +} + +size_t ScAutoFormat::size() const +{ + return maData.size(); +} + +ScAutoFormat::const_iterator ScAutoFormat::begin() const +{ + return maData.begin(); +} + +ScAutoFormat::const_iterator ScAutoFormat::end() const +{ + return maData.end(); +} + +ScAutoFormat::iterator ScAutoFormat::begin() +{ + return maData.begin(); +} + +ScAutoFormat::iterator ScAutoFormat::end() +{ + return maData.end(); } bool ScAutoFormat::Load() @@ -1059,7 +1132,7 @@ bool ScAutoFormat::Load() { pData = new ScAutoFormatData(); bRet = pData->Load(rStream, aVersions); - Insert(pData); + insert(pData); } } #ifdef READ_OLDVERS @@ -1096,7 +1169,7 @@ bool ScAutoFormat::Load() { pData = new ScAutoFormatData(); bRet = pData->LoadOld( rStream, aVersions ); - Insert( pData ); + insert(pData); } } else @@ -1105,7 +1178,7 @@ bool ScAutoFormat::Load() #endif } } - bSaveLater = false; + mbSaveLater = false; return bRet; } @@ -1137,32 +1210,18 @@ bool ScAutoFormat::Save() bRet = (rStream.GetError() == 0); //----------------------------------------------------------- - rStream << (sal_uInt16)(nCount - 1); + rStream << (sal_uInt16)(maData.size() - 1); bRet = (rStream.GetError() == 0); - for (sal_uInt16 i=1; bRet && (i < nCount); i++) - bRet = ((ScAutoFormatData*)pItems[i])->Save(rStream); + MapType::iterator it = maData.begin(), itEnd = maData.end(); + for (++it; bRet && it != itEnd; ++it) // Skip the first item. + bRet = it->second->Save(rStream); + rStream.Flush(); aMedium.Commit(); } - bSaveLater = false; + mbSaveLater = false; return bRet; } -sal_uInt16 ScAutoFormat::FindIndexPerName( const rtl::OUString& rName ) const -{ - for( sal_uInt16 i=0; i<nCount ; i++ ) - { - ScAutoFormatData* pItem = (ScAutoFormatData*)pItems[i]; - - if (pItem->GetName().equals(rName)) - return i; - } - - return 0; -} - - - - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx index 94dd497dfd65..a211534b0c9f 100644 --- a/sc/source/ui/docshell/docfunc.cxx +++ b/sc/source/ui/docshell/docfunc.cxx @@ -3667,8 +3667,8 @@ sal_Bool ScDocFunc::ChangeIndent( const ScMarkData& rMark, sal_Bool bIncrement, return sal_True; } -sal_Bool ScDocFunc::AutoFormat( const ScRange& rRange, const ScMarkData* pTabMark, - sal_uInt16 nFormatNo, sal_Bool bRecord, sal_Bool bApi ) +bool ScDocFunc::AutoFormat( const ScRange& rRange, const ScMarkData* pTabMark, + sal_uInt16 nFormatNo, bool bRecord, bool bApi ) { ScDocShellModificator aModificator( rDocShell ); @@ -3694,11 +3694,11 @@ sal_Bool ScDocFunc::AutoFormat( const ScRange& rRange, const ScMarkData* pTabMar ScAutoFormat* pAutoFormat = ScGlobal::GetOrCreateAutoFormat(); ScEditableTester aTester( pDoc, nStartCol,nStartRow, nEndCol,nEndRow, aMark ); - if ( nFormatNo < pAutoFormat->GetCount() && aTester.IsEditable() ) + if ( nFormatNo < pAutoFormat->size() && aTester.IsEditable() ) { WaitObject aWait( rDocShell.GetActiveDialogParent() ); - sal_Bool bSize = (*pAutoFormat)[nFormatNo]->GetIncludeWidthHeight(); + bool bSize = pAutoFormat->findByIndex(nFormatNo)->GetIncludeWidthHeight(); SCTAB nTabCount = pDoc->GetTableCount(); ScDocument* pUndoDoc = NULL; diff --git a/sc/source/ui/inc/docfunc.hxx b/sc/source/ui/inc/docfunc.hxx index a339b940d445..63cbc3975f66 100644 --- a/sc/source/ui/inc/docfunc.hxx +++ b/sc/source/ui/inc/docfunc.hxx @@ -151,8 +151,8 @@ public: sal_Bool ClearItems( const ScMarkData& rMark, const sal_uInt16* pWhich, sal_Bool bApi ); sal_Bool ChangeIndent( const ScMarkData& rMark, sal_Bool bIncrement, sal_Bool bApi ); - sal_Bool AutoFormat( const ScRange& rRange, const ScMarkData* pTabMark, - sal_uInt16 nFormatNo, sal_Bool bRecord, sal_Bool bApi ); + bool AutoFormat( const ScRange& rRange, const ScMarkData* pTabMark, + sal_uInt16 nFormatNo, bool bRecord, bool bApi ); sal_Bool EnterMatrix( const ScRange& rRange, const ScMarkData* pTabMark, const ScTokenArray* pTokenArray, diff --git a/sc/source/ui/inc/scuiautofmt.hxx b/sc/source/ui/inc/scuiautofmt.hxx index 654779673ed6..4a3a441bed81 100644 --- a/sc/source/ui/inc/scuiautofmt.hxx +++ b/sc/source/ui/inc/scuiautofmt.hxx @@ -70,8 +70,8 @@ private: ScAutoFormat* pFormat; const ScAutoFormatData* pSelFmtData; sal_uInt16 nIndex; - sal_Bool bCoreDataChanged; - sal_Bool bFmtInserted; + bool bCoreDataChanged; + bool bFmtInserted; void Init (); void UpdateChecks (); diff --git a/sc/source/ui/miscdlgs/scuiautofmt.cxx b/sc/source/ui/miscdlgs/scuiautofmt.cxx index 8f8ef237ffb4..074cbe392185 100644 --- a/sc/source/ui/miscdlgs/scuiautofmt.cxx +++ b/sc/source/ui/miscdlgs/scuiautofmt.cxx @@ -104,7 +104,8 @@ ScAutoFormatDlg::ScAutoFormatDlg( Window* pParent, bFmtInserted ( false ) { Init(); - pWndPreview->NotifyChange( (*pFormat)[0] ); + ScAutoFormat::iterator it = pFormat->begin(); + pWndPreview->NotifyChange(it->second); FreeResource(); } @@ -119,9 +120,6 @@ ScAutoFormatDlg::~ScAutoFormatDlg() void ScAutoFormatDlg::Init() { - sal_uInt16 nCount; - String aEntry; - aLbFormat .SetSelectHdl( LINK( this, ScAutoFormatDlg, SelFmtHdl ) ); aBtnNumFormat.SetClickHdl ( LINK( this, ScAutoFormatDlg, CheckHdl ) ); aBtnBorder .SetClickHdl ( LINK( this, ScAutoFormatDlg, CheckHdl ) ); @@ -145,15 +143,11 @@ void ScAutoFormatDlg::Init() aBtnMore.AddWindow( &aBtnAdjust ); aBtnMore.AddWindow( &aFlFormatting ); - nCount = pFormat->GetCount(); - - for ( sal_uInt16 i = 0; i < nCount; i++ ) - { - aEntry = ((*pFormat)[i])->GetName(); - aLbFormat.InsertEntry( aEntry ); - } + ScAutoFormat::const_iterator it = pFormat->begin(), itEnd = pFormat->end(); + for (; it != itEnd; ++it) + aLbFormat.InsertEntry(it->second->GetName()); - if ( nCount == 1 ) + if (pFormat->size() == 1) aBtnRemove.Disable(); aLbFormat.SelectEntryPos( 0 ); @@ -167,7 +161,7 @@ void ScAutoFormatDlg::Init() { aBtnAdd.Disable(); aBtnRemove.Disable(); - bFmtInserted = sal_True; + bFmtInserted = true; } } @@ -175,7 +169,7 @@ void ScAutoFormatDlg::Init() void ScAutoFormatDlg::UpdateChecks() { - ScAutoFormatData* pData = (*pFormat)[nIndex]; + const ScAutoFormatData* pData = pFormat->findByIndex(nIndex); aBtnNumFormat.Check( pData->GetIncludeValueFormat() ); aBtnBorder .Check( pData->GetIncludeFrame() ); @@ -217,8 +211,8 @@ IMPL_LINK_INLINE_END( ScAutoFormatDlg, DblClkHdl, void *, EMPTYARG ) IMPL_LINK( ScAutoFormatDlg, CheckHdl, Button *, pBtn ) { - ScAutoFormatData* pData = (*pFormat)[nIndex]; - sal_Bool bCheck = ((CheckBox*)pBtn)->IsChecked(); + ScAutoFormatData* pData = pFormat->findByIndex(nIndex); + bool bCheck = ((CheckBox*)pBtn)->IsChecked(); if ( pBtn == &aBtnNumFormat ) pData->SetIncludeValueFormat( bCheck ); @@ -236,7 +230,7 @@ IMPL_LINK( ScAutoFormatDlg, CheckHdl, Button *, pBtn ) if ( !bCoreDataChanged ) { aBtnCancel.SetText( aStrClose ); - bCoreDataChanged = sal_True; + bCoreDataChanged = true; } pWndPreview->NotifyChange( pData ); @@ -253,7 +247,7 @@ IMPL_LINK( ScAutoFormatDlg, AddHdl, void *, EMPTYARG ) String aStrStandard( SfxResId(STR_STANDARD) ); rtl::OUString aFormatName; ScStringInputDlg* pDlg; - sal_Bool bOk = false; + bool bOk = false; while ( !bOk ) { @@ -273,20 +267,21 @@ IMPL_LINK( ScAutoFormatDlg, AddHdl, void *, EMPTYARG ) = new ScAutoFormatData( *pSelFmtData ); pNewData->SetName( aFormatName ); - bFmtInserted = pFormat->Insert( pNewData ); + bFmtInserted = pFormat->insert(pNewData); if ( bFmtInserted ) { - sal_uInt16 nAt = pFormat->IndexOf( pNewData ); - - aLbFormat.InsertEntry( aFormatName, nAt ); + ScAutoFormat::const_iterator it = pFormat->find(pNewData); + ScAutoFormat::const_iterator itBeg = pFormat->begin(); + size_t nPos = std::distance(itBeg, it); + aLbFormat.InsertEntry(aFormatName, nPos); aLbFormat.SelectEntry( aFormatName ); aBtnAdd.Disable(); if ( !bCoreDataChanged ) { aBtnCancel.SetText( aStrClose ); - bCoreDataChanged = sal_True; + bCoreDataChanged = true; } SelFmtHdl( 0 ); @@ -340,10 +335,12 @@ IMPL_LINK( ScAutoFormatDlg, RemoveHdl, void *, EMPTYARG ) if ( !bCoreDataChanged ) { aBtnCancel.SetText( aStrClose ); - bCoreDataChanged = sal_True; + bCoreDataChanged = true; } - pFormat->AtFree( nIndex ); // in der Core loeschen + ScAutoFormat::iterator it = pFormat->begin(); + std::advance(it, nIndex); + pFormat->erase(it); nIndex--; SelFmtHdl( 0 ); @@ -371,57 +368,57 @@ IMPL_LINK( ScAutoFormatDlg, RenameHdl, void *, EMPTYARG ) HID_SC_REN_AFMT_DLG, HID_SC_REN_AFMT_NAME ); if( pDlg->Execute() == RET_OK ) { - sal_Bool bFmtRenamed = false; + bool bFmtRenamed = false; pDlg->GetInputString( aFormatName ); - sal_uInt16 n; if (!aFormatName.isEmpty()) { - for( n = 0; n < pFormat->GetCount(); ++n ) + ScAutoFormat::iterator it = pFormat->begin(), itEnd = pFormat->end(); + for (; it != itEnd; ++it) { - aEntry = (*pFormat)[n]->GetName(); + aEntry = it->second->GetName(); if (aFormatName.equals(aEntry)) break; } - if( n >= pFormat->GetCount() ) + if (it == itEnd) { // Format mit dem Namen noch nicht vorhanden, also // umbenennen aLbFormat.RemoveEntry(nIndex ); - ScAutoFormatData* p=(*pFormat)[ nIndex ]; + const ScAutoFormatData* p = pFormat->findByIndex(nIndex); ScAutoFormatData* pNewData = new ScAutoFormatData(*p); - pFormat->AtFree( nIndex ); + it = pFormat->begin(); + std::advance(it, nIndex); + pFormat->erase(it); pNewData->SetName( aFormatName ); - pFormat->Insert( pNewData); - - sal_uInt16 nCount = pFormat->GetCount(); + pFormat->insert(pNewData); aLbFormat.SetUpdateMode(false); aLbFormat.Clear(); - for ( sal_uInt16 i = 0; i < nCount; i++ ) + for (it = pFormat->begin(); it != itEnd; ++it) { - aEntry = ((*pFormat)[i])->GetName(); + aEntry = it->second->GetName(); aLbFormat.InsertEntry( aEntry ); } - aLbFormat.SetUpdateMode( sal_True); + aLbFormat.SetUpdateMode(true); aLbFormat.SelectEntry( aFormatName); if ( !bCoreDataChanged ) { aBtnCancel.SetText( aStrClose ); - bCoreDataChanged = sal_True; + bCoreDataChanged = true; } SelFmtHdl( 0 ); - bOk = sal_True; - bFmtRenamed = sal_True; + bOk = true; + bFmtRenamed = true; } } if( !bFmtRenamed ) @@ -433,7 +430,7 @@ IMPL_LINK( ScAutoFormatDlg, RenameHdl, void *, EMPTYARG ) } } else - bOk = sal_True; + bOk = true; delete pDlg; } @@ -458,7 +455,8 @@ IMPL_LINK( ScAutoFormatDlg, SelFmtHdl, void *, EMPTYARG ) aBtnRemove.Enable(); } - pWndPreview->NotifyChange( (*pFormat)[nIndex] ); + ScAutoFormatData* p = pFormat->findByIndex(nIndex); + pWndPreview->NotifyChange(p); return 0; } @@ -467,7 +465,8 @@ IMPL_LINK( ScAutoFormatDlg, SelFmtHdl, void *, EMPTYARG ) rtl::OUString ScAutoFormatDlg::GetCurrFormatName() { - return ((*pFormat)[nIndex])->GetName(); + const ScAutoFormatData* p = pFormat->findByIndex(nIndex); + return p ? p->GetName() : rtl::OUString(); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/unoobj/afmtuno.cxx b/sc/source/ui/unoobj/afmtuno.cxx index e29fa2db7442..125a78874320 100644 --- a/sc/source/ui/unoobj/afmtuno.cxx +++ b/sc/source/ui/unoobj/afmtuno.cxx @@ -164,15 +164,16 @@ SC_SIMPLE_SERVICE_INFO( ScAutoFormatsObj, "ScAutoFormatsObj", SCAUTOFORMATSOBJ_S //------------------------------------------------------------------------ -bool lcl_FindAutoFormatIndex( const ScAutoFormat& rFormats, const String& rName, sal_uInt16& rOutIndex ) +bool lcl_FindAutoFormatIndex( const ScAutoFormat& rFormats, const rtl::OUString& rName, sal_uInt16& rOutIndex ) { - sal_uInt16 nCount = rFormats.GetCount(); - for( sal_uInt16 nPos=0; nPos<nCount; nPos++ ) + ScAutoFormat::const_iterator itBeg = rFormats.begin(), itEnd = rFormats.end(); + for (ScAutoFormat::const_iterator it = itBeg; it != itEnd; ++it) { - ScAutoFormatData* pEntry = rFormats[nPos]; + const ScAutoFormatData* pEntry = it->second; const rtl::OUString& aEntryName = pEntry->GetName(); if ( aEntryName.equals(rName) ) { + size_t nPos = std::distance(itBeg, it); rOutIndex = nPos; return true; } @@ -220,7 +221,7 @@ uno::Sequence<rtl::OUString> ScAutoFormatsObj::getSupportedServiceNames_Static() ScAutoFormatObj* ScAutoFormatsObj::GetObjectByIndex_Impl(sal_uInt16 nIndex) { - if (nIndex < ScGlobal::GetOrCreateAutoFormat()->GetCount()) + if (nIndex < ScGlobal::GetOrCreateAutoFormat()->size()) return new ScAutoFormatObj(nIndex); return NULL; // falscher Index @@ -260,7 +261,7 @@ void SAL_CALL ScAutoFormatsObj::insertByName( const rtl::OUString& aName, const ScAutoFormatData* pNew = new ScAutoFormatData(); pNew->SetName( aNameStr ); - if (pFormats->Insert( pNew )) + if (pFormats->insert(pNew)) { //! Notify fuer andere Objekte pFormats->Save(); // sofort speichern @@ -274,7 +275,6 @@ void SAL_CALL ScAutoFormatsObj::insertByName( const rtl::OUString& aName, const } else { - delete pNew; OSL_FAIL("AutoFormat konnte nicht eingefuegt werden"); throw uno::RuntimeException(); } @@ -311,10 +311,10 @@ void SAL_CALL ScAutoFormatsObj::removeByName( const rtl::OUString& aName ) String aNameStr(aName); ScAutoFormat* pFormats = ScGlobal::GetOrCreateAutoFormat(); - sal_uInt16 nIndex; - if (lcl_FindAutoFormatIndex( *pFormats, aNameStr, nIndex )) + ScAutoFormat::iterator it = pFormats->find(aName); + if (it != pFormats->end()) { - pFormats->AtFree( nIndex ); + pFormats->erase(it); //! Notify fuer andere Objekte pFormats->Save(); // sofort speichern @@ -339,7 +339,7 @@ uno::Reference<container::XEnumeration> SAL_CALL ScAutoFormatsObj::createEnumera sal_Int32 SAL_CALL ScAutoFormatsObj::getCount() throw(uno::RuntimeException) { SolarMutexGuard aGuard; - return ScGlobal::GetOrCreateAutoFormat()->GetCount(); + return ScGlobal::GetOrCreateAutoFormat()->size(); } uno::Any SAL_CALL ScAutoFormatsObj::getByIndex( sal_Int32 nIndex ) @@ -384,12 +384,12 @@ uno::Sequence<rtl::OUString> SAL_CALL ScAutoFormatsObj::getElementNames() SolarMutexGuard aGuard; ScAutoFormat* pFormats = ScGlobal::GetOrCreateAutoFormat(); String aName; - sal_uInt16 nCount = pFormats->GetCount(); - uno::Sequence<rtl::OUString> aSeq(nCount); + uno::Sequence<rtl::OUString> aSeq(pFormats->size()); rtl::OUString* pAry = aSeq.getArray(); - for (sal_uInt16 i=0; i<nCount; i++) + ScAutoFormat::const_iterator it = pFormats->begin(), itEnd = pFormats->end(); + for (size_t i = 0; it != itEnd; ++it, ++i) { - pAry[i] = (*pFormats)[i]->GetName(); + pAry[i] = it->second->GetName(); } return aSeq; } @@ -536,8 +536,8 @@ rtl::OUString SAL_CALL ScAutoFormatObj::getName() throw(uno::RuntimeException) { SolarMutexGuard aGuard; ScAutoFormat* pFormats = ScGlobal::GetOrCreateAutoFormat(); - if (IsInserted() && nFormatIndex < pFormats->GetCount()) - return (*pFormats)[nFormatIndex]->GetName(); + if (IsInserted() && nFormatIndex < pFormats->size()) + return pFormats->findByIndex(nFormatIndex)->GetName(); return rtl::OUString(); } @@ -550,26 +550,29 @@ void SAL_CALL ScAutoFormatObj::setName( const rtl::OUString& aNewName ) ScAutoFormat* pFormats = ScGlobal::GetOrCreateAutoFormat(); sal_uInt16 nDummy; - if (IsInserted() && nFormatIndex < pFormats->GetCount() && - !lcl_FindAutoFormatIndex( *pFormats, aNewString, nDummy )) + if (IsInserted() && nFormatIndex < pFormats->size() && + !lcl_FindAutoFormatIndex( *pFormats, aNewName, nDummy )) { - ScAutoFormatData* pData = (*pFormats)[nFormatIndex]; + ScAutoFormat::iterator it = pFormats->begin(); + std::advance(it, nFormatIndex); + ScAutoFormatData* pData = it->second; OSL_ENSURE(pData,"AutoFormat Daten nicht da"); ScAutoFormatData* pNew = new ScAutoFormatData(*pData); pNew->SetName( aNewString ); - pFormats->AtFree( nFormatIndex ); - if (pFormats->Insert( pNew )) + pFormats->erase(it); + if (pFormats->insert(pNew)) { - nFormatIndex = pFormats->IndexOf( pNew ); // ist evtl. anders einsortiert... + it = pFormats->find(pNew); + ScAutoFormat::iterator itBeg = pFormats->begin(); + nFormatIndex = std::distance(itBeg, it); //! Notify fuer andere Objekte - pFormats->SetSaveLater(sal_True); + pFormats->SetSaveLater(true); } else { - delete pNew; OSL_FAIL("AutoFormat konnte nicht eingefuegt werden"); nFormatIndex = 0; //! alter Index ist ungueltig } @@ -599,9 +602,9 @@ void SAL_CALL ScAutoFormatObj::setPropertyValue( { SolarMutexGuard aGuard; ScAutoFormat* pFormats = ScGlobal::GetOrCreateAutoFormat(); - if (IsInserted() && nFormatIndex < pFormats->GetCount()) + if (IsInserted() && nFormatIndex < pFormats->size()) { - ScAutoFormatData* pData = (*pFormats)[nFormatIndex]; + ScAutoFormatData* pData = pFormats->findByIndex(nFormatIndex); OSL_ENSURE(pData,"AutoFormat Daten nicht da"); String aPropString(aPropertyName); @@ -634,9 +637,9 @@ uno::Any SAL_CALL ScAutoFormatObj::getPropertyValue( const rtl::OUString& aPrope uno::Any aAny; ScAutoFormat* pFormats = ScGlobal::GetOrCreateAutoFormat(); - if (IsInserted() && nFormatIndex < pFormats->GetCount()) + if (IsInserted() && nFormatIndex < pFormats->size()) { - ScAutoFormatData* pData = (*pFormats)[nFormatIndex]; + ScAutoFormatData* pData = pFormats->findByIndex(nFormatIndex); OSL_ENSURE(pData,"AutoFormat Daten nicht da"); sal_Bool bValue; @@ -707,9 +710,9 @@ void SAL_CALL ScAutoFormatFieldObj::setPropertyValue( const SfxItemPropertySimpleEntry* pEntry = aPropSet.getPropertyMap().getByName( aPropertyName ); - if ( pEntry && pEntry->nWID && nFormatIndex < pFormats->GetCount() ) + if ( pEntry && pEntry->nWID && nFormatIndex < pFormats->size() ) { - ScAutoFormatData* pData = (*pFormats)[nFormatIndex]; + ScAutoFormatData* pData = pFormats->findByIndex(nFormatIndex); if ( IsScItemWid( pEntry->nWID ) ) { @@ -797,9 +800,9 @@ uno::Any SAL_CALL ScAutoFormatFieldObj::getPropertyValue( const rtl::OUString& a const SfxItemPropertySimpleEntry* pEntry = aPropSet.getPropertyMap().getByName( aPropertyName ); - if ( pEntry && pEntry->nWID && nFormatIndex < pFormats->GetCount() ) + if ( pEntry && pEntry->nWID && nFormatIndex < pFormats->size() ) { - const ScAutoFormatData* pData = (*pFormats)[nFormatIndex]; + const ScAutoFormatData* pData = pFormats->findByIndex(nFormatIndex); if ( IsScItemWid( pEntry->nWID ) ) { diff --git a/sc/source/ui/unoobj/cellsuno.cxx b/sc/source/ui/unoobj/cellsuno.cxx index 65f2dc49c234..de344e1b151f 100644 --- a/sc/source/ui/unoobj/cellsuno.cxx +++ b/sc/source/ui/unoobj/cellsuno.cxx @@ -5484,17 +5484,13 @@ void SAL_CALL ScCellRangeObj::autoFormat( const rtl::OUString& aName ) if ( pDocSh ) { ScAutoFormat* pAutoFormat = ScGlobal::GetOrCreateAutoFormat(); - sal_uInt16 nCount = pAutoFormat->GetCount(); - sal_uInt16 nIndex; - for (nIndex=0; nIndex<nCount; nIndex++) - { - if ((*pAutoFormat)[nIndex]->GetName().equals(aName)) //! Case-insensitiv ??? - break; - } - if (nIndex<nCount) + ScAutoFormat::const_iterator it = pAutoFormat->find(aName); + if (it != pAutoFormat->end()) { + ScAutoFormat::const_iterator itBeg = pAutoFormat->begin(); + size_t nIndex = std::distance(itBeg, it); ScDocFunc aFunc(*pDocSh); - aFunc.AutoFormat( aRange, NULL, nIndex, sal_True, sal_True ); + aFunc.AutoFormat(aRange, NULL, nIndex, true, true); } else throw lang::IllegalArgumentException(); diff --git a/sc/source/ui/view/cellsh3.cxx b/sc/source/ui/view/cellsh3.cxx index a9950c8213ca..f90c7c6b21c7 100644 --- a/sc/source/ui/view/cellsh3.cxx +++ b/sc/source/ui/view/cellsh3.cxx @@ -817,7 +817,9 @@ void ScCellShell::Execute( SfxRequest& rReq ) { const SfxStringItem& rNameItem = (const SfxStringItem&)pReqArgs->Get( SID_AUTOFORMAT ); ScAutoFormat* pFormat = ScGlobal::GetOrCreateAutoFormat(); - sal_uInt16 nIndex = pFormat->FindIndexPerName( rNameItem.GetValue() ); + ScAutoFormat::const_iterator it = pFormat->find(rNameItem.GetValue()); + ScAutoFormat::const_iterator itBeg = pFormat->begin(); + size_t nIndex = std::distance(itBeg, it); pTabViewShell->AutoFormat( nIndex ); |