support drag & drop for the treeview sidebar page

svn path=/trunk/KDE/kdebase/apps/; revision=641405
This commit is contained in:
Peter Penz 2007-03-11 09:15:08 +00:00
parent 632dd03be7
commit 277e385fd8
4 changed files with 46 additions and 11 deletions

View file

@ -1,6 +1,5 @@
/*************************************************************************** /***************************************************************************
* Copyright (C) 2006 by Peter Penz * * Copyright (C) 2006 by Peter Penz <peter.penz@gmx.at> *
* peter.penz@gmx.at *
* * * *
* This program is free software; you can redistribute it and/or modify * * This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by * * it under the terms of the GNU General Public License as published by *
@ -78,7 +77,7 @@ void SidebarTreeView::dropEvent(QDropEvent* event)
} }
else { else {
event->acceptProposedAction(); event->acceptProposedAction();
//m_controller->indicateDroppedUrls(urls, event->pos()); emit urlsDropped(urls, event->pos());
} }
} }

View file

@ -1,6 +1,5 @@
/*************************************************************************** /***************************************************************************
* Copyright (C) 2006 by Peter Penz * * Copyright (C) 2006 by Peter Penz <peter.penz@gmx.at> *
* peter.penz@gmx.at *
* * * *
* This program is free software; you can redistribute it and/or modify * * This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by * * it under the terms of the GNU General Public License as published by *
@ -21,12 +20,15 @@
#ifndef SIDEBARTREEVIEW_H #ifndef SIDEBARTREEVIEW_H
#define SIDEBARTREEVIEW_H #define SIDEBARTREEVIEW_H
#include <kurl.h>
#include <QTreeView> #include <QTreeView>
class DolphinMainWindow; class DolphinMainWindow;
/** /**
* @brief * @brief Tree view widget which is used for the sidebar panel.
*
* @see TreeViewSidebarPage
*/ */
class SidebarTreeView : public QTreeView class SidebarTreeView : public QTreeView
{ {
@ -36,6 +38,17 @@ public:
explicit SidebarTreeView(DolphinMainWindow* mainWindow, QWidget* parent = 0); explicit SidebarTreeView(DolphinMainWindow* mainWindow, QWidget* parent = 0);
virtual ~SidebarTreeView(); virtual ~SidebarTreeView();
signals:
/**
* Is emitted if the URLs \a urls have been dropped.
* @param pos Position relative to the tree view where the
* dropping has been done. It is recommended
* to get the corresponding model index from
* this position to find out the destination.
*/
void urlsDropped(const KUrl::List& urls,
const QPoint& pos);
protected: protected:
virtual bool event(QEvent* event); virtual bool event(QEvent* event);
virtual void dragEnterEvent(QDragEnterEvent* event); virtual void dragEnterEvent(QDragEnterEvent* event);

View file

@ -78,8 +78,8 @@ TreeViewSidebarPage::TreeViewSidebarPage(DolphinMainWindow* mainWindow,
connect(m_treeView, SIGNAL(clicked(const QModelIndex&)), connect(m_treeView, SIGNAL(clicked(const QModelIndex&)),
this, SLOT(updateActiveView(const QModelIndex&))); this, SLOT(updateActiveView(const QModelIndex&)));
connect(m_treeView, SIGNAL(doubleClicked(const QModelIndex&)), connect(m_treeView, SIGNAL(urlsDropped(const KUrl::List&, const QPoint&)),
this, SLOT(slotDoubleClicked(const QModelIndex&))); this, SLOT(dropUrls(const KUrl::List&, const QPoint&)));
QVBoxLayout* layout = new QVBoxLayout(this); QVBoxLayout* layout = new QVBoxLayout(this);
layout->addWidget(m_treeView); layout->addWidget(m_treeView);
@ -201,6 +201,24 @@ void TreeViewSidebarPage::updateActiveView(const QModelIndex& index)
} }
} }
void TreeViewSidebarPage::dropUrls(const KUrl::List& urls,
const QPoint& pos)
{
const QModelIndex index = m_treeView->indexAt(pos);
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() void TreeViewSidebarPage::connectToActiveView()
{ {
const QWidget* parent = parentWidget(); const QWidget* parent = parentWidget();

View file

@ -1,5 +1,5 @@
/*************************************************************************** /***************************************************************************
* Copyright (C) 2006 by Peter Penz <peter.penz@gmx.at> * Copyright (C) 2006 by Peter Penz <peter.penz@gmx.at> *
* * * *
* This program is free software; you can redistribute it and/or modify * * This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by * * it under the terms of the GNU General Public License as published by *
@ -25,7 +25,6 @@
class KDirLister; class KDirLister;
class KDirModel; class KDirModel;
class KUrl;
class DolphinSortFilterProxyModel; class DolphinSortFilterProxyModel;
class SidebarTreeView; class SidebarTreeView;
@ -73,6 +72,12 @@ private slots:
*/ */
void updateActiveView(const QModelIndex& index); void updateActiveView(const QModelIndex& index);
/**
* Is emitted if the URLs \a urls have been dropped
* to the position \a pos. */
void dropUrls(const KUrl::List& urls,
const QPoint& pos);
private: private:
/** /**
* Connects to signals from the currently active Dolphin view to get * Connects to signals from the currently active Dolphin view to get
@ -88,4 +93,4 @@ private:
KUrl m_selectedUrl; KUrl m_selectedUrl;
}; };
#endif // BOOKMARKSSIDEBARPAGE_H #endif // TREEVIEWSIDEBARPAGE_H