]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/sidebartreeview.cpp
When renaming, use the actual name of the item (from the KFileItem) in the dialog.
[dolphin.git] / src / sidebartreeview.cpp
index ccd90846398835d6b6d9ea1ce4ffadc85c2bd87e..92e8e2908f63116abb732385b06a5990582e0ebc 100644 (file)
@@ -1,6 +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  *
  *   it under the terms of the GNU General Public License as published by  *
 
 #include "sidebartreeview.h"
 
+#include "dolphincontroller.h"
+
 #include <kdirmodel.h>
 #include <kfileitemdelegate.h>
-
-#include <QDragEnterEvent>
-#include <QDropEvent>
+#include <QKeyEvent>
+#include <QPainter>
 #include <QHeaderView>
 
-SidebarTreeView::SidebarTreeView(DolphinMainWindow* mainWindow,
-                                 QWidget* parent) :
+SidebarTreeView::SidebarTreeView(QWidget* parent) :
     QTreeView(parent),
-    m_mainWindow(mainWindow)
+    m_dragging(false)
 {
     setAcceptDrops(true);
     setUniformRowHeights(true);
     setSelectionMode(QAbstractItemView::SingleSelection);
     setEditTriggers(QAbstractItemView::NoEditTriggers);
     setSortingEnabled(true);
+    setFrameStyle(QFrame::NoFrame);
+    setDragDropMode(QAbstractItemView::DragDrop);
+    setDropIndicatorShown(false);
+    setAutoExpandDelay(300);
 
     viewport()->setAttribute(Qt::WA_Hover);
 
+    QPalette palette = viewport()->palette();
+    palette.setColor(viewport()->backgroundRole(), Qt::transparent);
+    viewport()->setPalette(palette);
+
     KFileItemDelegate* delegate = new KFileItemDelegate(this);
     setItemDelegate(delegate);
 }
@@ -57,6 +64,7 @@ bool SidebarTreeView::event(QEvent* event)
         hideColumn(KDirModel::Permissions);
         hideColumn(KDirModel::Owner);
         hideColumn(KDirModel::Group);
+        hideColumn(KDirModel::Type);
         header()->hide();
     }
 
@@ -68,17 +76,53 @@ void SidebarTreeView::dragEnterEvent(QDragEnterEvent* event)
     if (event->mimeData()->hasUrls()) {
         event->acceptProposedAction();
     }
+    QTreeView::dragEnterEvent(event);
+    m_dragging = true;
+}
+
+void SidebarTreeView::dragLeaveEvent(QDragLeaveEvent* event)
+{
+    QTreeView::dragLeaveEvent(event);
+
+    // TODO: remove this code when the issue #160611 is solved in Qt 4.4
+    m_dragging = false;
+    setDirtyRegion(m_dropRect);
+}
+
+void SidebarTreeView::dragMoveEvent(QDragMoveEvent* event)
+{
+    QTreeView::dragMoveEvent(event);
+
+    // TODO: remove this code when the issue #160611 is solved in Qt 4.4
+    const QModelIndex index = indexAt(event->pos());
+    setDirtyRegion(m_dropRect);
+    m_dropRect = visualRect(index);
+    setDirtyRegion(m_dropRect);
 }
 
 void SidebarTreeView::dropEvent(QDropEvent* event)
 {
     const KUrl::List urls = KUrl::List::fromMimeData(event->mimeData());
-    if (urls.isEmpty() || (event->source() == this)) {
+    if (urls.isEmpty()) {
         QTreeView::dropEvent(event);
-    }
-    else {
+    } else {
         event->acceptProposedAction();
-        //m_controller->indicateDroppedUrls(urls, event->pos());
+        const QModelIndex index = indexAt(event->pos());
+        if (index.isValid()) {
+            emit urlsDropped(urls, index);
+        }
+    }
+    m_dragging = false;
+}
+
+void SidebarTreeView::paintEvent(QPaintEvent* event)
+{
+    QTreeView::paintEvent(event);
+
+    // TODO: remove this code when the issue #160611 is solved in Qt 4.4
+    if (m_dragging) {
+        const QBrush& brush = palette().brush(QPalette::Normal, QPalette::Highlight);
+        DolphinController::drawHoverIndication(viewport(), m_dropRect, brush);
     }
 }