diff options
author | Kurt Zenker <kz@openoffice.org> | 2009-04-01 13:09:58 +0000 |
---|---|---|
committer | Kurt Zenker <kz@openoffice.org> | 2009-04-01 13:09:58 +0000 |
commit | be6a890a0426be2bbf0639b3fae7ebd017ceaab2 (patch) | |
tree | dfa6d475cde07346e10dc9e9aede89e8a15dc5bd | |
parent | 25c8907106a82f55c13859497ebce320ec7f87a5 (diff) |
CWS-TOOLING: integrate CWS fwk107
2009-03-31 14:56:40 +0200 cd r270283 : #i100707# Correctly implement removeTab() method which destroys the embedded window
-rw-r--r-- | framework/inc/classes/fwktabwindow.hxx | 1 | ||||
-rw-r--r-- | framework/source/classes/fwktabwindow.cxx | 33 |
2 files changed, 32 insertions, 2 deletions
diff --git a/framework/inc/classes/fwktabwindow.hxx b/framework/inc/classes/fwktabwindow.hxx index b8c0321b7e..8b1fd5e9a4 100644 --- a/framework/inc/classes/fwktabwindow.hxx +++ b/framework/inc/classes/fwktabwindow.hxx @@ -117,6 +117,7 @@ private: void ClearEntryList(); TabEntry* FindEntry( sal_Int32 nIndex ) const; + bool RemoveEntry( sal_Int32 nIndex ); DECL_DLLPRIVATE_LINK( ActivatePageHdl, TabControl * ); DECL_DLLPRIVATE_LINK( DeactivatePageHdl, TabControl * ); diff --git a/framework/source/classes/fwktabwindow.cxx b/framework/source/classes/fwktabwindow.cxx index 5515eae642..a294edf2bc 100644 --- a/framework/source/classes/fwktabwindow.cxx +++ b/framework/source/classes/fwktabwindow.cxx @@ -250,6 +250,28 @@ void FwkTabWindow::ClearEntryList() // ----------------------------------------------------------------------- +bool FwkTabWindow::RemoveEntry( sal_Int32 nIndex ) +{ + TabEntryList::iterator pIt; + for ( pIt = m_TabList.begin(); + pIt != m_TabList.end(); + ++pIt ) + { + if ( (*pIt)->m_nIndex == nIndex ) + break; + } + + // remove entry from vector + if ( pIt != m_TabList.end()) + { + m_TabList.erase(pIt); + return true; + } + else + return false; +} + +// ----------------------------------------------------------------------- TabEntry* FwkTabWindow::FindEntry( sal_Int32 nIndex ) const { TabEntry* pEntry = NULL; @@ -281,9 +303,10 @@ IMPL_LINK( FwkTabWindow, ActivatePageHdl, TabControl *, EMPTYARG ) if ( pEntry ) { pTabPage = new FwkTabPage( &m_aTabCtrl, pEntry->m_sPageURL, pEntry->m_xEventHdl, m_xWinProvider ); + pEntry->m_pPage = pTabPage; + m_aTabCtrl.SetTabPage( nId, pTabPage ); pTabPage->Show(); pTabPage->ActivatePage(); - m_aTabCtrl.SetTabPage( nId, pTabPage ); } } else { pTabPage->ActivatePage(); @@ -371,7 +394,13 @@ void FwkTabWindow::ActivatePage( sal_Int32 nIndex ) void FwkTabWindow::RemovePage( sal_Int32 nIndex ) { - m_aTabCtrl.RemovePage( static_cast< USHORT >( nIndex ) ); + TabEntry* pEntry = FindEntry(nIndex); + if ( pEntry ) + { + m_aTabCtrl.RemovePage( static_cast< USHORT >( nIndex ) ); + if (RemoveEntry(nIndex)) + delete pEntry; + } } // ----------------------------------------------------------------------- |