QmlDesigner: Track usage of graphical views

Change-Id: I0631816980178100dcd61b65d792fc38504199d5
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
This commit is contained in:
Thomas Hartmann
2020-11-20 12:24:58 +01:00
parent 83036eff4c
commit f7fa53d29b
13 changed files with 109 additions and 1 deletions

View File

@@ -29,6 +29,9 @@
#include "graphicsview.h" #include "graphicsview.h"
#include "handleitem.h" #include "handleitem.h"
#include <qmldesignerconstants.h>
#include <qmldesignerplugin.h>
#include <QGraphicsSceneMouseEvent> #include <QGraphicsSceneMouseEvent>
#include <cmath> #include <cmath>
@@ -425,6 +428,19 @@ void GraphicsScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent)
graphicsView()->setZoomY(0.0); graphicsView()->setZoomY(0.0);
} }
void GraphicsScene::focusOutEvent(QFocusEvent *focusEvent)
{
QmlDesignerPlugin::emitUsageStatisticsTime(Constants::EVENT_CURVEDITOR_TIME,
m_usageTimer.elapsed());
QGraphicsScene::focusOutEvent(focusEvent);
}
void GraphicsScene::focusInEvent(QFocusEvent *focusEvent)
{
m_usageTimer.restart();
QGraphicsScene::focusInEvent(focusEvent);
}
GraphicsView *GraphicsScene::graphicsView() const GraphicsView *GraphicsScene::graphicsView() const
{ {
const QList<QGraphicsView *> viewList = views(); const QList<QGraphicsView *> viewList = views();

View File

@@ -27,6 +27,7 @@
#include "keyframeitem.h" #include "keyframeitem.h"
#include <QElapsedTimer>
#include <QGraphicsScene> #include <QGraphicsScene>
namespace QmlDesigner { namespace QmlDesigner {
@@ -120,6 +121,10 @@ protected:
void mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent) override; void mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent) override;
void focusOutEvent(QFocusEvent *focusEvent) override;
void focusInEvent(QFocusEvent *focusEvent) override;
private: private:
using QGraphicsScene::addItem; using QGraphicsScene::addItem;
@@ -140,6 +145,8 @@ private:
mutable QRectF m_limits; mutable QRectF m_limits;
bool m_doNotMoveItems; bool m_doNotMoveItems;
QElapsedTimer m_usageTimer;
}; };
} // End namespace QmlDesigner. } // End namespace QmlDesigner.

View File

@@ -30,6 +30,9 @@
#include "nodehints.h" #include "nodehints.h"
#include "qmlvisualnode.h" #include "qmlvisualnode.h"
#include <qmldesignerplugin.h>
#include <qmldesignerconstants.h>
#include <QtCore/qmimedata.h> #include <QtCore/qmimedata.h>
#include <QPainter> #include <QPainter>
@@ -132,4 +135,17 @@ void Edit3DCanvas::dropEvent(QDropEvent *e)
} }
} }
void Edit3DCanvas::focusOutEvent(QFocusEvent *focusEvent)
{
QmlDesignerPlugin::emitUsageStatisticsTime(Constants::EVENT_3DEDITOR_TIME,
m_usageTimer.elapsed());
QWidget::focusOutEvent(focusEvent);
}
void Edit3DCanvas::focusInEvent(QFocusEvent *focusEvent)
{
m_usageTimer.restart();
QWidget::focusInEvent(focusEvent);
}
} }

View File

