1 //============================================================================= 2 // MuseScore 3 // Music Composition & Notation 4 // 5 // Copyright (C) 2011 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 __PROPERTY_H__ 14 #define __PROPERTY_H__ 15 16 namespace Ms { 17 18 class XmlReader; 19 20 //------------------------------------------------------------------------ 21 // M_PROPERTY (type, getter_name, setter_name) 22 // helper macro to define a styled ScoreElement property 23 // 24 // usage example: 25 // class Text : public Element { 26 // M_PROPERTY(QColor, color, setColor) 27 // ... 28 // }; 29 // this defines: 30 // QColor _color; 31 // const QColor& color() const { return _color; } 32 // void setColor(const QColor& val) { _color = val; } 33 //--------------------------------------------------------- 34 35 #define M_PROPERTY(a,b,c) \ 36 a _ ## b; \ 37 public: \ 38 const a& b() const { return _ ## b; } \ 39 void c(const a& val) { _ ## b = val; } \ 40 private: 41 42 #define M_PROPERTY2(a,b,c,d) \ 43 a _ ## b { d }; \ 44 public: \ 45 const a& b() const { return _ ## b; } \ 46 void c(const a& val) { _ ## b = val; } \ 47 private: 48 49 //--------------------------------------------------------- 50 // PropertyFlags 51 //--------------------------------------------------------- 52 53 enum class PropertyFlags : char { 54 NOSTYLE, UNSTYLED, STYLED 55 }; 56 57 //------------------------------------------------------------------------ 58 // Element Properties 59 //------------------------------------------------------------------------ 60 61 enum class Pid { 62 SUBTYPE, 63 SELECTED, 64 GENERATED, 65 COLOR, 66 VISIBLE, 67 Z, 68 SMALL, 69 SHOW_COURTESY, 70 KEYSIG_MODE, 71 LINE_TYPE, 72 PITCH, 73 74 TPC1, 75 TPC2, 76 LINE, 77 FIXED, 78 FIXED_LINE, 79 HEAD_TYPE, 80 HEAD_GROUP, 81 VELO_TYPE, 82 VELO_OFFSET, 83 ARTICULATION_ANCHOR, 84 85 DIRECTION, 86 STEM_DIRECTION, 87 NO_STEM, 88 SLUR_DIRECTION, 89 LEADING_SPACE, 90 DISTRIBUTE, 91 MIRROR_HEAD, 92 DOT_POSITION, 93 TUNING, 94 PAUSE, 95 96 BARLINE_TYPE, 97 BARLINE_SPAN, 98 BARLINE_SPAN_FROM, 99 BARLINE_SPAN_TO, 100 OFFSET, 101 FRET, 102 STRING, 103 GHOST, 104 PLAY, 105 TIMESIG_NOMINAL, 106 107 TIMESIG_ACTUAL, 108 NUMBER_TYPE, 109 BRACKET_TYPE, 110 NORMAL_NOTES, 111 ACTUAL_NOTES, 112 P1, 113 P2, 114 GROW_LEFT, 115 GROW_RIGHT, 116 BOX_HEIGHT, 117 BOX_WIDTH, 118 BOX_AUTOSIZE, 119 TOP_GAP, 120 BOTTOM_GAP, 121 LEFT_MARGIN, 122 RIGHT_MARGIN, 123 TOP_MARGIN, 124 BOTTOM_MARGIN, 125 LAYOUT_BREAK, 126 AUTOSCALE, 127 SIZE, 128 129 SCALE, 130 LOCK_ASPECT_RATIO, 131 SIZE_IS_SPATIUM, 132 TEXT, 133 HTML_TEXT, 134 USER_MODIFIED, 135 BEAM_POS, 136 BEAM_MODE, 137 BEAM_NO_SLOPE, 138 USER_LEN, // used for stems 139 140 SPACE, // used for spacer 141 TEMPO, 142 TEMPO_FOLLOW_TEXT, 143 ACCIDENTAL_BRACKET, 144 ACCIDENTAL_TYPE, 145 NUMERATOR_STRING, 146 DENOMINATOR_STRING, 147 FBPREFIX, // used for FiguredBassItem 148 FBDIGIT, // " " 149 FBSUFFIX, // " " 150 FBCONTINUATIONLINE, // " " 151 152 FBPARENTHESIS1, // " " 153 FBPARENTHESIS2, // " " 154 FBPARENTHESIS3, // " " 155 FBPARENTHESIS4, // " " 156 FBPARENTHESIS5, // " " 157 OTTAVA_TYPE, 158 NUMBERS_ONLY, 159 TRILL_TYPE, 160 VIBRATO_TYPE, 161 HAIRPIN_CIRCLEDTIP, 162 163 HAIRPIN_TYPE, 164 HAIRPIN_HEIGHT, 165 HAIRPIN_CONT_HEIGHT, 166 VELO_CHANGE, 167 VELO_CHANGE_METHOD, 168 VELO_CHANGE_SPEED, 169 DYNAMIC_TYPE, 170 DYNAMIC_RANGE, 171 //100 172 SINGLE_NOTE_DYNAMICS, 173 CHANGE_METHOD, 174 PLACEMENT, // Goes with P_TYPE::PLACEMENT 175 HPLACEMENT, // Goes with P_TYPE::HPLACEMENT 176 MMREST_RANGE_BRACKET_TYPE, // The brackets used arond the measure numbers indicating the range covered by the mmrest 177 VELOCITY, 178 JUMP_TO, 179 PLAY_UNTIL, 180 CONTINUE_AT, 181 LABEL, 182 MARKER_TYPE, 183 ARP_USER_LEN1, 184 ARP_USER_LEN2, 185 REPEAT_END, 186 REPEAT_START, 187 REPEAT_JUMP, 188 MEASURE_NUMBER_MODE, 189 190 GLISS_TYPE, 191 GLISS_TEXT, 192 GLISS_SHOW_TEXT, 193 GLISS_STYLE, 194 GLISS_EASEIN, 195 GLISS_EASEOUT, 196 DIAGONAL, 197 GROUPS, 198 LINE_STYLE, 199 LINE_WIDTH, 200 LINE_WIDTH_SPATIUM, 201 LASSO_POS, 202 LASSO_SIZE, 203 TIME_STRETCH, 204 ORNAMENT_STYLE, 205 206 TIMESIG, 207 TIMESIG_GLOBAL, 208 TIMESIG_STRETCH, 209 TIMESIG_TYPE, 210 SPANNER_TICK, 211 SPANNER_TICKS, 212 SPANNER_TRACK2, 213 OFFSET2, 214 BREAK_MMR, 215 MMREST_NUMBER_POS, 216 REPEAT_COUNT, 217 218 USER_STRETCH, 219 NO_OFFSET, 220 IRREGULAR, 221 ANCHOR, 222 SLUR_UOFF1, 223 SLUR_UOFF2, 224 SLUR_UOFF3, 225 SLUR_UOFF4, 226 STAFF_MOVE, 227 VERSE, 228 229 SYLLABIC, 230 LYRIC_TICKS, 231 VOLTA_ENDING, 232 LINE_VISIBLE, 233 MAG, 234 USE_DRUMSET, 235 DURATION, 236 DURATION_TYPE, 237 ROLE, 238 TRACK, 239 240 FRET_STRINGS, 241 FRET_FRETS, 242 FRET_NUT, 243 FRET_OFFSET, 244 FRET_NUM_POS, 245 ORIENTATION, 246 247 HARMONY_VOICE_LITERAL, 248 HARMONY_VOICING, 249 HARMONY_DURATION, 250 251 SYSTEM_BRACKET, 252 GAP, 253 AUTOPLACE, 254 DASH_LINE_LEN, 255 DASH_GAP_LEN, 256 TICK, 257 PLAYBACK_VOICE1, 258 PLAYBACK_VOICE2, 259 PLAYBACK_VOICE3, 260 261 PLAYBACK_VOICE4, 262 SYMBOL, 263 PLAY_REPEATS, 264 CREATE_SYSTEM_HEADER, 265 STAFF_LINES, 266 LINE_DISTANCE, 267 STEP_OFFSET, 268 STAFF_SHOW_BARLINES, 269 STAFF_SHOW_LEDGERLINES, 270 STAFF_STEMLESS, 271 STAFF_INVISIBLE, 272 STAFF_COLOR, 273 274 HEAD_SCHEME, 275 STAFF_GEN_CLEF, 276 STAFF_GEN_TIMESIG, 277 STAFF_GEN_KEYSIG, 278 STAFF_YOFFSET, 279 STAFF_USERDIST, 280 STAFF_BARLINE_SPAN, 281 STAFF_BARLINE_SPAN_FROM, 282 STAFF_BARLINE_SPAN_TO, 283 BRACKET_SPAN, 284 285 BRACKET_COLUMN, 286 INAME_LAYOUT_POSITION, 287 //200 288 SUB_STYLE, 289 290 FONT_FACE, 291 FONT_SIZE, 292 FONT_STYLE, 293 TEXT_LINE_SPACING, 294 295 FRAME_TYPE, 296 FRAME_WIDTH, 297 FRAME_PADDING, 298 FRAME_ROUND, 299 FRAME_FG_COLOR, 300 301 FRAME_BG_COLOR, 302 SIZE_SPATIUM_DEPENDENT, 303 ALIGN, 304 SYSTEM_FLAG, 305 BEGIN_TEXT, 306 307 BEGIN_TEXT_ALIGN, 308 BEGIN_TEXT_PLACE, 309 BEGIN_HOOK_TYPE, 310 BEGIN_HOOK_HEIGHT, 311 BEGIN_FONT_FACE, 312 BEGIN_FONT_SIZE, 313 BEGIN_FONT_STYLE, 314 BEGIN_TEXT_OFFSET, 315 316 CONTINUE_TEXT, 317 CONTINUE_TEXT_ALIGN, 318 CONTINUE_TEXT_PLACE, 319 CONTINUE_FONT_FACE, 320 CONTINUE_FONT_SIZE, 321 CONTINUE_FONT_STYLE, 322 CONTINUE_TEXT_OFFSET, 323 END_TEXT, 324 325 END_TEXT_ALIGN, 326 END_TEXT_PLACE, 327 END_HOOK_TYPE, 328 END_HOOK_HEIGHT, 329 END_FONT_FACE, 330 END_FONT_SIZE, 331 END_FONT_STYLE, 332 END_TEXT_OFFSET, 333 334 POS_ABOVE, 335 336 LOCATION_STAVES, 337 LOCATION_VOICES, 338 LOCATION_MEASURES, 339 LOCATION_FRACTIONS, 340 LOCATION_GRACE, 341 LOCATION_NOTE, 342 343 VOICE, 344 POSITION, 345 346 CLEF_TYPE_CONCERT, 347 CLEF_TYPE_TRANSPOSING, 348 KEY, 349 ACTION, // for Icon 350 MIN_DISTANCE, 351 352 ARPEGGIO_TYPE, 353 CHORD_LINE_TYPE, 354 CHORD_LINE_STRAIGHT, 355 TREMOLO_TYPE, 356 TREMOLO_STYLE, 357 HARMONY_TYPE, 358 359 START_WITH_LONG_NAMES, 360 START_WITH_MEASURE_ONE, 361 FIRST_SYSTEM_INDENTATION, 362 363 PATH, // for ChordLine to make its shape changes undoable 364 365 PREFER_SHARP_FLAT, 366 367 END 368 }; 369 370 enum class P_TYPE : char { 371 BOOL, 372 INT, 373 REAL, 374 SPATIUM, 375 SP_REAL, // real (point) value saved in (score) spatium units 376 FRACTION, 377 POINT, 378 POINT_SP, // point units, value saved in (score) spatium units 379 POINT_MM, 380 POINT_SP_MM, // point units, value saved as mm or spatium depending on Element->sizeIsSpatiumDependent() 381 SIZE, 382 SIZE_MM, 383 STRING, 384 SCALE, 385 COLOR, 386 DIRECTION, // enum class Direction 387 DIRECTION_H, // enum class MScore::DirectionH 388 ORNAMENT_STYLE, // enum class MScore::OrnamentStyle 389 TDURATION, 390 LAYOUT_BREAK, 391 VALUE_TYPE, 392 BEAM_MODE, 393 PLACEMENT, // ABOVE or BELOW 394 HPLACEMENT, // LEFT, CENTER or RIGHT 395 TEXT_PLACE, 396 TEMPO, 397 GROUPS, 398 SYMID, 399 INT_LIST, 400 GLISS_STYLE, 401 BARLINE_TYPE, 402 HEAD_TYPE, // enum class Notehead::Type 403 HEAD_GROUP, // enum class Notehead::Group 404 ZERO_INT, // displayed with offset +1 405 FONT, 406 SUB_STYLE, 407 ALIGN, 408 CHANGE_METHOD, // enum class VeloChangeMethod (for single note dynamics) 409 CHANGE_SPEED, // enum class Dynamic::Speed 410 CLEF_TYPE, // enum class ClefType 411 DYNAMIC_TYPE, // enum class Dynamic::Type 412 KEYMODE, // enum class KeyMode 413 ORIENTATION, // enum class Orientation 414 415 PATH, // QPainterPath 416 HEAD_SCHEME, // enum class NoteHead::Scheme 417 }; 418 419 extern QVariant readProperty(Pid type, XmlReader& e); 420 extern QVariant propertyFromString(Pid type, QString value); 421 extern QString propertyToString(Pid, QVariant value, bool mscx); 422 extern P_TYPE propertyType(Pid); 423 extern const char* propertyName(Pid); 424 extern bool propertyLink(Pid id); 425 extern Pid propertyId(const QString& name); 426 extern Pid propertyId(const QStringRef& name); 427 extern QString propertyUserName(Pid); 428 429 } // namespace Ms 430 431 Q_DECLARE_METATYPE(QPainterPath); // for properties with P_TYPE::PATH 432 433 #endif 434 435