From 6e8bb0c8186304a7f6d7b2eca42578362d0c546f Mon Sep 17 00:00:00 2001
From: Thomas Hartmann <Thomas.Hartmann@nokia.com>
Date: Mon, 26 Jul 2010 13:47:59 +0200
Subject: [PATCH] QmlDesigner.toolbar: refactor moving code into seperate class

---
 .../propertyeditor/contextpanewidget.cpp      | 111 ++++++++++--------
 .../propertyeditor/contextpanewidget.h        |  36 ++++--
 2 files changed, 88 insertions(+), 59 deletions(-)

diff --git a/src/plugins/qmldesigner/components/propertyeditor/contextpanewidget.cpp b/src/plugins/qmldesigner/components/propertyeditor/contextpanewidget.cpp
index 21a12894b00..260f1477a64 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/contextpanewidget.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/contextpanewidget.cpp
@@ -20,7 +20,8 @@
 
 namespace QmlDesigner {
 
-ContextPaneWidget::ContextPaneWidget(QWidget *parent) : QFrame(parent), m_currentWidget(0)
+
+DragWidget::DragWidget(QWidget *parent) : QFrame(parent)
 {
     setFrameStyle(QFrame::NoFrame);
     setFrameShape(QFrame::StyledPanel);
@@ -32,6 +33,66 @@ ContextPaneWidget::ContextPaneWidget(QWidget *parent) : QFrame(parent), m_curren
     m_dropShadowEffect->setBlurRadius(6);
     m_dropShadowEffect->setOffset(2, 2);
     setGraphicsEffect(m_dropShadowEffect);
+}
+
+void DragWidget::mousePressEvent(QMouseEvent * event)
+{
+    if (event->button() ==  Qt::LeftButton) {
+        m_oldPos = event->globalPos();
+        m_opacityEffect = new QGraphicsOpacityEffect;
+        setGraphicsEffect(m_opacityEffect);
+        event->accept();
+    }
+    QFrame::mousePressEvent(event);
+}
+
+void DragWidget::mouseReleaseEvent(QMouseEvent *event)
+{
+    if (event->button() ==  Qt::LeftButton) {
+        m_oldPos = QPoint(-1, -1);
+        m_dropShadowEffect = new QGraphicsDropShadowEffect;
+        m_dropShadowEffect->setBlurRadius(6);
+        m_dropShadowEffect->setOffset(2, 2);
+        setGraphicsEffect(m_dropShadowEffect);
+    }
+    QFrame::mouseReleaseEvent(event);
+}
+
+void DragWidget::mouseMoveEvent(QMouseEvent * event)
+{
+    if (event->buttons() &&  Qt::LeftButton) {
+        if (pos().x() < 10  && event->pos().x() < -20)
+            return;
+        if (m_oldPos != QPoint(-1, -1)) {
+            QPoint diff = event->globalPos() - m_oldPos;
+            QPoint newPos = pos() + diff;
+            if (newPos.x() > 0 && newPos.y() > 0 && (newPos.x() + width()) < parentWidget()->width() && (newPos.y() + height()) < parentWidget()->height()) {
+                if (m_secondaryTarget)
+                    m_secondaryTarget->move(m_secondaryTarget->pos() + diff);
+                move(newPos);
+                m_pos = newPos;
+            }
+        } else {
+            m_opacityEffect = new QGraphicsOpacityEffect;
+            setGraphicsEffect(m_opacityEffect);
+        }
+        m_oldPos = event->globalPos();
+        event->accept();
+    }
+}
+
+ContextPaneWidget::ContextPaneWidget(QWidget *parent) : DragWidget(parent), m_currentWidget(0)
+{
+//    setFrameStyle(QFrame::NoFrame);
+//    setFrameShape(QFrame::StyledPanel);
+//    setFrameShadow(QFrame::Sunken);
+//    m_oldPos = QPoint(-1, -1);
+//    m_pos = QPoint(-1, -1);
+
+//    m_dropShadowEffect = new QGraphicsDropShadowEffect;
+//    m_dropShadowEffect->setBlurRadius(6);
+//    m_dropShadowEffect->setOffset(2, 2);
+//    setGraphicsEffect(m_dropShadowEffect);
 
     QGridLayout *layout = new QGridLayout(this);
     layout->setMargin(0);
@@ -122,6 +183,7 @@ BauhausColorDialog *ContextPaneWidget::colorDialog()
     if (m_bauhausColorDialog.isNull()) {
         m_bauhausColorDialog = new BauhausColorDialog(parentWidget());
         m_bauhausColorDialog->hide();
+        setSecondaryTarget(m_bauhausColorDialog.data());
     }
 
     return m_bauhausColorDialog.data();
@@ -222,53 +284,6 @@ void ContextPaneWidget::onShowColorDialog(bool checked, const QPoint &p)
     }
 }
 
