MuseScore  3.4
Music composition and notation
note.h
Go to the documentation of this file.
1 //=============================================================================
2 // MuseScore
3 // Music Composition & Notation
4 //
5 // Copyright (C) 2002-2012 Werner Schweer
6 //
7 // This program is free software; you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License version 2
9 // as published by the Free Software Foundation and appearing in
10 // the file LICENCE.GPL
11 //=============================================================================
12 
13 #ifndef __NOTE_H__
14 #define __NOTE_H__
15 
21 #include "element.h"
22 #include "symbol.h"
23 #include "noteevent.h"
24 #include "pitchspelling.h"
25 #include "shape.h"
26 #include "key.h"
27 
28 namespace Ms {
29 
30 class Tie;
31 class Chord;
32 class NoteEvent;
33 class Text;
34 class Score;
35 class Sym;
36 class MuseScoreView;
37 class Bend;
38 class AccidentalState;
39 class Accidental;
40 class NoteDot;
41 class Spanner;
42 class StaffType;
43 class NoteEditData;
44 enum class SymId;
45 enum class AccidentalType : char;
46 
47 static const int MAX_DOTS = 4;
48 
49 //---------------------------------------------------------
50 // @@ NoteHead
51 //---------------------------------------------------------
52 
53 class NoteHead final : public Symbol {
54  Q_GADGET
55  public:
56  enum class Group : signed char {
58  HEAD_NORMAL = 0,
59  HEAD_CROSS,
60  HEAD_PLUS,
61  HEAD_XCIRCLE,
62  HEAD_WITHX,
63  HEAD_TRIANGLE_UP,
64  HEAD_TRIANGLE_DOWN,
65  HEAD_SLASHED1,
66  HEAD_SLASHED2,
67  HEAD_DIAMOND,
68  HEAD_DIAMOND_OLD,
69  HEAD_CIRCLED,
70  HEAD_CIRCLED_LARGE,
71  HEAD_LARGE_ARROW,
72  HEAD_BREVIS_ALT,
73 
74  HEAD_SLASH,
75 
76  HEAD_SOL,
77  HEAD_LA,
78  HEAD_FA,
79  HEAD_MI,
80  HEAD_DO,
81  HEAD_RE,
82  HEAD_TI,
83  // not exposed from here
84  HEAD_DO_WALKER,
85  HEAD_RE_WALKER,
86  HEAD_TI_WALKER,
87  HEAD_DO_FUNK,
88  HEAD_RE_FUNK,
89  HEAD_TI_FUNK,
90 
91  HEAD_DO_NAME,
92  HEAD_RE_NAME,
93  HEAD_MI_NAME,
94  HEAD_FA_NAME,
95  HEAD_SOL_NAME,
96  HEAD_LA_NAME,
97  HEAD_TI_NAME,
98  HEAD_SI_NAME,
99 
100  HEAD_A_SHARP,
101  HEAD_A,
102  HEAD_A_FLAT,
103  HEAD_B_SHARP,
104  HEAD_B,
105  HEAD_B_FLAT,
106  HEAD_C_SHARP,
107  HEAD_C,
108  HEAD_C_FLAT,
109  HEAD_D_SHARP,
110  HEAD_D,
111  HEAD_D_FLAT,
112  HEAD_E_SHARP,
113  HEAD_E,
114  HEAD_E_FLAT,
115  HEAD_F_SHARP,
116  HEAD_F,
117  HEAD_F_FLAT,
118  HEAD_G_SHARP,
119  HEAD_G,
120  HEAD_G_FLAT,
121  HEAD_H,
122  HEAD_H_SHARP,
123 
124  HEAD_CUSTOM,
125  HEAD_GROUPS,
126  HEAD_INVALID = -1
128  };
129  enum class Type : signed char {
131  HEAD_AUTO = -1,
132  HEAD_WHOLE = 0,
133  HEAD_HALF = 1,
134  HEAD_QUARTER = 2,
135  HEAD_BREVIS = 3,
136  HEAD_TYPES
138  };
139 
140  Q_ENUM(Group);
141  Q_ENUM(Type);
142 
143  NoteHead(Score* s = 0) : Symbol(s) {}
144  NoteHead &operator=(const NoteHead&) = delete;
145  virtual NoteHead* clone() const override { return new NoteHead(*this); }
146  virtual ElementType type() const override { return ElementType::NOTEHEAD; }
147 
148  Group headGroup() const;
149 
150  static QString group2userName(Group group);
151  static QString type2userName(Type type);
152  static QString group2name(Group group);
153  static QString type2name(Type type);
154  static Group name2group(QString s);
155  static Type name2type(QString s);
156  };
157 
158 //---------------------------------------------------------
159 // NoteVal
162 //---------------------------------------------------------
163 
164 struct NoteVal {
165  int pitch { -1 };
166  int tpc1 { Tpc::TPC_INVALID };
167  int tpc2 { Tpc::TPC_INVALID };
168  int fret { FRET_NONE };
169  int string { STRING_NONE };
171 
172  NoteVal() {}
173  NoteVal(int p) : pitch(p) {}
174  };
175 
176 static const int INVALID_LINE = -10000;
177 
178 //---------------------------------------------------------------------------------------
179 // @@ Note
181 //
182 // @P accidental Accidental note accidental (null if none)
183 // @P accidentalType int note accidental type
184 // @P dots array[NoteDot] list of note dots (some can be null, read only)
185 // @P dotsCount int number of note dots (read only)
186 // @P elements array[Element] list of elements attached to notehead
187 // @P fret int fret number in tablature
188 // @P ghost bool ghost note (guitar: death note)
189 // @P headGroup enum (NoteHead.HEAD_NORMAL, .HEAD_BREVIS_ALT, .HEAD_CROSS, .HEAD_DIAMOND, .HEAD_DO, .HEAD_FA, .HEAD_LA, .HEAD_MI, .HEAD_RE, .HEAD_SLASH, .HEAD_SOL, .HEAD_TI, .HEAD_XCIRCLE, .HEAD_TRIANGLE)
190 // @P headType enum (NoteHead.HEAD_AUTO, .HEAD_BREVIS, .HEAD_HALF, .HEAD_QUARTER, .HEAD_WHOLE)
191 // @P hidden bool hidden, not played note (read only)
192 // @P line int notehead position (read only)
193 // @P mirror bool mirror notehead on x axis (read only)
194 // @P pitch int midi pitch
195 // @P play bool play note
196 // @P ppitch int actual played midi pitch (honoring ottavas) (read only)
197 // @P small bool small notehead
198 // @P string int string number in tablature
199 // @P subchannel int midi subchannel (for midi articulation) (read only)
200 // @P tieBack Tie note backward tie (null if none, read only)
201 // @P tieFor Tie note forward tie (null if none, read only)
202 // @P tpc int tonal pitch class, as per concert pitch setting
203 // @P tpc1 int tonal pitch class, non transposed
204 // @P tpc2 int tonal pitch class, transposed
205 // @P tuning float tuning offset in cent
206 // @P userDotPosition enum (Direction.AUTO, Direction.DOWN, Direction.UP)
207 // @P userMirror enum (DirectionH.AUTO, DirectionH.LEFT, DirectionH.RIGHT)
208 // @P veloOffset int
209 // @P veloType enum (Note.OFFSET_VAL, Note.USER_VAL)
210 //---------------------------------------------------------------------------------------
211 
212 class Note final : public Element {
213  Q_GADGET
214  public:
215  enum class ValueType : char { OFFSET_VAL, USER_VAL };
216  Q_ENUM(ValueType);
217 
218  private:
219  bool _ghost { false };
220  bool _hidden { false };
221  bool _dotsHidden { false };
224  bool _fretConflict { false };
226  bool dragMode { false };
228  bool _mirror { false };
229  bool _small { false };
230  bool _play { true }; // note is not played if false
231  mutable bool _mark { false }; // for use in sequencer
232  bool _fixed { false }; // for slash notation
233 
235  Direction _userDotPosition { Direction::AUTO };
236 
239 
240  ValueType _veloType { ValueType::OFFSET_VAL };
241 
242  char _offTimeType { 0 }; // compatibility only 1 - user(absolute), 2 - offset (%)
243  char _onTimeType { 0 }; // compatibility only 1 - user, 2 - offset
244 
245  int _subchannel { 0 };
246  int _line { INVALID_LINE };
247  int _fret { -1 };
248  int _string { -1 };
249  mutable int _tpc[2] { Tpc::TPC_INVALID, Tpc::TPC_INVALID };
250  mutable int _pitch { 0 };
251 
252  int _veloOffset { 0 };
253  int _fixedLine { 0 }; // fixed line number if _fixed == true
254  qreal _tuning { 0.0 };
255 
256  Accidental* _accidental { 0 };
257 
258  Tie* _tieFor { 0 };
259  Tie* _tieBack { 0 };
260 
262  QVector<NoteDot*> _dots;
264  QVector<Spanner*> _spannerFor;
265  QVector<Spanner*> _spannerBack;
266 
267  SymId _cachedNoteheadSym; // use in draw to avoid recomputing at every update
268  SymId _cachedSymNull; // additional symbol for some transparent notehead
269 
270  QString _fretString;
271 
272  void startDrag(EditData&) override;
273  QRectF drag(EditData&ed) override;
274  void endDrag(EditData&) override;
275  void editDrag(EditData &editData) override;
276 
277  void verticalDrag(EditData& ed);
278  void horizontalDrag(EditData& ed);
279 
280  void addSpanner(Spanner*);
281  void removeSpanner(Spanner*);
282  int concertPitchIdx() const;
283  void updateRelLine(int relLine, bool undoable);
284  bool isNoteName() const;
285  SymId noteHead() const;
286 
287  void normalizeLeftDragDelta(Segment* seg, EditData &ed, NoteEditData* ned);
288 
289 public:
290  Note(Score* s = 0);
291  Note(const Note&, bool link = false);
292  ~Note();
293 
294  Note& operator=(const Note&) = delete;
295  virtual Note* clone() const override { return new Note(*this, false); }
296  ElementType type() const override { return ElementType::NOTE; }
297 
298  virtual void undoUnlink() override;
299 
300  virtual qreal mag() const override;
301 
302  void layout();
303  void layout2();
304  //setter is used only in drumset tools to setup the notehead preview in the drumset editor and the palette
305  void setCachedNoteheadSym(SymId i) { _cachedNoteheadSym = i; };
306  void scanElements(void* data, void (*func)(void*, Element*), bool all=true);
307  void setTrack(int val);
308 
309  int playTicks() const;
310 
311  qreal headWidth() const;
312  qreal headHeight() const;
313  qreal tabHeadWidth(const StaffType* tab = 0) const;
314  qreal tabHeadHeight(const StaffType* tab = 0) const;
315  QPointF stemDownNW() const;
316  QPointF stemUpSE() const;
317  qreal bboxXShift() const;
318  qreal noteheadCenterX() const;
319  qreal bboxRightPos() const;
320  qreal headBodyWidth() const;
321 
322  NoteHead::Group headGroup() const { return _headGroup; }
323  NoteHead::Type headType() const { return _headType; }
324  void setHeadGroup(NoteHead::Group val);
325  void setHeadType(NoteHead::Type t);
326 
327  virtual int subtype() const override { return (int) _headGroup; }
328  virtual QString subtypeName() const override;
329 
330  void setPitch(int val);
331  void setPitch(int pitch, int tpc1, int tpc2);
332  int pitch() const { return _pitch; }
333  int ppitch() const;
334  int epitch() const;
335  qreal tuning() const { return _tuning; }
336  void setTuning(qreal v) { _tuning = v; }
337  void undoSetTpc(int v);
338  int transposition() const;
339  bool fixed() const { return _fixed; }
340  void setFixed(bool v) { _fixed = v; }
341  int fixedLine() const { return _fixedLine; }
342  void setFixedLine(int v) { _fixedLine = v; }
343 
344  int tpc() const;
345  int tpc1() const { return _tpc[0]; } // non transposed tpc
346  int tpc2() const { return _tpc[1]; } // transposed tpc
347  QString tpcUserName(bool explicitAccidental = false) const;
348 
349  void setTpc(int v);
350  void setTpc1(int v) { _tpc[0] = v; }
351  void setTpc2(int v) { _tpc[1] = v; }
352  void setTpcFromPitch();
353  int tpc1default(int pitch) const;
354  int tpc2default(int pitch) const;
355  int transposeTpc(int tpc);
356 
357  Accidental* accidental() const { return _accidental; }
358  void setAccidental(Accidental* a) { _accidental = a; }
359 
360  AccidentalType accidentalType() const;
361  void setAccidentalType(AccidentalType type);
362 
363  int line() const;
364  void setLine(int n) { _line = n; }
365  int physicalLine() const;
366 
367  int fret() const { return _fret; }
368  void setFret(int val) { _fret = val; }
369  int string() const { return _string; }
370  void setString(int val);
371  bool ghost() const { return _ghost; }
372  void setGhost(bool val) { _ghost = val; }
373  bool fretConflict() const { return _fretConflict; }
374  void setFretConflict(bool val) { _fretConflict = val; }
375 
376  virtual void add(Element*) override;
377  virtual void remove(Element*) override;
378 
379  bool mirror() const { return _mirror; }
380  void setMirror(bool val) { _mirror = val; }
381 
382  bool small() const { return _small; }
383  void setSmall(bool val);
384 
385  bool play() const { return _play; }
386  void setPlay(bool val) { _play = val; }
387 
388  Ms::Tie* tieFor() const { return _tieFor; }
389  Ms::Tie* tieBack() const { return _tieBack; }
390  void setTieFor(Tie* t) { _tieFor = t; }
391  void setTieBack(Tie* t) { _tieBack = t; }
392  Note* firstTiedNote() const;
393  const Note* lastTiedNote() const;
394  Note* lastTiedNote() { return const_cast<Note*>(static_cast<const Note*>(this)->lastTiedNote()); }
395  int unisonIndex() const;
396  void disconnectTiedNotes();
397  void connectTiedNotes();
398 
399  Chord* chord() const { return (Chord*)parent(); }
400  void setChord(Chord* a) { setParent((Element*)a); }
401  virtual void draw(QPainter*) const override;
402 
403  virtual void read(XmlReader&) override;
404  virtual bool readProperties(XmlReader&) override;
405  virtual void readAddConnector(ConnectorInfoReader* info, bool pasteMode) override;
406  virtual void write(XmlWriter&) const override;
407 
408  bool acceptDrop(EditData&) const override;
409  Element* drop(EditData&);
410 
411  bool hidden() const { return _hidden; }
412  void setHidden(bool val) { _hidden = val; }
413  bool dotsHidden() const { return _dotsHidden; }
414  void setDotsHidden(bool val) { _dotsHidden = val; }
415 
416  NoteType noteType() const;
417  QString noteTypeUserName() const;
418 
419  ElementList& el() { return _el; }
420  const ElementList& el() const { return _el; }
421 
422  int subchannel() const { return _subchannel; }
423  void setSubchannel(int val) { _subchannel = val; }
424 
425  MScore::DirectionH userMirror() const { return _userMirror; }
426  void setUserMirror(MScore::DirectionH d) { _userMirror = d; }
427 
428  Direction userDotPosition() const { return _userDotPosition; }
429  void setUserDotPosition(Direction d) { _userDotPosition = d; }
430  bool dotIsUp() const; // actual dot position
431 
432  void reset();
433 
434  ValueType veloType() const { return _veloType; }
435  void setVeloType(ValueType v) { _veloType = v; }
436  int veloOffset() const { return _veloOffset; }
437  void setVeloOffset(int v) { _veloOffset = v; }
438 
439  void setOnTimeOffset(int v);
440  void setOffTimeOffset(int v);
441 
442  int customizeVelocity(int velo) const;
443  NoteDot* dot(int n) { return _dots[n]; }
444  const QVector<NoteDot*>& dots() const { return _dots; }
445  QVector<NoteDot*>& dots() { return _dots; }
446 
447  int qmlDotsCount();
448  void updateAccidental(AccidentalState*);
449  void updateLine();
450  void setNval(const NoteVal&, Fraction = { -1, 1} );
451  NoteEventList& playEvents() { return _playEvents; }
452  const NoteEventList& playEvents() const { return _playEvents; }
453  NoteEvent* noteEvent(int idx) { return &_playEvents[idx]; }
454  void setPlayEvents(const NoteEventList& l) { _playEvents = l; }
455 
456  const QVector<Spanner*>& spannerFor() const { return _spannerFor; }
457  const QVector<Spanner*>& spannerBack() const { return _spannerBack; }
458 
459  void addSpannerBack(Spanner* e) { if (!_spannerBack.contains(e)) _spannerBack.push_back(e); }
460  bool removeSpannerBack(Spanner* e) { return _spannerBack.removeOne(e); }
461  void addSpannerFor(Spanner* e) { if (!_spannerFor.contains(e)) _spannerFor.push_back(e); }
462  bool removeSpannerFor(Spanner* e) { return _spannerFor.removeOne(e); }
463 
464  void transposeDiatonic(int interval, bool keepAlterations, bool useDoubleAccidentals);
465 
466  virtual void localSpatiumChanged(qreal oldValue, qreal newValue) override;
467  virtual QVariant getProperty(Pid propertyId) const override;
468  virtual bool setProperty(Pid propertyId, const QVariant&) override;
469  void undoChangeDotsVisible(bool v);
470  virtual QVariant propertyDefault(Pid) const override;
471  virtual QString propertyUserValue(Pid) const override;
472 
473  bool mark() const { return _mark; }
474  void setMark(bool v) const { _mark = v; }
475  virtual void setScore(Score* s) override;
476  void setDotY(Direction);
477 
478  void addParentheses();
479 
480  static SymId noteHead(int direction, NoteHead::Group, NoteHead::Type, int tpc, Key key, NoteHeadScheme scheme);
481  static SymId noteHead(int direction, NoteHead::Group, NoteHead::Type);
482  NoteVal noteVal() const;
483 
484  Element* nextInEl(Element* e);
485  Element* prevInEl(Element* e);
486  virtual Element* nextElement() override;
487  virtual Element* prevElement() override;
488  virtual Element* lastElementBeforeSegment();
489  virtual Element* nextSegmentElement() override;
490  virtual Element* prevSegmentElement() override;
491 
492  virtual QString accessibleInfo() const override;
493  virtual QString screenReaderInfo() const override;
494  virtual QString accessibleExtraInfo() const override;
495 
496  virtual Shape shape() const override;
497  std::vector<Note*> tiedNotes() const;
498 
499  void setOffTimeType(int v) { _offTimeType = v; }
500  void setOnTimeType(int v) { _onTimeType = v; }
501  int offTimeType() const { return _offTimeType; }
502  int onTimeType() const { return _onTimeType; }
503  };
504 
505 } // namespace Ms
506 #endif
DirectionH
Definition: mscore.h:297
Helper class for reading beams, tuplets and spanners.
Definition: connector.h:96
void addSpannerBack(Spanner *e)
Definition: note.h:459
virtual Note * clone() const override
Definition: note.h:295
const ElementList & el() const
Definition: note.h:420
Pid
Definition: property.h:62
Key
Definition: key.h:28
virtual NoteHead * clone() const override
Definition: note.h:145
Definition: noteevent.h:25
Definition: xml.h:67
int fret() const
Definition: note.h:367
int offTimeType() const
Definition: note.h:501
bool dotsHidden() const
Definition: note.h:413
virtual int subtype() const override
Definition: note.h:327
Virtual base class for slurs, ties, lines etc.
Definition: spanner.h:136
Definition: note.cpp:1485
ValueType veloType() const
Definition: note.h:434
qreal tuning() const
Definition: note.h:335
void setTpc2(int v)
Definition: note.h:351
Accidental * accidental() const
Definition: note.h:357
void setUserMirror(MScore::DirectionH d)
Definition: note.h:426
ElementType type() const override
Definition: note.h:296
void setHidden(bool val)
Definition: note.h:412
AccidentalType
Definition: types.h:152
int string() const
Definition: note.h:369
SymId _cachedSymNull
Definition: note.h:268
NoteHeadScheme
Definition: mscore.h:182
QString _fretString
Definition: note.h:270
NoteHead::Type headType() const
Definition: note.h:323
SymId
Definition: sym.h:30
Base class of score layout elements.
Definition: element.h:158
bool mark() const
Definition: note.h:473
Definition: key.h:134
NoteEventList _playEvents
Definition: note.h:263
Definition: element.h:517
void setMark(bool v) const
Definition: note.h:474
void setTieFor(Tie *t)
Definition: note.h:390
void setCachedNoteheadSym(SymId i)
Definition: note.h:305
void setGhost(bool val)
Definition: note.h:372
Direction userDotPosition() const
Definition: note.h:428
int tpc1() const
Definition: note.h:345
ElementList & el()
Definition: note.h:419
Definition: accidental.h:65
Definition: score.h:391
void setChord(Chord *a)
Definition: note.h:400
int tpc2() const
Definition: note.h:346
Definition: model.h:100
Definition: noteevent.h:53
int transposeTpc(int tpc, Interval interval, bool useDoubleSharpsFlats)
Definition: transpose.cpp:117
void setSubchannel(int val)
Definition: note.h:423
const QVector< NoteDot * > & dots() const
Definition: note.h:444
int onTimeType() const
Definition: note.h:502
void setMirror(bool val)
Definition: note.h:380
bool removeSpannerFor(Spanner *e)
Definition: note.h:462
NoteVal(int p)
Definition: note.h:173
NoteVal()
Definition: note.h:172
QVector< Spanner * > _spannerFor
Definition: note.h:264
void setUserDotPosition(Direction d)
Definition: note.h:429
void setVeloType(ValueType v)
Definition: note.h:435
void setTieBack(Tie *t)
Definition: note.h:391
void setFretConflict(bool val)
Definition: note.h:374
bool small() const
Definition: note.h:382
bool ghost() const
Definition: note.h:371
void setOnTimeType(int v)
Definition: note.h:500
Definition: segment.h:50
int fixedLine() const
Definition: note.h:341
Definition: aeolus.cpp:26
Definition: note.h:53
void setDotsHidden(bool val)
Definition: note.h:414
Definition: pitchspelling.h:41
void setPlayEvents(const NoteEventList &l)
Definition: note.h:454
Definition: stafftype.h:173
NoteEvent * noteEvent(int idx)
Definition: note.h:453
helper structure
Definition: note.h:164
Definition: xml.h:218
int veloOffset() const
Definition: note.h:436
void setTpc1(int v)
Definition: note.h:350
void setOffTimeType(int v)
Definition: note.h:499
NoteType
Definition: types.h:255
void setFixedLine(int v)
Definition: note.h:342
void setLine(int n)
Definition: note.h:364
void addSpannerFor(Spanner *e)
Definition: note.h:461
a Tie has a Note as startElement/endElement
Definition: tie.h:60
Symbol constructed from builtin symbol.
Definition: symbol.h:31
Graphic representation of a chord.
Definition: chord.h:55
MScore::DirectionH userMirror() const
Definition: note.h:425
const NoteEventList & playEvents() const
Definition: note.h:452
bool play() const
Definition: note.h:385
bool mirror() const
Definition: note.h:379
ValueType
Definition: note.h:215
Direction
Definition: types.h:282
void setFret(int val)
Definition: note.h:368
Definition: element.h:111
int pitch() const
Definition: note.h:332
const QVector< Spanner * > & spannerFor() const
Definition: note.h:456
NoteDot * dot(int n)
Definition: note.h:443
int subchannel() const
Definition: note.h:422
Definition: notedot.h:27
Chord * chord() const
Definition: note.h:399
NoteHead::Group headGroup() const
Definition: note.h:322
Group
Definition: note.h:56
int tpc(int idx, int pitch, int opt)
Definition: pitchspelling.cpp:539
QVector< NoteDot * > & dots()
Definition: note.h:445
void setVeloOffset(int v)
Definition: note.h:437
Definition: shape.h:42
Graphic representation of a note.
Definition: note.h:212
NoteHead(Score *s=0)
Definition: note.h:143
NoteEventList & playEvents()
Definition: note.h:451
void setTuning(qreal v)
Definition: note.h:336
Ms::Tie * tieFor() const
Definition: note.h:388
Type
Definition: note.h:129
Definition: fraction.h:46
ElementType
Definition: types.h:34
QVector< NoteDot * > _dots
Definition: note.h:262
bool fretConflict() const
Definition: note.h:373
void setAccidental(Accidental *a)
Definition: note.h:358
bool hidden() const
Definition: note.h:411
bool removeSpannerBack(Spanner *e)
Definition: note.h:460
Note * lastTiedNote()
Definition: note.h:394
virtual ElementType type() const override
Definition: note.h:146
ElementList _el
fingering, other text, symbols or images
Definition: note.h:261
void setFixed(bool v)
Definition: note.h:340
bool fixed() const
Definition: note.h:339
Pid propertyId(const QStringRef &s)
Definition: property.cpp:347
QVector< Spanner * > _spannerBack
Definition: note.h:265
SymId _cachedNoteheadSym
Definition: note.h:267
const QVector< Spanner * > & spannerBack() const
Definition: note.h:457
Ms::Tie * tieBack() const
Definition: note.h:389
void setPlay(bool val)
Definition: note.h:386