MuseScore Plugins 3.3
Plugins API for MuseScore
Loading...
Searching...
No Matches
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/hook.h"
20#include "libmscore/lyrics.h"
21#include "libmscore/measure.h"
22#include "libmscore/note.h"
23#include "libmscore/notedot.h"
24#include "libmscore/page.h"
25#include "libmscore/segment.h"
26#include "libmscore/staff.h"
27#include "libmscore/stem.h"
28#include "libmscore/stemslash.h"
29#include "libmscore/tuplet.h"
30#include "libmscore/accidental.h"
31#include "libmscore/musescoreCore.h"
32#include "libmscore/score.h"
33#include "libmscore/undo.h"
34#include "playevent.h"
35#include "libmscore/types.h"
36
37namespace Ms {
38namespace PluginAPI {
39
40class FractionWrapper;
41class Element;
42class Part;
43class Staff;
44class Tuplet;
45class Tie;
46extern Tie* tieWrap(Ms::Tie* tie);
47
48//---------------------------------------------------------
49// wrap
50//---------------------------------------------------------
51
52extern Element* wrap(Ms::Element* se, Ownership own = Ownership::SCORE);
53
54// TODO: add RESET functions
55#define API_PROPERTY(name, pid) \
56 Q_PROPERTY(QVariant name READ get_##name WRITE set_##name) \
57 QVariant get_##name() const { return get(Ms::Pid::pid); } \
58 void set_##name(QVariant val) { set(Ms::Pid::pid, val); }
59
66#define API_PROPERTY_T(type, name, pid) \
67 Q_PROPERTY(type name READ get_##name WRITE set_##name) \
68 type get_##name() const { return get(Ms::Pid::pid).value<type>(); } \
69 void set_##name(type val) { set(Ms::Pid::pid, QVariant::fromValue(val)); }
70
71#define API_PROPERTY_READ_ONLY(name, pid) \
72 Q_PROPERTY(QVariant name READ get_##name) \
73 QVariant get_##name() const { return get(Ms::Pid::pid); }
74
75
76#define API_PROPERTY_READ_ONLY_T(type, name, pid) \
77 Q_PROPERTY(type name READ get_##name) \
78 type get_##name() const { return get(Ms::Pid::pid).value<type>(); } \
79
80//---------------------------------------------------------
81// Element
82// Element wrapper
83//---------------------------------------------------------
84
86 Q_OBJECT
87
97 Q_PROPERTY(Ms::PluginAPI::Staff* staff READ staff)
102 Q_PROPERTY(qreal offsetX READ offsetX WRITE setOffsetX)
107 Q_PROPERTY(qreal offsetY READ offsetY WRITE setOffsetY)
119 Q_PROPERTY(qreal posX READ posX)
131 Q_PROPERTY(qreal posY READ posY)
136 Q_PROPERTY(QPointF pagePos READ pagePos)
137
144 Q_PROPERTY(QRectF bbox READ bbox)
145
146 API_PROPERTY( subtype, SUBTYPE )
147 API_PROPERTY_READ_ONLY_T( bool, selected, SELECTED )
148 API_PROPERTY_READ_ONLY_T( bool, generated, GENERATED )
153 API_PROPERTY_T( QColor, color, COLOR )
154 API_PROPERTY_T( bool, visible, VISIBLE )
156 API_PROPERTY_T( int, z, Z )
157 API_PROPERTY( small, SMALL )
158 API_PROPERTY( showCourtesy, SHOW_COURTESY )
159 API_PROPERTY( lineType, LINE_TYPE )
160 API_PROPERTY( line, LINE )
161 API_PROPERTY( fixed, FIXED )
162 API_PROPERTY( fixedLine, FIXED_LINE )
164 API_PROPERTY( headType, HEAD_TYPE )
169 API_PROPERTY( headScheme, HEAD_SCHEME )
171 API_PROPERTY( headGroup, HEAD_GROUP )
172 API_PROPERTY( articulationAnchor, ARTICULATION_ANCHOR )
173 API_PROPERTY( direction, DIRECTION )
174 API_PROPERTY( stemDirection, STEM_DIRECTION )
175 API_PROPERTY( noStem, NO_STEM )
176 API_PROPERTY( slurDirection, SLUR_DIRECTION )
177 API_PROPERTY( leadingSpace, LEADING_SPACE )
178 API_PROPERTY( distribute, DISTRIBUTE )
179 API_PROPERTY( mirrorHead, MIRROR_HEAD )
180 API_PROPERTY( dotPosition, DOT_POSITION )
181 API_PROPERTY( tuning, TUNING )
182 API_PROPERTY( pause, PAUSE )
183 API_PROPERTY( barlineType, BARLINE_TYPE )
184 API_PROPERTY( barlineSpan, BARLINE_SPAN )
185 API_PROPERTY( barlineSpanFrom, BARLINE_SPAN_FROM )
186 API_PROPERTY( barlineSpanTo, BARLINE_SPAN_TO )
194 API_PROPERTY_T( QPointF, offset, OFFSET )
195 API_PROPERTY( fret, FRET )
196 API_PROPERTY( string, STRING )
197 API_PROPERTY( ghost, GHOST )
198 API_PROPERTY( play, PLAY )
199 API_PROPERTY( timesigNominal, TIMESIG_NOMINAL )
200 API_PROPERTY( timesigActual, TIMESIG_ACTUAL )
201 API_PROPERTY( growLeft, GROW_LEFT )
202 API_PROPERTY( growRight, GROW_RIGHT )
203 API_PROPERTY( boxHeight, BOX_HEIGHT )
204 API_PROPERTY( boxWidth, BOX_WIDTH )
205 API_PROPERTY( topGap, TOP_GAP )
206 API_PROPERTY( bottomGap, BOTTOM_GAP )
207 API_PROPERTY( leftMargin, LEFT_MARGIN )
208 API_PROPERTY( rightMargin, RIGHT_MARGIN )
209 API_PROPERTY( topMargin, TOP_MARGIN )
210 API_PROPERTY( bottomMargin, BOTTOM_MARGIN )
211 API_PROPERTY( layoutBreakType, LAYOUT_BREAK )
212 API_PROPERTY( autoscale, AUTOSCALE )
213 API_PROPERTY( size, SIZE )
214 API_PROPERTY( scale, SCALE )
215 API_PROPERTY( lockAspectRatio, LOCK_ASPECT_RATIO )
216 API_PROPERTY( sizeIsSpatium, SIZE_IS_SPATIUM )
217 API_PROPERTY( text, TEXT )
218 API_PROPERTY( beamPos, BEAM_POS )
219 API_PROPERTY( beamMode, BEAM_MODE )
220 API_PROPERTY( beamNoSlope, BEAM_NO_SLOPE )
221 API_PROPERTY( userLen, USER_LEN )
223 API_PROPERTY( space, SPACE )
224 API_PROPERTY( tempo, TEMPO )
225 API_PROPERTY( tempoFollowText, TEMPO_FOLLOW_TEXT )
226 API_PROPERTY( accidentalBracket, ACCIDENTAL_BRACKET )
227 API_PROPERTY( numeratorString, NUMERATOR_STRING )
228 API_PROPERTY( denominatorString, DENOMINATOR_STRING )
229 API_PROPERTY( fbprefix, FBPREFIX )
230 API_PROPERTY( fbdigit, FBDIGIT )
231 API_PROPERTY( fbsuffix, FBSUFFIX )
232 API_PROPERTY( fbcontinuationline, FBCONTINUATIONLINE )
233 API_PROPERTY( ottavaType, OTTAVA_TYPE )
234 API_PROPERTY( numbersOnly, NUMBERS_ONLY )
235 API_PROPERTY( trillType, TRILL_TYPE )
236 API_PROPERTY( vibratoType, VIBRATO_TYPE )
237 API_PROPERTY( hairpinCircledTip, HAIRPIN_CIRCLEDTIP )
238 API_PROPERTY( hairpinType, HAIRPIN_TYPE )
239 API_PROPERTY( hairpinHeight, HAIRPIN_HEIGHT )
240 API_PROPERTY( hairpinContHeight, HAIRPIN_CONT_HEIGHT )
241 API_PROPERTY( veloChange, VELO_CHANGE )
242 API_PROPERTY( singleNoteDynamics, SINGLE_NOTE_DYNAMICS )
243 API_PROPERTY( veloChangeMethod, VELO_CHANGE_METHOD )
244 API_PROPERTY( veloChangeSpeed, VELO_CHANGE_SPEED )
245 API_PROPERTY( dynamicRange, DYNAMIC_RANGE )
250 API_PROPERTY( changeMethod, CHANGE_METHOD )
251 API_PROPERTY( placement, PLACEMENT )
252 API_PROPERTY( velocity, VELOCITY )
253 API_PROPERTY( jumpTo, JUMP_TO )
254 API_PROPERTY( playUntil, PLAY_UNTIL )
255 API_PROPERTY( continueAt, CONTINUE_AT )
256 API_PROPERTY( label, LABEL )
257 API_PROPERTY( markerType, MARKER_TYPE )
258 API_PROPERTY( arpUserLen1, ARP_USER_LEN1 )
259 API_PROPERTY( arpUserLen2, ARP_USER_LEN2 )
260 API_PROPERTY( measureNumberMode, MEASURE_NUMBER_MODE )
262 API_PROPERTY( mmRestRangeBracketType, MMREST_RANGE_BRACKET_TYPE )
263 API_PROPERTY( glissType, GLISS_TYPE )
264 API_PROPERTY( glissText, GLISS_TEXT )
265 API_PROPERTY( glissShowText, GLISS_SHOW_TEXT )
266 API_PROPERTY( glissandoStyle, GLISS_STYLE )
268 API_PROPERTY( glissEaseIn, GLISS_EASEIN )
270 API_PROPERTY( glissEaseOut, GLISS_EASEOUT )
271 API_PROPERTY( diagonal, DIAGONAL )
272 API_PROPERTY( groups, GROUPS )
273 API_PROPERTY( lineStyle, LINE_STYLE )
274 API_PROPERTY( lineColor, COLOR )
275 API_PROPERTY( lineWidth, LINE_WIDTH )
276 API_PROPERTY( lassoPos, LASSO_POS )
277 API_PROPERTY( lassoSize, LASSO_SIZE )
278 API_PROPERTY( timeStretch, TIME_STRETCH )
279 API_PROPERTY( ornamentStyle, ORNAMENT_STYLE )
280 API_PROPERTY( timesig, TIMESIG )
281 API_PROPERTY( timesigGlobal, TIMESIG_GLOBAL )
282 API_PROPERTY( timesigStretch, TIMESIG_STRETCH )
283 API_PROPERTY( timesigType, TIMESIG_TYPE )
284 API_PROPERTY( spannerTick, SPANNER_TICK )
285 API_PROPERTY( spannerTicks, SPANNER_TICKS )
286 API_PROPERTY( spannerTrack2, SPANNER_TRACK2 )
287 API_PROPERTY( userOff2, OFFSET2 )
288 API_PROPERTY( breakMmr, BREAK_MMR )
289 API_PROPERTY( repeatCount, REPEAT_COUNT )
290 API_PROPERTY( userStretch, USER_STRETCH )
291 API_PROPERTY( noOffset, NO_OFFSET )
292 API_PROPERTY( irregular, IRREGULAR )
293 API_PROPERTY( anchor, ANCHOR )
294 API_PROPERTY( slurUoff1, SLUR_UOFF1 )
295 API_PROPERTY( slurUoff2, SLUR_UOFF2 )
296 API_PROPERTY( slurUoff3, SLUR_UOFF3 )
297 API_PROPERTY( slurUoff4, SLUR_UOFF4 )
298 API_PROPERTY( staffMove, STAFF_MOVE )
299 API_PROPERTY( verse, VERSE )
300 API_PROPERTY( syllabic, SYLLABIC )
301 API_PROPERTY( lyricTicks, LYRIC_TICKS )
302 API_PROPERTY( volta_ending, VOLTA_ENDING )
303 API_PROPERTY( lineVisible, LINE_VISIBLE )
304 API_PROPERTY( mag, MAG )
305 API_PROPERTY( useDrumset, USE_DRUMSET )
306 API_PROPERTY( durationType, DURATION_TYPE )
307 API_PROPERTY( role, ROLE )
308 API_PROPERTY_T( int, track, TRACK )
309 API_PROPERTY( fretStrings, FRET_STRINGS )
310 API_PROPERTY( fretFrets, FRET_FRETS )
311 /*API_PROPERTY( fretBarre, FRET_BARRE )*/
312 API_PROPERTY( fretOffset, FRET_OFFSET )
313 API_PROPERTY( fretNumPos, FRET_NUM_POS )
314 API_PROPERTY( systemBracket, SYSTEM_BRACKET )
315 API_PROPERTY( gap, GAP )
317 API_PROPERTY_T( bool, autoplace, AUTOPLACE )
318 API_PROPERTY( dashLineLen, DASH_LINE_LEN )
319 API_PROPERTY( dashGapLen, DASH_GAP_LEN )
320// API_PROPERTY_READ_ONLY( tick, TICK ) // wasn't available in 2.X, disabled due to fractions transition
325 API_PROPERTY( symbol, SYMBOL )
326 API_PROPERTY( playRepeats, PLAY_REPEATS )
327 API_PROPERTY( createSystemHeader, CREATE_SYSTEM_HEADER )
328 API_PROPERTY( staffLines, STAFF_LINES )
329 API_PROPERTY( lineDistance, LINE_DISTANCE )
330 API_PROPERTY( stepOffset, STEP_OFFSET )
331 API_PROPERTY( staffShowBarlines, STAFF_SHOW_BARLINES )
332 API_PROPERTY( staffShowLedgerlines, STAFF_SHOW_LEDGERLINES )
333 API_PROPERTY( staffStemless, STAFF_STEMLESS )
334 API_PROPERTY( staffGenClef, STAFF_GEN_CLEF )
335 API_PROPERTY( staffGenTimesig, STAFF_GEN_TIMESIG )
336 API_PROPERTY( staffGenKeysig, STAFF_GEN_KEYSIG )
337 API_PROPERTY( staffYoffset, STAFF_YOFFSET )
338 API_PROPERTY( bracketSpan, BRACKET_SPAN )
339 API_PROPERTY( bracketColumn, BRACKET_COLUMN )
340 API_PROPERTY( inameLayoutPosition, INAME_LAYOUT_POSITION )
341 API_PROPERTY( subStyle, SUB_STYLE )
342 API_PROPERTY( fontFace, FONT_FACE )
343 API_PROPERTY( fontSize, FONT_SIZE )
344 API_PROPERTY( fontStyle, FONT_STYLE )
345 API_PROPERTY( frameType, FRAME_TYPE )
346 API_PROPERTY( frameWidth, FRAME_WIDTH )
347 API_PROPERTY( framePadding, FRAME_PADDING )
348 API_PROPERTY( frameRound, FRAME_ROUND )
349 API_PROPERTY( frameFgColor, FRAME_FG_COLOR )
350 API_PROPERTY( frameBgColor, FRAME_BG_COLOR )
351 API_PROPERTY( sizeSpatiumDependent, SIZE_SPATIUM_DEPENDENT )
352 API_PROPERTY( align, ALIGN )
353 API_PROPERTY( systemFlag, SYSTEM_FLAG )
354 API_PROPERTY( beginText, BEGIN_TEXT )
355 API_PROPERTY( beginTextAlign, BEGIN_TEXT_ALIGN )
356 API_PROPERTY( beginTextPlace, BEGIN_TEXT_PLACE )
357 API_PROPERTY( beginHookType, BEGIN_HOOK_TYPE )
358 API_PROPERTY( beginHookHeight, BEGIN_HOOK_HEIGHT )
359 API_PROPERTY( beginFontFace, BEGIN_FONT_FACE )
360 API_PROPERTY( beginFontSize, BEGIN_FONT_SIZE )
361 API_PROPERTY( beginFontStyle, BEGIN_FONT_STYLE )
362 API_PROPERTY( beginTextOffset, BEGIN_TEXT_OFFSET )
363 API_PROPERTY( continueText, CONTINUE_TEXT )
364 API_PROPERTY( continueTextAlign, CONTINUE_TEXT_ALIGN )
365 API_PROPERTY( continueTextPlace, CONTINUE_TEXT_PLACE )
366 API_PROPERTY( continueFontFace, CONTINUE_FONT_FACE )
367 API_PROPERTY( continueFontSize, CONTINUE_FONT_SIZE )
368 API_PROPERTY( continueFontStyle, CONTINUE_FONT_STYLE )
369 API_PROPERTY( continueTextOffset, CONTINUE_TEXT_OFFSET )
370 API_PROPERTY( endText, END_TEXT )
371 API_PROPERTY( endTextAlign, END_TEXT_ALIGN )
372 API_PROPERTY( endTextPlace, END_TEXT_PLACE )
373 API_PROPERTY( endHookType, END_HOOK_TYPE )
374 API_PROPERTY( endHookHeight, END_HOOK_HEIGHT )
375 API_PROPERTY( endFontFace, END_FONT_FACE )
376 API_PROPERTY( endFontSize, END_FONT_SIZE )
377 API_PROPERTY( endFontStyle, END_FONT_STYLE )
378 API_PROPERTY( endTextOffset, END_TEXT_OFFSET )
379 API_PROPERTY( posAbove, POS_ABOVE )
380 API_PROPERTY_T( int, voice, VOICE )
381 API_PROPERTY_READ_ONLY( position, POSITION ) // TODO: needed?
387 API_PROPERTY( harmonyType, HARMONY_TYPE )
388
389 qreal offsetX() const { return element()->offset().x() / element()->spatium(); }
390 qreal offsetY() const { return element()->offset().y() / element()->spatium(); }
391 void setOffsetX(qreal offX);
392 void setOffsetY(qreal offY);
393
394 qreal posX() const { return element()->pos().x() / element()->spatium(); }
395 qreal posY() const { return element()->pos().y() / element()->spatium(); }
396
397 QPointF pagePos() const { return element()->pagePos() / element()->spatium(); }
398
399 Ms::PluginAPI::Element* parent() const { return wrap(element()->parent()); }
400 Staff* staff() { return wrap<Staff>(element()->staff()); }
401
402 QRectF bbox() const;
403
404 public:
406 Element(Ms::Element* e = nullptr, Ownership own = Ownership::PLUGIN)
407 : Ms::PluginAPI::ScoreElement(e, own) {}
408
411 Ms::Element* element() { return toElement(e); }
412 const Ms::Element* element() const { return toElement(e); }
415
417 Q_INVOKABLE Ms::PluginAPI::Element* clone() const { return wrap(element()->clone(), Ownership::PLUGIN); }
418
419 Q_INVOKABLE QString subtypeName() const { return element()->subtypeName(); }
421 Q_INVOKABLE QString _name() const { return name(); }
422 };
423
424//---------------------------------------------------------
425// Note
426// Note wrapper
427//---------------------------------------------------------
428
429class Note : public Element {
430 Q_OBJECT
431 Q_PROPERTY(Ms::PluginAPI::Element* accidental READ accidental)
432 Q_PROPERTY(Ms::AccidentalType accidentalType READ accidentalType WRITE setAccidentalType)
434 Q_PROPERTY(QQmlListProperty<Ms::PluginAPI::Element> dots READ dots)
435// Q_PROPERTY(int dotsCount READ qmlDotsCount)
437 Q_PROPERTY(QQmlListProperty<Ms::PluginAPI::Element> elements READ elements)
442 Q_PROPERTY(QQmlListProperty<Ms::PluginAPI::PlayEvent> playEvents READ playEvents)
443// Q_PROPERTY(int fret READ fret WRITE undoSetFret)
444// Q_PROPERTY(bool ghost READ ghost WRITE undoSetGhost)
445// Q_PROPERTY(Ms::NoteHead::Group headGroup READ headGroup WRITE undoSetHeadGroup)
446// Q_PROPERTY(Ms::NoteHead::Type headType READ headType WRITE undoSetHeadType)
447// Q_PROPERTY(bool hidden READ hidden)
448// Q_PROPERTY(int line READ line)
449// Q_PROPERTY(bool mirror READ mirror)
450// Q_PROPERTY(int pitch READ pitch WRITE undoSetPitch)
451// Q_PROPERTY(bool play READ play WRITE undoSetPlay)
452// Q_PROPERTY(int ppitch READ ppitch)
453// Q_PROPERTY(bool small READ small WRITE undoSetSmall)
454// Q_PROPERTY(int string READ string WRITE undoSetString)
455// Q_PROPERTY(int subchannel READ subchannel)
458 Q_PROPERTY(Ms::PluginAPI::Tie* tieBack READ tieBack)
472 Q_PROPERTY(Ms::NoteType noteType READ noteType)
473
478 API_PROPERTY_T( int, pitch, PITCH )
483 API_PROPERTY_T( int, tpc1, TPC1 )
488 API_PROPERTY_T( int, tpc2, TPC2 )
494 Q_PROPERTY(int tpc READ tpc WRITE setTpc)
495// Q_PROPERTY(qreal tuning READ tuning WRITE undoSetTuning)
496// Q_PROPERTY(Ms::MScore::Direction userDotPosition READ userDotPosition WRITE undoSetUserDotPosition)
497// Q_PROPERTY(Ms::MScore::DirectionH userMirror READ userMirror WRITE undoSetUserMirror)
499 API_PROPERTY( veloType, VELO_TYPE )
500 API_PROPERTY_T( int, veloOffset, VELO_OFFSET )
501
502 public:
504 Note(Ms::Note* c = nullptr, Ownership own = Ownership::PLUGIN)
505 : Element(c, own) {}
506
507 Ms::Note* note() { return toNote(e); }
508 const Ms::Note* note() const { return toNote(e); }
509
510 int tpc() const { return note()->tpc(); }
511 void setTpc(int val);
512
513 Ms::PluginAPI::Tie* tieBack() const { return note()->tieBack() != nullptr ? tieWrap(note()->tieBack()) : nullptr; }
514 Ms::PluginAPI::Tie* tieForward() const { return note()->tieFor() != nullptr ? tieWrap(note()->tieFor()) : nullptr; }
515
516 Ms::PluginAPI::Note* firstTiedNote() { return wrap<Note>(note()->firstTiedNote()); }
517 Ms::PluginAPI::Note* lastTiedNote() { return wrap<Note>(note()->lastTiedNote()); }
518
519 QQmlListProperty<Element> dots() { return wrapContainerProperty<Element>(this, note()->dots()); }
520 QQmlListProperty<Element> elements() { return wrapContainerProperty<Element>(this, note()->el()); }
521 QQmlListProperty<PlayEvent> playEvents() { return wrapPlayEventsContainerProperty(this, note()->playEvents()); }
522
523 Element* accidental() { return wrap<Element>(note()->accidental()); }
524
525 Ms::AccidentalType accidentalType() { return note()->accidentalType(); }
526 void setAccidentalType(Ms::AccidentalType t) { note()->setAccidentalType(t); }
527 Ms::NoteType noteType() { return note()->noteType(); }
528
529 static void addInternal(Ms::Note* note, Ms::Element* el);
530 static bool isChildAllowed(Ms::ElementType elementType);
532
535 Q_INVOKABLE Ms::PluginAPI::PlayEvent* createPlayEvent() { return playEventWrap(new NoteEvent(), nullptr); }
536
539 Q_INVOKABLE void add(Ms::PluginAPI::Element* wrapped);
542 Q_INVOKABLE void remove(Ms::PluginAPI::Element* wrapped);
543 };
544
545//---------------------------------------------------------
546// DurationElement
547//---------------------------------------------------------
548
549class DurationElement : public Element {
550 Q_OBJECT
551
556 API_PROPERTY_READ_ONLY( duration, DURATION )
573 Q_PROPERTY(Ms::PluginAPI::Tuplet* tuplet READ parentTuplet)
574
575 public:
577 DurationElement(Ms::DurationElement* de = nullptr, Ownership own = Ownership::PLUGIN)
578 : Element(de, own) {}
579
580 Ms::DurationElement* durationElement() { return toDurationElement(e); }
581 const Ms::DurationElement* durationElement() const { return toDurationElement(e); }
582
583 FractionWrapper* globalDuration() const;
584 FractionWrapper* actualDuration() const;
585
586 Tuplet* parentTuplet();
588 };
589
590//---------------------------------------------------------
591// Tuplet
592//---------------------------------------------------------
593
594class Tuplet : public DurationElement {
595 Q_OBJECT
596
597 API_PROPERTY( numberType, NUMBER_TYPE )
598 API_PROPERTY( bracketType, BRACKET_TYPE )
600 API_PROPERTY_READ_ONLY_T( int, actualNotes, ACTUAL_NOTES )
605 API_PROPERTY_READ_ONLY_T( int, normalNotes, NORMAL_NOTES )
606 API_PROPERTY( p1, P1 )
607 API_PROPERTY( p2, P2 )
608
613 Q_PROPERTY(QQmlListProperty<Ms::PluginAPI::Element> elements READ elements)
614
615 public:
617 Tuplet(Ms::Tuplet* t = nullptr, Ownership own = Ownership::PLUGIN)
618 : DurationElement(t, own) {}
619
620 Ms::Tuplet* tuplet() { return toTuplet(e); }
621 const Ms::Tuplet* tuplet() const { return toTuplet(e); }
622
623 QQmlListProperty<Element> elements() { return wrapContainerProperty<Element>(this, tuplet()->elements()); }
625 };
626
627//---------------------------------------------------------
628// ChordRest
629// ChordRest wrapper
630//---------------------------------------------------------
631
633 Q_OBJECT
638 Q_PROPERTY(QQmlListProperty<Ms::PluginAPI::Element> lyrics READ lyrics )
643 Q_PROPERTY(Ms::PluginAPI::Element* beam READ beam )
644
645 public:
647 ChordRest(Ms::ChordRest* c = nullptr, Ownership own = Ownership::PLUGIN)
648 : DurationElement(c, own) {}
649
650 Ms::ChordRest* chordRest() { return toChordRest(e); }
651
652 QQmlListProperty<Element> lyrics() { return wrapContainerProperty<Element>(this, chordRest()->lyrics()); } // TODO: special type for Lyrics?
653 Element* beam() { return wrap(chordRest()->beam()); }
655 };
656
657//---------------------------------------------------------
658// Chord
659// Chord wrapper
660//---------------------------------------------------------
661
662class Chord : public ChordRest {
663 Q_OBJECT
665 Q_PROPERTY(QQmlListProperty<Ms::PluginAPI::Chord> graceNotes READ graceNotes)
667 Q_PROPERTY(QQmlListProperty<Ms::PluginAPI::Note> notes READ notes )
669 Q_PROPERTY(Ms::PluginAPI::Element* stem READ stem )
674 Q_PROPERTY(Ms::PluginAPI::Element* hook READ hook )
677 Q_PROPERTY(Ms::NoteType noteType READ noteType)
680 Q_PROPERTY(Ms::PlayEventType playEventType READ playEventType WRITE setPlayEventType)
681
682 public:
684 Chord(Ms::Chord* c = nullptr, Ownership own = Ownership::PLUGIN)
685 : ChordRest(c, own) {}
686
687 Ms::Chord* chord() { return toChord(e); }
688 const Ms::Chord* chord() const { return toChord(e); }
689
690 QQmlListProperty<Chord> graceNotes() { return wrapContainerProperty<Chord>(this, chord()->graceNotes()); }
691 QQmlListProperty<Note> notes() { return wrapContainerProperty<Note>(this, chord()->notes()); }
692 Element* stem() { return wrap(chord()->stem()); }
693 Element* stemSlash() { return wrap(chord()->stemSlash()); }
694 Element* hook() { return wrap(chord()->hook()); }
695 Ms::NoteType noteType() { return chord()->noteType(); }
696 Ms::PlayEventType playEventType() { return chord()->playEventType(); }
697 void setPlayEventType(Ms::PlayEventType v);
698
699 static void addInternal(Ms::Chord* chord, Ms::Element* el);
701
704 Q_INVOKABLE void add(Ms::PluginAPI::Element* wrapped);
707 Q_INVOKABLE void remove(Ms::PluginAPI::Element* wrapped);
708 };
709
710//---------------------------------------------------------
711// Segment
712// Segment
713//---------------------------------------------------------
714
715class Segment : public Element {
716 Q_OBJECT
721 Q_PROPERTY(QQmlListProperty<Ms::PluginAPI::Element> annotations READ annotations)
729 Q_PROPERTY(Ms::PluginAPI::Segment* next READ nextInScore)
737 Q_PROPERTY(Ms::PluginAPI::Segment* prev READ prevInScore)
738 // segmentType was read&write in MuseScore 2.X plugin API.
739 // Allowing plugins to change random segments types doesn't seem to be a
740 // good idea though.
749 Q_PROPERTY(int tick READ tick) // TODO: revise libmscore (or this API):
750 // Pid::TICK is relative or absolute in different contexts
751
752 public:
754 Segment(Ms::Segment* s = nullptr, Ownership own = Ownership::SCORE)
755 : Element(s, own) {}
756
757 Ms::Segment* segment() { return toSegment(e); }
758 const Ms::Segment* segment() const { return toSegment(e); }
759
760 int tick() const { return segment()->tick().ticks(); }
761
762 Ms::SegmentType segmentType() const { return segment()->segmentType(); }
763
764 Segment* nextInScore() { return wrap<Segment>(segment()->next1()); }
765 Segment* nextInMeasure() { return wrap<Segment>(segment()->next()); }
766 Segment* prevInScore() { return wrap<Segment>(segment()->prev1()); }
767 Segment* prevInMeasure() { return wrap<Segment>(segment()->prev()); }
768 QQmlListProperty<Element> annotations() { return wrapContainerProperty<Element>(this, segment()->annotations()); }
770
773 Q_INVOKABLE Ms::PluginAPI::Element* elementAt(int track);
774 };
775
776//---------------------------------------------------------
777// Measure
778// Measure wrapper
779//---------------------------------------------------------
780
781class Measure : public Element {
782 Q_OBJECT
787
788 // TODO: to MeasureBase?
789// Q_PROPERTY(bool lineBreak READ lineBreak WRITE undoSetLineBreak)
802// Q_PROPERTY(bool pageBreak READ pageBreak WRITE undoSetPageBreak)
810
813 Q_PROPERTY(QQmlListProperty<Ms::PluginAPI::Element> elements READ elements)
814
815 public:
817 Measure(Ms::Measure* m = nullptr, Ownership own = Ownership::SCORE)
818 : Element(m, own) {}
819
820 Ms::Measure* measure() { return toMeasure(e); }
821 const Ms::Measure* measure() const { return toMeasure(e); }
822
823 Segment* firstSegment() { return wrap<Segment>(measure()->firstEnabled(), Ownership::SCORE); }
824 Segment* lastSegment() { return wrap<Segment>(measure()->last(), Ownership::SCORE); }
825
826 Measure* prevMeasure() { return wrap<Measure>(measure()->prevMeasure(), Ownership::SCORE); }
827 Measure* nextMeasure() { return wrap<Measure>(measure()->nextMeasure(), Ownership::SCORE); }
828
829 Measure* prevMeasureMM() { return wrap<Measure>(measure()->prevMeasureMM(), Ownership::SCORE); }
830 Measure* nextMeasureMM() { return wrap<Measure>(measure()->nextMeasureMM(), Ownership::SCORE); }
831
832 QQmlListProperty<Element> elements() { return wrapContainerProperty<Element>(this, measure()->el()); }
834 };
835
836//---------------------------------------------------------
837// Page
838//---------------------------------------------------------
839
840class Page : public Element {
841 Q_OBJECT
854 Q_PROPERTY(int pagenumber READ pagenumber)
855
856 public:
858 Page(Ms::Page* p = nullptr, Ownership own = Ownership::SCORE)
859 : Element(p, own) {}
860
861 Ms::Page* page() { return toPage(e); }
862 const Ms::Page* page() const { return toPage(e); }
863
864 int pagenumber() const;
866 };
867
868//---------------------------------------------------------
869// Staff
871//---------------------------------------------------------
872
873class Staff : public ScoreElement {
874 Q_OBJECT
875
876 API_PROPERTY_T( bool, small, SMALL )
877 API_PROPERTY_T( qreal, mag, MAG )
882 API_PROPERTY_T( QColor, color, COLOR )
883
885 API_PROPERTY_T( bool, playbackVoice1, PLAYBACK_VOICE1 )
887 API_PROPERTY_T( bool, playbackVoice2, PLAYBACK_VOICE2 )
889 API_PROPERTY_T( bool, playbackVoice3, PLAYBACK_VOICE3 )
891 API_PROPERTY_T( bool, playbackVoice4, PLAYBACK_VOICE4 )
892
893 API_PROPERTY_T( int, staffBarlineSpan, STAFF_BARLINE_SPAN )
894 API_PROPERTY_T( int, staffBarlineSpanFrom, STAFF_BARLINE_SPAN_FROM )
895 API_PROPERTY_T( int, staffBarlineSpanTo, STAFF_BARLINE_SPAN_TO )
896
904 API_PROPERTY_T( qreal, staffUserdist, STAFF_USERDIST )
905
907 Q_PROPERTY(Ms::PluginAPI::Part* part READ part)
908
909 public:
911 Staff(Ms::Staff* staff, Ownership own = Ownership::PLUGIN)
912 : Ms::PluginAPI::ScoreElement(staff, own) {}
913
914 Ms::Staff* staff() { return toStaff(e); }
915 const Ms::Staff* staff() const { return toStaff(e); }
916
917 Part* part();
919 };
920
921#undef API_PROPERTY
922#undef API_PROPERTY_T
923#undef API_PROPERTY_READ_ONLY
924#undef API_PROPERTY_READ_ONLY_T
925
926} // namespace PluginAPI
927} // namespace Ms
928#endif
Graphic representation of a note.
Definition note.h:235
Definition elements.h:662
Ms::PlayEventType playEventType
The PlayEventType of the chord.
Definition elements.h:680
Q_INVOKABLE void remove(Ms::PluginAPI::Element *wrapped)
Remove a chord's element.
Definition elements.cpp:264
Ms::PluginAPI::Element * stemSlash
Stem slash of this chord, if exists.
Definition elements.h:672
Ms::PluginAPI::Element * hook
Hook on a stem of this chord, if exists.
Definition elements.h:674
QQmlListProperty< Ms::PluginAPI::Chord > graceNotes
List of grace notes (grace chords) belonging to this chord.
Definition elements.h:665
Q_INVOKABLE void add(Ms::PluginAPI::Element *wrapped)
Add to a chord's elements.
Definition elements.cpp:216
Ms::PluginAPI::Element * stem
Stem of this chord, if exists.
Definition elements.h:669
QQmlListProperty< Ms::PluginAPI::Note > notes
List of notes belonging to this chord.
Definition elements.h:667
Ms::NoteType noteType
The NoteType of the chord.
Definition elements.h:677
Definition elements.h:632
QQmlListProperty< Ms::PluginAPI::Element > lyrics
Lyrics corresponding to this chord or rest, if any.
Definition elements.h:638
Ms::PluginAPI::Element * beam
Beam which covers this chord/rest, if such exists.
Definition elements.h:643
Definition elements.h:549
Ms::PluginAPI::FractionWrapper * actualDuration
Actual duration of this element, taking into account ratio of parent tuplets and local time signature...
Definition elements.h:568
QVariant duration
Nominal duration of this element.
Definition elements.h:556
Ms::PluginAPI::Tuplet * tuplet
Tuplet which this element belongs to.
Definition elements.h:573
Ms::PluginAPI::FractionWrapper * globalDuration
Global duration of this element, taking into account ratio of parent tuplets if there are any.
Definition elements.h:562
Definition elements.h:85
QVariant headType
Notehead type, one of PluginAPI::PluginAPI::NoteHeadType values.
Definition elements.h:164
qreal offsetX
X-axis offset from a reference position in spatium units.
Definition elements.h:102
int z
Stacking order of this element.
Definition elements.h:156
QVariant headScheme
Notehead scheme, one of PluginAPI::PluginAPI::NoteHeadScheme values.
Definition elements.h:169
Ms::PluginAPI::Element * parent
Parent element for this element.
Definition elements.h:92
Q_INVOKABLE Ms::PluginAPI::Element * clone() const
Create a copy of the element.
Definition elements.h:417
bool autoplace
Whether this element participates in autoplacement.
Definition elements.h:317
Q_INVOKABLE QString _name() const
Deprecated: same as ScoreElement::name. Left for compatibility purposes.
Definition elements.h:421
QRectF bbox
Bounding box of this element.
Definition elements.h:144
QVariant mmRestRangeBracketType
Definition elements.h:262
QColor color
Element color.
Definition elements.h:153
QVariant harmonyType
For chord symbols, chord symbol type, one of PluginAPI::PluginAPI::HarmonyType values.
Definition elements.h:387
QPointF offset
Offset from a reference position in spatium units.
Definition elements.h:194
QVariant space
For spacers: amount of space between staves.
Definition elements.h:223
QVariant headGroup
Notehead group, one of PluginAPI::PluginAPI::NoteHeadGroup values.
Definition elements.h:171
qreal offsetY
Y-axis offset from a reference position in spatium units.
Definition elements.h:107
Ms::PluginAPI::Staff * staff
Staff which this element belongs to.
Definition elements.h:97
QVariant glissEaseIn
Definition elements.h:268
QVariant changeMethod
The way a ramp interpolates between values.
Definition elements.h:250
QPointF pagePos
Position of this element in page coordinates, in spatium units.
Definition elements.h:136
QVariant glissEaseOut
Definition elements.h:270
QVariant symbol
Symbol ID of this element (if approproate), one of PluginAPI::PluginAPI::SymId values.
Definition elements.h:325
qreal posX
Reference position of this element relative to its parent element.
Definition elements.h:119
qreal posY
Reference position of this element relative to its parent element.
Definition elements.h:131
Fraction object available to QML plugins.
Definition fraction.h:32
Definition elements.h:781
Ms::PluginAPI::Measure * nextMeasureMM
Next measure, accounting for multimeasure rests.
Definition elements.h:801
Ms::PluginAPI::Measure * prevMeasure
Previous measure.
Definition elements.h:804
QQmlListProperty< Ms::PluginAPI::Element > elements
List of measure-related elements: layout breaks, jump/repeat markings etc.
Definition elements.h:813
Ms::PluginAPI::Segment * firstSegment
The first segment of this measure.
Definition elements.h:784
Ms::PluginAPI::Measure * prevMeasureMM
Previous measure, accounting for multimeasure rests.
Definition elements.h:809
Ms::PluginAPI::Segment * lastSegment
The last segment of this measure.
Definition elements.h:786
Ms::PluginAPI::Measure * nextMeasure
Next measure.
Definition elements.h:791
Definition elements.h:429
int pitch
MIDI pitch of this note.
Definition elements.h:478
Q_INVOKABLE Ms::PluginAPI::PlayEvent * createPlayEvent()
Creates a PlayEvent object for use in Javascript.
Definition elements.h:535
int tpc
Concert or transposing pitch of this note, as per current "Concert Pitch" setting value.
Definition elements.h:494
Ms::PluginAPI::Tie * tieBack
Backward tie for this Note.
Definition elements.h:458
Q_INVOKABLE void remove(Ms::PluginAPI::Element *wrapped)
Remove a note's element.
Definition elements.cpp:158
QVariant veloType
See PluginAPI::PluginAPI::NoteValueType.
Definition elements.h:499
QQmlListProperty< Ms::PluginAPI::Element > dots
List of dots attached to this note.
Definition elements.h:434
QQmlListProperty< Ms::PluginAPI::Element > elements
List of other elements attached to this note: fingerings, symbols, bends etc.
Definition elements.h:437
Ms::PluginAPI::Note * lastTiedNote
The last note of a series of ties to this note.
Definition elements.h:469
Q_INVOKABLE void add(Ms::PluginAPI::Element *wrapped)
Add to a note's elements.
Definition elements.cpp:115
Ms::PluginAPI::Note * firstTiedNote
The first note of a series of ties to this note.
Definition elements.h:465
QQmlListProperty< Ms::PluginAPI::PlayEvent > playEvents
List of PlayEvents associated with this note.
Definition elements.h:442
Ms::NoteType noteType
The NoteType of the note.
Definition elements.h:472
int tpc2
Transposing pitch of the note.
Definition elements.h:488
int tpc1
Concert pitch of the note.
Definition elements.h:483
Ms::PluginAPI::Tie * tieForward
Forward tie for this Note.
Definition elements.h:461
Definition elements.h:840
int pagenumber
Page number, counting from 0.
Definition elements.h:854
Definition part.h:42
Definition playevent.h:32
Main class of the plugins framework. Named as MuseScore in QML.
Definition qmlpluginapi.h:62
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:715
Ms::PluginAPI::Segment * prev
Previous segment in this score. Doesn't stop at measure border.
Definition elements.h:737
Ms::SegmentType segmentType
Type of this segment, one of PluginAPI::PluginAPI::Segment values.
Definition elements.h:742
Q_INVOKABLE Ms::PluginAPI::Element * elementAt(int track)
Definition elements.cpp:58
QQmlListProperty< Ms::PluginAPI::Element > annotations
The list of annotations.
Definition elements.h:721
Ms::PluginAPI::Segment * prevInMeasure
Previous segment in this measure.
Definition elements.h:733
int tick
Current tick for this segment.
Definition elements.h:749
Ms::PluginAPI::Segment * nextInMeasure
Next segment in this measure.
Definition elements.h:725
Ms::PluginAPI::Segment * next
Next segment in this score. Doesn't stop at measure border.
Definition elements.h:729
Definition elements.h:873
bool playbackVoice1
Whether voice 1 participates in playback.
Definition elements.h:885
qreal staffUserdist
User-defined amount of additional space before this staff.
Definition elements.h:904
QColor color
Staff color.
Definition elements.h:882
bool playbackVoice2
Whether voice 2 participates in playback.
Definition elements.h:887
Ms::PluginAPI::Part * part
Part which this staff belongs to.
Definition elements.h:907
bool playbackVoice3
Whether voice 3 participates in playback.
Definition elements.h:889
bool playbackVoice4
Whether voice 4 participates in playback.
Definition elements.h:891
Provides access to internal Ms::Tie objects.
Definition tie.h:28
Definition elements.h:594
int actualNotes
Actual number of notes of base nominal length in this tuplet.
Definition elements.h:600
int normalNotes
Number of "normal" notes of base nominal length which correspond to this tuplet's duration.
Definition elements.h:605
QQmlListProperty< Ms::PluginAPI::Element > elements
List of elements which belong to this tuplet.
Definition elements.h:613
Contains items exposed to the QML plugins framework.
Definition cursor.cpp:31
Definition cursor.cpp:30
NoteType
Definition types.h:325
ElementType
Definition types.h:34
@ TEXT
Definition types.h:42
@ STAFF_LINES
Definition types.h:49
@ SYMBOL
Definition types.h:41
@ TIMESIG
Definition types.h:60
@ LAYOUT_BREAK
Definition types.h:99
SegmentType
Definition types.h:436
@ ChordRest
Definition types.h:449
PlayEventType
Determines whether oranaments are automatically generated when playing a score and whether the PlayEv...
Definition types.h:600
AccidentalType
Definition types.h:153
@ TEMPO
Definition types.h:491
Definition of classes Note and NoteHead.