-void ContextPaneWidget::mousePressEvent(QMouseEvent * event)
-{
-    if (event->button() ==  Qt::LeftButton) {
-        m_oldPos = event->globalPos();
-        m_opacityEffect = new QGraphicsOpacityEffect;
-        setGraphicsEffect(m_opacityEffect);
-        event->accept();
-    }
-    QFrame::mousePressEvent(event);
-}
-
-void ContextPaneWidget::mouseReleaseEvent(QMouseEvent *event)
-{
-    if (event->button() ==  Qt::LeftButton) {
-        m_oldPos = QPoint(-1, -1);
-        m_dropShadowEffect = new QGraphicsDropShadowEffect;
-        m_dropShadowEffect->setBlurRadius(6);
-        m_dropShadowEffect->setOffset(2, 2);
-        setGraphicsEffect(m_dropShadowEffect);
-    }
-    QFrame::mouseReleaseEvent(event);
-}
-
-void ContextPaneWidget::mouseMoveEvent(QMouseEvent * event)
-{
-    if (event->buttons() &&  Qt::LeftButton) {
-        if (pos().x() < 10  && event->pos().x() < -20)
-            return;
-        if (m_oldPos != QPoint(-1, -1)) {
-            QPoint diff = event->globalPos() - m_oldPos;
-            if (m_bauhausColorDialog) {
-                QPoint newPos = pos() + diff;
-                if (newPos.x() > 0 && newPos.y() > 0 && (newPos.x() + width()) < parentWidget()->width() && (newPos.y() + height()) < parentWidget()->height()) {
-                    m_bauhausColorDialog->move(m_bauhausColorDialog->pos() + diff);
-                    move(newPos);
-                    m_pos = newPos;
-                }
-            }
-        } else {
-            m_opacityEffect = new QGraphicsOpacityEffect;
-            setGraphicsEffect(m_opacityEffect);
-        }
-        m_oldPos = event->globalPos();
-        event->accept();
-    }
-}
-
 void ContextPaneWidget::onDisable()
 {       
     DesignerSettings designerSettings = Internal::BauhausPlugin::pluginInstance()->settings();
diff --git a/src/plugins/qmldesigner/components/propertyeditor/contextpanewidget.h b/src/plugins/qmldesigner/components/propertyeditor/contextpanewidget.h
index 86e8e889b09..8f70e0ad51a 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/contextpanewidget.h
+++ b/src/plugins/qmldesigner/components/propertyeditor/contextpanewidget.h
@@ -18,7 +18,29 @@ class EasingContextPane;
 class ContextPaneWidgetRectangle;
 class ContextPaneWidgetImage;
 
-class ContextPaneWidget : public QFrame
+class DragWidget : public QFrame
+{
+    Q_OBJECT
+
+public:
+    explicit DragWidget(QWidget *parent = 0);
+    void setSecondaryTarget(QWidget* w)
+    { m_secondaryTarget = w; }
+
+protected:
+    QPoint m_pos;
+    void mousePressEvent(QMouseEvent * event);
+    void mouseReleaseEvent(QMouseEvent * event);
+    void mouseMoveEvent(QMouseEvent * event);
+
+private:
+    QGraphicsDropShadowEffect *m_dropShadowEffect;
+    QGraphicsOpacityEffect *m_opacityEffect;
+    QPoint m_oldPos;
+    QWeakPointer<QWidget> m_secondaryTarget;
+};
+
+class ContextPaneWidget : public DragWidget
 {
     Q_OBJECT
 
@@ -52,24 +74,16 @@ protected:
     QWidget *createFontWidget();
     QWidget *createEasingWidget();
     QWidget *createImageWidget();
-    QWidget *createRectangleWidget();
-
-    void mousePressEvent(QMouseEvent * event);
-    void mouseReleaseEvent(QMouseEvent * event);
-    void mouseMoveEvent(QMouseEvent * event);
+    QWidget *createRectangleWidget();    
 
 private:
     QWidget *m_currentWidget;
     ContextPaneTextWidget *m_textWidget;
     EasingContextPane *m_easingWidget;
     ContextPaneWidgetImage *m_imageWidget;
-    ContextPaneWidgetRectangle *m_rectangleWidget;
-    QPoint m_oldPos;
-    QGraphicsDropShadowEffect *m_dropShadowEffect;
-    QGraphicsOpacityEffect *m_opacityEffect;
+    ContextPaneWidgetRectangle *m_rectangleWidget;        
     QWeakPointer<BauhausColorDialog> m_bauhausColorDialog;
     QString m_colorName;
-    QPoint m_pos;
     QPoint m_originalPos;
 };
 
-- 
GitLab