Plasma Engine  2.0
Loading...
Searching...
No Matches
EventTrackWidget.moc.h
1#pragma once
2
3#include <Foundation/Containers/DynamicArray.h>
4#include <Foundation/Math/Vec2.h>
5#include <GuiFoundation/GuiFoundationDLL.h>
6#include <GuiFoundation/Widgets/EventTrackEditData.h>
7
8#include <QBrush>
9#include <QPen>
10#include <QWidget>
11
13class QRubberBand;
14
15class PL_GUIFOUNDATION_DLL plQtEventTrackWidget : public QWidget
16{
17 Q_OBJECT
18
19public:
21 {
22 PL_DECLARE_POD_TYPE();
23
24 plUInt32 m_uiCategory;
25 plUInt32 m_uiSortedIdx;
26 };
27
28 plQtEventTrackWidget(QWidget* pParent);
29
30 void SetData(const plEventTrackData* pData, double fMinCurveLength);
31 void SetGridBarWidget(plQGridBarWidget* pGridBar) { m_pGridBar = pGridBar; }
32
33 void SetScrubberPosition(double fPosition);
34 double GetScrubberPosition() const { return m_fScrubberPosition; }
35
36 void FrameCurve();
37
38 QPoint MapFromScene(const QPointF& pos) const;
39 QPointF MapToScene(const QPoint& pos) const;
40
41 void ClearSelection();
42 void GetSelection(plHybridArray<plUInt32, 32>& out_selection) const;
43
44Q_SIGNALS:
45 void DoubleClickEvent(double fScenePosX, double fEpsilon);
46 void DeleteControlPointsEvent();
47 void MoveControlPointsEvent(double fMoveX);
48 void BeginOperationEvent(QString sName);
49 void EndOperationEvent(bool bCommit);
50 void ScaleControlPointsEvent(const QPointF& centerPos, double fScaleX);
51 void ContextMenuEvent(QPoint pos, QPointF scenePos);
52 void SelectionChangedEvent();
53
54protected:
55 virtual void paintEvent(QPaintEvent* e) override;
56 virtual void mousePressEvent(QMouseEvent* e) override;
57 virtual void mouseReleaseEvent(QMouseEvent* e) override;
58 virtual void mouseMoveEvent(QMouseEvent* e) override;
59 virtual void mouseDoubleClickEvent(QMouseEvent* e) override;
60 virtual void wheelEvent(QWheelEvent* e) override;
61 virtual void keyPressEvent(QKeyEvent* e) override;
62
63private:
64 enum class ClickTarget
65 {
66 Nothing,
67 SelectedPoint
68 };
69 enum class EditState
70 {
71 None,
72 DraggingPoints,
73 MultiSelect,
74 RightClick,
75 Panning,
76 ScaleLeftRight
77 };
78 enum class SelectArea
79 {
80 None,
81 Center,
82 Left,
83 Right
84 };
85
86 struct Point
87 {
88 PL_DECLARE_POD_TYPE();
89
90 plUInt32 m_uiOrgIndex;
91 bool m_bSelected;
92 double m_fPosX;
93 };
94
95 struct PointCategory
96 {
97 plHashedString m_sName;
98 plHybridArray<Point, 32> m_SortedPoints;
99 };
100
101 bool IsSelected(SelectedPoint cp) const;
102 void SetSelection(SelectedPoint cp);
103 void SetSelection(const plHybridArray<SelectedPoint, 32>& selection);
104 void ToggleSelected(SelectedPoint cp);
105 void SetSelected(SelectedPoint cp, bool set);
106
107 void PaintOutsideAreaOverlay(QPainter* painter) const;
108 void PaintControlPoints(QPainter* painter) const;
109 void PaintMultiSelectionSquare(QPainter* painter) const;
110 void PaintScrubber(QPainter& p) const;
111 void RenderVerticalGrid(QPainter* painter, const QRectF& viewportSceneRect, double fRoughGridDensity);
112 QRectF ComputeViewportSceneRect() const;
113 bool PickCpAt(const QPoint& pos, float fMaxPixelDistance, SelectedPoint& out_Result) const;
114 ClickTarget DetectClickTarget(const QPoint& pos);
115 void ExecMultiSelection(plHybridArray<SelectedPoint, 32>& out_Selection);
116 bool CombineSelection(plHybridArray<SelectedPoint, 32>& inout_Selection, const plHybridArray<SelectedPoint, 32>& change, bool add);
117 void ComputeSelectionRect();
118 SelectArea WhereIsPoint(QPoint pos) const;
119 void ClampZoomPan();
120 void RecreateSortedData();
121
122 plQGridBarWidget* m_pGridBar = nullptr;
123
124 EditState m_State = EditState::None;
125
126 const plEventTrackData* m_pEditData = nullptr;
127
128 double m_fMaxCurveExtent = 0;
129 double m_fSceneTranslationX = 0;
130 QPointF m_SceneToPixelScale;
131 QPoint m_LastMousePos;
132
133 QBrush m_ControlPointBrush;
134 QBrush m_SelectedControlPointBrush;
135 QPen m_ControlPointPen;
136
137 bool m_bBegunChanges = false;
138 bool m_bFrameBeforePaint = true;
139
140 QPoint m_MultiSelectionStart;
141 QRect m_MultiSelectRect;
142 QRectF m_SelectionBRect;
143 QPointF m_ScaleReferencePoint;
144 QPointF m_ScaleStartPoint;
145 QPointF m_TotalPointDrag;
146 QRubberBand* m_pRubberband = nullptr;
147
148 bool m_bShowScrubber = false;
149 double m_fScrubberPosition = 0;
150
153 plHybridArray<SelectedPoint, 32> m_SelectedPoints;
154};
155
Definition EventTrackEditData.h:25
Definition HashTable.h:333
This class is optimized to take nearly no memory (sizeof(void*)) and to allow very fast checks whethe...
Definition HashedString.h:25
A hybrid array uses in-place storage to handle the first few elements without any allocation....
Definition HybridArray.h:12
Definition GridBarWidget.moc.h:10
Definition EventTrackWidget.moc.h:16
Definition EventTrackWidget.moc.h:21