MuseScore Plugins  3.2.3
Plugins API for MuseScore
types.h
1 //=============================================================================
2 // MuseScore
3 // Music Composition & Notation
4 //
5 // Copyright (C) 2017 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 __TYPES_H__
14 #define __TYPES_H__
15 
16 #include "config.h"
17 
22 namespace Ms {
23 #ifdef SCRIPT_INTERFACE
24 Q_NAMESPACE
25 #endif
26 
27 //-------------------------------------------------------------------
32 //-------------------------------------------------------------------
33 
34 enum class ElementType {
36  INVALID = 0,
37  BRACKET_ITEM,
38  PART,
39  STAFF,
40  SCORE,
41  SYMBOL,
42  TEXT,
43  MEASURE_NUMBER,
44  INSTRUMENT_NAME,
45  SLUR_SEGMENT,
46  TIE_SEGMENT,
47  BAR_LINE,
48  STAFF_LINES,
49  SYSTEM_DIVIDER,
50  STEM_SLASH,
51  ARPEGGIO,
52  ACCIDENTAL,
53  LEDGER_LINE,
54  STEM, // list STEM before NOTE: notes in TAB might 'break' stems
55  NOTE, // and this requires stems to be drawn before notes
56  CLEF, // elements from CLEF to TIMESIG need to be in the order
57  KEYSIG, // in which they appear in a measure
58  AMBITUS,
59  TIMESIG,
60  REST,
61  BREATH,
62  REPEAT_MEASURE,
63  TIE,
64  ARTICULATION,
65  FERMATA,
66  CHORDLINE,
67  DYNAMIC,
68  BEAM,
69  HOOK,
70  LYRICS,
71  FIGURED_BASS,
72  MARKER,
73  JUMP,
74  FINGERING,
75  TUPLET,
76  TEMPO_TEXT,
77  STAFF_TEXT,
78  SYSTEM_TEXT,
79  REHEARSAL_MARK,
80  INSTRUMENT_CHANGE,
81  STAFFTYPE_CHANGE,
82  HARMONY,
83  FRET_DIAGRAM,
84  BEND,
85  TREMOLOBAR,
86  VOLTA,
87  HAIRPIN_SEGMENT,
88  OTTAVA_SEGMENT,
89  TRILL_SEGMENT,
90  LET_RING_SEGMENT,
91  VIBRATO_SEGMENT,
92  PALM_MUTE_SEGMENT,
93  TEXTLINE_SEGMENT,
94  VOLTA_SEGMENT,
95  PEDAL_SEGMENT,
96  LYRICSLINE_SEGMENT,
97  GLISSANDO_SEGMENT,
98  LAYOUT_BREAK,
99  SPACER,
100  STAFF_STATE,
101  NOTEHEAD,
102  NOTEDOT,
103  TREMOLO,
104  IMAGE,
105  MEASURE,
106  SELECTION,
107  LASSO,
108  SHADOW_NOTE,
109  TAB_DURATION_SYMBOL,
110  FSYMBOL,
111  PAGE,
112  HAIRPIN,
113  OTTAVA,
114  PEDAL,
115  TRILL,
116  LET_RING,
117  VIBRATO,
118  PALM_MUTE,
119  TEXTLINE,
120  TEXTLINE_BASE,
121  NOTELINE,
122  LYRICSLINE,
123  GLISSANDO,
124  BRACKET,
125  SEGMENT,
126  SYSTEM,
127  COMPOUND,
128  CHORD,
129  SLUR,
130  ELEMENT,
131  ELEMENT_LIST,
132  STAFF_LIST,
133  MEASURE_LIST,
134  HBOX,
135  VBOX,
136  TBOX,
137  FBOX,
138  ICON,
139  OSSIA,
140  BAGPIPE_EMBELLISHMENT,
141  STICKING,
142 
143  MAXTYPE
145  };
146 
147 //---------------------------------------------------------
148 // AccidentalType
149 //---------------------------------------------------------
150 // NOTE: keep this in sync with with accList array
151 enum class AccidentalType : char {
153  NONE,
154  FLAT,
155  NATURAL,
156  SHARP,
157  SHARP2,
158  FLAT2,
159  //SHARP3,
160  //FLAT3,
161  NATURAL_FLAT,
162  NATURAL_SHARP,
163  SHARP_SHARP,
164 
165  // Gould arrow quartertone
166  FLAT_ARROW_UP,
167  FLAT_ARROW_DOWN,
168  NATURAL_ARROW_UP,
169  NATURAL_ARROW_DOWN,
170  SHARP_ARROW_UP,
171  SHARP_ARROW_DOWN,
172  SHARP2_ARROW_UP,
173  SHARP2_ARROW_DOWN,
174  FLAT2_ARROW_UP,
175  FLAT2_ARROW_DOWN,
176 
177  // Stein-Zimmermann
178  MIRRORED_FLAT,
179  MIRRORED_FLAT2,
180  SHARP_SLASH,
181  SHARP_SLASH4,
182 
183  // Arel-Ezgi-Uzdilek (AEU)
184  FLAT_SLASH2,
185  FLAT_SLASH,
186  SHARP_SLASH3,
187  SHARP_SLASH2,
188 
189  // Extended Helmholtz-Ellis accidentals (just intonation)
190  DOUBLE_FLAT_ONE_ARROW_DOWN,
191  FLAT_ONE_ARROW_DOWN,
192  NATURAL_ONE_ARROW_DOWN,
193  SHARP_ONE_ARROW_DOWN,
194  DOUBLE_SHARP_ONE_ARROW_DOWN,
195  DOUBLE_FLAT_ONE_ARROW_UP,
196 
197  FLAT_ONE_ARROW_UP,
198  NATURAL_ONE_ARROW_UP,
199  SHARP_ONE_ARROW_UP,
200  DOUBLE_SHARP_ONE_ARROW_UP,
201  DOUBLE_FLAT_TWO_ARROWS_DOWN,
202  FLAT_TWO_ARROWS_DOWN,
203 
204  NATURAL_TWO_ARROWS_DOWN,
205  SHARP_TWO_ARROWS_DOWN,
206  DOUBLE_SHARP_TWO_ARROWS_DOWN,
207  DOUBLE_FLAT_TWO_ARROWS_UP,
208  FLAT_TWO_ARROWS_UP,
209  NATURAL_TWO_ARROWS_UP,
210 
211  SHARP_TWO_ARROWS_UP,
212  DOUBLE_SHARP_TWO_ARROWS_UP,
213  DOUBLE_FLAT_THREE_ARROWS_DOWN,
214  FLAT_THREE_ARROWS_DOWN,
215  NATURAL_THREE_ARROWS_DOWN,
216  SHARP_THREE_ARROWS_DOWN,
217 
218  DOUBLE_SHARP_THREE_ARROWS_DOWN,
219  DOUBLE_FLAT_THREE_ARROWS_UP,
220  FLAT_THREE_ARROWS_UP,
221  NATURAL_THREE_ARROWS_UP,
222  SHARP_THREE_ARROWS_UP,
223  DOUBLE_SHARP_THREE_ARROWS_UP,
224 
225  LOWER_ONE_SEPTIMAL_COMMA,
226  RAISE_ONE_SEPTIMAL_COMMA,
227  LOWER_TWO_SEPTIMAL_COMMAS,
228  RAISE_TWO_SEPTIMAL_COMMAS,
229  LOWER_ONE_UNDECIMAL_QUARTERTONE,
230  RAISE_ONE_UNDECIMAL_QUARTERTONE,
231 
232  LOWER_ONE_TRIDECIMAL_QUARTERTONE,
233  RAISE_ONE_TRIDECIMAL_QUARTERTONE,
234 
235  DOUBLE_FLAT_EQUAL_TEMPERED,
236  FLAT_EQUAL_TEMPERED,
237  NATURAL_EQUAL_TEMPERED,
238  SHARP_EQUAL_TEMPERED,
239  DOUBLE_SHARP_EQUAL_TEMPERED,
240  QUARTER_FLAT_EQUAL_TEMPERED,
241  QUARTER_SHARP_EQUAL_TEMPERED,
242 
243  // Persian
244  SORI,
245  KORON,
246  END
248  };
249 
250 //---------------------------------------------------------
251 // NoteType
252 //---------------------------------------------------------
253 
254 enum class NoteType {
256  NORMAL = 0,
257  ACCIACCATURA = 0x1,
258  APPOGGIATURA = 0x2, // grace notes
259  GRACE4 = 0x4,
260  GRACE16 = 0x8,
261  GRACE32 = 0x10,
262  GRACE8_AFTER = 0x20,
263  GRACE16_AFTER = 0x40,
264  GRACE32_AFTER = 0x80,
265  INVALID = 0xFF
267  };
268 
269 constexpr NoteType operator| (NoteType t1, NoteType t2) {
270  return static_cast<NoteType>(static_cast<int>(t1) | static_cast<int>(t2));
271  }
272 constexpr bool operator& (NoteType t1, NoteType t2) {
273  return static_cast<int>(t1) & static_cast<int>(t2);
274  }
275 
276 
277 //---------------------------------------------------------
278 // Direction
279 //---------------------------------------------------------
280 
281 enum class Direction {
283  AUTO, UP, DOWN
285  };
286 
287 //---------------------------------------------------------
288 // GlissandoType
289 //---------------------------------------------------------
290 
291 enum class GlissandoType {
293  STRAIGHT, WAVY
295  };
296 
297 //---------------------------------------------------------
298 // GlissandoStyle
299 //---------------------------------------------------------
300 
301 enum class GlissandoStyle {
303  CHROMATIC, WHITE_KEYS, BLACK_KEYS, DIATONIC
305  };
306 
307 //---------------------------------------------------------
308 // Placement
309 //---------------------------------------------------------
310 
311 enum class Placement {
313  ABOVE, BELOW
315  };
316 
317 //---------------------------------------------------------
318 // OffsetType
319 //---------------------------------------------------------
320 
321 enum class OffsetType : char {
322  ABS,
323  SPATIUM
324  };
325 
326 //-------------------------------------------------------------------
327 // SegmentType
328 //
329 // Type values determine the order of segments for a given tick
330 //-------------------------------------------------------------------
331 
332 enum class SegmentType {
334  Invalid = 0x0,
335  BeginBarLine = 0x1,
336  HeaderClef = 0x2,
337  KeySig = 0x4,
338  Ambitus = 0x8,
339  TimeSig = 0x10,
340  StartRepeatBarLine = 0x20,
341  Clef = 0x40,
342  BarLine = 0x80,
343  Breath = 0x100,
344  //--
345  ChordRest = 0x200,
346  //--
347  EndBarLine = 0x400,
348  KeySigAnnounce = 0x800,
349  TimeSigAnnounce = 0x1000,
350  All = -1,
351  BarLineType = BeginBarLine | StartRepeatBarLine | BarLine | EndBarLine
354  };
355 
356 constexpr SegmentType operator| (const SegmentType t1, const SegmentType t2) {
357  return static_cast<SegmentType>(static_cast<int>(t1) | static_cast<int>(t2));
358  }
359 constexpr bool operator& (const SegmentType t1, const SegmentType t2) {
360  return static_cast<int>(t1) & static_cast<int>(t2);
361  }
362 
363 //-------------------------------------------------------------------
364 // Tid
368 //-------------------------------------------------------------------
369 
370 enum class Tid {
372  DEFAULT,
373  TITLE,
374  SUBTITLE,
375  COMPOSER,
376  POET,
377  LYRICS_ODD,
378  LYRICS_EVEN,
379  FINGERING,
380  LH_GUITAR_FINGERING,
381  RH_GUITAR_FINGERING,
382  STRING_NUMBER,
383  INSTRUMENT_LONG,
384  INSTRUMENT_SHORT,
385  INSTRUMENT_EXCERPT,
386  DYNAMICS,
387  EXPRESSION,
388  TEMPO,
389  METRONOME,
390  MEASURE_NUMBER,
391  TRANSLATOR,
392  TUPLET,
393  SYSTEM,
394  STAFF,
395  HARMONY_A,
396  HARMONY_B,
397  REHEARSAL_MARK,
398  REPEAT_LEFT, // align to start of measure
399  REPEAT_RIGHT, // align to end of measure
400  FRAME,
401  TEXTLINE,
402  GLISSANDO,
403  OTTAVA,
404  VOLTA,
405  PEDAL,
406  LET_RING,
407  PALM_MUTE,
408  HAIRPIN,
409  BEND,
410  HEADER,
411  FOOTER,
412  INSTRUMENT_CHANGE,
413  STICKING,
414  USER1,
415  USER2,
416  USER3,
417  USER4,
418  USER5,
419  USER6,
422  };
423 
424 //---------------------------------------------------------
425 // Align
426 //---------------------------------------------------------
427 
428 enum class Align : char {
429  LEFT = 0,
430  RIGHT = 1,
431  HCENTER = 2,
432  TOP = 0,
433  BOTTOM = 4,
434  VCENTER = 8,
435  BASELINE = 16,
436  CENTER = Align::HCENTER | Align::VCENTER,
437  HMASK = Align::LEFT | Align::RIGHT | Align::HCENTER,
438  VMASK = Align::TOP | Align::BOTTOM | Align::VCENTER | Align::BASELINE
439  };
440 
441 constexpr Align operator| (Align a1, Align a2) {
442  return static_cast<Align>(static_cast<char>(a1) | static_cast<char>(a2));
443  }
444 constexpr bool operator& (Align a1, Align a2) {
445  return static_cast<char>(a1) & static_cast<char>(a2);
446  }
447 constexpr Align operator~ (Align a) {
448  return static_cast<Align>(~static_cast<char>(a));
449  }
450 
451 //---------------------------------------------------------
452 // FontStyle
453 //---------------------------------------------------------
454 
455 enum class FontStyle : char {
456  Normal = 0, Bold = 1, Italic = 2, Underline = 4
457  };
458 
459 constexpr FontStyle operator+ (FontStyle a1, FontStyle a2) {
460  return static_cast<FontStyle>(static_cast<char>(a1) | static_cast<char>(a2));
461  }
462 constexpr FontStyle operator- (FontStyle a1, FontStyle a2) {
463  return static_cast<FontStyle>(static_cast<char>(a1) & ~static_cast<char>(a2));
464  }
465 constexpr bool operator& (FontStyle a1, FontStyle a2) {
466  return static_cast<bool>(static_cast<char>(a1) & static_cast<char>(a2));
467  }
468 
469 //---------------------------------------------------------
470 // Tuplets
471 //---------------------------------------------------------
472 
473 enum class TupletNumberType : char { SHOW_NUMBER, SHOW_RELATION, NO_TEXT };
474 enum class TupletBracketType : char { AUTO_BRACKET, SHOW_BRACKET, SHOW_NO_BRACKET };
475 
476 #ifdef SCRIPT_INTERFACE
477 Q_ENUM_NS(ElementType)
478 Q_ENUM_NS(AccidentalType)
479 Q_ENUM_NS(Direction)
480 Q_ENUM_NS(GlissandoType)
481 Q_ENUM_NS(GlissandoStyle)
482 Q_ENUM_NS(Placement)
483 Q_ENUM_NS(SegmentType)
484 Q_ENUM_NS(Tid)
485 Q_ENUM_NS(NoteType)
486 #endif
487 
488 //hack: to force the build system to run moc on this file
490 class Mops : public QObject {
491  Q_GADGET
492  };
493 
494 extern Direction toDirection(const QString&);
495 extern const char* toString(Direction);
496 extern QString toUserString(Direction);
497 extern void fillComboBoxDirection(QComboBox*);
498 
499 
500 } // namespace Ms
501 
502 Q_DECLARE_METATYPE(Ms::Align)
503 
504 Q_DECLARE_METATYPE(Ms::Direction);
505 
506 Q_DECLARE_METATYPE(Ms::NoteType);
507 
508 #endif
Ms::AccidentalType::NONE
@ NONE
Ms::OffsetType::ABS
@ ABS
offset in point units
Ms::Direction::AUTO
@ AUTO
Ms::GlissandoType::STRAIGHT
@ STRAIGHT
Ms::Tid
Tid
Enumerates the list of built-in text substyles.
Definition: types.h:370
Ms::AccidentalType
AccidentalType
Definition: types.h:151
Ms::OffsetType
OffsetType
Definition: types.h:321
Ms::GlissandoStyle
GlissandoStyle
Definition: types.h:301
Ms::Placement
Placement
Definition: types.h:311
Ms::GlissandoType
GlissandoType
Definition: types.h:291
Ms::SegmentType
SegmentType
Definition: types.h:332
Ms::ElementType::INVALID
@ INVALID
Ms::Placement::ABOVE
@ ABOVE
Ms::NoteType
NoteType
Definition: types.h:254
Ms::ElementType::PAGE
@ PAGE
Ms::NoteType::INVALID
@ INVALID
Ms::AccidentalType::END
@ END
Ms::GlissandoStyle::CHROMATIC
@ CHROMATIC
Ms
Definition: cursor.cpp:29
Ms::Tid::DEFAULT
@ DEFAULT
Ms::Direction
Direction
Definition: types.h:281
Ms::ElementType
ElementType
Definition: types.h:34