From: Peter Penz Date: Thu, 25 Jan 2007 22:28:04 +0000 (+0000) Subject: First step for making the details view usable again: X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/d52282f8a2a727ad332d4cceeeaa6b79af9267c1 First step for making the details view usable again: - accept drops - Automatically resize the columns in a way that the whole available width is used by stretching the width of the 'Name' column. Qt4's QTreeView really rocks, only a few lines of code had been necessary to get this behavior :-) svn path=/trunk/playground/utils/dolphin/; revision=627189 --- diff --git a/src/dolphindetailsview.cpp b/src/dolphindetailsview.cpp index 37d2fa70e..e04ff7618 100644 --- a/src/dolphindetailsview.cpp +++ b/src/dolphindetailsview.cpp @@ -19,14 +19,92 @@ ***************************************************************************/ #include "dolphindetailsview.h" +#include "dolphinmainwindow.h" #include "dolphinview.h" +#include + DolphinDetailsView::DolphinDetailsView(DolphinView* parent) : - QTreeView(parent) + QTreeView(parent), + m_parentView(parent) { + setAcceptDrops(true); + setRootIsDecorated(false); + setSortingEnabled(true); + setUniformRowHeights(true); } DolphinDetailsView::~DolphinDetailsView() { } + +bool DolphinDetailsView::event(QEvent* event) +{ + if (event->type() == QEvent::Polish) { + // Assure that by respecting the available width that: + // - the 'Name' column is stretched as large as possible + // - the remaining columns are as small as possible + QHeaderView* headerView = header(); + headerView->setStretchLastSection(false); + headerView->setResizeMode(QHeaderView::ResizeToContents); + headerView->setResizeMode(0, QHeaderView::Stretch); + } + + return QTreeView::event(event); +} +QStyleOptionViewItem DolphinDetailsView::viewOptions() const +{ + return QTreeView::viewOptions(); + + // TODO: the view options should been read from the settings; + // the following code is just for testing... + //QStyleOptionViewItem options = QTreeView::viewOptions(); + //options.decorationAlignment = Qt::AlignRight; + //options.decorationPosition = QStyleOptionViewItem::Right; + //options.decorationSize = QSize(100, 100); + //options.showDecorationSelected = true; + //options.state = QStyle::State_MouseOver; + //return options; +} + +void DolphinDetailsView::contextMenuEvent(QContextMenuEvent* event) +{ + QTreeView::contextMenuEvent(event); + + KFileItem* item = 0; + + const QModelIndex index = indexAt(event->pos()); + if (index.isValid()) { + item = m_parentView->fileItem(index); + } + + m_parentView->openContextMenu(item, event->globalPos()); +} + +void DolphinDetailsView::mouseReleaseEvent(QMouseEvent* event) +{ + QTreeView::mouseReleaseEvent(event); + m_parentView->declareViewActive(); +} + +void DolphinDetailsView::dragEnterEvent(QDragEnterEvent* event) +{ + if (event->mimeData()->hasUrls()) { + event->acceptProposedAction(); + } +} + +void DolphinDetailsView::dropEvent(QDropEvent* event) +{ + const KUrl::List urls = KUrl::List::fromMimeData(event->mimeData()); + if (!urls.isEmpty()) { + event->acceptProposedAction(); + + // TODO: handle dropping above a directory + + const KUrl& destination = m_parentView->url(); + m_parentView->mainWindow()->dropUrls(urls, destination); + } +} + #include "dolphindetailsview.moc" diff --git a/src/dolphindetailsview.h b/src/dolphindetailsview.h index 16a0811fc..b438b3a33 100644 --- a/src/dolphindetailsview.h +++ b/src/dolphindetailsview.h @@ -27,9 +27,9 @@ class DolphinView; /** * @brief Represents the details view which shows the name, size, - * date, permissions, owner and group of an item. + * date, permissions, owner and group of an item. * - * The width of the columns are automatically adjusted in a way + * The width of the columns is automatically adjusted in a way * that full available width of the view is used by stretching the width * of the name column. */ @@ -40,6 +40,17 @@ class DolphinDetailsView : public QTreeView public: explicit DolphinDetailsView(DolphinView* parent); virtual ~DolphinDetailsView(); + +protected: + virtual bool event(QEvent* event); + virtual QStyleOptionViewItem viewOptions() const; + virtual void contextMenuEvent(QContextMenuEvent* event); + virtual void mouseReleaseEvent(QMouseEvent* event); + virtual void dragEnterEvent(QDragEnterEvent* event); + virtual void dropEvent(QDropEvent* event); + +private: + DolphinView* m_parentView; }; #endif diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index 300d99d92..eae9ca31a 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -160,7 +160,7 @@ void DolphinMainWindow::dropUrls(const KUrl::List& urls, i18n("&Link Here") + "\t" + seq); popup.addSeparator(); - popup.addAction(KIcon("stop"), i18n("Cancel")); + QAction* cancelAction = popup.addAction(KIcon("stop"), i18n("Cancel")); QAction* activatedAction = popup.exec(QCursor::pos()); if (activatedAction == moveAction) { @@ -172,6 +172,9 @@ void DolphinMainWindow::dropUrls(const KUrl::List& urls, else if (activatedAction == linkAction) { action = Qt::LinkAction; } + else if (activatedAction == cancelAction) { + return; + } } switch (action) {