@@ -29,6 +29,7 @@
#include <QtWidgets/qwidget.h> #include <QtWidgets/qwidget.h>
#include <QtGui/qimage.h> #include <QtGui/qimage.h>
#include <QtGui/qevent.h> #include <QtGui/qevent.h>
#include <QTCore/qelapsedtimer.h>
#include <QtCore/qpointer.h> #include <QtCore/qpointer.h>
namespace QmlDesigner { namespace QmlDesigner {
@@ -57,12 +58,15 @@ protected:
void resizeEvent(QResizeEvent *e) override; void resizeEvent(QResizeEvent *e) override;
void dragEnterEvent(QDragEnterEvent *e) override; void dragEnterEvent(QDragEnterEvent *e) override;
void dropEvent(QDropEvent *e) override; void dropEvent(QDropEvent *e) override;
void focusOutEvent(QFocusEvent *focusEvent) override;
void focusInEvent(QFocusEvent *focusEvent) override;
private: private:
QPointer<Edit3DWidget> m_parent; QPointer<Edit3DWidget> m_parent;
QImage m_image; QImage m_image;
qint32 m_activeScene = -1; qint32 m_activeScene = -1;
ItemLibraryEntry m_itemLibraryEntry; ItemLibraryEntry m_itemLibraryEntry;
QElapsedTimer m_usageTimer;
}; };
} // namespace QmlDesigner } // namespace QmlDesigner

View File

@@ -28,6 +28,7 @@
#include "formeditorwidget.h" #include "formeditorwidget.h"
#include "formeditoritem.h" #include "formeditoritem.h"
#include <nodehints.h> #include <nodehints.h>
#include <qmldesignerconstants.h>
#include <qmldesignerplugin.h> #include <qmldesignerplugin.h>
#include <designersettings.h> #include <designersettings.h>
@@ -321,10 +322,21 @@ void FormEditorScene::keyReleaseEvent(QKeyEvent *keyEvent)
currentTool()->keyReleaseEvent(keyEvent); currentTool()->keyReleaseEvent(keyEvent);
} }
void FormEditorScene::focusOutEvent(QFocusEvent *) void FormEditorScene::focusOutEvent(QFocusEvent *focusEvent)
{ {
if (currentTool()) if (currentTool())
currentTool()->focusLost(); currentTool()->focusLost();
QmlDesignerPlugin::emitUsageStatisticsTime(Constants::EVENT_FORMEDITOR_TIME,
m_usageTimer.elapsed());
QGraphicsScene::focusOutEvent(focusEvent);
}
void FormEditorScene::focusInEvent(QFocusEvent *focusEvent)
{
m_usageTimer.restart();
QGraphicsScene::focusInEvent(focusEvent);
} }
FormEditorView *FormEditorScene::editorView() const FormEditorView *FormEditorScene::editorView() const

View File

@@ -30,6 +30,7 @@
#include <QGraphicsScene> #include <QGraphicsScene>
#include <QPointer> #include <QPointer>
#include <QHash> #include <QHash>
#include <QElapsedTimer>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QGraphicsSceneMouseEvent; class QGraphicsSceneMouseEvent;
@@ -119,6 +120,7 @@ protected:
void keyReleaseEvent(QKeyEvent *keyEvent) override; void keyReleaseEvent(QKeyEvent *keyEvent) override;
void focusOutEvent(QFocusEvent *focusEvent) override; void focusOutEvent(QFocusEvent *focusEvent) override;
void focusInEvent(QFocusEvent *focusEvent) override;
private: private:
QList<QGraphicsItem *> removeLayerItems(const QList<QGraphicsItem *> &itemList); QList<QGraphicsItem *> removeLayerItems(const QList<QGraphicsItem *> &itemList);
@@ -135,6 +137,7 @@ private:
ModelNode m_dragNode; ModelNode m_dragNode;
bool m_showBoundingRects; bool m_showBoundingRects;
bool m_annotationVisibility; bool m_annotationVisibility;
QElapsedTimer m_usageTimer;
}; };
} // namespace QmlDesigner } // namespace QmlDesigner

View File

