summaryrefslogtreecommitdiffstats
path: root/src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.h')
-rw-r--r--src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.h174
1 files changed, 174 insertions, 0 deletions
diff --git a/src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.h b/src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.h
new file mode 100644
index 00000000..146009ee
--- /dev/null
+++ b/src/Authoring/Qt3DStudio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.h
@@ -0,0 +1,174 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef TIMELINEGRAPHICSSCENE_H
+#define TIMELINEGRAPHICSSCENE_H
+
+#include "RowTree.h"
+#include "TimelineWidget.h"
+#include "RowTimeline.h"
+#include "RowTypes.h"
+#include "TimelineConstants.h"
+#include "MouseCursor.h"
+#include "DataInputSelectView.h"
+
+#include <QtWidgets/qgraphicsscene.h>
+#include <QtCore/qlist.h>
+#include <QtCore/qhash.h>
+#include <QtCore/qpointer.h>
+
+class Ruler;
+class PlayHead;
+class TreeHeader;
+class SelectionRect;
+class RowMover;
+class RowManager;
+class KeyframeManager;
+class TimelineControl;
+class IKeyframesManager;
+struct Keyframe;
+
+QT_FORWARD_DECLARE_CLASS(QGraphicsLinearLayout)
+QT_FORWARD_DECLARE_CLASS(QGraphicsView)
+QT_FORWARD_DECLARE_CLASS(QLabel)
+
+typedef QHash<qt3dsdm::Qt3DSDMInstanceHandle, RowTree::ExpandState> TExpandMap;
+
+class TimelineGraphicsScene : public QGraphicsScene
+{
+ Q_OBJECT
+
+public:
+ explicit TimelineGraphicsScene(TimelineWidget *timelineWidget);
+ virtual ~TimelineGraphicsScene();
+
+ void setTimelineScale(int scale);
+ void setControllerText(const QString &controller);
+ void updateTimelineLayoutWidth();
+ void updateControllerLayoutWidth();
+ void updateController();
+ Ruler *ruler() const;
+ PlayHead *playHead() const;
+ RowManager *rowManager() const;
+ RowMover *rowMover() const;
+ QGraphicsWidget *widgetRoot() const;
+ KeyframeManager *keyframeManager() const;
+ QGraphicsLinearLayout *layoutTree() const;
+ QGraphicsLinearLayout *layoutTimeline() const;
+ TreeHeader *treeHeader() const;
+ double treeWidth() const;
+ TimelineWidget *widgetTimeline() const;
+ void updateTreeWidth(double x);
+ void setMouseCursor(CMouseCursor::Qt3DSMouseCursor cursor);
+ void resetMouseCursor();
+ void updateSnapSteps();
+ TExpandMap &expandMap();
+ void resetMousePressParams();
+ QLabel *timebarTooltip();
+ void updateAutoScrolling(double scenePosY);
+ void stopAutoScroll();
+ QPoint getScrollbarOffsets() const;
+ void handleShowDISelector(const QString &propertyname, qt3dsdm::Qt3DSDMInstanceHandle inInst,
+ const QPoint &pos);
+ void resetPressedKeyframe();
+ Keyframe *pressedKeyframe() const;
+
+protected:
+ bool event(QEvent *event) override;
+ void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
+ void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override;
+ void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
+ void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override;
+ void wheelEvent(QGraphicsSceneWheelEvent *wheelEvent) override;
+ void keyPressEvent(QKeyEvent *keyEvent) override;
+ void keyReleaseEvent(QKeyEvent *keyEvent) override;
+
+ void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override;
+
+private:
+ void commitMoveRows();
+ void updateHoverStatus(const QPointF &scenePos);
+ void snap(double &value, bool snapToPlayHead = true);
+ QGraphicsItem *getItemBelowType(TimelineItem::ItemType type,
+ QGraphicsItem *item,
+ const QPointF &scenePos) const;
+ void handleInsertKeyframe();
+ void handleDeleteChannelKeyframes();
+ void handleSetTimeBarTime();
+ void handleMakeComponent();
+ void handleCopyObjectPath();
+ void handleEditComponent();
+ void handleApplicationFocusLoss();
+
+ QGraphicsLinearLayout *m_layoutRoot;
+ QGraphicsLinearLayout *m_layoutTree;
+ QGraphicsLinearLayout *m_layoutTimeline;
+
+ TreeHeader *m_treeHeader;
+ Ruler *m_ruler;
+ PlayHead *m_playHead;
+ TimelineWidget *m_widgetTimeline;
+ QGraphicsWidget *m_widgetRoot;
+ RowMover *m_rowMover = nullptr;
+ QPointer<RowTimeline> m_editedTimelineRow = nullptr;
+ SelectionRect *m_selectionRect;
+ RowManager *m_rowManager = nullptr;
+ KeyframeManager *m_keyframeManager = nullptr;
+ QPointF m_pressPos;
+ QPointF m_pressScreenPos;
+ QList<double> m_snapSteps;
+ CMouseCursor::Qt3DSMouseCursor m_currentCursor = -1;
+ TimelineControl *m_timelineControl = nullptr;
+ DataInputSelectView *m_dataInputSelector = nullptr; // triggered by context menu but owned by
+ // rowtree
+
+ bool m_rulerPressed = false;
+ Keyframe *m_pressedKeyframe = nullptr;
+ bool m_dragging = false;
+ bool m_startRowMoverOnNextDrag = false;
+ bool m_timelineZooming = false;
+ bool m_timelinePanning = false;
+ TimelineControlType m_clickedTimelineControlType = TimelineControlType::None;
+ TreeControlType m_clickedTreeControlType = TreeControlType::None;
+ double m_pressPosInKeyframe;
+ double m_treeWidth = TimelineConstants::TREE_DEFAULT_W;
+ double m_lastAutoScrollX = -1.0;
+ double m_lastAutoScrollY = -1.0;
+ TExpandMap m_expandMap;
+ QPointer<RowTree> m_releaseSelectRow = nullptr;
+ bool m_autoScrollDownOn = false;
+ bool m_autoScrollUpOn = false;
+ QTimer m_autoScrollTimelineTimer;
+ QTimer m_autoScrollTimer;
+ QTimer m_autoScrollTriggerTimer; // triggers m_autoScrollTimer
+ QLabel *m_timebarToolTip = nullptr;
+ QLabel *m_variantsToolTip = nullptr;
+ RowTree* m_variantsRowTree = nullptr;
+};
+
+#endif // TIMELINEGRAPHICSSCENE_H