Kaydet (Commit) 79cb2678 authored tarafından Noel Grandin's avatar Noel Grandin

no need to switch models in the SvTreeListBox

since we're replacing it completely anyhow.

which means we can remove DisconnectFromModel

Change-Id: I2f31d93eb95a641f3364d715111e70817c7e5087
Reviewed-on: https://gerrit.libreoffice.org/56849
Tested-by: Jenkins
Reviewed-by: 's avatarNoel Grandin <noel.grandin@collabora.co.uk>
üst e119194a
...@@ -50,18 +50,15 @@ DBTreeView::~DBTreeView() ...@@ -50,18 +50,15 @@ DBTreeView::~DBTreeView()
void DBTreeView::dispose() void DBTreeView::dispose()
{ {
if (m_pTreeListBox)
{
if (m_pTreeListBox->GetModel())
{
m_pTreeListBox->GetModel()->RemoveView(m_pTreeListBox);
m_pTreeListBox->DisconnectFromModel();
}
}
m_pTreeListBox.disposeAndClear(); m_pTreeListBox.disposeAndClear();
vcl::Window::dispose(); vcl::Window::dispose();
} }
SvTreeList* DBTreeView::GetTreeModel()
{
return m_pTreeListBox->GetModel();
}
void DBTreeView::SetPreExpandHandler(const Link<SvTreeListEntry*,bool>& _rHdl) void DBTreeView::SetPreExpandHandler(const Link<SvTreeListEntry*,bool>& _rHdl)
{ {
m_pTreeListBox->SetPreExpandHandler(_rHdl); m_pTreeListBox->SetPreExpandHandler(_rHdl);
...@@ -78,13 +75,6 @@ void DBTreeView::Resize() ...@@ -78,13 +75,6 @@ void DBTreeView::Resize()
m_pTreeListBox->SetPosSizePixel(Point(0,0),GetOutputSizePixel()); m_pTreeListBox->SetPosSizePixel(Point(0,0),GetOutputSizePixel());
} }
void DBTreeView::setModel(SvTreeList* _pTreeModel)
{
if (_pTreeModel)
_pTreeModel->InsertView(m_pTreeListBox);
m_pTreeListBox->SetModel(_pTreeModel);
}
void DBTreeView::setSelChangeHdl( const Link<LinkParamNone*,void>& _rHdl ) void DBTreeView::setSelChangeHdl( const Link<LinkParamNone*,void>& _rHdl )
{ {
m_pTreeListBox->SetSelChangeHdl( _rHdl ); m_pTreeListBox->SetSelChangeHdl( _rHdl );
......
...@@ -52,7 +52,7 @@ namespace dbaui ...@@ -52,7 +52,7 @@ namespace dbaui
void setCopyHandler(const Link<LinkParamNone*,void>& _rHdl); void setCopyHandler(const Link<LinkParamNone*,void>& _rHdl);
void setModel(SvTreeList* _pTreeModel); SvTreeList* GetTreeModel();
void setSelChangeHdl(const Link<LinkParamNone*,void>& _rHdl); void setSelChangeHdl(const Link<LinkParamNone*,void>& _rHdl);
DBTreeListBox& getListBox() const { return *m_pTreeListBox; } DBTreeListBox& getListBox() const { return *m_pTreeListBox; }
......
...@@ -109,7 +109,7 @@ void SbaTableQueryBrowser::select(SvTreeListEntry* _pEntry, bool _bSelect) ...@@ -109,7 +109,7 @@ void SbaTableQueryBrowser::select(SvTreeListEntry* _pEntry, bool _bSelect)
if (pTextItem) if (pTextItem)
{ {
static_cast<OBoldListboxString*>(pTextItem)->emphasize(_bSelect); static_cast<OBoldListboxString*>(pTextItem)->emphasize(_bSelect);
m_pTreeModel->InvalidateEntry(_pEntry); m_pTreeView->GetTreeModel()->InvalidateEntry(_pEntry);
} }
else { else {
OSL_FAIL("SbaTableQueryBrowser::select: invalid entry!"); OSL_FAIL("SbaTableQueryBrowser::select: invalid entry!");
...@@ -121,7 +121,7 @@ void SbaTableQueryBrowser::selectPath(SvTreeListEntry* _pEntry, bool _bSelect) ...@@ -121,7 +121,7 @@ void SbaTableQueryBrowser::selectPath(SvTreeListEntry* _pEntry, bool _bSelect)
while (_pEntry) while (_pEntry)
{ {
select(_pEntry, _bSelect); select(_pEntry, _bSelect);
_pEntry = m_pTreeModel->GetParent(_pEntry); _pEntry = m_pTreeView->GetTreeModel()->GetParent(_pEntry);
} }
} }
...@@ -197,14 +197,15 @@ void SbaTableQueryBrowser::notifyHiContrastChanged() ...@@ -197,14 +197,15 @@ void SbaTableQueryBrowser::notifyHiContrastChanged()
{ {
if ( m_pTreeView ) if ( m_pTreeView )
{ {
auto pTreeModel = m_pTreeView->GetTreeModel();
// change all bitmap entries // change all bitmap entries
SvTreeListEntry* pEntryLoop = m_pTreeModel->First(); SvTreeListEntry* pEntryLoop = pTreeModel->First();
while ( pEntryLoop ) while ( pEntryLoop )
{ {
DBTreeListUserData* pData = static_cast<DBTreeListUserData*>(pEntryLoop->GetUserData()); DBTreeListUserData* pData = static_cast<DBTreeListUserData*>(pEntryLoop->GetUserData());
if ( !pData ) if ( !pData )
{ {
pEntryLoop = m_pTreeModel->Next(pEntryLoop); pEntryLoop = pTreeModel->Next(pEntryLoop);
continue; continue;
} }
...@@ -245,7 +246,7 @@ void SbaTableQueryBrowser::notifyHiContrastChanged() ...@@ -245,7 +246,7 @@ void SbaTableQueryBrowser::notifyHiContrastChanged()
break; break;
} }
pEntryLoop = m_pTreeModel->Next(pEntryLoop); pEntryLoop = pTreeModel->Next(pEntryLoop);
} }
} }
} }
......
...@@ -233,10 +233,11 @@ namespace dbaui ...@@ -233,10 +233,11 @@ namespace dbaui
} }
void SbaTableQueryBrowser::clearTreeModel() void SbaTableQueryBrowser::clearTreeModel()
{ {
if (m_pTreeModel) if (m_pTreeView)
{ {
auto pTreeModel = m_pTreeView->GetTreeModel();
// clear the user data of the tree model // clear the user data of the tree model
SvTreeListEntry* pEntryLoop = m_pTreeModel->First(); SvTreeListEntry* pEntryLoop = pTreeModel->First();
while (pEntryLoop) while (pEntryLoop)
{ {
DBTreeListUserData* pData = static_cast<DBTreeListUserData*>(pEntryLoop->GetUserData()); DBTreeListUserData* pData = static_cast<DBTreeListUserData*>(pEntryLoop->GetUserData());
...@@ -256,7 +257,7 @@ namespace dbaui ...@@ -256,7 +257,7 @@ namespace dbaui
delete pData; delete pData;
} }
pEntryLoop = m_pTreeModel->Next(pEntryLoop); pEntryLoop = pTreeModel->Next(pEntryLoop);
} }
} }
m_pCurrentlyDisplayed = nullptr; m_pCurrentlyDisplayed = nullptr;
......
...@@ -213,7 +213,6 @@ SbaTableQueryBrowser::SbaTableQueryBrowser(const Reference< XComponentContext >& ...@@ -213,7 +213,6 @@ SbaTableQueryBrowser::SbaTableQueryBrowser(const Reference< XComponentContext >&
,m_aTableCopyHelper(this) ,m_aTableCopyHelper(this)
,m_pTreeView(nullptr) ,m_pTreeView(nullptr)
,m_pSplitter(nullptr) ,m_pSplitter(nullptr)
,m_pTreeModel(nullptr)
,m_pCurrentlyDisplayed(nullptr) ,m_pCurrentlyDisplayed(nullptr)
,m_nAsyncDrop(nullptr) ,m_nAsyncDrop(nullptr)
,m_bQueryEscapeProcessing( false ) ,m_bQueryEscapeProcessing( false )
...@@ -286,16 +285,12 @@ void SAL_CALL SbaTableQueryBrowser::disposing() ...@@ -286,16 +285,12 @@ void SAL_CALL SbaTableQueryBrowser::disposing()
m_aSelectionListeners.disposeAndClear(aEvt); m_aSelectionListeners.disposeAndClear(aEvt);
m_aContextMenuInterceptors.disposeAndClear(aEvt); m_aContextMenuInterceptors.disposeAndClear(aEvt);
// reset the content's tree view: it holds a reference to our model which is to be deleted immediately,
// and it will live longer than we do.
if (getBrowserView()) if (getBrowserView())
getBrowserView()->setTreeView(nullptr);
clearTreeModel();
// clear the tree model
{ {
std::unique_ptr<SvTreeList> aTemp(m_pTreeModel); // Need to do some cleaup of the data pointed to the tree view entries before we remove the treeview
m_pTreeModel = nullptr; clearTreeModel();
m_pTreeView = nullptr;
getBrowserView()->setTreeView(nullptr);
} }
// remove ourself as status listener // remove ourself as status listener
...@@ -364,10 +359,9 @@ bool SbaTableQueryBrowser::Construct(vcl::Window* pParent) ...@@ -364,10 +359,9 @@ bool SbaTableQueryBrowser::Construct(vcl::Window* pParent)
getBrowserView()->setTreeView(m_pTreeView); getBrowserView()->setTreeView(m_pTreeView);
// fill view with data // fill view with data
m_pTreeModel = new SvTreeList; auto pTreeModel = m_pTreeView->GetTreeModel();
m_pTreeModel->SetSortMode(SortAscending); pTreeModel->SetSortMode(SortAscending);
m_pTreeModel->SetCompareHdl(LINK(this, SbaTableQueryBrowser, OnTreeEntryCompare)); pTreeModel->SetCompareHdl(LINK(this, SbaTableQueryBrowser, OnTreeEntryCompare));
m_pTreeView->setModel(m_pTreeModel);
m_pTreeView->setSelChangeHdl( LINK( this, SbaTableQueryBrowser, OnSelectionChange ) ); m_pTreeView->setSelChangeHdl( LINK( this, SbaTableQueryBrowser, OnSelectionChange ) );
// TODO // TODO
...@@ -2455,7 +2449,7 @@ SvTreeListEntry* SbaTableQueryBrowser::implGetConnectionEntry(SvTreeListEntry* _ ...@@ -2455,7 +2449,7 @@ SvTreeListEntry* SbaTableQueryBrowser::implGetConnectionEntry(SvTreeListEntry* _
DBTreeListUserData* pEntryData = static_cast< DBTreeListUserData* >( pCurrentEntry->GetUserData() ); DBTreeListUserData* pEntryData = static_cast< DBTreeListUserData* >( pCurrentEntry->GetUserData() );
while(pEntryData->eType != etDatasource ) while(pEntryData->eType != etDatasource )
{ {
pCurrentEntry = m_pTreeModel->GetParent(pCurrentEntry); pCurrentEntry = m_pTreeView->GetTreeModel()->GetParent(pCurrentEntry);
pEntryData = static_cast< DBTreeListUserData* >( pCurrentEntry->GetUserData() ); pEntryData = static_cast< DBTreeListUserData* >( pCurrentEntry->GetUserData() );
} }
return pCurrentEntry; return pCurrentEntry;
...@@ -2477,11 +2471,11 @@ bool SbaTableQueryBrowser::implSelect( SvTreeListEntry* _pEntry ) ...@@ -2477,11 +2471,11 @@ bool SbaTableQueryBrowser::implSelect( SvTreeListEntry* _pEntry )
return false; return false;
} }
OSL_ENSURE(m_pTreeModel->HasParent(_pEntry), "SbaTableQueryBrowser::implSelect: invalid entry (1)!"); OSL_ENSURE(m_pTreeView->GetTreeModel()->HasParent(_pEntry), "SbaTableQueryBrowser::implSelect: invalid entry (1)!");
OSL_ENSURE(m_pTreeModel->HasParent(m_pTreeModel->GetParent(_pEntry)), "SbaTableQueryBrowser::implSelect: invalid entry (2)!"); OSL_ENSURE(m_pTreeView->GetTreeModel()->HasParent(m_pTreeView->GetTreeModel()->GetParent(_pEntry)), "SbaTableQueryBrowser::implSelect: invalid entry (2)!");
// get the entry for the tables or queries // get the entry for the tables or queries
SvTreeListEntry* pContainer = m_pTreeModel->GetParent(_pEntry); SvTreeListEntry* pContainer = m_pTreeView->GetTreeModel()->GetParent(_pEntry);
DBTreeListUserData* pContainerData = static_cast<DBTreeListUserData*>(pContainer->GetUserData()); DBTreeListUserData* pContainerData = static_cast<DBTreeListUserData*>(pContainer->GetUserData());
// get the entry for the datasource // get the entry for the datasource
...@@ -2506,13 +2500,13 @@ bool SbaTableQueryBrowser::implSelect( SvTreeListEntry* _pEntry ) ...@@ -2506,13 +2500,13 @@ bool SbaTableQueryBrowser::implSelect( SvTreeListEntry* _pEntry )
if ( etQueryContainer == pContainerData->eType ) if ( etQueryContainer == pContainerData->eType )
{ {
SvTreeListEntry* pTemp = pContainer; SvTreeListEntry* pTemp = pContainer;
while( m_pTreeModel->GetParent(pTemp) != pConnection ) while( m_pTreeView->GetTreeModel()->GetParent(pTemp) != pConnection )
{ {
sNameBuffer.insert(0,'/'); sNameBuffer.insert(0,'/');
pString = static_cast<SvLBoxString*>(pTemp->GetFirstItem(SvLBoxItemType::String)); pString = static_cast<SvLBoxString*>(pTemp->GetFirstItem(SvLBoxItemType::String));
OSL_ENSURE(pString,"There must be a string item!"); OSL_ENSURE(pString,"There must be a string item!");
sNameBuffer.insert(0,pString->GetText()); sNameBuffer.insert(0,pString->GetText());
pTemp = m_pTreeModel->GetParent(pTemp); pTemp = m_pTreeView->GetTreeModel()->GetParent(pTemp);
} }
} }
OUString aName = sNameBuffer.makeStringAndClear(); OUString aName = sNameBuffer.makeStringAndClear();
...@@ -2773,12 +2767,12 @@ void SAL_CALL SbaTableQueryBrowser::elementRemoved( const ContainerEvent& _rEven ...@@ -2773,12 +2767,12 @@ void SAL_CALL SbaTableQueryBrowser::elementRemoved( const ContainerEvent& _rEven
pTemp->SetUserData(nullptr); pTemp->SetUserData(nullptr);
delete pData; delete pData;
// the data could be null because we have a table which isn't correct // the data could be null because we have a table which isn't correct
m_pTreeModel->Remove(pTemp); m_pTreeView->GetTreeModel()->Remove(pTemp);
} }
else else
{ {
// remove the entry from the model // remove the entry from the model
SvTreeListEntry* pChild = m_pTreeModel->FirstChild(pContainer); SvTreeListEntry* pChild = m_pTreeView->GetTreeModel()->FirstChild(pContainer);
while(pChild) while(pChild)
{ {
if (m_pTreeView->getListBox().GetEntryText(pChild) == aName) if (m_pTreeView->getListBox().GetEntryText(pChild) == aName)
...@@ -2786,7 +2780,7 @@ void SAL_CALL SbaTableQueryBrowser::elementRemoved( const ContainerEvent& _rEven ...@@ -2786,7 +2780,7 @@ void SAL_CALL SbaTableQueryBrowser::elementRemoved( const ContainerEvent& _rEven
DBTreeListUserData* pData = static_cast<DBTreeListUserData*>(pChild->GetUserData()); DBTreeListUserData* pData = static_cast<DBTreeListUserData*>(pChild->GetUserData());
pChild->SetUserData(nullptr); pChild->SetUserData(nullptr);
delete pData; delete pData;
m_pTreeModel->Remove(pChild); m_pTreeView->GetTreeModel()->Remove(pChild);
break; break;
} }
pChild = pChild->NextSibling(); pChild = pChild->NextSibling();
...@@ -2834,7 +2828,7 @@ void SAL_CALL SbaTableQueryBrowser::elementReplaced( const ContainerEvent& _rEve ...@@ -2834,7 +2828,7 @@ void SAL_CALL SbaTableQueryBrowser::elementReplaced( const ContainerEvent& _rEve
else else
{ {
// find the entry for this name // find the entry for this name
SvTreeListEntry* pChild = m_pTreeModel->FirstChild(pContainer); SvTreeListEntry* pChild = m_pTreeView->GetTreeModel()->FirstChild(pContainer);
while(pChild) while(pChild)
{ {
if (m_pTreeView->getListBox().GetEntryText(pChild) == aName) if (m_pTreeView->getListBox().GetEntryText(pChild) == aName)
...@@ -2921,9 +2915,9 @@ void SbaTableQueryBrowser::closeConnection(SvTreeListEntry* _pDSEntry, bool _bDi ...@@ -2921,9 +2915,9 @@ void SbaTableQueryBrowser::closeConnection(SvTreeListEntry* _pDSEntry, bool _bDi
unloadAndCleanup(_bDisposeConnection); unloadAndCleanup(_bDisposeConnection);
// collapse the query/table container // collapse the query/table container
for (SvTreeListEntry* pContainers = m_pTreeModel->FirstChild(_pDSEntry); pContainers; pContainers = pContainers->NextSibling()) for (SvTreeListEntry* pContainers = m_pTreeView->GetTreeModel()->FirstChild(_pDSEntry); pContainers; pContainers = pContainers->NextSibling())
{ {
SvTreeListEntry* pElements = m_pTreeModel->FirstChild(pContainers); SvTreeListEntry* pElements = m_pTreeView->GetTreeModel()->FirstChild(pContainers);
if ( pElements ) if ( pElements )
m_pTreeView->getListBox().Collapse(pContainers); m_pTreeView->getListBox().Collapse(pContainers);
m_pTreeView->getListBox().EnableExpandHandler(pContainers); m_pTreeView->getListBox().EnableExpandHandler(pContainers);
...@@ -2935,7 +2929,7 @@ void SbaTableQueryBrowser::closeConnection(SvTreeListEntry* _pDSEntry, bool _bDi ...@@ -2935,7 +2929,7 @@ void SbaTableQueryBrowser::closeConnection(SvTreeListEntry* _pDSEntry, bool _bDi
DBTreeListUserData* pData = static_cast<DBTreeListUserData*>(pRemove->GetUserData()); DBTreeListUserData* pData = static_cast<DBTreeListUserData*>(pRemove->GetUserData());
pRemove->SetUserData(nullptr); pRemove->SetUserData(nullptr);
delete pData; delete pData;
m_pTreeModel->Remove(pRemove); m_pTreeView->GetTreeModel()->Remove(pRemove);
} }
} }
// collapse the entry itself // collapse the entry itself
...@@ -3273,7 +3267,7 @@ bool SbaTableQueryBrowser::getExistentConnectionFor( SvTreeListEntry* _pAnyEntry ...@@ -3273,7 +3267,7 @@ bool SbaTableQueryBrowser::getExistentConnectionFor( SvTreeListEntry* _pAnyEntry
bool SbaTableQueryBrowser::impl_isDataSourceEntry( SvTreeListEntry* _pEntry ) const bool SbaTableQueryBrowser::impl_isDataSourceEntry( SvTreeListEntry* _pEntry ) const
{ {
return m_pTreeModel->GetRootLevelParent( _pEntry ) == _pEntry; return m_pTreeView->GetTreeModel()->GetRootLevelParent( _pEntry ) == _pEntry;
} }
bool SbaTableQueryBrowser::ensureConnection( SvTreeListEntry* _pDSEntry, void* pDSData, SharedConnection& _rConnection ) bool SbaTableQueryBrowser::ensureConnection( SvTreeListEntry* _pDSEntry, void* pDSData, SharedConnection& _rConnection )
...@@ -3596,7 +3590,7 @@ OUString SbaTableQueryBrowser::getPrivateTitle() const ...@@ -3596,7 +3590,7 @@ OUString SbaTableQueryBrowser::getPrivateTitle() const
OUString sTitle; OUString sTitle;
if ( m_pCurrentlyDisplayed ) if ( m_pCurrentlyDisplayed )
{ {
SvTreeListEntry* pContainer = m_pTreeModel->GetParent(m_pCurrentlyDisplayed); SvTreeListEntry* pContainer = m_pTreeView->GetTreeModel()->GetParent(m_pCurrentlyDisplayed);
// get the entry for the datasource // get the entry for the datasource
SvTreeListEntry* pConnection = implGetConnectionEntry(pContainer); SvTreeListEntry* pConnection = implGetConnectionEntry(pContainer);
OUString sName = m_pTreeView->getListBox().GetEntryText(m_pCurrentlyDisplayed); OUString sName = m_pTreeView->getListBox().GetEntryText(m_pCurrentlyDisplayed);
...@@ -3721,7 +3715,7 @@ void SbaTableQueryBrowser::impl_cleanupDataSourceEntry( const OUString& _rDataSo ...@@ -3721,7 +3715,7 @@ void SbaTableQueryBrowser::impl_cleanupDataSourceEntry( const OUString& _rDataSo
// delete any user data of the child entries of the to-be-removed entry // delete any user data of the child entries of the to-be-removed entry
std::pair<SvTreeListEntries::const_iterator, SvTreeListEntries::const_iterator> aIters = std::pair<SvTreeListEntries::const_iterator, SvTreeListEntries::const_iterator> aIters =
m_pTreeModel->GetChildIterators(pDataSourceEntry); m_pTreeView->GetTreeModel()->GetChildIterators(pDataSourceEntry);
SvTreeListEntries::const_iterator it = aIters.first, itEnd = aIters.second; SvTreeListEntries::const_iterator it = aIters.first, itEnd = aIters.second;
...@@ -3737,7 +3731,7 @@ void SbaTableQueryBrowser::impl_cleanupDataSourceEntry( const OUString& _rDataSo ...@@ -3737,7 +3731,7 @@ void SbaTableQueryBrowser::impl_cleanupDataSourceEntry( const OUString& _rDataSo
DBTreeListUserData* pData = static_cast< DBTreeListUserData* >( pDataSourceEntry->GetUserData() ); DBTreeListUserData* pData = static_cast< DBTreeListUserData* >( pDataSourceEntry->GetUserData() );
pDataSourceEntry->SetUserData( nullptr ); pDataSourceEntry->SetUserData( nullptr );
delete pData; delete pData;
m_pTreeModel->Remove( pDataSourceEntry ); m_pTreeView->GetTreeModel()->Remove( pDataSourceEntry );
} }
void SAL_CALL SbaTableQueryBrowser::revokedDatabaseLocation( const DatabaseRegistrationEvent& Event ) void SAL_CALL SbaTableQueryBrowser::revokedDatabaseLocation( const DatabaseRegistrationEvent& Event )
......
...@@ -99,9 +99,8 @@ namespace dbaui ...@@ -99,9 +99,8 @@ namespace dbaui
OUString m_sQueryCommand; // the command of the query currently loaded (if any) OUString m_sQueryCommand; // the command of the query currently loaded (if any)
//OUString m_sToBeLoaded; // contains the element name which should be loaded if any //OUString m_sToBeLoaded; // contains the element name which should be loaded if any
VclPtr<DBTreeView> m_pTreeView; VclPtr<DBTreeView> m_pTreeView; // contains the datasources of the registry
VclPtr<Splitter> m_pSplitter; VclPtr<Splitter> m_pSplitter;
SvTreeList* m_pTreeModel; // contains the datasources of the registry
SvTreeListEntry* m_pCurrentlyDisplayed; SvTreeListEntry* m_pCurrentlyDisplayed;
ImplSVEvent * m_nAsyncDrop; ImplSVEvent * m_nAsyncDrop;
......
...@@ -582,8 +582,6 @@ public: ...@@ -582,8 +582,6 @@ public:
void SetNoAutoCurEntry( bool b ); void SetNoAutoCurEntry( bool b );
void DisconnectFromModel();
void EnableCheckButton( SvLBoxButtonData* ); void EnableCheckButton( SvLBoxButtonData* );
void SetCheckButtonData( SvLBoxButtonData* ); void SetCheckButtonData( SvLBoxButtonData* );
void SetNodeBitmaps( const Image& rCollapsedNodeBmp, const Image& rExpandedNodeBmp ); void SetNodeBitmaps( const Image& rCollapsedNodeBmp, const Image& rExpandedNodeBmp );
......
...@@ -1402,15 +1402,6 @@ void SvTreeListBox::SetBaseModel( SvTreeList* pNewModel ) ...@@ -1402,15 +1402,6 @@ void SvTreeListBox::SetBaseModel( SvTreeList* pNewModel )
} }
} }
void SvTreeListBox::DisconnectFromModel()
{
SvTreeList* pNewModel = new SvTreeList;
pNewModel->SetRefCount( 0 ); // else this will never be deleted
SvListView::SetModel( pNewModel );
pImpl->SetModel( GetModel() );
}
void SvTreeListBox::SetSublistOpenWithReturn() void SvTreeListBox::SetSublistOpenWithReturn()
{ {
pImpl->bSubLstOpRet = true; pImpl->bSubLstOpRet = true;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment