QmlInspector: Unified mouse and keyboard event handling
authorThorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com>
Thu, 9 Jun 2011 11:30:47 +0000 (13:30 +0200)
committerThorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com>
Thu, 23 Jun 2011 14:26:11 +0000 (16:26 +0200)
Introduced a common AbstractTool interface so that the
AbstractViewInspector can forward mouse and keyboard events and
also implement the keys to switch tools.

The AbstractLiveEditTool still exists as the base class for all
QDeclarativeView based tools.

Change-Id: I7c00b05fba58828378543645e32732ad5f9fd5d0

14 files changed:
src/plugins/qmltooling/qmldbg_inspector/abstracttool.cpp [moved from src/plugins/qmltooling/qmldbg_inspector/sgabstracttool.cpp with 93% similarity]
src/plugins/qmltooling/qmldbg_inspector/abstracttool.h [moved from src/plugins/qmltooling/qmldbg_inspector/sgabstracttool.h with 88% similarity]
src/plugins/qmltooling/qmldbg_inspector/abstractviewinspector.cpp
src/plugins/qmltooling/qmldbg_inspector/abstractviewinspector.h
src/plugins/qmltooling/qmldbg_inspector/editor/abstractliveedittool.cpp
src/plugins/qmltooling/qmldbg_inspector/editor/abstractliveedittool.h
src/plugins/qmltooling/qmldbg_inspector/qdeclarativeviewinspector.cpp
src/plugins/qmltooling/qmldbg_inspector/qdeclarativeviewinspector.h
src/plugins/qmltooling/qmldbg_inspector/qdeclarativeviewinspector_p.h
src/plugins/qmltooling/qmldbg_inspector/qmldbg_inspector.pro
src/plugins/qmltooling/qmldbg_inspector/sgselectiontool.cpp
src/plugins/qmltooling/qmldbg_inspector/sgselectiontool.h
src/plugins/qmltooling/qmldbg_inspector/sgviewinspector.cpp
src/plugins/qmltooling/qmldbg_inspector/sgviewinspector.h

 **
 ****************************************************************************/
 
-#include "sgabstracttool.h"
+#include "abstracttool.h"
 
