diff options
Diffstat (limited to 'toolkit')
-rw-r--r-- | toolkit/inc/toolkit/controls/stdtabcontrollermodel.hxx | 4 | ||||
-rw-r--r-- | toolkit/source/controls/stdtabcontroller.cxx | 20 |
2 files changed, 14 insertions, 10 deletions
diff --git a/toolkit/inc/toolkit/controls/stdtabcontrollermodel.hxx b/toolkit/inc/toolkit/controls/stdtabcontrollermodel.hxx index 436a8d1d0361..2393aa0de0b4 100644 --- a/toolkit/inc/toolkit/controls/stdtabcontrollermodel.hxx +++ b/toolkit/inc/toolkit/controls/stdtabcontrollermodel.hxx @@ -46,7 +46,6 @@ #include <vector> struct UnoControlModelEntry; - typedef ::std::vector< UnoControlModelEntry* > UnoControlModelEntryListBase; class UnoControlModelEntryList @@ -80,14 +79,13 @@ struct UnoControlModelEntry }; }; -// Keine Referenz halten, nur temporaer fuer AutoTabOrder struct ComponentEntry { ::com::sun::star::awt::XWindow* pComponent; Point aPos; }; -DECLARE_LIST( ComponentEntryList, ComponentEntry* ) +typedef ::std::vector< ComponentEntry* > ComponentEntryList; #define CONTROLPOS_NOTFOUND 0xFFFFFFFF diff --git a/toolkit/source/controls/stdtabcontroller.cxx b/toolkit/source/controls/stdtabcontroller.cxx index 47cb26e89453..40d0eb25836a 100644 --- a/toolkit/source/controls/stdtabcontroller.cxx +++ b/toolkit/source/controls/stdtabcontroller.cxx @@ -263,7 +263,7 @@ void StdTabController::autoTabOrder( ) throw(RuntimeException) Reference< XWindow > * pComponents = aCompSeq.getArray(); ComponentEntryList aCtrls; - sal_uInt32 n; + size_t n; for ( n = 0; n < nCtrls; n++ ) { XWindow* pC = (XWindow*)pComponents[n].get(); @@ -274,31 +274,37 @@ void StdTabController::autoTabOrder( ) throw(RuntimeException) pE->aPos.Y() = aPosSize.Y; sal_uInt16 nPos; - for ( nPos = 0; nPos < aCtrls.Count(); nPos++ ) + for ( nPos = 0; nPos < aCtrls.size(); nPos++ ) { - ComponentEntry* pEntry = aCtrls.GetObject( nPos ); + ComponentEntry* pEntry = aCtrls[ nPos ]; if ( pEntry->aPos.Y() >= pE->aPos.Y() ) { while ( pEntry && ( pEntry->aPos.Y() == pE->aPos.Y() ) && ( pEntry->aPos.X() < pE->aPos.X() ) ) { - pEntry = aCtrls.GetObject( ++nPos ); + pEntry = aCtrls[ ++nPos ]; } break; } } - aCtrls.Insert( pE, nPos ); + if ( nPos < aCtrls.size() ) { + ComponentEntryList::iterator it = aCtrls.begin(); + ::std::advance( it, nPos ); + aCtrls.insert( it, pE ); + } else { + aCtrls.push_back( pE ); + } } Sequence< Reference< XControlModel > > aNewSeq( nCtrls ); for ( n = 0; n < nCtrls; n++ ) { - ComponentEntry* pE = aCtrls.GetObject( n ); + ComponentEntry* pE = aCtrls[ n ]; Reference< XControl > xUC( pE->pComponent, UNO_QUERY ); aNewSeq.getArray()[n] = xUC->getModel(); delete pE; } - aCtrls.Clear(); + aCtrls.clear(); mxModel->setControlModels( aNewSeq ); } |