]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/sidebartreeview.cpp
Assure that the items within the "Others" group are sorted too, when sorting by name...
[dolphin.git] / src / sidebartreeview.cpp
index f82bff37aad665f5c84ee4840ec20bbc354e5fe8..a876ee6c30a39ebca6ad00665f22eafcda0a3b1e 100644 (file)
 
 #include "sidebartreeview.h"
 
-#include <kdirmodel.h>
-#include <kfileitemdelegate.h>
+#include "dolphincontroller.h"
+#include "dolphinmodel.h"
+#include "draganddrophelper.h"
 
+#include <kfileitemdelegate.h>
 #include <QKeyEvent>
 #include <QPainter>
 #include <QHeaderView>
+#include <QScrollBar>
 
 SidebarTreeView::SidebarTreeView(QWidget* parent) :
-    QTreeView(parent),
-    m_dragging(false)
+    KTreeView(parent)
 {
     setAcceptDrops(true);
     setUniformRowHeights(true);
@@ -38,10 +40,22 @@ SidebarTreeView::SidebarTreeView(QWidget* parent) :
     setFrameStyle(QFrame::NoFrame);
     setDragDropMode(QAbstractItemView::DragDrop);
     setDropIndicatorShown(false);
-    setAutoExpandDelay(300);
+
+    setVerticalScrollMode(QListView::ScrollPerPixel);
+    setHorizontalScrollMode(QListView::ScrollPerPixel);
 
     viewport()->setAttribute(Qt::WA_Hover);
 
+    // make the background transparent and apply the window-text color
+    // to the text color, so that enough contrast is given for all color
+    // schemes
+    QPalette p = palette();
+    p.setColor(QPalette::Active,   QPalette::Text, p.color(QPalette::Active,   QPalette::WindowText));
+    p.setColor(QPalette::Inactive, QPalette::Text, p.color(QPalette::Inactive, QPalette::WindowText));
+    p.setColor(QPalette::Disabled, QPalette::Text, p.color(QPalette::Disabled, QPalette::WindowText));
+    setPalette(p);
+    viewport()->setAutoFillBackground(false);
+
     KFileItemDelegate* delegate = new KFileItemDelegate(this);
     setItemDelegate(delegate);
 }
@@ -52,79 +66,82 @@ SidebarTreeView::~SidebarTreeView()
 
 bool SidebarTreeView::event(QEvent* event)
 {
-    if (event->type() == QEvent::Polish) {
+    switch (event->type()) {
+    case QEvent::Polish:
         // hide all columns except of the 'Name' column
-        hideColumn(KDirModel::Size);
-        hideColumn(KDirModel::ModifiedTime);
-        hideColumn(KDirModel::Permissions);
-        hideColumn(KDirModel::Owner);
-        hideColumn(KDirModel::Group);
-        hideColumn(KDirModel::Type);
+        hideColumn(DolphinModel::Size);
+        hideColumn(DolphinModel::ModifiedTime);
+        hideColumn(DolphinModel::Permissions);
+        hideColumn(DolphinModel::Owner);
+        hideColumn(DolphinModel::Group);
+        hideColumn(DolphinModel::Type);
+        hideColumn(DolphinModel::Rating);
+        hideColumn(DolphinModel::Tags);
         header()->hide();
+        break;
+        
+    case QEvent::Show:
+        // TODO: The opening/closing animation of subtrees flickers in combination with the
+        // sidebar when using the Oxygen style. As workaround the animation is turned off:
+        setAnimated(false);
+        break;
+    
+    case QEvent::UpdateRequest:
+        // a wheel movement will scroll 1 item
+        if (model()->rowCount() > 0) {
+            verticalScrollBar()->setSingleStep(sizeHintForRow(0) / 3);
+        }
+        break;
+        
+    default:
+        break;
     }
 
-    return QTreeView::event(event);
+    return KTreeView::event(event);
+}
+
+void SidebarTreeView::startDrag(Qt::DropActions supportedActions)
+{
+    DragAndDropHelper::instance().startDrag(this, supportedActions);
 }
 
 void SidebarTreeView::dragEnterEvent(QDragEnterEvent* event)
 {
+    KTreeView::dragEnterEvent(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;
+    KTreeView::dragLeaveEvent(event);
     setDirtyRegion(m_dropRect);
 }
 
 void SidebarTreeView::dragMoveEvent(QDragMoveEvent* event)
 {
-    QTreeView::dragMoveEvent(event);
+    KTreeView::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()) {
-        QTreeView::dropEvent(event);
-    } else {
+    if (event->mimeData()->hasUrls()) {
+        // accept url drops, independently from the destination item
         event->acceptProposedAction();
-        const QModelIndex index = indexAt(event->pos());
-        if (index.isValid()) {
-            emit urlsDropped(urls, index);
-        }
     }
-    m_dragging = false;
 }
 
-void SidebarTreeView::paintEvent(QPaintEvent* event)
+void SidebarTreeView::dropEvent(QDropEvent* event)
 {
-    QTreeView::paintEvent(event);
-
-    if (m_dragging) {
-        // TODO: remove this code when the issue #160611 is solved in Qt 4.4
-        QPainter painter(viewport());
-        painter.save();
-        QBrush brush(palette().brush(QPalette::Normal, QPalette::Highlight));
-        QColor color = brush.color();
-        color.setAlpha(64);
-        brush.setColor(color);
-        painter.fillRect(m_dropRect, brush);
-        painter.restore();
+    const QModelIndex index = indexAt(event->pos());
+    if (index.isValid()) {
+        emit urlsDropped(index, event);
     }
+    KTreeView::dropEvent(event);
 }
 
 #include "sidebartreeview.moc"