MuseScore Plugins  3.2
Plugins API for MuseScore
elements.h
1 //=============================================================================
2 // MuseScore
3 // Music Composition & Notation
4 //
5 // Copyright (C) 2019 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 __PLUGIN_API_ELEMENTS_H__
14 #define __PLUGIN_API_ELEMENTS_H__
15 
16 #include "scoreelement.h"
17 #include "libmscore/element.h"
18 #include "libmscore/chord.h"
19 #include "libmscore/lyrics.h"
20 #include "libmscore/measure.h"
21 #include "libmscore/note.h"
22 #include "libmscore/notedot.h"
23 #include "libmscore/segment.h"
24 #include "libmscore/accidental.h"
25 
26 namespace Ms {
27 namespace PluginAPI {
28 
29 class Element;
30 
31 //---------------------------------------------------------
32 // wrap
33 //---------------------------------------------------------
34 
35 extern Element* wrap(Ms::Element* se, Ownership own = Ownership::SCORE);
36 
37 // TODO: add RESET functions
38 #define API_PROPERTY(name, pid) \
39  Q_PROPERTY(QVariant name READ get_##name WRITE set_##name) \
40  QVariant get_##name() const { return get(Ms::Pid::pid); } \
41  void set_##name(QVariant val) { set(Ms::Pid::pid, val); }
42 
49 #define API_PROPERTY_T(type, name, pid) \
50  Q_PROPERTY(type name READ get_##name WRITE set_##name) \
51  type get_##name() const { return get(Ms::Pid::pid).value<type>(); } \
52  void set_##name(type val) { set(Ms::Pid::pid, QVariant::fromValue(val)); }
53 
54 #define API_PROPERTY_READ_ONLY(name, pid) \
55  Q_PROPERTY(QVariant name READ get_##name) \
56  QVariant get_##name() const { return get(Ms::Pid::pid); }
57 
58 
59 #define API_PROPERTY_READ_ONLY_T(type, name, pid) \
60  Q_PROPERTY(type name READ get_##name) \
61  type get_##name() const { return get(Ms::Pid::pid).value<type>(); } \
62 
63 //---------------------------------------------------------
64 // Element
65 // Element wrapper
66 //---------------------------------------------------------
67 
69  Q_OBJECT
70 
75  Q_PROPERTY(qreal offsetX READ offsetX WRITE setOffsetX)
80  Q_PROPERTY(qreal offsetY READ offsetY WRITE setOffsetY)
81 
82  API_PROPERTY( subtype, SUBTYPE )
83  API_PROPERTY_READ_ONLY_T( bool, selected, SELECTED )
84  API_PROPERTY_READ_ONLY_T( bool, generated, GENERATED )
89  API_PROPERTY_T( QColor, color, COLOR )
90  API_PROPERTY_T( bool, visible, VISIBLE )
92  API_PROPERTY_T( int, z, Z )
93  API_PROPERTY( small, SMALL )
94  API_PROPERTY( showCourtesy, SHOW_COURTESY )
95  API_PROPERTY( lineType, LINE_TYPE )
96  API_PROPERTY( line, LINE )
97  API_PROPERTY( fixed, FIXED )
98  API_PROPERTY( fixedLine, FIXED_LINE )
100  API_PROPERTY( headType, HEAD_TYPE )
102  API_PROPERTY( headGroup, HEAD_GROUP )
103  API_PROPERTY( articulationAnchor, ARTICULATION_ANCHOR )
104  API_PROPERTY( direction, DIRECTION )
105  API_PROPERTY( stemDirection, STEM_DIRECTION )
106  API_PROPERTY( noStem, NO_STEM )
107  API_PROPERTY( slurDirection, SLUR_DIRECTION )
108  API_PROPERTY( leadingSpace, LEADING_SPACE )
109  API_PROPERTY( distribute, DISTRIBUTE )
110  API_PROPERTY( mirrorHead, MIRROR_HEAD )
111  API_PROPERTY( dotPosition, DOT_POSITION )
112  API_PROPERTY( tuning, TUNING )
113  API_PROPERTY( pause, PAUSE )
114  API_PROPERTY( barlineType, BARLINE_TYPE )
115  API_PROPERTY( barlineSpan, BARLINE_SPAN )
116  API_PROPERTY( barlineSpanFrom, BARLINE_SPAN_FROM )
117  API_PROPERTY( barlineSpanTo, BARLINE_SPAN_TO )
125  API_PROPERTY_T( QPointF, offset, OFFSET )
126  API_PROPERTY( fret, FRET )
127  API_PROPERTY( string, STRING )
128  API_PROPERTY( ghost, GHOST )
129  API_PROPERTY( play, PLAY )
130  API_PROPERTY( timesigNominal, TIMESIG_NOMINAL )
131  API_PROPERTY( timesigActual, TIMESIG_ACTUAL )
132  API_PROPERTY( numberType, NUMBER_TYPE )
133  API_PROPERTY( bracketType, BRACKET_TYPE )
134  API_PROPERTY( normalNotes, NORMAL_NOTES )
135  API_PROPERTY( actualNotes, ACTUAL_NOTES )
136  API_PROPERTY( p1, P1 )
137  API_PROPERTY( p2, P2 )
138  API_PROPERTY( growLeft, GROW_LEFT )
139  API_PROPERTY( growRight, GROW_RIGHT )
140  API_PROPERTY( boxHeight, BOX_HEIGHT )
141  API_PROPERTY( boxWidth, BOX_WIDTH )
142  API_PROPERTY( topGap, TOP_GAP )
143  API_PROPERTY( bottomGap, BOTTOM_GAP )
144  API_PROPERTY( leftMargin, LEFT_MARGIN )
145  API_PROPERTY( rightMargin, RIGHT_MARGIN )
146  API_PROPERTY( topMargin, TOP_MARGIN )
147  API_PROPERTY( bottomMargin, BOTTOM_MARGIN )
148  API_PROPERTY( layoutBreakType, LAYOUT_BREAK )
149  API_PROPERTY( autoscale, AUTOSCALE )
150  API_PROPERTY( size, SIZE )
151  API_PROPERTY( scale, SCALE )
152  API_PROPERTY( lockAspectRatio, LOCK_ASPECT_RATIO )
153  API_PROPERTY( sizeIsSpatium, SIZE_IS_SPATIUM )
154  API_PROPERTY( text, TEXT )
155  API_PROPERTY( beamPos, BEAM_POS )
156  API_PROPERTY( beamMode, BEAM_MODE )
157  API_PROPERTY( beamNoSlope, BEAM_NO_SLOPE )
158  API_PROPERTY( userLen, USER_LEN )
159  API_PROPERTY( space, SPACE )
160  API_PROPERTY( tempo, TEMPO )
161  API_PROPERTY( tempoFollowText, TEMPO_FOLLOW_TEXT )
162  API_PROPERTY( accidentalBracket, ACCIDENTAL_BRACKET )
163  API_PROPERTY( numeratorString, NUMERATOR_STRING )
164  API_PROPERTY( denominatorString, DENOMINATOR_STRING )
165  API_PROPERTY( fbprefix, FBPREFIX )
166  API_PROPERTY( fbdigit, FBDIGIT )
167  API_PROPERTY( fbsuffix, FBSUFFIX )
168  API_PROPERTY( fbcontinuationline, FBCONTINUATIONLINE )
169  API_PROPERTY( ottavaType, OTTAVA_TYPE )
170  API_PROPERTY( numbersOnly, NUMBERS_ONLY )
171  API_PROPERTY( trillType, TRILL_TYPE )
172  API_PROPERTY( vibratoType, VIBRATO_TYPE )
173  API_PROPERTY( hairpinCircledTip, HAIRPIN_CIRCLEDTIP )
174  API_PROPERTY( hairpinType, HAIRPIN_TYPE )
175  API_PROPERTY( hairpinHeight, HAIRPIN_HEIGHT )
176  API_PROPERTY( hairpinContHeight, HAIRPIN_CONT_HEIGHT )
177  API_PROPERTY( veloChange, VELO_CHANGE )
178  API_PROPERTY( singleNoteDynamics, SINGLE_NOTE_DYNAMICS )
179  API_PROPERTY( veloChangeMethod, VELO_CHANGE_METHOD )
180  API_PROPERTY( veloChangeSpeed, VELO_CHANGE_SPEED )
181  API_PROPERTY( dynamicRange, DYNAMIC_RANGE )
182  API_PROPERTY( placement, PLACEMENT )
183  API_PROPERTY( velocity, VELOCITY )
184  API_PROPERTY( jumpTo, JUMP_TO )
185  API_PROPERTY( playUntil, PLAY_UNTIL )
186  API_PROPERTY( continueAt, CONTINUE_AT )
187  API_PROPERTY( label, LABEL )
188  API_PROPERTY( markerType, MARKER_TYPE )
189  API_PROPERTY( arpUserLen1, ARP_USER_LEN1 )
190  API_PROPERTY( arpUserLen2, ARP_USER_LEN2 )
191  API_PROPERTY( measureNumberMode, MEASURE_NUMBER_MODE )
192  API_PROPERTY( glissType, GLISS_TYPE )
193  API_PROPERTY( glissText, GLISS_TEXT )
194  API_PROPERTY( glissShowText, GLISS_SHOW_TEXT )
195  API_PROPERTY( diagonal, DIAGONAL )
196  API_PROPERTY( groups, GROUPS )
197  API_PROPERTY( lineStyle, LINE_STYLE )
198  API_PROPERTY( lineColor, COLOR )
199  API_PROPERTY( lineWidth, LINE_WIDTH )
200  API_PROPERTY( lassoPos, LASSO_POS )
201  API_PROPERTY( lassoSize, LASSO_SIZE )
202  API_PROPERTY( timeStretch, TIME_STRETCH )
203  API_PROPERTY( ornamentStyle, ORNAMENT_STYLE )
204  API_PROPERTY( timesig, TIMESIG )
205  API_PROPERTY( timesigGlobal, TIMESIG_GLOBAL )
206  API_PROPERTY( timesigStretch, TIMESIG_STRETCH )
207  API_PROPERTY( timesigType, TIMESIG_TYPE )
208  API_PROPERTY( spannerTick, SPANNER_TICK )
209  API_PROPERTY( spannerTicks, SPANNER_TICKS )
210  API_PROPERTY( spannerTrack2, SPANNER_TRACK2 )
211  API_PROPERTY( userOff2, OFFSET2 )
212  API_PROPERTY( breakMmr, BREAK_MMR )
213  API_PROPERTY( repeatCount, REPEAT_COUNT )
214  API_PROPERTY( userStretch, USER_STRETCH )
215  API_PROPERTY( noOffset, NO_OFFSET )
216  API_PROPERTY( irregular, IRREGULAR )
217  API_PROPERTY( anchor, ANCHOR )
218  API_PROPERTY( slurUoff1, SLUR_UOFF1 )
219  API_PROPERTY( slurUoff2, SLUR_UOFF2 )
220  API_PROPERTY( slurUoff3, SLUR_UOFF3 )
221  API_PROPERTY( slurUoff4, SLUR_UOFF4 )
222  API_PROPERTY( staffMove, STAFF_MOVE )
223  API_PROPERTY( verse, VERSE )
224  API_PROPERTY( syllabic, SYLLABIC )
225  API_PROPERTY( lyricTicks, LYRIC_TICKS )
226  API_PROPERTY( volta_ending, VOLTA_ENDING )
227  API_PROPERTY( lineVisible, LINE_VISIBLE )
228  API_PROPERTY( mag, MAG )
229  API_PROPERTY( useDrumset, USE_DRUMSET )
230  API_PROPERTY( duration, DURATION )
231  API_PROPERTY( durationType, DURATION_TYPE )
232  API_PROPERTY( role, ROLE )
233  API_PROPERTY_T( int, track, TRACK )
234  API_PROPERTY( glissandoStyle, GLISSANDO_STYLE )
235  API_PROPERTY( fretStrings, FRET_STRINGS )
236  API_PROPERTY( fretFrets, FRET_FRETS )
237  /*API_PROPERTY( fretBarre, FRET_BARRE )*/
238  API_PROPERTY( fretOffset, FRET_OFFSET )
239  API_PROPERTY( fretNumPos, FRET_NUM_POS )
240  API_PROPERTY( systemBracket, SYSTEM_BRACKET )
241  API_PROPERTY( gap, GAP )
243  API_PROPERTY_T( bool, autoplace, AUTOPLACE )
244  API_PROPERTY( dashLineLen, DASH_LINE_LEN )
245  API_PROPERTY( dashGapLen, DASH_GAP_LEN )
246 // API_PROPERTY_READ_ONLY( tick, TICK ) // wasn't available in 2.X, disabled due to fractions transition
247  API_PROPERTY( playbackVoice1, PLAYBACK_VOICE1 )
248  API_PROPERTY( playbackVoice2, PLAYBACK_VOICE2 )
249  API_PROPERTY( playbackVoice3, PLAYBACK_VOICE3 )
250  API_PROPERTY( playbackVoice4, PLAYBACK_VOICE4 )
251  API_PROPERTY( symbol, SYMBOL )
252  API_PROPERTY( playRepeats, PLAY_REPEATS )
253  API_PROPERTY( createSystemHeader, CREATE_SYSTEM_HEADER )
254  API_PROPERTY( staffLines, STAFF_LINES )
255  API_PROPERTY( lineDistance, LINE_DISTANCE )
256  API_PROPERTY( stepOffset, STEP_OFFSET )
257  API_PROPERTY( staffShowBarlines, STAFF_SHOW_BARLINES )
258  API_PROPERTY( staffShowLedgerlines, STAFF_SHOW_LEDGERLINES )
259  API_PROPERTY( staffSlashStyle, STAFF_SLASH_STYLE )
260  API_PROPERTY( staffNoteheadScheme, STAFF_NOTEHEAD_SCHEME )
261  API_PROPERTY( staffGenClef, STAFF_GEN_CLEF )
262  API_PROPERTY( staffGenTimesig, STAFF_GEN_TIMESIG )
263  API_PROPERTY( staffGenKeysig, STAFF_GEN_KEYSIG )
264  API_PROPERTY( staffYoffset, STAFF_YOFFSET )
265  API_PROPERTY( staffUserdist, STAFF_USERDIST )
266  API_PROPERTY( staffBarlineSpan, STAFF_BARLINE_SPAN )
267  API_PROPERTY( staffBarlineSpanFrom, STAFF_BARLINE_SPAN_FROM )
268  API_PROPERTY( staffBarlineSpanTo, STAFF_BARLINE_SPAN_TO )
269  API_PROPERTY( bracketSpan, BRACKET_SPAN )
270  API_PROPERTY( bracketColumn, BRACKET_COLUMN )
271  API_PROPERTY( inameLayoutPosition, INAME_LAYOUT_POSITION )
272  API_PROPERTY( subStyle, SUB_STYLE )
273  API_PROPERTY( fontFace, FONT_FACE )
274  API_PROPERTY( fontSize, FONT_SIZE )
275  API_PROPERTY( fontStyle, FONT_STYLE )
276  API_PROPERTY( frameType, FRAME_TYPE )
277  API_PROPERTY( frameWidth, FRAME_WIDTH )
278  API_PROPERTY( framePadding, FRAME_PADDING )
279  API_PROPERTY( frameRound, FRAME_ROUND )
280  API_PROPERTY( frameFgColor, FRAME_FG_COLOR )
281  API_PROPERTY( frameBgColor, FRAME_BG_COLOR )
282  API_PROPERTY( sizeSpatiumDependent, SIZE_SPATIUM_DEPENDENT )
283  API_PROPERTY( align, ALIGN )
284  API_PROPERTY( systemFlag, SYSTEM_FLAG )
285  API_PROPERTY( beginText, BEGIN_TEXT )
286  API_PROPERTY( beginTextAlign, BEGIN_TEXT_ALIGN )
287  API_PROPERTY( beginTextPlace, BEGIN_TEXT_PLACE )
288  API_PROPERTY( beginHookType, BEGIN_HOOK_TYPE )
289  API_PROPERTY( beginHookHeight, BEGIN_HOOK_HEIGHT )
290  API_PROPERTY( beginFontFace, BEGIN_FONT_FACE )
291  API_PROPERTY( beginFontSize, BEGIN_FONT_SIZE )
292  API_PROPERTY( beginFontStyle, BEGIN_FONT_STYLE )
293  API_PROPERTY( beginTextOffset, BEGIN_TEXT_OFFSET )
294  API_PROPERTY( continueText, CONTINUE_TEXT )
295  API_PROPERTY( continueTextAlign, CONTINUE_TEXT_ALIGN )
296  API_PROPERTY( continueTextPlace, CONTINUE_TEXT_PLACE )
297  API_PROPERTY( continueFontFace, CONTINUE_FONT_FACE )
298  API_PROPERTY( continueFontSize, CONTINUE_FONT_SIZE )
299  API_PROPERTY( continueFontStyle, CONTINUE_FONT_STYLE )
300  API_PROPERTY( continueTextOffset, CONTINUE_TEXT_OFFSET )
301  API_PROPERTY( endText, END_TEXT )
302  API_PROPERTY( endTextAlign, END_TEXT_ALIGN )
303  API_PROPERTY( endTextPlace, END_TEXT_PLACE )
304  API_PROPERTY( endHookType, END_HOOK_TYPE )
305  API_PROPERTY( endHookHeight, END_HOOK_HEIGHT )
306  API_PROPERTY( endFontFace, END_FONT_FACE )
307  API_PROPERTY( endFontSize, END_FONT_SIZE )
308  API_PROPERTY( endFontStyle, END_FONT_STYLE )
309  API_PROPERTY( endTextOffset, END_TEXT_OFFSET )
310  API_PROPERTY( posAbove, POS_ABOVE )
311  API_PROPERTY_T( int, voice, VOICE )
312  API_PROPERTY_READ_ONLY( position, POSITION ) // TODO: needed?
313 
314  qreal offsetX() const { return element()->offset().x() / element()->spatium(); }
315  qreal offsetY() const { return element()->offset().y() / element()->spatium(); }
316  void setOffsetX(qreal offX);
317  void setOffsetY(qreal offY);
318 
319  public:
321  Element(Ms::Element* e = nullptr, Ownership own = Ownership::PLUGIN)
322  : Ms::PluginAPI::ScoreElement(e, own) {}
323 
326  Ms::Element* element() { return toElement(e); }
327  const Ms::Element* element() const { return toElement(e); }
330 
332  Q_INVOKABLE Ms::PluginAPI::Element* clone() const { return wrap(element()->clone(), Ownership::PLUGIN); }
333 
334  Q_INVOKABLE QString subtypeName() const { return element()->subtypeName(); }
336  Q_INVOKABLE QString _name() const { return name(); }
337  };
338 
339 //---------------------------------------------------------
340 // Note
341 // Note wrapper
342 //---------------------------------------------------------
343 
344 class Note : public Element {
345  Q_OBJECT
346  Q_PROPERTY(Ms::PluginAPI::Element* accidental READ accidental)
347  Q_PROPERTY(Ms::AccidentalType accidentalType READ accidentalType WRITE setAccidentalType)
348  Q_PROPERTY(QQmlListProperty<Ms::PluginAPI::Element> dots READ dots)
349 // Q_PROPERTY(int dotsCount READ qmlDotsCount)
350  Q_PROPERTY(QQmlListProperty<Ms::PluginAPI::Element> elements READ elements)
351 // Q_PROPERTY(int fret READ fret WRITE undoSetFret)
352 // Q_PROPERTY(bool ghost READ ghost WRITE undoSetGhost)
353 // Q_PROPERTY(Ms::NoteHead::Group headGroup READ headGroup WRITE undoSetHeadGroup)
354 // Q_PROPERTY(Ms::NoteHead::Type headType READ headType WRITE undoSetHeadType)
355 // Q_PROPERTY(bool hidden READ hidden)
356 // Q_PROPERTY(int line READ line)
357 // Q_PROPERTY(bool mirror READ mirror)
358 // Q_PROPERTY(int pitch READ pitch WRITE undoSetPitch)
359 // Q_PROPERTY(bool play READ play WRITE undoSetPlay)
360 // Q_PROPERTY(int ppitch READ ppitch)
361 // Q_PROPERTY(bool small READ small WRITE undoSetSmall)
362 // Q_PROPERTY(int string READ string WRITE undoSetString)
363 // Q_PROPERTY(int subchannel READ subchannel)
364 // Q_PROPERTY(Ms::Tie* tieBack READ tieBack)
365 // Q_PROPERTY(Ms::Tie* tieFor READ tieFor)
368  Q_PROPERTY(Ms::NoteType noteType READ noteType)
369 
371  API_PROPERTY_T( int, pitch, PITCH )
376  API_PROPERTY_T( int, tpc1, TPC1 )
381  API_PROPERTY_T( int, tpc2, TPC2 )
387  Q_PROPERTY(int tpc READ tpc WRITE setTpc)
388 // Q_PROPERTY(qreal tuning READ tuning WRITE undoSetTuning)
389 // Q_PROPERTY(Ms::MScore::Direction userDotPosition READ userDotPosition WRITE undoSetUserDotPosition)
390 // Q_PROPERTY(Ms::MScore::DirectionH userMirror READ userMirror WRITE undoSetUserMirror)
392  API_PROPERTY( veloType, VELO_TYPE )
393  API_PROPERTY_T( int, veloOffset, VELO_OFFSET )
394 
395  public:
397  Note(Ms::Note* c = nullptr, Ownership own = Ownership::PLUGIN)
398  : Element(c, own) {}
399 
400  Ms::Note* note() { return toNote(e); }
401  const Ms::Note* note() const { return toNote(e); }
402 
403  int tpc() const { return note()->tpc(); }
404  void setTpc(int val);
405 
406  QQmlListProperty<Element> dots() { return wrapContainerProperty<Element>(this, note()->dots()); }
407  QQmlListProperty<Element> elements() { return wrapContainerProperty<Element>(this, note()->el()); }
408 
409  Element* accidental() { return wrap<Element>(note()->accidental()); }
410 
411  Ms::AccidentalType accidentalType() { return note()->accidentalType(); }
412  void setAccidentalType(Ms::AccidentalType t) { note()->setAccidentalType(t); }
413  Ms::NoteType noteType() { return note()->noteType(); }
415  };
416 
417 //---------------------------------------------------------
418 // Chord
419 // Chord wrapper
420 //---------------------------------------------------------
421 
422 class Chord : public Element {
423  Q_OBJECT
424  Q_PROPERTY(QQmlListProperty<Ms::PluginAPI::Chord> graceNotes READ graceNotes)
425  Q_PROPERTY(QQmlListProperty<Ms::PluginAPI::Note> notes READ notes )
426  Q_PROPERTY(QQmlListProperty<Ms::PluginAPI::Element> lyrics READ lyrics ) // TODO: move to ChordRest
427  //Q_PROPERTY(QQmlListProperty<Ms::PluginAPI::Element> stem READ stem )
428  //Q_PROPERTY(QQmlListProperty<Ms::PluginAPI::Element> stemSlash READ stemSlash )
429  //Q_PROPERTY(QQmlListProperty<Ms::PluginAPI::Element> beam READ beam )
430  //Q_PROPERTY(QQmlListProperty<Ms::PluginAPI::Element> hook READ hook )
433  Q_PROPERTY(Ms::NoteType noteType READ noteType)
434 
435  public:
437  Chord(Ms::Chord* c = nullptr, Ownership own = Ownership::PLUGIN)
438  : Element(c, own) {}
439 
440  Ms::Chord* chord() { return toChord(e); }
441  const Ms::Chord* chord() const { return toChord(e); }
442 
443  QQmlListProperty<Chord> graceNotes() { return wrapContainerProperty<Chord>(this, chord()->graceNotes()); }
444  QQmlListProperty<Note> notes() { return wrapContainerProperty<Note>(this, chord()->notes()); }
445  QQmlListProperty<Element> lyrics() { return wrapContainerProperty<Element>(this, chord()->lyrics()); } // TODO: move to ChordRest // TODO: special type for Lyrics?
446  //QQmlListProperty<Element> stem() { return wrapContainerProperty<Element>(this, chord()->stem()); }
447  //QQmlListProperty<Element> stemSlash() { return wrapContainerProperty<Element>(this, chord()->stemSlash()); }
448  //QQmlListProperty<Element> beam() { return wrapContainerProperty<Element>(this, chord()->beam()); }
449  //QQmlListProperty<Element> hook() { return wrapContainerProperty<Element>(this, chord()->hook()); }
450  Ms::NoteType noteType() { return chord()->noteType(); }
452  };
453 
454 //---------------------------------------------------------
455 // Segment
456 // Segment
457 //---------------------------------------------------------
458 
459 class Segment : public Element {
460  Q_OBJECT
465  Q_PROPERTY(QQmlListProperty<Ms::PluginAPI::Element> annotations READ annotations)
469  Q_PROPERTY(Ms::PluginAPI::Segment* nextInMeasure READ nextInMeasure)
473  Q_PROPERTY(Ms::PluginAPI::Segment* next READ nextInScore)
477  Q_PROPERTY(Ms::PluginAPI::Segment* prevInMeasure READ prevInMeasure)
481  Q_PROPERTY(Ms::PluginAPI::Segment* prev READ prevInScore)
482  // segmentType was read&write in MuseScore 2.X plugin API.
483  // Allowing plugins to change random segments types doesn't seem to be a
484  // good idea though.
486  Q_PROPERTY(Ms::SegmentType segmentType READ segmentType)
487  Q_PROPERTY(int tick READ tick) // TODO: revise libmscore (or this API):
488  // Pid::TICK is relative or absolute in different contexts
489 
490  public:
492  Segment(Ms::Segment* s = nullptr, Ownership own = Ownership::SCORE)
493  : Element(s, own) {}
494 
495  Ms::Segment* segment() { return toSegment(e); }
496  const Ms::Segment* segment() const { return toSegment(e); }
497 
498  int tick() const { return segment()->tick().ticks(); }
499 
500  Ms::SegmentType segmentType() const { return segment()->segmentType(); }
501 
502  Segment* nextInScore() { return wrap<Segment>(segment()->next1()); }
503  Segment* nextInMeasure() { return wrap<Segment>(segment()->next()); }
504  Segment* prevInScore() { return wrap<Segment>(segment()->prev1()); }
505  Segment* prevInMeasure() { return wrap<Segment>(segment()->prev()); }
506  QQmlListProperty<Element> annotations() { return wrapContainerProperty<Element>(this, segment()->annotations()); }
508 
511  Q_INVOKABLE Ms::PluginAPI::Element* elementAt(int track);
512  };
513 
514 //---------------------------------------------------------
515 // Measure
516 // Measure wrapper
517 //---------------------------------------------------------
518 
519 class Measure : public Element {
520  Q_OBJECT
522  Q_PROPERTY(Ms::PluginAPI::Segment* firstSegment READ firstSegment)
524  Q_PROPERTY(Ms::PluginAPI::Segment* lastSegment READ lastSegment)
525 
526  // TODO: to MeasureBase?
527 // Q_PROPERTY(bool lineBreak READ lineBreak WRITE undoSetLineBreak)
528  Q_PROPERTY(Ms::PluginAPI::Measure* nextMeasure READ nextMeasure)
529 // Q_PROPERTY(Ms::Measure* nextMeasureMM READ nextMeasureMM)
530 // Q_PROPERTY(bool pageBreak READ pageBreak WRITE undoSetPageBreak)
531  Q_PROPERTY(Ms::PluginAPI::Measure* prevMeasure READ prevMeasure)
532 // Q_PROPERTY(Ms::Measure* prevMeasureMM READ prevMeasureMM)
533 
534  public:
536  Measure(Ms::Measure* m = nullptr, Ownership own = Ownership::SCORE)
537  : Element(m, own) {}
538 
539  Ms::Measure* measure() { return toMeasure(e); }
540  const Ms::Measure* measure() const { return toMeasure(e); }
541 
542  Segment* firstSegment() { return wrap<Segment>(measure()->firstEnabled(), Ownership::SCORE); }
543  Segment* lastSegment() { return wrap<Segment>(measure()->last(), Ownership::SCORE); }
544 
545  Measure* prevMeasure() { return wrap<Measure>(measure()->prevMeasure(), Ownership::SCORE); }
546  Measure* nextMeasure() { return wrap<Measure>(measure()->nextMeasure(), Ownership::SCORE); }
548  };
549 
550 #undef API_PROPERTY
551 #undef API_PROPERTY_T
552 #undef API_PROPERTY_READ_ONLY
553 #undef API_PROPERTY_READ_ONLY_T
554 
555 } // namespace PluginAPI
556 } // namespace Ms
557 #endif
Q_INVOKABLE QString _name() const
Deprecated: same as ScoreElement::name. Left for compatibility purposes.
Definition: elements.h:336
Definition: elements.h:519
Q_INVOKABLE Ms::PluginAPI::Element * clone() const
Create a copy of the element.
Definition: elements.h:332
Base class for most of object wrappers exposed to QML.
Definition: scoreelement.h:42
QColor color
Element color.
Definition: elements.h:89
Definition: elements.h:459
int z
Stacking order of this element.
Definition: elements.h:92
qreal offsetY
Y-axis offset from a reference position in spatium units.
Definition: elements.h:80
Definition: elements.h:68
NoteType
Definition: types.h:254
QPointF offset
Offset from a reference position in spatium units.
Definition: elements.h:125
QVariant headGroup
Notehead group, one of PluginAPI::PluginAPI::NoteHeadGroup values.
Definition: elements.h:102
Definition: cursor.cpp:29
QVariant headType
Notehead type, one of PluginAPI::PluginAPI::NoteHeadType values.
Definition: elements.h:100
SegmentType
Definition: types.h:332
bool autoplace
Whether this element participates in autoplacement.
Definition: elements.h:243
Main class of the plugins framework. Named as MuseScore in QML.
Definition: qmlpluginapi.h:55
Definition of classes Note and NoteHead.
QString name
Name of this element&#39;s type, not localized.
Definition: scoreelement.h:54
Graphic representation of a note.
Definition: note.h:211
Definition: elements.h:422
Definition: elements.h:344
AccidentalType
Definition: types.h:151