@@ -42,6 +42,7 @@
#include <rewritertransaction.h> #include <rewritertransaction.h>
#include <rewriterview.h> #include <rewriterview.h>
#include <viewmanager.h> #include <viewmanager.h>
#include <qmldesignerconstants.h>
#include <qmldesignerplugin.h> #include <qmldesignerplugin.h>
#include <qmlobjectnode.h> #include <qmlobjectnode.h>
#include <qmltimelinekeyframegroup.h> #include <qmltimelinekeyframegroup.h>
@@ -668,6 +669,19 @@ void TimelineGraphicsScene::keyReleaseEvent(QKeyEvent *keyEvent)
QGraphicsScene::keyReleaseEvent(keyEvent); QGraphicsScene::keyReleaseEvent(keyEvent);
} }
void TimelineGraphicsScene::focusOutEvent(QFocusEvent *focusEvent)
{
QmlDesignerPlugin::emitUsageStatisticsTime(Constants::EVENT_TIMELINE_TIME,
m_usageTimer.elapsed());
QGraphicsScene::focusOutEvent(focusEvent);
}
void TimelineGraphicsScene::focusInEvent(QFocusEvent *focusEvent)
{
m_usageTimer.restart();
QGraphicsScene::focusInEvent(focusEvent);
}
void TimelineGraphicsScene::invalidateSections() void TimelineGraphicsScene::invalidateSections()
{ {
for (auto child : m_layout->childItems()) for (auto child : m_layout->childItems())

View File

@@ -30,6 +30,7 @@
#include <qmltimeline.h> #include <qmltimeline.h>
#include <QElapsedTimer>
#include <QGraphicsScene> #include <QGraphicsScene>
#include <memory> #include <memory>
@@ -193,6 +194,9 @@ protected:
void keyPressEvent(QKeyEvent *keyEvent) override; void keyPressEvent(QKeyEvent *keyEvent) override;
void keyReleaseEvent(QKeyEvent *keyEvent) override; void keyReleaseEvent(QKeyEvent *keyEvent) override;
void focusOutEvent(QFocusEvent *focusEvent) override;
void focusInEvent(QFocusEvent *focusEvent) override;
private: private:
void copySelectedKeyframes(); void copySelectedKeyframes();
void pasteSelectedKeyframes(); void pasteSelectedKeyframes();
@@ -215,6 +219,7 @@ private:
// sorted, unique cache of keyframes positions, used for snapping // sorted, unique cache of keyframes positions, used for snapping
QVector<qreal> m_keyframePositionsCache; QVector<qreal> m_keyframePositionsCache;
QElapsedTimer m_usageTimer;
}; };
} // namespace QmlDesigner } // namespace QmlDesigner

View File

