]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kitemlistheader.cpp
Animation optimizations
[dolphin.git] / src / kitemviews / kitemlistheader.cpp
index c0b48c1a06fca681ef9fca53107d5de1e5ad1845..7b5549c739005cf08ff6c5ab91b9f95d8432984c 100644 (file)
@@ -19,6 +19,8 @@
 
 #include "kitemlistheader_p.h"
 
+#include <KAction>
+#include <KMenu>
 #include "kitemmodelbase.h"
 
 #include <QApplication>
@@ -110,6 +112,12 @@ QHash<QByteArray, qreal> KItemListHeader::visibleRolesWidths() const
     return m_visibleRolesWidths;
 }
 
+qreal KItemListHeader::minimumRoleWidth() const
+{
+    QFontMetricsF fontMetrics(font());
+    return fontMetrics.height() * 4;
+}
+
 void KItemListHeader::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
 {
     Q_UNUSED(option);
@@ -143,11 +151,15 @@ void KItemListHeader::paint(QPainter* painter, const QStyleOptionGraphicsItem* o
 
 void KItemListHeader::mousePressEvent(QGraphicsSceneMouseEvent* event)
 {
-    event->accept();
-    updatePressedRoleIndex(event->pos());
-    m_pressedMousePos = event->pos();
-    m_roleOperation = isAboveRoleGrip(m_pressedMousePos, m_pressedRoleIndex) ?
-                      ResizeRoleOperation : NoRoleOperation;
+    if (event->button() & Qt::LeftButton) {
+        updatePressedRoleIndex(event->pos());
+        m_pressedMousePos = event->pos();
+        m_roleOperation = isAboveRoleGrip(m_pressedMousePos, m_pressedRoleIndex) ?
+                          ResizeRoleOperation : NoRoleOperation;
+        event->accept();
+    } else {
+        event->ignore();
+    }
 }
 
 void KItemListHeader::mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
@@ -164,13 +176,17 @@ void KItemListHeader::mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
         const int sortRoleIndex = m_visibleRoles.indexOf(sortRole);
         if (m_pressedRoleIndex == sortRoleIndex) {
             // Toggle the sort order
-            const Qt::SortOrder toggled = (m_model->sortOrder() == Qt::AscendingOrder) ?
+            const Qt::SortOrder previous = m_model->sortOrder();
+            const Qt::SortOrder current = (m_model->sortOrder() == Qt::AscendingOrder) ?
                                           Qt::DescendingOrder : Qt::AscendingOrder;
-            m_model->setSortOrder(toggled);
+            m_model->setSortOrder(current);
+            emit sortOrderChanged(current, previous);
         } else {
             // Change the sort role
-            const QByteArray sortRole = m_visibleRoles.at(m_pressedRoleIndex);
-            m_model->setSortRole(sortRole);
+            const QByteArray previous = m_model->sortRole();
+            const QByteArray current = m_visibleRoles.at(m_pressedRoleIndex);
+            m_model->setSortRole(current);
+            emit sortRoleChanged(current, previous);
         }
     }
 
@@ -186,12 +202,15 @@ void KItemListHeader::mouseMoveEvent(QGraphicsSceneMouseEvent* event)
     if (m_roleOperation == ResizeRoleOperation) {
         const QByteArray pressedRole = m_visibleRoles.at(m_pressedRoleIndex);
 
-        qreal roleWidth = m_visibleRolesWidths.value(pressedRole);
-        roleWidth += event->pos().x() - event->lastPos().x();
-        roleWidth = qMax(minimumRoleWidth(), roleWidth);
+        qreal previousWidth = m_visibleRolesWidths.value(pressedRole);
+        qreal currentWidth = previousWidth;
+        currentWidth += event->pos().x() - event->lastPos().x();
+        currentWidth = qMax(minimumRoleWidth(), currentWidth);
 
-        m_visibleRolesWidths.insert(pressedRole, roleWidth);
+        m_visibleRolesWidths.insert(pressedRole, currentWidth);
         update();
+
+        emit visibleRoleWidthChanged(pressedRole, currentWidth, previousWidth);
     } else if ((event->pos() - m_pressedMousePos).manhattanLength() >= QApplication::startDragDistance()) {
         kDebug() << "Moving of role not supported yet";
         m_roleOperation = MoveRoleOperation;
@@ -331,10 +350,4 @@ bool KItemListHeader::isAboveRoleGrip(const QPointF& pos, int roleIndex) const
     return pos.x() >= (x - grip) && pos.x() <= x;
 }
 
-qreal KItemListHeader::minimumRoleWidth() const
-{
-    QFontMetricsF fontMetrics(font());
-    return fontMetrics.averageCharWidth() * 5;
-}
-
 #include "kitemlistheader_p.moc"