X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/ffcd3ed51435668b203ce58d34d2d625e9a7889d..8f9baef848c3056cd1df772f0774decad509cff3:/src/treeviewsidebarpage.cpp diff --git a/src/treeviewsidebarpage.cpp b/src/treeviewsidebarpage.cpp index c605babf0..19feb5874 100644 --- a/src/treeviewsidebarpage.cpp +++ b/src/treeviewsidebarpage.cpp @@ -24,6 +24,7 @@ #include "dolphinsortfilterproxymodel.h" #include "dolphinview.h" #include "sidebartreeview.h" +#include "treeviewcontextmenu.h" #include #include @@ -39,17 +40,13 @@ // model: //#define USE_PROXY_MODEL -TreeViewSidebarPage::TreeViewSidebarPage(DolphinMainWindow* mainWindow, - QWidget* parent) : - SidebarPage(mainWindow, parent), +TreeViewSidebarPage::TreeViewSidebarPage(QWidget* parent) : + SidebarPage(parent), m_dirLister(0), m_dirModel(0), m_proxyModel(0), - m_treeView(0), - m_selectedUrl() + m_treeView(0) { - Q_ASSERT(mainWindow != 0); - m_dirLister = new KDirLister(); m_dirLister->setDirOnlyMode(true); m_dirLister->setAutoUpdate(true); @@ -66,13 +63,13 @@ TreeViewSidebarPage::TreeViewSidebarPage(DolphinMainWindow* mainWindow, m_proxyModel = new DolphinSortFilterProxyModel(this); m_proxyModel->setSourceModel(m_dirModel); - m_treeView = new SidebarTreeView(mainWindow, this); + m_treeView = new SidebarTreeView(this); m_treeView->setModel(m_proxyModel); m_proxyModel->setSorting(DolphinView::SortByName); m_proxyModel->setSortOrder(Qt::Ascending); #else - m_treeView = new SidebarTreeView(mainWindow, this); + m_treeView = new SidebarTreeView(this); m_treeView->setModel(m_dirModel); #endif @@ -92,24 +89,13 @@ TreeViewSidebarPage::~TreeViewSidebarPage() m_dirLister = 0; } -void TreeViewSidebarPage::activeViewChanged() -{ - connectToActiveView(); -} - -void TreeViewSidebarPage::showEvent(QShowEvent* event) -{ - SidebarPage::showEvent(event); - connectToActiveView(); -} - -void TreeViewSidebarPage::updateSelection(const KUrl& url) +void TreeViewSidebarPage::setUrl(const KUrl& url) { - if (!url.isValid() || (url == m_selectedUrl)) { + if (!url.isValid() || (url == m_url)) { return; } - m_selectedUrl = url; + m_url = url; // adjust the root of the tree to the base bookmark const KUrl baseUrl = BookmarkSelector::baseBookmark(url).url(); @@ -122,9 +108,7 @@ void TreeViewSidebarPage::updateSelection(const KUrl& url) QItemSelectionModel* selModel = m_treeView->selectionModel(); selModel->clearSelection(); - const KFileItem item(S_IFDIR, KFileItem::Unknown, url); - - const QModelIndex index = m_dirModel->indexForItem(item); + const QModelIndex index = m_dirModel->indexForUrl(url); if (index.isValid()) { #if defined(USE_PROXY_MODEL) // the item with the given URL is already part of the model @@ -149,6 +133,34 @@ void TreeViewSidebarPage::updateSelection(const KUrl& url) parentUrl = parentUrl.upUrl(); } } + +} + +void TreeViewSidebarPage::showEvent(QShowEvent* event) +{ + SidebarPage::showEvent(event); +} + +void TreeViewSidebarPage::contextMenuEvent(QContextMenuEvent* event) +{ + SidebarPage::contextMenuEvent(event); + + const QModelIndex index = m_treeView->indexAt(event->pos()); + if (!index.isValid()) { + // only open a context menu above a directory item + return; + } + +#if defined(USE_PROXY_MODEL) + const QModelIndex dirModelIndex = m_proxyModel->mapToSource(index); + KFileItem* item = m_dirModel->itemForIndex(dirModelIndex); +#else + KFileItem* item = m_dirModel->itemForIndex(index); +#endif + + emit changeSelection(KFileItemList()); + TreeViewContextMenu contextMenu(this, item); + contextMenu.open(); } void TreeViewSidebarPage::expandSelectionParent() @@ -157,8 +169,12 @@ void TreeViewSidebarPage::expandSelectionParent() this, SLOT(expandSelectionParent())); // expand the parent folder of the selected item - const KFileItem parentItem(S_IFDIR, KFileItem::Unknown, m_selectedUrl.upUrl()); - QModelIndex index = m_dirModel->indexForItem(parentItem); + KUrl parentUrl = m_url.upUrl(); + if (!m_dirLister->url().isParentOf(parentUrl)) { + return; + } + + QModelIndex index = m_dirModel->indexForUrl(parentUrl); if (index.isValid()) { #if defined(USE_PROXY_MODEL) QModelIndex proxyIndex = m_proxyModel->mapFromSource(index); @@ -168,8 +184,7 @@ void TreeViewSidebarPage::expandSelectionParent() #endif // select the item and assure that the item is visible - const KFileItem selectedItem(S_IFDIR, KFileItem::Unknown, m_selectedUrl); - index = m_dirModel->indexForItem(selectedItem); + index = m_dirModel->indexForUrl(m_url); if (index.isValid()) { #if defined(USE_PROXY_MODEL) proxyIndex = m_proxyModel->mapFromSource(index); @@ -183,7 +198,6 @@ void TreeViewSidebarPage::expandSelectionParent() QItemSelectionModel* selModel = m_treeView->selectionModel(); selModel->setCurrentIndex(index, QItemSelectionModel::Select); #endif - } } } @@ -198,7 +212,7 @@ void TreeViewSidebarPage::updateActiveView(const QModelIndex& index) #endif if (item != 0) { const KUrl& url = item->url(); - mainWindow()->activeView()->setUrl(url); + emit changeUrl(url); } } @@ -214,25 +228,9 @@ void TreeViewSidebarPage::dropUrls(const KUrl::List& urls, #endif Q_ASSERT(item != 0); if (item->isDir()) { - mainWindow()->dropUrls(urls, item->url()); + emit urlsDropped(urls, item->url()); } } } -void TreeViewSidebarPage::connectToActiveView() -{ - const QWidget* parent = parentWidget(); - if ((parent == 0) || parent->isHidden()) { - return; - } - - const DolphinView* view = mainWindow()->activeView(); - const KUrl& url = view->url(); - - connect(view, SIGNAL(urlChanged(const KUrl&)), - this, SLOT(updateSelection(const KUrl&))); - - updateSelection(url); -} - #include "treeviewsidebarpage.moc"