From cc295bc9d25e4a484d53f93311a29ff14c2f1e71 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rg=20Schummer?= <ext-jorg.2.schummer@nokia.com>
Date: Mon, 31 May 2010 15:27:52 +0300
Subject: [PATCH] QuickDesigner.itemLibrary: enable mouse wheel interaction in
 items view

Task-number: BAUHAUS-657
---
 .../components/itemlibrary/itemlibrary.cpp            | 11 +++++++++++
 .../qmldesigner/components/itemlibrary/itemlibrary.h  |  4 ++++
 .../components/itemlibrary/qml/ItemsView.qml          |  4 ++++
 .../components/itemlibrary/qml/ItemsViewStyle.qml     |  1 +
 .../components/itemlibrary/qml/Scrollbar.qml          |  8 ++++++--
 5 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrary.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrary.cpp
index a812f298680..48164c5f9ee 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrary.cpp
+++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrary.cpp
@@ -153,6 +153,7 @@ ItemLibrary::ItemLibrary(QWidget *parent) :
     QDeclarativeItem *rootItem = qobject_cast<QDeclarativeItem*>(m_d->m_itemsView->rootObject());
     connect(rootItem, SIGNAL(itemSelected(int)), this, SLOT(showItemInfo(int)));
     connect(rootItem, SIGNAL(itemDragged(int)), this, SLOT(startDragAndDrop(int)));
+    connect(this, SIGNAL(scrollItemsView(QVariant)), rootItem, SLOT(scrollView(QVariant)));
     connect(this, SIGNAL(resetItemsView()), rootItem, SLOT(resetView()));
 
     /* create Resources view and its model */
@@ -318,4 +319,14 @@ void ItemLibrary::showItemInfo(int /*itemLibId*/)
 //    qDebug() << "showing item info about id" << itemLibId;
 }
 
+void ItemLibrary::wheelEvent(QWheelEvent *event)
+{
+    if (m_d->m_stackedWidget->currentIndex() == 0 &&
+        m_d->m_itemsView->rect().contains(event->pos())) {
+        emit scrollItemsView(event->delta());
+        event->accept();
+    } else
+        QFrame::wheelEvent(event);
+}
+
 }
diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrary.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibrary.h
index 26637e5a400..0eff37dee91 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrary.h
+++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrary.h
@@ -61,8 +61,12 @@ public Q_SLOTS:
     void startDragAndDrop(int itemLibId);
     void showItemInfo(int itemLibId);
 
+protected:
+    void wheelEvent(QWheelEvent *event);
+
 signals:
     void itemActivated(const QString& itemName);
+    void scrollItemsView(QVariant delta);
     void resetItemsView();
 
 private:
diff --git a/src/plugins/qmldesigner/components/itemlibrary/qml/ItemsView.qml b/src/plugins/qmldesigner/components/itemlibrary/qml/ItemsView.qml
index 002a003d694..6b47b38c778 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/qml/ItemsView.qml
+++ b/src/plugins/qmldesigner/components/itemlibrary/qml/ItemsView.qml
@@ -60,6 +60,10 @@ Rectangle {
 
     // public
 
+    function scrollView(delta) {
+        scrollbar.scroll(-delta / style.scrollbarWheelDeltaFactor)
+    }
+
     function resetView() {
         expandAllEntries()
         scrollbar.reset()
diff --git a/src/plugins/qmldesigner/components/itemlibrary/qml/ItemsViewStyle.qml b/src/plugins/qmldesigner/components/itemlibrary/qml/ItemsViewStyle.qml
index 13242e3ae37..1cdae226dcb 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/qml/ItemsViewStyle.qml
+++ b/src/plugins/qmldesigner/components/itemlibrary/qml/ItemsViewStyle.qml
@@ -41,6 +41,7 @@ Item {
     property string scrollbarGradientMiddleColor: "#656565"
     property string scrollbarGradientEndColor: "#888888"
     property int scrollbarClickScrollAmount: 40
+    property int scrollbarWheelDeltaFactor: 4
 
     property string itemNameTextColor: "#FFFFFF"
 
diff --git a/src/plugins/qmldesigner/components/itemlibrary/qml/Scrollbar.qml b/src/plugins/qmldesigner/components/itemlibrary/qml/Scrollbar.qml
index a882c2fa140..34dca1c30aa 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/qml/Scrollbar.qml
+++ b/src/plugins/qmldesigner/components/itemlibrary/qml/Scrollbar.qml
@@ -38,6 +38,10 @@ Item {
 
     property variant flickable
 
+    function scroll(delta) {
+        handle.y = Math.max(0, Math.min(scrollHeight, handle.y + delta))
+    }
+
     function reset() {
         handle.y = 0
     }
@@ -100,7 +104,7 @@ Item {
         anchors.right: parent.right
         anchors.top: parent.top
         anchors.bottom: handle.top
-        onClicked: handle.y = Math.max(0, handle.y - style.scrollbarClickScrollAmount)
+        onClicked: scroll(-style.scrollbarClickScrollAmount)
     }
 
     Item {
@@ -151,6 +155,6 @@ Item {
         anchors.right: parent.right
         anchors.top: handle.bottom
         anchors.bottom: parent.bottom
-        onClicked: handle.y = Math.min(scrollHeight, handle.y + style.scrollbarClickScrollAmount)
+        onClicked: scroll(style.scrollbarClickScrollAmount)
     }
 }
-- 
GitLab