@@ -45,6 +45,7 @@
#include <rewritertransaction.h> #include <rewritertransaction.h>
#include <rewriterview.h> #include <rewriterview.h>
#include <viewmanager.h> #include <viewmanager.h>
#include <qmldesignerconstants.h>
#include <qmldesignerplugin.h> #include <qmldesignerplugin.h>
#include <qmlobjectnode.h> #include <qmlobjectnode.h>
#include <qmltimelinekeyframegroup.h> #include <qmltimelinekeyframegroup.h>
@@ -401,6 +402,19 @@ void TransitionEditorGraphicsScene::keyReleaseEvent(QKeyEvent *keyEvent)
QGraphicsScene::keyReleaseEvent(keyEvent); QGraphicsScene::keyReleaseEvent(keyEvent);
} }
void TransitionEditorGraphicsScene::focusOutEvent(QFocusEvent *focusEvent)
{
QmlDesignerPlugin::emitUsageStatisticsTime(Constants::EVENT_TRANSITIONEDITOR_TIME,
m_usageTimer.elapsed());
QGraphicsScene::focusOutEvent(focusEvent);
}
void TransitionEditorGraphicsScene::focusInEvent(QFocusEvent *focusEvent)
{
m_usageTimer.restart();
QGraphicsScene::focusInEvent(focusEvent);
}
void TransitionEditorGraphicsScene::invalidateSections() void TransitionEditorGraphicsScene::invalidateSections()
{ {
const QList<QGraphicsItem *> children = m_layout->childItems(); const QList<QGraphicsItem *> children = m_layout->childItems();

View File

@@ -30,6 +30,7 @@
#include <qmltimeline.h> #include <qmltimeline.h>
#include <QElapsedTimer>
#include <QGraphicsScene> #include <QGraphicsScene>
#include <memory> #include <memory>
@@ -123,6 +124,9 @@ protected:
void keyPressEvent(QKeyEvent *keyEvent) override; void keyPressEvent(QKeyEvent *keyEvent) override;
void keyReleaseEvent(QKeyEvent *keyEvent) override; void keyReleaseEvent(QKeyEvent *keyEvent) override;
void focusOutEvent(QFocusEvent *focusEvent) override;
void focusInEvent(QFocusEvent *focusEvent) override;
private: private:
void invalidateSections(); void invalidateSections();
QList<QGraphicsItem *> itemsAt(const QPointF &pos); QList<QGraphicsItem *> itemsAt(const QPointF &pos);
@@ -135,6 +139,7 @@ private:
int m_scrollOffset = 0; int m_scrollOffset = 0;
TimelineToolDelegate m_tools; TimelineToolDelegate m_tools;
TransitionEditorPropertyItem *m_selectedProperty = nullptr; TransitionEditorPropertyItem *m_selectedProperty = nullptr;
QElapsedTimer m_usageTimer;
}; };
} // namespace QmlDesigner } // namespace QmlDesigner

View File

@@ -88,6 +88,11 @@ const char EVENT_ACTION_EXECUTED[] = "Action Executed ";
const char EVENT_IMPORT_ADDED[] = "Import Added "; const char EVENT_IMPORT_ADDED[] = "Import Added ";
const char EVENT_BINDINGEDITOR_OPENED[] = "Binding Editor Opened"; const char EVENT_BINDINGEDITOR_OPENED[] = "Binding Editor Opened";
const char EVENT_RICHTEXT_OPENED[] = "Richtext Editor Opened"; const char EVENT_RICHTEXT_OPENED[] = "Richtext Editor Opened";
const char EVENT_FORMEDITOR_TIME[] = "Form Editor";
const char EVENT_3DEDITOR_TIME[] = "3D Editor";
const char EVENT_TIMELINE_TIME[] = "Timeline";
const char EVENT_TRANSITIONEDITOR_TIME[] = "Transition Editor";
const char EVENT_CURVEDITOR_TIME[] = "Curve Editor";
namespace Internal { namespace Internal {
enum { debug = 0 }; enum { debug = 0 };

View File

@@ -566,6 +566,11 @@ ImageCache &QmlDesignerPlugin::imageCache()
return m_instance->d->viewManager.imageCache(); return m_instance->d->viewManager.imageCache();
} }
void QmlDesignerPlugin::emitUsageStatisticsTime(const QString &identifier, int elapsed)
{
emit instance()->usageStatisticsUsageTimer(identifier, elapsed);
}
QmlDesignerPlugin *QmlDesignerPlugin::instance() QmlDesignerPlugin *QmlDesignerPlugin::instance()
{ {
return m_instance; return m_instance;

View File

@@ -85,11 +85,13 @@ public:
static void emitUsageStatistics(const QString &identifier); static void emitUsageStatistics(const QString &identifier);
static void emitUsageStatisticsContextAction(const QString &identifier); static void emitUsageStatisticsContextAction(const QString &identifier);
static void emitUsageStatisticsTime(const QString &identifier, int elapsed);
static ImageCache &imageCache(); static ImageCache &imageCache();
signals: signals:
void usageStatisticsNotifier(const QString &identifier); void usageStatisticsNotifier(const QString &identifier);
void usageStatisticsUsageTimer(const QString &identifier, int elapsed);
private: // functions private: // functions