X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/b5cc2a6924cfd8f59611d3cec2edbb00a08b4ff1..1cdb64a12bf5e6f3b97d38992799ba6bfbb06ef5:/src/treeviewsidebarpage.cpp diff --git a/src/treeviewsidebarpage.cpp b/src/treeviewsidebarpage.cpp index b1fcc8daa..65b0687e8 100644 --- a/src/treeviewsidebarpage.cpp +++ b/src/treeviewsidebarpage.cpp @@ -20,6 +20,7 @@ #include "treeviewsidebarpage.h" #include "bookmarkselector.h" +#include "dolphincontextmenu.h" #include "dolphinmainwindow.h" #include "dolphinsortfilterproxymodel.h" #include "dolphinview.h" @@ -78,10 +79,11 @@ TreeViewSidebarPage::TreeViewSidebarPage(DolphinMainWindow* mainWindow, connect(m_treeView, SIGNAL(clicked(const QModelIndex&)), this, SLOT(updateActiveView(const QModelIndex&))); - connect(m_treeView, SIGNAL(doubleClicked(const QModelIndex&)), - this, SLOT(slotDoubleClicked(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); } @@ -102,6 +104,56 @@ void TreeViewSidebarPage::showEvent(QShowEvent* event) connectToActiveView(); } +void TreeViewSidebarPage::contextMenuEvent(QContextMenuEvent* event) +{ + SidebarPage::contextMenuEvent(event); + + // TODO: temporary deactivate the following code, as the wrong + // selection of cut/copy/paste actions is very confusing: + return; + + KFileItem* item = 0; + + 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); + item = m_dirModel->itemForIndex(dirModelIndex); +#else + item = m_dirModel->itemForIndex(index); +#endif + +#if defined(USE_PROXY_MODEL) + const QItemSelection selection = m_proxyModel->mapSelectionToSource( + m_treeView->selectionModel()->selection()); +#else + const QItemSelection selection = m_treeView->selectionModel()->selection(); +#endif + + KFileItemList selectedItems; + + const QModelIndexList indexList = selection.indexes(); + QModelIndexList::const_iterator end = indexList.end(); + for (QModelIndexList::const_iterator it = indexList.begin(); it != end; ++it) { + Q_ASSERT((*it).isValid()); + + KFileItem* item = m_dirModel->itemForIndex(*it); + if (item != 0) { + selectedItems.append(item); + } + } + + DolphinContextMenu contextMenu(mainWindow(), + item, + m_dirLister->url(), + selectedItems); + contextMenu.open(); +} + void TreeViewSidebarPage::updateSelection(const KUrl& url) { if (!url.isValid() || (url == m_selectedUrl)) { @@ -201,6 +253,23 @@ void TreeViewSidebarPage::updateActiveView(const QModelIndex& index) } } +void TreeViewSidebarPage::dropUrls(const KUrl::List& urls, + const QModelIndex& index) +{ + if (index.isValid()) { +#if defined(USE_PROXY_MODEL) + const QModelIndex& dirIndex = m_proxyModel->mapToSource(index); + KFileItem* item = m_dirModel->itemForIndex(dirIndex); +#else + KFileItem* item = m_dirModel->itemForIndex(index); +#endif + Q_ASSERT(item != 0); + if (item->isDir()) { + mainWindow()->dropUrls(urls, item->url()); + } + } +} + void TreeViewSidebarPage::connectToActiveView() { const QWidget* parent = parentWidget();