-#include "sgviewinspector.h"
+#include "abstractviewinspector.h"
 
 namespace QmlJSDebugger {
 
-SGAbstractTool::SGAbstractTool(SGViewInspector *inspector) :
+AbstractTool::AbstractTool(AbstractViewInspector *inspector) :
     QObject(inspector),
     m_inspector(inspector)
 {
@@ -39,8 +39,8 @@
 **
 ****************************************************************************/
 
-#ifndef SGABSTRACTTOOL_H
-#define SGABSTRACTTOOL_H
+#ifndef ABSTRACTTOOL_H
+#define ABSTRACTTOOL_H
 
 #include <QtCore/QObject>
 
@@ -52,16 +52,16 @@ QT_END_NAMESPACE
 
 namespace QmlJSDebugger {
 
-class SGViewInspector;
+class AbstractViewInspector;
 
-class SGAbstractTool : public QObject
+class AbstractTool : public QObject
 {
     Q_OBJECT
 
 public:
-    explicit SGAbstractTool(SGViewInspector *inspector);
+    explicit AbstractTool(AbstractViewInspector *inspector);
 
-    SGViewInspector *inspector() const { return m_inspector; }
+    AbstractViewInspector *inspector() const { return m_inspector; }
 
     virtual void leaveEvent(QEvent *event) = 0;
 
@@ -77,9 +77,9 @@ public:
     virtual void keyReleaseEvent(QKeyEvent *keyEvent) = 0;
 
 private:
-    SGViewInspector *m_inspector;
+    AbstractViewInspector *m_inspector;
 };
 
 } // namespace QmlJSDebugger
 
-#endif // SGABSTRACTTOOL_H
+#endif // ABSTRACTTOOL_H
index a698819..3323d54 100644 (file)
@@ -41,6 +41,7 @@
 
 #include "abstractviewinspector.h"
 
+#include "abstracttool.h"
 #include "editor/qmltoolbar.h"
 #include "qdeclarativeinspectorprotocol.h"
 
@@ -50,6 +51,7 @@
 #include "QtDeclarative/private/qdeclarativeinspectorservice_p.h"
 
 #include <QtGui/QVBoxLayout>
+#include <QtGui/QMouseEvent>
 #include <QtCore/QSettings>
 
 static inline void initEditorResource() { Q_INIT_RESOURCE(editor); }
@@ -99,6 +101,7 @@ ToolBox::~ToolBox()
 AbstractViewInspector::AbstractViewInspector(QObject *parent) :
     QObject(parent),
     m_toolBox(0),
+    m_currentTool(0),
     m_showAppOnTop(false),
     m_designModeBehavior(false),
     m_animationPaused(false),
@@ -284,6 +287,124 @@ void AbstractViewInspector::changeToMarqueeSelectTool()
     changeTool(InspectorProtocol::SelectMarqueeTool);
 }
 
+bool AbstractViewInspector::eventFilter(QObject *obj, QEvent *event)
+{
+    if (!designModeBehavior())
+        return QObject::eventFilter(obj, event);
+
+    switch (event->type()) {
+    case QEvent::Leave:
+        if (leaveEvent(event))
+            return true;
+        break;
+    case QEvent::MouseButtonPress:
+        if (mousePressEvent(static_cast<QMouseEvent*>(event)))
+            return true;
+        break;
+    case QEvent::MouseMove:
+        if (mouseMoveEvent(static_cast<QMouseEvent*>(event)))
+            return true;
+        break;
+    case QEvent::MouseButtonRelease:
+        if (mouseReleaseEvent(static_cast<QMouseEvent*>(event)))
+            return true;
+        break;
+    case QEvent::KeyPress:
+        if (keyPressEvent(static_cast<QKeyEvent*>(event)))
+            return true;
+        break;
+    case QEvent::KeyRelease:
+        if (keyReleaseEvent(static_cast<QKeyEvent*>(event)))
+            return true;
+        break;
+    case QEvent::MouseButtonDblClick:
+        if (mouseDoubleClickEvent(static_cast<QMouseEvent*>(event)))
+            return true;
+        break;
+    case QEvent::Wheel:
+        if (wheelEvent(static_cast<QWheelEvent*>(event)))
+            return true;
+        break;
+    default:
+        break;
+    }
+
+    return QObject::eventFilter(obj, event);
+}
+
+bool AbstractViewInspector::leaveEvent(QEvent *event)
+{
+    m_currentTool->leaveEvent(event);
+    return true;
+}
+
+bool AbstractViewInspector::mousePressEvent(QMouseEvent *event)
+{
+    m_currentTool->mousePressEvent(event);
+    return true;
+}
+
+bool AbstractViewInspector::mouseMoveEvent(QMouseEvent *event)
+{
+    if (event->buttons()) {
+        m_currentTool->mouseMoveEvent(event);
+    } else {
+        m_currentTool->hoverMoveEvent(event);
+    }
+    return true;
+}
+
+bool AbstractViewInspector::mouseReleaseEvent(QMouseEvent *event)
+{
+    m_currentTool->mouseReleaseEvent(event);
+    return true;
+}
+
+bool AbstractViewInspector::keyPressEvent(QKeyEvent *event)
+{
+    m_currentTool->keyPressEvent(event);
+    return true;
+}
+
+bool AbstractViewInspector::keyReleaseEvent(QKeyEvent *event)
+{
+    switch (event->key()) {
+    case Qt::Key_V:
+        changeTool(InspectorProtocol::SelectTool);
+        break;
+// disabled because multiselection does not do anything useful without design mode
+//    case Qt::Key_M:
+//        changeTool(InspectorProtocol::SelectMarqueeTool);
+//        break;
+    case Qt::Key_I:
+        changeTool(InspectorProtocol::ColorPickerTool);
+        break;
+    case Qt::Key_Z:
+        changeTool(InspectorProtocol::ZoomTool);
+        break;
+    case Qt::Key_Space:
+        setAnimationPaused(!animationPaused());
+        break;
+    default:
+        break;
+    }
+
+    m_currentTool->keyReleaseEvent(event);
+    return true;
+}
+
+bool AbstractViewInspector::mouseDoubleClickEvent(QMouseEvent *event)
+{
+    m_currentTool->mouseDoubleClickEvent(event);
+    return true;
+}
+
+bool AbstractViewInspector::wheelEvent(QWheelEvent *event)
+{
+    m_currentTool->wheelEvent(event);
+    return true;
+}
+
 void AbstractViewInspector::handleMessage(const QByteArray &message)
 {
     QDataStream ds(message);
index 0a56ead..7202bcc 100644 (file)
 QT_BEGIN_NAMESPACE
 class QDeclarativeEngine;
 class QDeclarativeInspectorService;
+class QKeyEvent;
+class QMouseEvent;
+class QWheelEvent;
 QT_END_NAMESPACE
 
 namespace QmlJSDebugger {
 
+class AbstractTool;
 class ToolBox;
 
 /*
@@ -131,6 +135,21 @@ signals:
     void animationSpeedChanged(qreal factor);
     void animationPausedChanged(bool paused);
 
+protected:
+    bool eventFilter(QObject *, QEvent *);
+
+    virtual bool leaveEvent(QEvent *);
+    virtual bool mousePressEvent(QMouseEvent *event);
+    virtual bool mouseMoveEvent(QMouseEvent *event);
+    virtual bool mouseReleaseEvent(QMouseEvent *event);
+    virtual bool keyPressEvent(QKeyEvent *event);
+    virtual bool keyReleaseEvent(QKeyEvent *keyEvent);
+    virtual bool mouseDoubleClickEvent(QMouseEvent *event);
+    virtual bool wheelEvent(QWheelEvent *event);
+
+    AbstractTool *currentTool() const { return m_currentTool; }
+    void setCurrentTool(AbstractTool *tool) { m_currentTool = tool; }
+
 private slots:
     void handleMessage(const QByteArray &message);
 
@@ -142,6 +161,7 @@ private:
     void createToolBox();
 
     ToolBox *m_toolBox;
+    AbstractTool *m_currentTool;
 
     bool m_showAppOnTop;
     bool m_designModeBehavior;
index 4353e97..dce147c 100644 (file)
@@ -51,7 +51,7 @@
 namespace QmlJSDebugger {
 
 AbstractLiveEditTool::AbstractLiveEditTool(QDeclarativeViewInspector *editorView)
-    : QObject(editorView), m_inspector(editorView)
+    : AbstractTool(editorView)
 {
 }
 
@@ -62,12 +62,12 @@ AbstractLiveEditTool::~AbstractLiveEditTool()
 
 QDeclarativeViewInspector *AbstractLiveEditTool::inspector() const
 {
-    return m_inspector;
+    return static_cast<QDeclarativeViewInspector*>(AbstractTool::inspector());
 }
 
 QDeclarativeView *AbstractLiveEditTool::view() const
 {
-    return m_inspector->declarativeView();
+    return inspector()->declarativeView();
 }
 
 QGraphicsScene* AbstractLiveEditTool::scene() const
@@ -175,7 +175,7 @@ QString AbstractLiveEditTool::titleForItem(QGraphicsItem *item)
 
         QDeclarativeItem *declarativeItem = qobject_cast<QDeclarativeItem*>(gfxObject);
         if (declarativeItem) {
-            objectStringId = m_inspector->idStringForObject(declarativeItem);
+            objectStringId = inspector()->idStringForObject(declarativeItem);
         }
 
         if (!objectStringId.isEmpty()) {
index accec79..04b5f4e 100644 (file)
@@ -43,7 +43,7 @@
 #define ABSTRACTLIVEEDITTOOL_H
 
 #include <QtCore/QList>
-#include <QtCore/QObject>
+#include "../abstracttool.h"
 
 QT_BEGIN_NAMESPACE
 class QMouseEvent;
@@ -60,7 +60,7 @@ namespace QmlJSDebugger {
 
 class QDeclarativeViewInspector;
 
-class AbstractLiveEditTool : public QObject
+class AbstractLiveEditTool : public AbstractTool
 {
     Q_OBJECT
 public:
@@ -68,16 +68,8 @@ public:
 
     virtual ~AbstractLiveEditTool();
 
-    virtual void mousePressEvent(QMouseEvent *event) = 0;
-    virtual void mouseMoveEvent(QMouseEvent *event) = 0;
-    virtual void mouseReleaseEvent(QMouseEvent *event) = 0;
-    virtual void mouseDoubleClickEvent(QMouseEvent *event) = 0;
+    void leaveEvent(QEvent *) {}
 
-    virtual void hoverMoveEvent(QMouseEvent *event) = 0;
-    virtual void wheelEvent(QWheelEvent *event) = 0;
-
-    virtual void keyPressEvent(QKeyEvent *event) = 0;
-    virtual void keyReleaseEvent(QKeyEvent *keyEvent) = 0;
     virtual void itemsAboutToRemoved(const QList<QGraphicsItem*> &itemList) = 0;
 
     virtual void clear() = 0;
@@ -104,7 +96,6 @@ protected:
     QGraphicsScene *scene() const;
 
 private:
-    QDeclarativeViewInspector *m_inspector;
     QList<QGraphicsItem*> m_itemList;
 };
 
index 462fd19..67a581d 100644 (file)
 #include "editor/boundingrecthighlighter.h"
 
 #include <QtDeclarative/QDeclarativeItem>
-#include <QtDeclarative/QDeclarativeEngine>
-#include <QtDeclarative/QDeclarativeContext>
-#include <QtDeclarative/QDeclarativeExpression>
 #include <QtGui/QWidget>
 #include <QtGui/QMouseEvent>
 #include <QtGui/QGraphicsObject>
-#include <QtGui/QApplication>
 
 namespace QmlJSDebugger {
 
@@ -79,7 +75,7 @@ QDeclarativeViewInspector::QDeclarativeViewInspector(QDeclarativeView *view,
     data->zoomTool = new ZoomTool(this);
     data->colorPickerTool = new ColorPickerTool(this);
     data->boundingRectHighlighter = new BoundingRectHighlighter(this);
-    data->currentTool = data->selectionTool;
+    setCurrentTool(data->selectionTool);
 
     // to capture ChildRemoved event when viewport changes
     data->view->installEventFilter(this);
@@ -142,6 +138,11 @@ void QDeclarativeViewInspector::changeTool(InspectorProtocol::Tool tool)
     }
 }
 
+AbstractLiveEditTool *QDeclarativeViewInspector::currentTool() const
+{
+    return static_cast<AbstractLiveEditTool*>(AbstractViewInspector::currentTool());
+}
+
 QDeclarativeEngine *QDeclarativeViewInspector::declarativeEngine() const
 {
     return data->view->engine();
@@ -181,143 +182,39 @@ bool QDeclarativeViewInspector::eventFilter(QObject *obj, QEvent *event)
         return QObject::eventFilter(obj, event);
     }
 
-    // Event from viewport
-    switch (event->type()) {
-    case QEvent::Leave: {
-        if (leaveEvent(event))
-            return true;
-        break;
-    }
-    case QEvent::MouseButtonPress: {
-        if (mousePressEvent(static_cast<QMouseEvent*>(event)))
-            return true;
-        break;
-    }
-    case QEvent::MouseMove: {
-        if (mouseMoveEvent(static_cast<QMouseEvent*>(event)))
-            return true;
-        break;
-    }
-    case QEvent::MouseButtonRelease: {
-        if (mouseReleaseEvent(static_cast<QMouseEvent*>(event)))
-            return true;
-        break;
-    }
-    case QEvent::KeyPress: {
-        if (keyPressEvent(static_cast<QKeyEvent*>(event)))
-            return true;
-        break;
-    }
-    case QEvent::KeyRelease: {
-        if (keyReleaseEvent(static_cast<QKeyEvent*>(event)))
-            return true;
-        break;
-    }
-    case QEvent::MouseButtonDblClick: {
-        if (mouseDoubleClickEvent(static_cast<QMouseEvent*>(event)))
-            return true;
-        break;
-    }
-    case QEvent::Wheel: {
-        if (wheelEvent(static_cast<QWheelEvent*>(event)))
-            return true;
-        break;
-    }
-    default: {
-        break;
-    }
-    } //switch
-
-    // standard event processing
-    return QObject::eventFilter(obj, event);
+    return AbstractViewInspector::eventFilter(obj, event);
 }
 
-bool QDeclarativeViewInspector::leaveEvent(QEvent * /*event*/)
+bool QDeclarativeViewInspector::leaveEvent(QEvent *event)
 {
-    if (!designModeBehavior())
-        return false;
     data->clearHighlight();
-    return true;
+    return AbstractViewInspector::leaveEvent(event);
 }
 
 bool QDeclarativeViewInspector::mousePressEvent(QMouseEvent *event)
 {
-    if (!designModeBehavior())
-        return false;
     data->cursorPos = event->pos();
-    data->currentTool->mousePressEvent(event);
-    return true;
+    return AbstractViewInspector::mousePressEvent(event);
 }
 
 bool QDeclarativeViewInspector::mouseMoveEvent(QMouseEvent *event)
 {
-    if (!designModeBehavior()) {
-        data->clearEditorItems();
-        return false;
-    }
     data->cursorPos = event->pos();
 
     QList<QGraphicsItem*> selItems = data->selectableItems(event->pos());
     if (!selItems.isEmpty()) {
-        declarativeView()->setToolTip(data->currentTool->titleForItem(selItems.first()));
+        declarativeView()->setToolTip(currentTool()->titleForItem(selItems.first()));
     } else {
         declarativeView()->setToolTip(QString());
     }
-    if (event->buttons()) {
-        data->currentTool->mouseMoveEvent(event);
-    } else {
-        data->currentTool->hoverMoveEvent(event);
-    }
-    return true;
+
+    return AbstractViewInspector::mouseMoveEvent(event);
 }
 
 bool QDeclarativeViewInspector::mouseReleaseEvent(QMouseEvent *event)
 {
-    if (!designModeBehavior())
-        return false;
-
     data->cursorPos = event->pos();
-    data->currentTool->mouseReleaseEvent(event);
-    return true;
-}
-
-bool QDeclarativeViewInspector::keyPressEvent(QKeyEvent *event)
-{
-    if (!designModeBehavior())
-        return false;
-
-    data->currentTool->keyPressEvent(event);
-    return true;
-}
-
-bool QDeclarativeViewInspector::keyReleaseEvent(QKeyEvent *event)
-{
-    if (!designModeBehavior())
-        return false;
-
-    switch (event->key()) {
-    case Qt::Key_V:
-        changeTool(InspectorProtocol::SelectTool);
-        break;
-// disabled because multiselection does not do anything useful without design mode
-//    case Qt::Key_M:
-//        changeTool(InspectorProtocol::SelectMarqueeTool);
-//        break;
-    case Qt::Key_I:
-        changeTool(InspectorProtocol::ColorPickerTool);
-        break;
-    case Qt::Key_Z:
-        changeTool(InspectorProtocol::ZoomTool);
-        break;
-    case Qt::Key_Space:
-        setAnimationPaused(!animationPaused());
-        break;
-    default:
-        break;
-    }
-
-    data->currentTool->keyReleaseEvent(event);
-    return true;
+    return AbstractViewInspector::mouseReleaseEvent(event);
 }
 
 void QDeclarativeViewInspector::reparentQmlObject(QObject *object, QObject *newParent)
@@ -340,22 +237,6 @@ void QDeclarativeViewInspectorPrivate::_q_removeFromSelection(QObject *obj)
     setSelectedItems(items);
 }
 
-bool QDeclarativeViewInspector::mouseDoubleClickEvent(QMouseEvent * /*event*/)
-{
-    if (!designModeBehavior())
-        return false;
-
-    return true;
-}
-
-bool QDeclarativeViewInspector::wheelEvent(QWheelEvent *event)
-{
-    if (!designModeBehavior())
-        return false;
-    data->currentTool->wheelEvent(event);
-    return true;
-}
-
 void QDeclarativeViewInspectorPrivate::setSelectedItemsForTools(const QList<QGraphicsItem *> &items)
 {
     foreach (const QWeakPointer<QGraphicsObject> &obj, currentSelection) {
@@ -378,7 +259,7 @@ void QDeclarativeViewInspectorPrivate::setSelectedItemsForTools(const QList<QGra
         }
     }
 
-    currentTool->updateSelectedItems();
+    q->currentTool()->updateSelectedItems();
 }
 
 void QDeclarativeViewInspectorPrivate::setSelectedItems(const QList<QGraphicsItem *> &items)
@@ -468,7 +349,6 @@ QList<QGraphicsItem*> QDeclarativeViewInspectorPrivate::selectableItems(
 
 void QDeclarativeViewInspectorPrivate::changeToSingleSelectTool()
 {
-    currentToolMode = Constants::SelectionToolMode;
     selectionTool->setRubberbandSelectionMode(false);
 
     changeToSelectTool();
@@ -479,19 +359,18 @@ void QDeclarativeViewInspectorPrivate::changeToSingleSelectTool()
 
 void QDeclarativeViewInspectorPrivate::changeToSelectTool()
 {
-    if (currentTool == selectionTool)
+    if (q->currentTool() == selectionTool)
         return;
 
-    currentTool->clear();
-    currentTool = selectionTool;
-    currentTool->clear();
-    currentTool->updateSelectedItems();
+    q->currentTool()->clear();
+    q->setCurrentTool(selectionTool);
+    q->currentTool()->clear();
+    q->currentTool()->updateSelectedItems();
 }
 
 void QDeclarativeViewInspectorPrivate::changeToMarqueeSelectTool()
 {
     changeToSelectTool();
-    currentToolMode = Constants::MarqueeSelectionToolMode;
     selectionTool->setRubberbandSelectionMode(true);
 
     emit q->marqueeSelectToolActivated();
@@ -500,10 +379,9 @@ void QDeclarativeViewInspectorPrivate::changeToMarqueeSelectTool()
 
 void QDeclarativeViewInspectorPrivate::changeToZoomTool()
 {
-    currentToolMode = Constants::ZoomMode;
-    currentTool->clear();
-    currentTool = zoomTool;
-    currentTool->clear();
+    q->currentTool()->clear();
+    q->setCurrentTool(zoomTool);
+    q->currentTool()->clear();
 
     emit q->zoomToolActivated();
     q->sendCurrentTool(Constants::ZoomMode);
@@ -511,13 +389,12 @@ void QDeclarativeViewInspectorPrivate::changeToZoomTool()
 
 void QDeclarativeViewInspectorPrivate::changeToColorPickerTool()
 {
-    if (currentTool == colorPickerTool)
+    if (q->currentTool() == colorPickerTool)
         return;
 
-    currentToolMode = Constants::ColorPickerMode;
-    currentTool->clear();
-    currentTool = colorPickerTool;
-    currentTool->clear();
+    q->currentTool()->clear();
+    q->setCurrentTool(colorPickerTool);
+    q->currentTool()->clear();
 
     emit q->colorPickerActivated();
     q->sendCurrentTool(Constants::ColorPickerMode);
index c08ef54..3cd53ff 100644 (file)
 #include <QtCore/QScopedPointer>
 #include <QtDeclarative/QDeclarativeView>
 
-QT_FORWARD_DECLARE_CLASS(QDeclarativeItem)
-QT_FORWARD_DECLARE_CLASS(QMouseEvent)
-QT_FORWARD_DECLARE_CLASS(QToolBar)
-
 namespace QmlJSDebugger {
 
+class AbstractLiveEditTool;
 class QDeclarativeViewInspectorPrivate;
 
 class QDeclarativeViewInspector : public AbstractViewInspector
@@ -88,12 +85,8 @@ protected:
     bool mousePressEvent(QMouseEvent *event);
     bool mouseMoveEvent(QMouseEvent *event);
     bool mouseReleaseEvent(QMouseEvent *event);
-    bool keyPressEvent(QKeyEvent *event);
-    bool keyReleaseEvent(QKeyEvent *keyEvent);
-    bool mouseDoubleClickEvent(QMouseEvent *event);
-    bool wheelEvent(QWheelEvent *event);
 
-    void setSelectedItemsForTools(QList<QGraphicsItem *> items);
+    AbstractLiveEditTool *currentTool() const;
 
 private:
     Q_DISABLE_COPY(QDeclarativeViewInspector)
index cd8d749..a6e6a3c 100644 (file)
@@ -73,9 +73,6 @@ public:
     QPointF cursorPos;
     QList<QWeakPointer<QGraphicsObject> > currentSelection;
 
-    Constants::DesignTool currentToolMode;
-    AbstractLiveEditTool *currentTool;
-
     LiveSelectionTool *selectionTool;
     ZoomTool *zoomTool;
     ColorPickerTool *colorPickerTool;
index 9d717a0..355395c 100644 (file)
@@ -25,7 +25,7 @@ SOURCES += \
     editor/colorpickertool.cpp \
     editor/qmltoolbar.cpp \
     editor/toolbarcolorbox.cpp \
-    sgabstracttool.cpp \
+    abstracttool.cpp \
     sgviewinspector.cpp \
     sgselectiontool.cpp
 
@@ -49,7 +49,7 @@ HEADERS += \
     editor/colorpickertool.h \
     editor/qmltoolbar.h \
     editor/toolbarcolorbox.h \
-    sgabstracttool.h \
+    abstracttool.h \
     sgviewinspector.h \
     sgselectiontool.h
 
index 828e64a..c233cf6 100644 (file)
@@ -86,7 +86,7 @@ static QSGItem *itemAt(QSGItem *item, const QPointF &pos, QSGItem *overlay)
 
 
 SGSelectionTool::SGSelectionTool(SGViewInspector *inspector) :
-    SGAbstractTool(inspector),
+    AbstractTool(inspector),
     m_hoverHighlight(new QSGRectangle(inspector->overlay()))
 {
     m_hoverHighlight->border()->setColor(QColor(64, 128, 255));
@@ -100,9 +100,10 @@ void SGSelectionTool::leaveEvent(QEvent *)
 
 void SGSelectionTool::hoverMoveEvent(QMouseEvent *event)
 {
-    QSGItem *root = inspector()->view()->rootItem();
+    SGViewInspector *sgInspector = static_cast<SGViewInspector*>(inspector());
+    QSGItem *root = sgInspector->view()->rootItem();
     QPointF mappedPos = root->mapFromScene(event->pos());
-    QSGItem *item = itemAt(root, mappedPos, inspector()->overlay());
+    QSGItem *item = itemAt(root, mappedPos, sgInspector->overlay());
     if (!item || item == root) {
         m_hoverHighlight->setVisible(false);
         return;
index 10a4428..f794691 100644 (file)
@@ -42,7 +42,7 @@
 #ifndef SGSELECTIONTOOL_H
 #define SGSELECTIONTOOL_H
 
-#include "sgabstracttool.h"
+#include "abstracttool.h"
 
 #include <QtCore/QList>
 
@@ -50,7 +50,9 @@ QT_FORWARD_DECLARE_CLASS(QSGRectangle)
 
 namespace QmlJSDebugger {
 
-class SGSelectionTool : public SGAbstractTool
+class SGViewInspector;
+
+class SGSelectionTool : public AbstractTool
 {
     Q_OBJECT
 public:
index 7a4eaf5..ec68ef9 100644 (file)
@@ -42,8 +42,6 @@
 #include "sgviewinspector.h"
 
 #include "qdeclarativeinspectorprotocol.h"
-
-#include "sgabstracttool.h"
 #include "sgselectiontool.h"
 
 #include <QtDeclarative/private/qdeclarativeinspectorservice_p.h>
@@ -61,7 +59,6 @@ SGViewInspector::SGViewInspector(QSGView *view, QObject *parent) :
     AbstractViewInspector(parent),
     m_view(view),
     m_overlay(new QSGItem),
-    m_currentTool(0),
     m_selectionTool(new SGSelectionTool(this)),
     m_designMode(true)
 {
@@ -75,7 +72,7 @@ SGViewInspector::SGViewInspector(QSGView *view, QObject *parent) :
         m_overlay->setParentItem(root);
 
     view->installEventFilter(this);
-    m_currentTool = m_selectionTool;
+    setCurrentTool(m_selectionTool);
 }
 
 void SGViewInspector::changeCurrentObjects(const QList<QObject*> &objects)
@@ -118,7 +115,7 @@ void SGViewInspector::changeTool(InspectorProtocol::Tool tool)
         emit marqueeSelectToolActivated();
         break;
     case InspectorProtocol::SelectTool:
-        m_currentTool = m_selectionTool;
+        setCurrentTool(m_selectionTool);
         emit selectToolActivated();
         break;
     case InspectorProtocol::ZoomTool:
@@ -180,104 +177,10 @@ void SGViewInspector::removeFromSelectedItems(QObject *object)
 
 bool SGViewInspector::eventFilter(QObject *obj, QEvent *event)
 {
-    if (obj != m_view || !m_designMode)
+    if (obj != m_view)
         return QObject::eventFilter(obj, event);
 
-    switch (event->type()) {
-    case QEvent::Leave:
-        if (leaveEvent(event))
-            return true;
-        break;
-    case QEvent::MouseButtonPress:
-        if (mousePressEvent(static_cast<QMouseEvent*>(event)))
-            return true;
-        break;
-    case QEvent::MouseMove:
-        if (mouseMoveEvent(static_cast<QMouseEvent*>(event)))
-            return true;
-        break;
-    case QEvent::MouseButtonRelease:
-        if (mouseReleaseEvent(static_cast<QMouseEvent*>(event)))
-            return true;
-        break;
-    case QEvent::KeyPress:
-        if (keyPressEvent(static_cast<QKeyEvent*>(event)))
-            return true;
-        break;
-    case QEvent::KeyRelease:
-        if (keyReleaseEvent(static_cast<QKeyEvent*>(event)))
-            return true;
-        break;
-    case QEvent::MouseButtonDblClick:
-        if (mouseDoubleClickEvent(static_cast<QMouseEvent*>(event)))
-            return true;
-        break;
-    case QEvent::Wheel:
-        if (wheelEvent(static_cast<QWheelEvent*>(event)))
-            return true;
-        break;
-    default:
-        break;
-    }
-
-    return QObject::eventFilter(obj, event);
-}
-
-bool SGViewInspector::leaveEvent(QEvent *event)
-{
-    m_currentTool->leaveEvent(event);
-    return true;
-}
-
-bool SGViewInspector::mousePressEvent(QMouseEvent *event)
-{
-    m_currentTool->mousePressEvent(event);
-    return true;
-}
-
-bool SGViewInspector::mouseMoveEvent(QMouseEvent *event)
-{
-    if (event->buttons()) {
-        m_currentTool->mouseMoveEvent(event);
-    } else {
-        m_currentTool->hoverMoveEvent(event);
-    }
-    return true;
-}
-
-bool SGViewInspector::mouseReleaseEvent(QMouseEvent *event)
-{
-    m_currentTool->mouseReleaseEvent(event);
-    return true;
-}
-
-bool SGViewInspector::keyPressEvent(QKeyEvent *event)
-{
-    m_currentTool->keyPressEvent(event);
-    return true;
-}
-
-bool SGViewInspector::keyReleaseEvent(QKeyEvent *event)
-{
-    switch (event->key()) {
-    default:
-        break;
-    }
-
-    m_currentTool->keyReleaseEvent(event);
-    return true;
-}
-
-bool SGViewInspector::mouseDoubleClickEvent(QMouseEvent *event)
-{
-    m_currentTool->mouseDoubleClickEvent(event);
-    return true;
-}
-
-bool SGViewInspector::wheelEvent(QWheelEvent *event)
-{
-    m_currentTool->wheelEvent(event);
-    return true;
+    return AbstractViewInspector::eventFilter(obj, event);
 }
 
 } // namespace QmlJSDebugger
index 6173c49..2a7cb6c 100644 (file)
 #include <QtCore/QWeakPointer>
 
 QT_BEGIN_NAMESPACE
-class QMouseEvent;
-class QKeyEvent;
-class QWheelEvent;
-
 class QSGView;
 class QSGItem;
 QT_END_NAMESPACE
 
 namespace QmlJSDebugger {
 
-class SGAbstractTool;
 class SGSelectionTool;
 
 class SGViewInspector : public AbstractViewInspector
@@ -86,18 +81,8 @@ private slots:
     void removeFromSelectedItems(QObject *);
 
 private:
-    bool leaveEvent(QEvent *);
-    bool mousePressEvent(QMouseEvent *event);
-    bool mouseMoveEvent(QMouseEvent *event);
-    bool mouseReleaseEvent(QMouseEvent *event);
-    bool keyPressEvent(QKeyEvent *event);
-    bool keyReleaseEvent(QKeyEvent *keyEvent);
-    bool mouseDoubleClickEvent(QMouseEvent *event);
-    bool wheelEvent(QWheelEvent *event);
-
     QSGView *m_view;
     QSGItem *m_overlay;
-    SGAbstractTool *m_currentTool;
 
     SGSelectionTool *m_selectionTool;