From 1d3ccf2ada8f2d6f58b962eb19e49df647373477 Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Wed, 9 May 2007 05:59:25 +0000 Subject: [PATCH] Postpone the creating of the dir lister to the first show event. This assures that no performance and memory overhead is given when the TreeView is not used at all. svn path=/trunk/KDE/kdebase/apps/; revision=662771 --- src/treeviewsidebarpage.cpp | 75 ++++++++++++++++++++----------------- 1 file changed, 41 insertions(+), 34 deletions(-) diff --git a/src/treeviewsidebarpage.cpp b/src/treeviewsidebarpage.cpp index 8c1c153d61..0e6edff086 100644 --- a/src/treeviewsidebarpage.cpp +++ b/src/treeviewsidebarpage.cpp @@ -43,34 +43,6 @@ TreeViewSidebarPage::TreeViewSidebarPage(QWidget* parent) : m_proxyModel(0), m_treeView(0) { - m_dirLister = new KDirLister(); - m_dirLister->setDirOnlyMode(true); - m_dirLister->setAutoUpdate(true); - m_dirLister->setMainWindow(this); - m_dirLister->setDelayedMimeTypes(true); - m_dirLister->setAutoErrorHandlingEnabled(false, this); - - m_dirModel = new KDirModel(); - m_dirModel->setDirLister(m_dirLister); - m_dirModel->setDropsAllowed(KDirModel::DropOnDirectory); - - m_proxyModel = new DolphinSortFilterProxyModel(this); - m_proxyModel->setSourceModel(m_dirModel); - - m_treeView = new SidebarTreeView(this); - m_treeView->setModel(m_proxyModel); - - m_proxyModel->setSorting(DolphinView::SortByName); - m_proxyModel->setSortOrder(Qt::AscendingOrder); - - connect(m_treeView, SIGNAL(clicked(const QModelIndex&)), - this, SLOT(updateActiveView(const QModelIndex&))); - connect(m_treeView, SIGNAL(urlsDropped(const KUrl::List&, const QModelIndex&)), - this, SLOT(dropUrls(const KUrl::List&, const QModelIndex&))); - - QVBoxLayout* layout = new QVBoxLayout(this); - layout->setMargin(0); - layout->addWidget(m_treeView); } TreeViewSidebarPage::~TreeViewSidebarPage() @@ -86,18 +58,51 @@ void TreeViewSidebarPage::setUrl(const KUrl& url) } SidebarPage::setUrl(url); - // TODO: it makes only sense to load the tree if the TreeViewSidebarPage - // is visible, but currently an assertion is triggered in KDirModel when hiding - // the tree view, changing to a complete different hierarchy and showing it again. - //if (isVisible()) { + if (m_dirLister != 0) { loadTree(url); - //} + } } void TreeViewSidebarPage::showEvent(QShowEvent* event) { - SidebarPage::showEvent(event); + if (m_dirLister == 0) { + // Postpone the creating of the dir lister to the first show event. + // This assures that no performance and memory overhead is given when the TreeView is not + // used at all (see TreeViewSidebarPage::setUrl()). + m_dirLister = new KDirLister(); + m_dirLister->setDirOnlyMode(true); + m_dirLister->setAutoUpdate(true); + m_dirLister->setMainWindow(this); + m_dirLister->setDelayedMimeTypes(true); + m_dirLister->setAutoErrorHandlingEnabled(false, this); + + Q_ASSERT(m_dirModel == 0); + m_dirModel = new KDirModel(); + m_dirModel->setDirLister(m_dirLister); + m_dirModel->setDropsAllowed(KDirModel::DropOnDirectory); + + Q_ASSERT(m_proxyModel == 0); + m_proxyModel = new DolphinSortFilterProxyModel(this); + m_proxyModel->setSourceModel(m_dirModel); + + Q_ASSERT(m_treeView == 0); + m_treeView = new SidebarTreeView(this); + m_treeView->setModel(m_proxyModel); + m_proxyModel->setSorting(DolphinView::SortByName); + m_proxyModel->setSortOrder(Qt::AscendingOrder); + + connect(m_treeView, SIGNAL(clicked(const QModelIndex&)), + this, SLOT(updateActiveView(const QModelIndex&))); + connect(m_treeView, SIGNAL(urlsDropped(const KUrl::List&, const QModelIndex&)), + this, SLOT(dropUrls(const KUrl::List&, const QModelIndex&))); + + QVBoxLayout* layout = new QVBoxLayout(this); + layout->setMargin(0); + layout->addWidget(m_treeView); + } + loadTree(url()); + SidebarPage::showEvent(event); } void TreeViewSidebarPage::contextMenuEvent(QContextMenuEvent* event) @@ -171,6 +176,8 @@ void TreeViewSidebarPage::dropUrls(const KUrl::List& urls, void TreeViewSidebarPage::loadTree(const KUrl& url) { + Q_ASSERT(m_dirLister != 0); + // adjust the root of the tree to the base bookmark KFilePlacesModel* placesModel = DolphinSettings::instance().placesModel(); KUrl baseUrl = placesModel->url(placesModel->closestItem(url));