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