]> cloud.milkyroute.net Git - dolphin.git/commitdiff
First step for making the details view usable again:
authorPeter Penz <peter.penz19@gmail.com>
Thu, 25 Jan 2007 22:28:04 +0000 (22:28 +0000)
committerPeter Penz <peter.penz19@gmail.com>
Thu, 25 Jan 2007 22:28:04 +0000 (22:28 +0000)
- 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

src/dolphindetailsview.cpp
src/dolphindetailsview.h
src/dolphinmainwindow.cpp

index 37d2fa70e5bb455c83334c9cc6a0b4b711ca4ad0..e04ff76180f70496d3bd7245ce137d5b0b544b59 100644 (file)
  ***************************************************************************/
 
 #include "dolphindetailsview.h"
+#include "dolphinmainwindow.h"
 #include "dolphinview.h"
 
+#include <QHeaderView>
+
 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"
index 16a0811fc57ba3ed0f4389cf05453e72bfb00aa5..b438b3a33527eb0a6d93d3bf368bd0f9f3e14105 100644 (file)
@@ -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
index 300d99d928eccff08b0354ffd95629a91f3b355e..eae9ca31a567320da638a05662df06265e411af3 100644 (file)
@@ -160,7 +160,7 @@ void DolphinMainWindow::dropUrls(const KUrl::List& urls,
                                               i18n("&Link Here") + "\t" + seq);\r
 \r
         popup.addSeparator();\r
-        popup.addAction(KIcon("stop"), i18n("Cancel"));\r
+        QAction* cancelAction = popup.addAction(KIcon("stop"), i18n("Cancel"));\r
 \r
         QAction* activatedAction = popup.exec(QCursor::pos());\r
         if (activatedAction == moveAction) {\r
@@ -172,6 +172,9 @@ void DolphinMainWindow::dropUrls(const KUrl::List& urls,
         else if (activatedAction == linkAction) {\r
             action = Qt::LinkAction;\r
         }\r
+        else if (activatedAction == cancelAction) {\r
+            return;\r
+        }\r
     }\r
 \r
     switch (action) {\r