//============================================================================= // MuseScore // Music Composition & Notation // // Copyright (C) 2011 Werner Schweer and others // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License version 2 // as published by the Free Software Foundation and appearing in // the file LICENSE.GPL //============================================================================= #ifndef __MSCORE_H__ #define __MSCORE_H__ #define MSC_VERSION "1.24" static const int MSCVERSION = 124; // History: // 1.3 added staff->_barLineSpan // 1.5 save xoff/yoff in mm instead of pixel // 1.6 save harmony base/root as tpc value // 1.7 invert semantic of page fill limit // 1.8 slur id, slur anchor in in Note // 1.9 image size stored in mm instead of pixel // 1.10 TextLine properties changed // 1.11 Instrument name in part saved as TextC // 1.12 use durationType, remove tickLen // 1.13 Clefs: userOffset is not (mis)used for vertical layout position // ==========1.0, 1.1 1.2 // 1.14 save user modified beam position as spatium value // 1.15 save timesig inline; Lyrics "endTick" replaced by "ticks" // 1.16 spanners (hairpin, trill etc.) are now inline and have no ticks anymore // 1.17 new toplevel structure to support linked parts (excerpts) // 1.18 save lyrics as subtype to chord/rest to allow them associated with // grace notes // 1.19 replace text style numbers by text style names; box margins are now // used // 1.20 instrument names are saved as html again // 1.21 no cleflist anymore // 1.22 timesig changed // 1.23 measure property for actual length // 1.24 default image size is spatium dependent // - symbol numbers in TextLine() replaced by symbol names // TextStyle: frameWidth, paddingWidth are now in Spatium units (instead of mm) class MStyle; class Sequencer; static const int VOICES = 4; inline int staff2track(int staffIdx) { return staffIdx << 2; } inline int track2staff(int voice) { return voice >> 2; } inline int track2voice(int track) { return track & 3; } inline int trackZeroVoice(int track) { return track & ~3; } static const int MAX_TAGS = 32; static const qreal INCH = 25.4; static const qreal PPI = 72.0; // printer points per inch static const qreal SPATIUM20 = 5.0 / PPI; // size of Spatium for 20pt font in inch static const int MAX_STAVES = 4; #define MMSP(x) Spatium((x) * .1) static const char mimeSymbolFormat[] = "application/mscore/symbol"; static const char mimeSymbolListFormat[] = "application/mscore/symbollist"; static const char mimeStaffListFormat[] = "application/mscore/stafflist"; static const int VISUAL_STRING_NONE = -2; // no ordinal for the visual repres. of string (0 = topmost in TAB) static const int STRING_NONE = -1; // no ordinal for a physical string (0 = topmost in instrument) static const int FRET_NONE = -1; // no ordinal for a fret //--------------------------------------------------------- // ArticulationType //--------------------------------------------------------- enum ArticulationType { Articulation_Fermata, Articulation_Shortfermata, Articulation_Longfermata, Articulation_Verylongfermata, Articulation_Thumb, Articulation_Sforzatoaccent, Articulation_Espressivo, Articulation_Staccato, Articulation_Staccatissimo, Articulation_Tenuto, Articulation_Portato, Articulation_Marcato, Articulation_Ouvert, Articulation_Plusstop, Articulation_Upbow, Articulation_Downbow, Articulation_Reverseturn, Articulation_Turn, Articulation_Trill, Articulation_Prall, Articulation_Mordent, Articulation_PrallPrall, Articulation_PrallMordent, Articulation_UpPrall, Articulation_DownPrall, Articulation_UpMordent, Articulation_DownMordent, Articulation_PrallDown, Articulation_PrallUp, Articulation_LinePrall, Articulation_Schleifer, Articulation_Snappizzicato, Articulation_Tapping, Articulation_Slapping, Articulation_Popping, ARTICULATIONS }; //--------------------------------------------------------- // BracketType // System Brackets //--------------------------------------------------------- enum BracketType { BRACKET_NORMAL, BRACKET_AKKOLADE, NO_BRACKET = -1 }; //--------------------------------------------------------- // PlaceText //--------------------------------------------------------- enum PlaceText { PLACE_AUTO, PLACE_ABOVE, PLACE_BELOW, PLACE_LEFT }; //--------------------------------------------------------- // AlignmentFlags //--------------------------------------------------------- enum AlignmentFlags { ALIGN_LEFT = 0, ALIGN_RIGHT = 1, ALIGN_HCENTER = 2, ALIGN_TOP = 0, ALIGN_BOTTOM = 4, ALIGN_VCENTER = 8, ALIGN_BASELINE = 16, ALIGN_CENTER = ALIGN_HCENTER | ALIGN_VCENTER, ALIGN_HMASK = ALIGN_LEFT | ALIGN_RIGHT | ALIGN_HCENTER, ALIGN_VMASK = ALIGN_TOP | ALIGN_BOTTOM | ALIGN_VCENTER | ALIGN_BASELINE }; Q_DECLARE_FLAGS(Align, AlignmentFlags); Q_DECLARE_OPERATORS_FOR_FLAGS(Align); //--------------------------------------------------------- // OffsetType //--------------------------------------------------------- enum OffsetType { OFFSET_ABS, ///< offset in point units OFFSET_SPATIUM ///< offset in space units }; //--------------------------------------------------------- // BeamMode //--------------------------------------------------------- enum class BeamMode { AUTO = 0, BEGIN = 0x01, MID = 0x02, END = 0x04, NONE = 0x08, BEGIN32 = 0x10, BEGIN64 = 0x20, INVALID = -1 }; // #define beamModeMid(a) (a & (BeamMode::MID | BeamMode::BEGIN32 | BeamMode::BEGIN64)) #define beamModeMid(a) (a == BeamMode::MID || a == BeamMode::BEGIN32 || a == BeamMode::BEGIN64) //--------------------------------------------------------- // TransposeDirection //--------------------------------------------------------- enum TransposeDirection { TRANSPOSE_UP, TRANSPOSE_DOWN, TRANSPOSE_CLOSEST }; //--------------------------------------------------------- // TransposeMode //--------------------------------------------------------- enum TransposeMode { TRANSPOSE_BY_KEY, TRANSPOSE_BY_INTERVAL, TRANSPOSE_DIATONICALLY }; //--------------------------------------------------------- // SelectType //--------------------------------------------------------- enum SelectType { SELECT_SINGLE, SELECT_RANGE, SELECT_ADD }; //--------------------------------------------------------- // NoteType //--------------------------------------------------------- enum NoteType { NOTE_NORMAL, NOTE_ACCIACCATURA, NOTE_APPOGGIATURA, // grace notes NOTE_GRACE4, NOTE_GRACE16, NOTE_GRACE32, NOTE_INVALID }; //--------------------------------------------------------- // AccidentalVal //--------------------------------------------------------- enum AccidentalVal { SHARP2 = 2, SHARP = 1, NATURAL = 0, FLAT = -1, FLAT2 = -2 }; //--------------------------------------------------------- // UpDownMode //--------------------------------------------------------- enum UpDownMode { UP_DOWN_CHROMATIC, UP_DOWN_OCTAVE, UP_DOWN_DIATONIC }; //--------------------------------------------------------- // StaffGroup //--------------------------------------------------------- enum StaffGroup { PITCHED_STAFF, PERCUSSION_STAFF, TAB_STAFF }; const int STAFF_GROUP_MAX = TAB_STAFF + 1; // out of enum to avoid compiler complains about not handled switch cases //--------------------------------------------------------- // ClefType //--------------------------------------------------------- enum ClefType { CLEF_INVALID = -1, CLEF_G = 0, CLEF_G1, CLEF_G2, CLEF_G3, CLEF_F, CLEF_F8, CLEF_F15, CLEF_F_B, CLEF_F_C, CLEF_C1, CLEF_C2, CLEF_C3, CLEF_C4, CLEF_TAB, CLEF_PERC, CLEF_C5, CLEF_G4, CLEF_F_8VA, CLEF_F_15MA, CLEF_PERC2, CLEF_TAB2, CLEF_MAX }; //--------------------------------------------------------- // Text Style Type // Enumerate the list of build in text styles. // Must be in sync with list in setDefaultStyle(). //--------------------------------------------------------- enum { TEXT_STYLE_UNSTYLED = -1, TEXT_STYLE_UNKNOWN = -2, TEXT_STYLE_DEFAULT = 0, TEXT_STYLE_TITLE, TEXT_STYLE_SUBTITLE, TEXT_STYLE_COMPOSER, TEXT_STYLE_POET, TEXT_STYLE_LYRIC1, TEXT_STYLE_LYRIC2, TEXT_STYLE_FINGERING, TEXT_STYLE_INSTRUMENT_LONG, TEXT_STYLE_INSTRUMENT_SHORT, TEXT_STYLE_INSTRUMENT_EXCERPT, TEXT_STYLE_DYNAMICS, TEXT_STYLE_TECHNIK, TEXT_STYLE_TEMPO, TEXT_STYLE_METRONOME, TEXT_STYLE_MEASURE_NUMBER, TEXT_STYLE_TRANSLATOR, TEXT_STYLE_TUPLET, TEXT_STYLE_SYSTEM, TEXT_STYLE_STAFF, TEXT_STYLE_HARMONY, TEXT_STYLE_REHEARSAL_MARK, TEXT_STYLE_REPEAT_LEFT, // align to start of measure TEXT_STYLE_REPEAT_RIGHT, // align to end of measure TEXT_STYLE_REPEAT, // obsolete TEXT_STYLE_VOLTA, TEXT_STYLE_FRAME, TEXT_STYLE_TEXTLINE, TEXT_STYLE_GLISSANDO, TEXT_STYLE_STRING_NUMBER, TEXT_STYLE_OTTAVA, TEXT_STYLE_BENCH, TEXT_STYLE_HEADER, TEXT_STYLE_FOOTER, TEXT_STYLE_INSTRUMENT_CHANGE, TEXT_STYLE_LYRICS_VERSE_NUMBER, TEXT_STYLE_FIGURED_BASS, TEXT_STYLES }; //--------------------------------------------------------- // BarLineType //--------------------------------------------------------- enum BarLineType { NORMAL_BAR, DOUBLE_BAR, START_REPEAT, END_REPEAT, BROKEN_BAR, END_BAR, END_START_REPEAT, DOTTED_BAR }; // Icon() subtypes enum { ICON_ACCIACCATURA, ICON_APPOGGIATURA, ICON_GRACE4, ICON_GRACE16, ICON_GRACE32, ICON_GRACE8B, ICON_SBEAM, ICON_MBEAM, ICON_NBEAM, ICON_BEAM32, ICON_BEAM64, ICON_AUTOBEAM, ICON_FBEAM1, ICON_FBEAM2, ICON_VFRAME, ICON_HFRAME, ICON_TFRAME, ICON_FFRAME, ICON_MEASURE }; //--------------------------------------------------------- // MScore // MuseScore application object //--------------------------------------------------------- class MScore : public QObject { Q_OBJECT Q_ENUMS(ValueType) Q_ENUMS(Direction) Q_ENUMS(DirectionH) private: static MStyle* _defaultStyle; // default modified by preferences static MStyle* _baseStyle; // buildin initial style static QString _globalShare; static int _hRaster, _vRaster; public: enum ValueType { OFFSET_VAL, USER_VAL }; enum Direction { AUTO, UP, DOWN }; enum DirectionH { DH_AUTO, DH_LEFT, DH_RIGHT }; static void init(); static MStyle* defaultStyle(); static MStyle* baseStyle(); static void setDefaultStyle(MStyle*); static const QString& globalShare() { return _globalShare; } static qreal hRaster() { return _hRaster; } static qreal vRaster() { return _vRaster; } static void setHRaster(int val) { _hRaster = val; } static void setVRaster(int val) { _vRaster = val; } static QColor selectColor[4]; static QColor defaultColor; static QColor dropColor; static QColor layoutBreakColor; static QColor bgColor; static bool warnPitchRange; static bool replaceFractions; static bool playRepeats; static bool panPlayback; static qreal nudgeStep; static int defaultPlayDuration; static QString partStyle; static QString lastError; static bool layoutDebug; static int division; static int sampleRate; static int mtcType; static Sequencer* seq; static qreal PDPI; static qreal DPI; static qreal DPMM; static bool debugMode; static bool testMode; }; Q_DECLARE_METATYPE(MScore::ValueType) Q_DECLARE_METATYPE(MScore::Direction) Q_DECLARE_METATYPE(MScore::DirectionH) Q_ENUMS(DirectionH) Q_DECLARE_METATYPE(BeamMode) static const int HEAD_TYPES = 4; //--------------------------------------------------------- // center //--------------------------------------------------------- inline static qreal center(qreal x1, qreal x2) { return (x1 + (x2 - x1) * .5); } //--------------------------------------------------------- // restrict //--------------------------------------------------------- inline static int restrict(int val, int min, int max) { if (val > max) return max; if (val < min) return min; return val; } #endif