mirror of
https://invent.kde.org/system/dolphin
synced 2024-09-17 15:31:20 +00:00
optimization: don't load the directory tree if the widget is invisible
svn path=/trunk/KDE/kdebase/apps/; revision=661865
This commit is contained in:
parent
4405774647
commit
aad46935fa
|
@ -86,50 +86,18 @@ void TreeViewSidebarPage::setUrl(const KUrl& url)
|
|||
}
|
||||
|
||||
SidebarPage::setUrl(url);
|
||||
|
||||
// adjust the root of the tree to the base bookmark
|
||||
KFilePlacesModel* placesModel = DolphinSettings::instance().placesModel();
|
||||
KUrl baseUrl = placesModel->url(placesModel->closestItem(url));
|
||||
if (!baseUrl.isValid()) {
|
||||
// it's possible that no closest item is available and hence an
|
||||
// empty URL is returned
|
||||
baseUrl = url;
|
||||
}
|
||||
|
||||
if (m_dirLister->url() != baseUrl) {
|
||||
m_dirLister->stop();
|
||||
m_dirLister->openUrl(baseUrl);
|
||||
}
|
||||
|
||||
// select the folder which contains the given URL
|
||||
QItemSelectionModel* selModel = m_treeView->selectionModel();
|
||||
selModel->clearSelection();
|
||||
|
||||
const QModelIndex index = m_dirModel->indexForUrl(url);
|
||||
if (index.isValid()) {
|
||||
// the item with the given URL is already part of the model
|
||||
const QModelIndex proxyIndex = m_proxyModel->mapFromSource(index);
|
||||
m_treeView->scrollTo(proxyIndex);
|
||||
selModel->setCurrentIndex(proxyIndex, QItemSelectionModel::Select);
|
||||
} else {
|
||||
// The item with the given URL is not loaded by the model yet. Iterate
|
||||
// backward to the base URL and trigger the loading of the items for
|
||||
// each hierarchy level.
|
||||
connect(m_dirLister, SIGNAL(completed()),
|
||||
this, SLOT(expandSelectionParent()));
|
||||
|
||||
KUrl parentUrl = url.upUrl();
|
||||
while (!parentUrl.isParentOf(baseUrl)) {
|
||||
m_dirLister->openUrl(parentUrl, true, false);
|
||||
parentUrl = parentUrl.upUrl();
|
||||
}
|
||||
}
|
||||
|
||||
// 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()) {
|
||||
loadTree(url);
|
||||
//}
|
||||
}
|
||||
|
||||
void TreeViewSidebarPage::showEvent(QShowEvent* event)
|
||||
{
|
||||
SidebarPage::showEvent(event);
|
||||
loadTree(url());
|
||||
}
|
||||
|
||||
void TreeViewSidebarPage::contextMenuEvent(QContextMenuEvent* event)
|
||||
|
@ -201,4 +169,45 @@ void TreeViewSidebarPage::dropUrls(const KUrl::List& urls,
|
|||
}
|
||||
}
|
||||
|
||||
void TreeViewSidebarPage::loadTree(const KUrl& url)
|
||||
{
|
||||
// adjust the root of the tree to the base bookmark
|
||||
KFilePlacesModel* placesModel = DolphinSettings::instance().placesModel();
|
||||
KUrl baseUrl = placesModel->url(placesModel->closestItem(url));
|
||||
if (!baseUrl.isValid()) {
|
||||
// it's possible that no closest item is available and hence an
|
||||
// empty URL is returned
|
||||
baseUrl = url;
|
||||
}
|
||||
|
||||
if (m_dirLister->url() != baseUrl) {
|
||||
m_dirLister->stop();
|
||||
m_dirLister->openUrl(baseUrl);
|
||||
}
|
||||
|
||||
// select the folder which contains the given URL
|
||||
QItemSelectionModel* selModel = m_treeView->selectionModel();
|
||||
selModel->clearSelection();
|
||||
|
||||
const QModelIndex index = m_dirModel->indexForUrl(url);
|
||||
if (index.isValid()) {
|
||||
// the item with the given URL is already part of the model
|
||||
const QModelIndex proxyIndex = m_proxyModel->mapFromSource(index);
|
||||
m_treeView->scrollTo(proxyIndex);
|
||||
selModel->setCurrentIndex(proxyIndex, QItemSelectionModel::Select);
|
||||
} else {
|
||||
// The item with the given URL is not loaded by the model yet. Iterate
|
||||
// backward to the base URL and trigger the loading of the items for
|
||||
// each hierarchy level.
|
||||
connect(m_dirLister, SIGNAL(completed()),
|
||||
this, SLOT(expandSelectionParent()));
|
||||
|
||||
KUrl parentUrl = url.upUrl();
|
||||
while (!parentUrl.isParentOf(baseUrl)) {
|
||||
m_dirLister->openUrl(parentUrl, true, false);
|
||||
parentUrl = parentUrl.upUrl();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#include "treeviewsidebarpage.moc"
|
||||
|
|
|
@ -78,6 +78,9 @@ private slots:
|
|||
void dropUrls(const KUrl::List& urls,
|
||||
const QModelIndex& index);
|
||||
|
||||
private:
|
||||
void loadTree(const KUrl& url);
|
||||
|
||||
private:
|
||||
KDirLister* m_dirLister;
|
||||
KDirModel* m_dirModel;
|
||||
|
|
Loading…
Reference in a new issue