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 "handleitem.h"
#include <qmldesignerconstants.h>
#include <qmldesignerplugin.h>
#include <QGraphicsSceneMouseEvent>
#include <cmath>
@@ -425,6 +428,19 @@ void GraphicsScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent)
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
{
const QList<QGraphicsView *> viewList = views();

View File

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

View File

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

View File

@@ -28,6 +28,7 @@
#include "formeditorwidget.h"
#include "formeditoritem.h"
#include <nodehints.h>
#include <qmldesignerconstants.h>
#include <qmldesignerplugin.h>
#include <designersettings.h>
@@ -321,10 +322,21 @@ void FormEditorScene::keyReleaseEvent(QKeyEvent *keyEvent)
currentTool()->keyReleaseEvent(keyEvent);
}
void FormEditorScene::focusOutEvent(QFocusEvent *)
void FormEditorScene::focusOutEvent(QFocusEvent *focusEvent)
{
if (currentTool())
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

View File

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

View File

@@ -42,6 +42,7 @@
#include <rewritertransaction.h>
#include <rewriterview.h>
#include <viewmanager.h>
#include <qmldesignerconstants.h>
#include <qmldesignerplugin.h>
#include <qmlobjectnode.h>
#include <qmltimelinekeyframegroup.h>
@@ -668,6 +669,19 @@ void TimelineGraphicsScene::keyReleaseEvent(QKeyEvent *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()
{
for (auto child : m_layout->childItems())

View File

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

View File

@@ -45,6 +45,7 @@
#include <rewritertransaction.h>
#include <rewriterview.h>
#include <viewmanager.h>
#include <qmldesignerconstants.h>
#include <qmldesignerplugin.h>
#include <qmlobjectnode.h>
#include <qmltimelinekeyframegroup.h>
@@ -401,6 +402,19 @@ void TransitionEditorGraphicsScene::keyReleaseEvent(QKeyEvent *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()
{
const QList<QGraphicsItem *> children = m_layout->childItems();

View File

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

View File

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

View File

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