LMMS
Loading...
Searching...
No Matches
Track.h
Go to the documentation of this file.
1/*
2 * Track.h - declaration of Track class
3 *
4 * Copyright (c) 2004-2014 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_TRACK_H
26#define LMMS_TRACK_H
27
28#include <vector>
29
30#include <QColor>
31
32#include "AutomatableModel.h"
33#include "JournallingObject.h"
34#include "LmmsTypes.h"
35#include <optional>
36
37
38namespace lmms
39{
40
41class TimePos;
42class TrackContainer;
43class Clip;
44
45
46namespace gui
47{
48
49class TrackView;
51
52}
53
54
60const int MINIMAL_TRACK_HEIGHT = 32;
61const int DEFAULT_TRACK_HEIGHT = 32;
62
63char const *const FILENAME_FILTER = "[\\0000-\x1f\"*/:<>?\\\\|\x7f]";
64
65
67class LMMS_EXPORT Track : public Model, public JournallingObject
68{
69 Q_OBJECT
70 mapPropertyFromModel(bool,isMuted,setMuted,m_mutedModel);
71 mapPropertyFromModel(bool,isSolo,setSolo,m_soloModel);
72public:
73 using clipVector = std::vector<Clip*>;
74
75 enum class Type
76 {
78 Pattern,
80 Event,
81 Video,
82 Automation,
83 HiddenAutomation,
85 } ;
86
87 Track( Type type, TrackContainer * tc );
88 ~Track() override;
89
90 static Track * create( Type tt, TrackContainer * tc );
91 static Track * create( const QDomElement & element,
92 TrackContainer * tc );
93 Track * clone();
94
95
96 // pure virtual functions
97 Type type() const
98 {
99 return m_type;
100 }
101
102 virtual bool play( const TimePos & start, const f_cnt_t frames,
103 const f_cnt_t frameBase, int clipNum = -1 ) = 0;
104
105
106
108 virtual Clip * createClip( const TimePos & pos ) = 0;
109
110 virtual void saveTrackSpecificSettings(QDomDocument& doc, QDomElement& parent, bool presetMode) = 0;
111 virtual void loadTrackSpecificSettings( const QDomElement & element ) = 0;
112
113 // Saving and loading of presets which do not necessarily contain all the track information
114 void savePreset(QDomDocument & doc, QDomElement & element);
115 void loadPreset(const QDomElement & element);
116
117 // Saving and loading of full tracks
118 void saveSettings( QDomDocument & doc, QDomElement & element ) override;
119 void loadSettings( const QDomElement & element ) override;
120
121 // -- for usage by Clip only ---------------
122 Clip * addClip( Clip * clip );
123 void removeClip( Clip * clip );
124 // -------------------------------------------------------
125 void deleteClips();
126
127 int numOfClips();
128 auto getClip(std::size_t clipNum) -> Clip*;
129 int getClipNum(const Clip* clip );
130
131 const clipVector & getClips() const
132 {
133 return m_clips;
134 }
135 void getClipsInRange( clipVector & clipV, const TimePos & start,
136 const TimePos & end );
137 void swapPositionOfClips( int clipNum1, int clipNum2 );
138
139 void createClipsForPattern(int pattern);
140
141
142 void insertBar( const TimePos & pos );
143 void removeBar( const TimePos & pos );
144
145 bar_t length() const;
146
147
149 {
150 return m_trackContainer;
151 }
152
153 // name-stuff
154 virtual const QString & name() const
155 {
156 return m_name;
157 }
158
159 QString displayName() const override
160 {
161 return name();
162 }
163
164 using Model::dataChanged;
165
166 inline int getHeight()
167 {
169 ? m_height
171 }
172 inline void setHeight( int height )
173 {
175 }
176
177 void lock()
178 {
179 m_processingLock.lock();
180 }
181 void unlock()
182 {
183 m_processingLock.unlock();
184 }
185 bool tryLock()
186 {
187 return m_processingLock.tryLock();
188 }
189
190 auto color() const -> const std::optional<QColor>& { return m_color; }
191 void setColor(const std::optional<QColor>& color);
192
193 bool isMutedBeforeSolo() const
194 {
195 return m_mutedBeforeSolo;
196 }
197
198 BoolModel* getMutedModel();
199
200public slots:
201 virtual void setName(const QString& newName);
202
203 void setMutedBeforeSolo(const bool muted)
204 {
206 }
207
208 void toggleSolo();
209
210private:
211 void saveTrack(QDomDocument& doc, QDomElement& element, bool presetMode);
212 void loadTrack(const QDomElement& element, bool presetMode);
213
214private:
217 QString m_name;
219
220protected:
223
224private:
226
228
230
231 std::optional<QColor> m_color;
232
233 friend class gui::TrackView;
234
235
236signals:
241} ;
242
243
244} // namespace lmms
245
246#endif // LMMS_TRACK_H
CAdPlugDatabase::CRecord::RecordType type
Definition adplugdb.cpp:93
Definition AutomatableModel.h:497
Definition Clip.h:50
Definition Instrument.h:52
JournallingObject()
Definition JournallingObject.cpp:36
void dataChanged()
Model(Model *parent, QString displayName=QString(), bool defaultConstructed=false)
Definition Model.cpp:30
Definition Sample.h:37
Definition TimePos.h:68
Definition TrackContainer.h:49
Base-class for all tracks.
Definition Track.h:68
void colorChanged()
virtual const QString & name() const
Definition Track.h:154
Clip * addClip(Clip *clip)
Add another Clip into this track.
Definition Track.cpp:341
mapPropertyFromModel(bool, isMuted, setMuted, m_mutedModel)
Track(Type type, TrackContainer *tc)
Create a new (empty) track object.
Definition Track.cpp:59
void removeClip(Clip *clip)
Remove a given Clip from this track.
Definition Track.cpp:357
virtual Clip * createClip(const TimePos &pos)=0
void savePreset(QDomDocument &doc, QDomElement &element)
Definition Track.cpp:312
bool m_mutedBeforeSolo
Definition Track.h:225
bool tryLock()
Definition Track.h:185
mapPropertyFromModel(bool, isSolo, setSolo, m_soloModel)
void saveSettings(QDomDocument &doc, QDomElement &element) override
Definition Track.cpp:322
TrackContainer * m_trackContainer
Definition Track.h:215
TrackContainer * trackContainer() const
Definition Track.h:148
BoolModel m_mutedModel
Definition Track.h:221
virtual gui::TrackView * createView(gui::TrackContainerView *view)=0
Type
Definition Track.h:76
const clipVector & getClips() const
Definition Track.h:131
std::optional< QColor > m_color
Definition Track.h:231
bool isMutedBeforeSolo() const
Definition Track.h:193
QMutex m_processingLock
Definition Track.h:229
int m_height
Definition Track.h:218
BoolModel m_soloModel
Definition Track.h:222
Type type() const
Definition Track.h:97
int getClipNum(const Clip *clip)
Determine the given Clip's number in our array.
Definition Track.cpp:426
void loadPreset(const QDomElement &element)
Definition Track.cpp:317
virtual void loadTrackSpecificSettings(const QDomElement &element)=0
int numOfClips()
Return the number of clips we contain.
Definition Track.cpp:386
virtual void saveTrackSpecificSettings(QDomDocument &doc, QDomElement &parent, bool presetMode)=0
int getHeight()
Definition Track.h:166
void unlock()
Definition Track.h:181
QString displayName() const override
Definition Track.h:159
void lock()
Definition Track.h:177
void nameChanged()
void setHeight(int height)
Definition Track.h:172
auto getClip(std::size_t clipNum) -> Clip *
Get a Clip by number.
Definition Track.cpp:406
void destroyedTrack()
clipVector m_clips
Definition Track.h:227
virtual bool play(const TimePos &start, const f_cnt_t frames, const f_cnt_t frameBase, int clipNum=-1)=0
void deleteClips()
Remove all Clips from this track.
Definition Track.cpp:373
void clipAdded(lmms::Clip *)
std::vector< Clip * > clipVector
Definition Track.h:73
QString m_name
Definition Track.h:217
Type m_type
Definition Track.h:216
void loadSettings(const QDomElement &element) override
Definition Track.cpp:328
void setMutedBeforeSolo(const bool muted)
Definition Track.h:203
auto color() const -> const std::optional< QColor > &
Definition Track.h:190
Definition TrackContainerView.h:71
Definition TrackView.h:60
static const char * name
Definition pugl.h:1582
static int int height
Definition pugl.h:1594
static uintptr_t parent
Definition pugl.h:1644
virtual ASIOError start()=0
CARLA_PLUGIN_EXPORT int clone(int(*)(void *), void *, int, void *,...)
Definition interposer-safe.cpp:46
Definition AudioPortAudio.cpp:223
Definition AudioAlsa.cpp:35
char const *const FILENAME_FILTER
Definition Track.h:63
std::int32_t bar_t
Definition LmmsTypes.h:34
const int MINIMAL_TRACK_HEIGHT
Definition Track.h:60
const int DEFAULT_TRACK_HEIGHT
Definition Track.h:61
@ Count
Definition Sfxr.h:43
std::uint64_t f_cnt_t
Definition LmmsTypes.h:43
Definition juce_Uuid.h:141
png_uint_32 length
Definition png.c:2247
const float muted
Definition tuning.h:12
int * pattern
Definition match.c:126
#define const
Definition zconf.h:137