summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKurt Zenker <kz@openoffice.org>2009-04-01 13:09:58 +0000
committerKurt Zenker <kz@openoffice.org>2009-04-01 13:09:58 +0000
commitbe6a890a0426be2bbf0639b3fae7ebd017ceaab2 (patch)
treedfa6d475cde07346e10dc9e9aede89e8a15dc5bd
parent25c8907106a82f55c13859497ebce320ec7f87a5 (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.hxx1
-rw-r--r--framework/source/classes/fwktabwindow.cxx33
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;
+ }
}
// -----------------------------------------------------------------------