LMMS
Loading...
Searching...
No Matches
TimeLineWidget.h
Go to the documentation of this file.
1/*
2 * TimeLineWidget.h - class timeLine, representing a time-line with position marker
3 *
4 * Copyright (c) 2004-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
5 *
6 * This file is part of LMMS - https://lmms.io
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public
10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public
19 * License along with this program (see COPYING); if not, write to the
20 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 * Boston, MA 02110-1301 USA.
22 *
23 */
24
25#ifndef LMMS_GUI_TIMELINE_WIDGET_H
26#define LMMS_GUI_TIMELINE_WIDGET_H
27
28#include <array>
29
30#include <QSize>
31#include <QWidget>
32
33#include "Song.h"
34#include "embed.h"
35
36
37class QToolBar;
38
39namespace lmms {
40
41class Timeline;
42
43} // namespace lmms
44
45namespace lmms::gui
46{
47
48class TextFloat;
49
50
51
52
53class TimeLineWidget : public QWidget
54{
55 Q_OBJECT
56public:
68 Q_PROPERTY(int loopHandleWidth MEMBER m_loopHandleWidth)
71
72 static constexpr const char* AutoScrollDisabledString = "disabled";
73 static constexpr const char* AutoScrollSteppedString = "stepped";
74 static constexpr const char* AutoScrollContinuousString = "continuous";
75
82
83 TimeLineWidget(int xoff, int yoff, float ppb, Timeline& timeline,
84 const TimePos& begin, QWidget* parent);
85 ~TimeLineWidget() override;
86
87 inline QColor const & getBarLineColor() const { return m_barLineColor; }
88 inline void setBarLineColor(QColor const & barLineColor) { m_barLineColor = barLineColor; }
89
90 inline QColor const & getBarNumberColor() const { return m_barNumberColor; }
92
93 inline QColor const & getInactiveLoopColor() const { return m_inactiveLoopColor; }
95
96 inline QBrush const & getInactiveLoopBrush() const { return m_inactiveLoopBrush; }
98
99 inline QColor const & getInactiveLoopInnerColor() const { return m_inactiveLoopInnerColor; }
101
102 inline QColor const & getActiveLoopColor() const { return m_activeLoopColor; }
104
105 inline QBrush const & getActiveLoopBrush() const { return m_activeLoopBrush; }
107
108 inline QColor const & getActiveLoopInnerColor() const { return m_activeLoopInnerColor; }
110
113
115 {
116 const auto point = m_cursorSelectLeft.hotSpot();
117 return QSize{point.x(), point.y()};
118 }
119
120 void setMouseHotspotSelLeft(const QSize& s)
121 {
122 m_cursorSelectLeft = QCursor{m_cursorSelectLeft.pixmap(), s.width(), s.height()};
123 }
124
126 {
127 const auto point = m_cursorSelectRight.hotSpot();
128 return QSize{point.x(), point.y()};
129 }
130
131 void setMouseHotspotSelRight(const QSize& s)
132 {
133 m_cursorSelectRight = QCursor{m_cursorSelectRight.pixmap(), s.width(), s.height()};
134 }
135
139
140 inline void setPixelsPerBar( float ppb )
141 {
142 m_ppb = ppb;
143 update();
144 }
145
146 void setXOffset(const int x);
147
148 void addToolButtons(QToolBar* _tool_bar );
149
150 inline int markerX( const TimePos & _t ) const
151 {
152 return m_xOffset + static_cast<int>( ( _t - m_begin ) *
154 }
155
157 {
158 return m_timeline;
159 }
160
161 bool isRecording() const { return m_isRecording; }
162 void setRecording(bool recording) { m_isRecording = recording; }
163
164 bool isPlayheadVisible() const { return m_isPlayheadVisible; }
165 void setPlayheadVisible(bool visible) { m_isPlayheadVisible = visible; }
166
167signals:
168 void regionSelectedFromPixels( int, int );
170
171public slots:
172 void setSnapSize( const float snapSize )
173 {
174 m_snapSize = snapSize;
175 }
176 void toggleAutoScroll( int _n );
177
178protected:
179 void paintEvent( QPaintEvent * _pe ) override;
180 void mousePressEvent( QMouseEvent * _me ) override;
181 void mouseMoveEvent( QMouseEvent * _me ) override;
182 void mouseReleaseEvent( QMouseEvent * _me ) override;
183 void contextMenuEvent(QContextMenuEvent* event) override;
184
185private:
195
196 auto getClickedTime(int xPosition) const -> TimePos;
197 auto getLoopAction(QMouseEvent* event) const -> Action;
198 auto actionCursor(Action action) const -> QCursor;
199
200 QPixmap m_posMarkerPixmap = embed::getIconPixmap("playpos_marker");
201 QPixmap m_recordingPosMarkerPixmap = embed::getIconPixmap("recording_playpos_marker");
202
203 QColor m_inactiveLoopColor = QColor{52, 63, 53, 64};
204 QBrush m_inactiveLoopBrush = QColor{255, 255, 255, 32};
205 QColor m_inactiveLoopInnerColor = QColor{255, 255, 255, 32};
206 QColor m_inactiveLoopHandleColor = QColor{255, 255, 255, 32};
207
208 QColor m_activeLoopColor = QColor{52, 63, 53, 255};
209 QBrush m_activeLoopBrush = QColor{55, 141, 89};
210 QColor m_activeLoopInnerColor = QColor{74, 155, 100, 255};
211 QColor m_activeLoopHandleColor = QColor{74, 155, 100, 255};
212
215
216 QColor m_barLineColor = QColor{192, 192, 192};
217 QColor m_barNumberColor = m_barLineColor.darker(120);
218
219 QCursor m_cursorSelectLeft = QCursor{embed::getIconPixmap("cursor_select_left"), 0, 16};
220 QCursor m_cursorSelectRight = QCursor{embed::getIconPixmap("cursor_select_right"), 32, 16};
221
222 // Width of the unused region on the widget's left (above track labels or piano)
224 float m_ppb;
225 float m_snapSize = 1.f;
227 // Leftmost position visible in parent editor
229
231
232 // When in MoveLoop mode we need the initial positions. Storing only the latest
233 // position allows for unquantized drag but fails when toggling quantization.
234 std::array<TimePos, 2> m_oldLoopPos;
236
237 bool m_isRecording = false;
239
240 TextFloat* m_hint = nullptr;
242
244};
245
246} // namespace lmms::gui
247
248#endif // LMMS_GUI_TIMELINE_WIDGET_H
#define READ(addr)
Definition Ay_Cpu.cpp:92
#define WRITE(addr, data)
Definition Ay_Cpu.cpp:93
#define constexpr
Definition CarlaDefines.h:94
Definition TimePos.h:68
static tick_t ticksPerBar()
Definition TimePos.h:127
Definition Timeline.h:37
Definition TextFloat.h:38
QPixmap m_posMarkerPixmap
Definition TimeLineWidget.h:200
float m_snapSize
Definition TimeLineWidget.h:225
bool m_isRecording
Definition TimeLineWidget.h:237
void setBarNumberColor(QColor const &barNumberColor)
Definition TimeLineWidget.h:91
void regionSelectedFromPixels(int, int)
const TimePos & m_begin
Definition TimeLineWidget.h:228
AutoScrollState
Definition TimeLineWidget.h:77
@ Continuous
Definition TimeLineWidget.h:79
@ Stepped
Definition TimeLineWidget.h:78
@ Disabled
Definition TimeLineWidget.h:80
QBrush activeLoopBrush
Definition TimeLineWidget.h:64
static AutoScrollState defaultAutoScrollState()
Definition TimeLineWidget.cpp:452
static constexpr const char * AutoScrollSteppedString
Definition TimeLineWidget.h:73
QColor barLineColor
Definition TimeLineWidget.h:57
int loopHandleWidth
Definition TimeLineWidget.h:68
auto getLoopAction(QMouseEvent *event) const -> Action
Definition TimeLineWidget.cpp:233
QColor inactiveLoopColor
Definition TimeLineWidget.h:59
QColor activeLoopInnerColor
Definition TimeLineWidget.h:65
int const & getLoopRectangleVerticalPadding() const
Definition TimeLineWidget.h:111
QColor const & getInactiveLoopColor() const
Definition TimeLineWidget.h:93
QColor const & getActiveLoopInnerColor() const
Definition TimeLineWidget.h:108
QColor activeLoopColor
Definition TimeLineWidget.h:63
void setLoopRectangleVerticalPadding(int const &loopRectangleVerticalPadding)
Definition TimeLineWidget.h:112
void setRecording(bool recording)
Definition TimeLineWidget.h:162
QBrush inactiveLoopBrush
Definition TimeLineWidget.h:60
auto mouseHotspotSelRight() const -> QSize
Definition TimeLineWidget.h:125
void toggleAutoScroll(int _n)
Definition TimeLineWidget.cpp:128
static constexpr const char * AutoScrollDisabledString
Definition TimeLineWidget.h:72
void setActiveLoopColor(QColor const &activeLoopColor)
Definition TimeLineWidget.h:103
void setMouseHotspotSelLeft(const QSize &s)
Definition TimeLineWidget.h:120
int markerX(const TimePos &_t) const
Definition TimeLineWidget.h:150
void mouseReleaseEvent(QMouseEvent *_me) override
Definition TimeLineWidget.cpp:402
TimeLineWidget(int xoff, int yoff, float ppb, Timeline &timeline, const TimePos &begin, QWidget *parent)
Definition TimeLineWidget.cpp:49
void setAutoScroll(AutoScrollState state)
Definition TimeLineWidget.h:138
QColor activeLoopHandleColor
Definition TimeLineWidget.h:66
Timeline * m_timeline
Definition TimeLineWidget.h:226
QColor const & getInactiveLoopInnerColor() const
Definition TimeLineWidget.h:99
AutoScrollState m_autoScroll
Definition TimeLineWidget.h:230
Action
Definition TimeLineWidget.h:187
@ MoveLoop
Definition TimeLineWidget.h:192
@ NoAction
Definition TimeLineWidget.h:188
@ SelectSongClip
Definition TimeLineWidget.h:193
@ MoveLoopBegin
Definition TimeLineWidget.h:190
@ MoveLoopEnd
Definition TimeLineWidget.h:191
@ MovePositionMarker
Definition TimeLineWidget.h:189
void setBarLineColor(QColor const &barLineColor)
Definition TimeLineWidget.h:88
auto mouseHotspotSelLeft() const -> QSize
Definition TimeLineWidget.h:114
Timeline * timeline()
Definition TimeLineWidget.h:156
void setActiveLoopInnerColor(QColor const &activeLoopInnerColor)
Definition TimeLineWidget.h:109
static constexpr const char * AutoScrollContinuousString
Definition TimeLineWidget.h:74
AutoScrollState autoScroll() const
Definition TimeLineWidget.h:137
QColor const & getActiveLoopColor() const
Definition TimeLineWidget.h:102
Action m_action
Definition TimeLineWidget.h:243
QColor const & getBarNumberColor() const
Definition TimeLineWidget.h:90
QColor m_activeLoopInnerColor
Definition TimeLineWidget.h:210
int m_loopRectangleVerticalPadding
Definition TimeLineWidget.h:213
auto getClickedTime(int xPosition) const -> TimePos
Definition TimeLineWidget.cpp:226
QColor m_activeLoopHandleColor
Definition TimeLineWidget.h:211
QSize mouseHotspotSelRight
Definition TimeLineWidget.h:70
void paintEvent(QPaintEvent *_pe) override
Definition TimeLineWidget.cpp:133
QBrush const & getActiveLoopBrush() const
Definition TimeLineWidget.h:105
void contextMenuEvent(QContextMenuEvent *event) override
Definition TimeLineWidget.cpp:410
void mouseMoveEvent(QMouseEvent *_me) override
Definition TimeLineWidget.cpp:322
QColor const & getBarLineColor() const
Definition TimeLineWidget.h:87
void mousePressEvent(QMouseEvent *_me) override
Definition TimeLineWidget.cpp:279
QCursor m_cursorSelectLeft
Definition TimeLineWidget.h:219
QColor m_inactiveLoopHandleColor
Definition TimeLineWidget.h:206
bool m_isPlayheadVisible
Definition TimeLineWidget.h:238
QSize mouseHotspotSelLeft
Definition TimeLineWidget.h:69
QColor m_barLineColor
Definition TimeLineWidget.h:216
QBrush m_inactiveLoopBrush
Definition TimeLineWidget.h:204
~TimeLineWidget() override
Definition TimeLineWidget.cpp:69
int m_loopHandleWidth
Definition TimeLineWidget.h:214
void addToolButtons(QToolBar *_tool_bar)
Definition TimeLineWidget.cpp:81
int m_initalXSelect
Definition TimeLineWidget.h:241
QCursor m_cursorSelectRight
Definition TimeLineWidget.h:220
bool isRecording() const
Definition TimeLineWidget.h:161
QColor m_inactiveLoopColor
Definition TimeLineWidget.h:203
auto actionCursor(Action action) const -> QCursor
Definition TimeLineWidget.cpp:268
TimePos m_dragStartPos
Definition TimeLineWidget.h:235
void setInactiveLoopColor(QColor const &inactiveLoopColor)
Definition TimeLineWidget.h:94
int m_xOffset
Definition TimeLineWidget.h:223
QColor m_barNumberColor
Definition TimeLineWidget.h:217
bool isPlayheadVisible() const
Definition TimeLineWidget.h:164
QBrush const & getInactiveLoopBrush() const
Definition TimeLineWidget.h:96
void setPlayheadVisible(bool visible)
Definition TimeLineWidget.h:165
QColor m_inactiveLoopInnerColor
Definition TimeLineWidget.h:205
QPixmap m_recordingPosMarkerPixmap
Definition TimeLineWidget.h:201
void setInactiveLoopBrush(QBrush const &inactiveLoopBrush)
Definition TimeLineWidget.h:97
QBrush m_activeLoopBrush
Definition TimeLineWidget.h:209
QColor inactiveLoopInnerColor
Definition TimeLineWidget.h:61
void setSnapSize(const float snapSize)
Definition TimeLineWidget.h:172
void setMouseHotspotSelRight(const QSize &s)
Definition TimeLineWidget.h:131
QColor barNumberColor
Definition TimeLineWidget.h:58
int loopRectangleVerticalPadding
Definition TimeLineWidget.h:67
float m_ppb
Definition TimeLineWidget.h:224
TextFloat * m_hint
Definition TimeLineWidget.h:240
void setXOffset(const int x)
Definition TimeLineWidget.cpp:76
void setPixelsPerBar(float ppb)
Definition TimeLineWidget.h:140
QColor inactiveLoopHandleColor
Definition TimeLineWidget.h:62
QColor m_activeLoopColor
Definition TimeLineWidget.h:208
std::array< TimePos, 2 > m_oldLoopPos
Definition TimeLineWidget.h:234
void setActiveLoopBrush(QBrush const &activeLoopBrush)
Definition TimeLineWidget.h:106
void setInactiveLoopInnerColor(QColor const &inactiveLoopInnerColor)
Definition TimeLineWidget.h:100
unsigned s
Definition inflate.c:1555
unsigned x[BMAX+1]
Definition inflate.c:1586
static uintptr_t parent
Definition pugl.h:1644
auto getIconPixmap(std::string_view name, int width, int height, const char *const *xpm) -> QPixmap
Definition embed.cpp:107
Definition AudioPortAudio.cpp:223
Definition AudioAlsa.cpp:35
#define const
Definition zconf.h:137