Line data Source code
1 : /*
2 : * SPDX-License-Identifier: GPL-3.0-only
3 : * MuseScore-Studio-CLA-applies
4 : *
5 : * MuseScore Studio
6 : * Music Composition & Notation
7 : *
8 : * Copyright (C) 2021 MuseScore Limited and others
9 : *
10 : * This program is free software: you can redistribute it and/or modify
11 : * it under the terms of the GNU General Public License version 3 as
12 : * published by the Free Software Foundation.
13 : *
14 : * This program is distributed in the hope that it will be useful,
15 : * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 : * GNU General Public License for more details.
18 : *
19 : * You should have received a copy of the GNU General Public License
20 : * along with this program. If not, see <https://www.gnu.org/licenses/>.
21 : */
22 :
23 : #include "editstyleutils.h"
24 :
25 : #include "engraving/dom/engravingitem.h"
26 : #include "engraving/dom/text.h"
27 : #include "engraving/dom/textline.h"
28 : #include "engraving/types/types.h"
29 :
30 : #include "log.h"
31 :
32 : using namespace mu::engraving;
33 : using namespace mu::notation;
34 :
35 : // Keep in sync with ALL_PAGE_CODES in editstyle.cpp
36 0 : QString EditStyleUtils::pageCodeForElement(const EngravingItem* element)
37 : {
38 0 : IF_ASSERT_FAILED(element) {
39 0 : return QString();
40 : }
41 :
42 0 : switch (element->type()) {
43 0 : case ElementType::SCORE:
44 0 : return "score";
45 :
46 0 : case ElementType::PAGE:
47 0 : return "spacing";
48 :
49 0 : case ElementType::INSTRUMENT_NAME:
50 0 : return "instrument-names";
51 :
52 0 : case ElementType::TEXT:
53 : case ElementType::HARP_DIAGRAM: {
54 0 : if (element->isText()) {
55 0 : if (toText(element)->textStyleType() == TextStyleType::FOOTER
56 0 : || toText(element)->textStyleType() == TextStyleType::HEADER) {
57 0 : return "header-and-footer";
58 : }
59 : }
60 0 : return "text-styles";
61 : }
62 :
63 0 : case ElementType::MEASURE_NUMBER:
64 : case ElementType::MMREST_RANGE:
65 0 : return "measure-number";
66 :
67 0 : case ElementType::BRACKET:
68 : case ElementType::BRACKET_ITEM:
69 : case ElementType::SYSTEM_DIVIDER:
70 0 : return "system";
71 :
72 0 : case ElementType::CLEF:
73 : case ElementType::KEYSIG:
74 : case ElementType::TIMESIG:
75 0 : return "clefs-key-and-time-signatures";
76 :
77 0 : case ElementType::ACCIDENTAL:
78 0 : return "accidentals";
79 :
80 0 : case ElementType::MEASURE:
81 0 : return "spacing";
82 :
83 0 : case ElementType::BAR_LINE:
84 0 : return "barlines";
85 :
86 0 : case ElementType::NOTE:
87 : case ElementType::CHORD:
88 : case ElementType::STEM:
89 : case ElementType::STEM_SLASH:
90 : case ElementType::LEDGER_LINE:
91 : case ElementType::NOTEDOT:
92 0 : return "notes";
93 :
94 0 : case ElementType::REST:
95 : case ElementType::MMREST:
96 0 : return "rests";
97 :
98 0 : case ElementType::MEASURE_REPEAT:
99 : case ElementType::PLAY_COUNT_TEXT:
100 0 : return "repeats";
101 :
102 0 : case ElementType::BEAM:
103 0 : return "beams";
104 :
105 0 : case ElementType::TUPLET:
106 0 : return "tuplets";
107 :
108 0 : case ElementType::ARPEGGIO:
109 0 : return "arpeggios";
110 :
111 0 : case ElementType::SLUR:
112 : case ElementType::SLUR_SEGMENT:
113 : case ElementType::TIE:
114 : case ElementType::TIE_SEGMENT:
115 : case ElementType::LAISSEZ_VIB:
116 : case ElementType::LAISSEZ_VIB_SEGMENT:
117 : case ElementType::PARTIAL_TIE:
118 : case ElementType::PARTIAL_TIE_SEGMENT:
119 0 : return "slurs-and-ties";
120 :
121 0 : case ElementType::HAMMER_ON_PULL_OFF:
122 : case ElementType::HAMMER_ON_PULL_OFF_SEGMENT:
123 : case ElementType::HAMMER_ON_PULL_OFF_TEXT:
124 0 : return "hammer-ons-pull-offs-and-tapping";
125 :
126 0 : case ElementType::HAIRPIN:
127 : case ElementType::HAIRPIN_SEGMENT:
128 0 : return "dynamics-hairpins";
129 :
130 0 : case ElementType::VOLTA:
131 : case ElementType::VOLTA_SEGMENT:
132 0 : return "volta";
133 :
134 0 : case ElementType::OTTAVA:
135 : case ElementType::OTTAVA_SEGMENT:
136 0 : return "ottava";
137 :
138 0 : case ElementType::PEDAL:
139 : case ElementType::PEDAL_SEGMENT:
140 0 : return "pedal";
141 :
142 0 : case ElementType::TRILL:
143 : case ElementType::TRILL_SEGMENT:
144 0 : return "trill";
145 :
146 0 : case ElementType::VIBRATO:
147 : case ElementType::VIBRATO_SEGMENT:
148 0 : return "vibrato";
149 :
150 0 : case ElementType::BEND:
151 : case ElementType::GUITAR_BEND:
152 : case ElementType::GUITAR_BEND_SEGMENT:
153 : case ElementType::GUITAR_BEND_HOLD:
154 : case ElementType::GUITAR_BEND_HOLD_SEGMENT:
155 : case ElementType::GUITAR_BEND_TEXT:
156 0 : return "bend";
157 :
158 0 : case ElementType::TEXTLINE:
159 0 : return element->isTextLine() && toTextLine(element)->systemFlag() ? "system-text-line" : "text-line";
160 0 : case ElementType::TEXTLINE_SEGMENT:
161 0 : return element->isTextLineSegment() && toTextLineSegment(element)->systemFlag()
162 0 : ? "system-text-line" : "text-line";
163 :
164 0 : case ElementType::GLISSANDO:
165 : case ElementType::GLISSANDO_SEGMENT:
166 : case ElementType::NOTELINE:
167 : case ElementType::NOTELINE_SEGMENT:
168 0 : return "glissando-note-line";
169 :
170 0 : case ElementType::ARTICULATION:
171 0 : return "articulations-and-ornaments";
172 :
173 0 : case ElementType::FERMATA:
174 0 : return "fermatas";
175 :
176 0 : case ElementType::PLAYTECH_ANNOTATION:
177 : case ElementType::STAFF_TEXT:
178 0 : return "staff-text";
179 :
180 0 : case ElementType::STAVE_SHARING_LABEL:
181 0 : return "stave-sharing";
182 :
183 0 : case ElementType::TEMPO_TEXT:
184 0 : return "tempo-text";
185 :
186 0 : case ElementType::LYRICS:
187 : case ElementType::LYRICSLINE:
188 : case ElementType::PARTIAL_LYRICSLINE:
189 : case ElementType::LYRICSLINE_SEGMENT:
190 : case ElementType::PARTIAL_LYRICSLINE_SEGMENT:
191 0 : return "lyrics";
192 :
193 0 : case ElementType::EXPRESSION:
194 0 : return "expression";
195 :
196 0 : case ElementType::DYNAMIC:
197 0 : return "dynamics-hairpins";
198 :
199 0 : case ElementType::REHEARSAL_MARK:
200 0 : return "rehearsal-marks";
201 :
202 0 : case ElementType::FIGURED_BASS:
203 0 : return "figured-bass";
204 :
205 0 : case ElementType::HARMONY:
206 0 : return "chord-symbols";
207 :
208 0 : case ElementType::FRET_DIAGRAM:
209 0 : return "fretboard-diagrams";
210 :
211 0 : default: return QString();
212 : }
213 : }
214 :
215 : // Keep in sync with ALL_TEXT_STYLE_SUBPAGE_CODES in editstyle.cpp
216 0 : QString EditStyleUtils::subPageCodeForElement(const EngravingItem* element)
217 : {
218 0 : IF_ASSERT_FAILED(element) {
219 0 : return QString();
220 : }
221 :
222 0 : if (pageCodeForElement(element) == "text-styles" && element->isTextBase()) {
223 0 : switch (toTextBase(element)->textStyleType()) {
224 0 : case TextStyleType::TITLE:
225 0 : return "title";
226 :
227 0 : case TextStyleType::SUBTITLE:
228 0 : return "subtitle";
229 :
230 0 : case TextStyleType::COMPOSER:
231 0 : return "composer";
232 :
233 0 : case TextStyleType::LYRICIST:
234 0 : return "poet";
235 :
236 0 : case TextStyleType::TRANSLATOR:
237 0 : return "translator";
238 :
239 0 : case TextStyleType::FRAME:
240 0 : return "frame";
241 :
242 0 : case TextStyleType::INSTRUMENT_EXCERPT:
243 0 : return "instrument-name-part";
244 :
245 0 : case TextStyleType::INSTRUMENT_LONG:
246 0 : return "instrument-name-long";
247 :
248 0 : case TextStyleType::INSTRUMENT_SHORT:
249 0 : return "instrument-name-short";
250 :
251 0 : case TextStyleType::INSTRUMENT_CHANGE:
252 0 : return "instrument-change";
253 :
254 0 : case TextStyleType::HEADER:
255 0 : return "header";
256 :
257 0 : case TextStyleType::FOOTER:
258 0 : return "footer";
259 :
260 0 : case TextStyleType::COPYRIGHT:
261 0 : return "copyright";
262 :
263 0 : case TextStyleType::PAGE_NUMBER:
264 0 : return "page-number";
265 :
266 0 : case TextStyleType::MEASURE_NUMBER:
267 0 : return "measure-number";
268 :
269 0 : case TextStyleType::MEASURE_NUMBER_ALTERNATE:
270 0 : return "measure-number-alternate";
271 :
272 0 : case TextStyleType::MMREST_RANGE:
273 0 : return "multimeasure-rest-range";
274 :
275 0 : case TextStyleType::TEMPO:
276 0 : return "tempo";
277 :
278 0 : case TextStyleType::TEMPO_CHANGE:
279 0 : return "tempo-change";
280 :
281 0 : case TextStyleType::METRONOME:
282 0 : return "metronome";
283 :
284 0 : case TextStyleType::REPEAT_PLAY_COUNT:
285 0 : return "repeat-play-count";
286 :
287 0 : case TextStyleType::REPEAT_LEFT:
288 0 : return "repeat-text-left";
289 :
290 0 : case TextStyleType::REPEAT_RIGHT:
291 0 : return "repeat-text-right";
292 :
293 0 : case TextStyleType::REHEARSAL_MARK:
294 0 : return "rehearsal-mark";
295 :
296 0 : case TextStyleType::SYSTEM:
297 0 : return "system";
298 :
299 0 : case TextStyleType::STAFF:
300 0 : return "staff";
301 :
302 0 : case TextStyleType::STAVE_SHARING:
303 0 : return "stave-sharing";
304 :
305 0 : case TextStyleType::EXPRESSION:
306 0 : return "expression";
307 :
308 0 : case TextStyleType::HAIRPIN:
309 0 : return "hairpin";
310 :
311 0 : case TextStyleType::LYRICS_ODD:
312 0 : return "lyrics-odd-lines";
313 :
314 0 : case TextStyleType::LYRICS_EVEN:
315 0 : return "lyrics-even-lines";
316 :
317 0 : case TextStyleType::HARMONY_A:
318 0 : return "chord-symbols";
319 :
320 0 : case TextStyleType::HARMONY_B:
321 0 : return "chord-symbols-alternate";
322 :
323 0 : case TextStyleType::HARMONY_ROMAN:
324 0 : return "roman-numeral-analysis";
325 :
326 0 : case TextStyleType::HARMONY_NASHVILLE:
327 0 : return "nashville-number";
328 :
329 0 : case TextStyleType::TUPLET:
330 0 : return "tuplet";
331 :
332 0 : case TextStyleType::ARTICULATION:
333 0 : return "articulation";
334 :
335 0 : case TextStyleType::STICKING:
336 0 : return "sticking";
337 :
338 0 : case TextStyleType::FINGERING:
339 0 : return "fingering";
340 :
341 0 : case TextStyleType::TAB_FRET_NUMBER:
342 0 : return "tab-fret-number";
343 :
344 0 : case TextStyleType::LH_GUITAR_FINGERING:
345 0 : return "lh-guitar-fingering";
346 :
347 0 : case TextStyleType::RH_GUITAR_FINGERING:
348 0 : return "rh-guitar-fingering";
349 :
350 0 : case TextStyleType::HAMMER_ON_PULL_OFF:
351 0 : return "hammer-ons-pull-offs-and-tapping";
352 :
353 0 : case TextStyleType::STRING_NUMBER:
354 0 : return "string-number";
355 :
356 0 : case TextStyleType::STRING_TUNINGS:
357 0 : return "string-tunings";
358 :
359 0 : case TextStyleType::FRET_DIAGRAM_FINGERING:
360 0 : return "fretboard-diagram-fingering";
361 :
362 0 : case TextStyleType::FRET_DIAGRAM_FRET_NUMBER:
363 0 : return "fretboard-diagram-fret-number";
364 :
365 0 : case TextStyleType::HARP_PEDAL_DIAGRAM:
366 0 : return "harp-pedal-diagram";
367 :
368 0 : case TextStyleType::HARP_PEDAL_TEXT_DIAGRAM:
369 0 : return "harp-pedal-text-diagram";
370 :
371 0 : case TextStyleType::TEXTLINE:
372 0 : return "text-line";
373 :
374 0 : case TextStyleType::SYSTEM_TEXTLINE:
375 0 : return "system-text-line";
376 :
377 0 : case TextStyleType::NOTELINE:
378 0 : return "note-line";
379 :
380 0 : case TextStyleType::VOLTA:
381 0 : return "volta";
382 :
383 0 : case TextStyleType::OTTAVA:
384 0 : return "ottava";
385 :
386 0 : case TextStyleType::GLISSANDO:
387 0 : return "glissando";
388 :
389 0 : case TextStyleType::PEDAL:
390 0 : return "pedal";
391 :
392 0 : case TextStyleType::BEND:
393 0 : return "bend";
394 :
395 0 : case TextStyleType::LET_RING:
396 0 : return "let-ring";
397 :
398 0 : case TextStyleType::WHAMMY_BAR:
399 0 : return "whammy-bar";
400 :
401 0 : case TextStyleType::PALM_MUTE:
402 0 : return "palm-mute";
403 :
404 0 : case TextStyleType::USER1:
405 0 : return "user1";
406 :
407 0 : case TextStyleType::USER2:
408 0 : return "user2";
409 :
410 0 : case TextStyleType::USER3:
411 0 : return "user3";
412 :
413 0 : case TextStyleType::USER4:
414 0 : return "user4";
415 :
416 0 : case TextStyleType::USER5:
417 0 : return "user5";
418 :
419 0 : case TextStyleType::USER6:
420 0 : return "user6";
421 :
422 0 : case TextStyleType::USER7:
423 0 : return "user7";
424 :
425 0 : case TextStyleType::USER8:
426 0 : return "user8";
427 :
428 0 : case TextStyleType::USER9:
429 0 : return "user9";
430 :
431 0 : case TextStyleType::USER10:
432 0 : return "user10";
433 :
434 0 : case TextStyleType::USER11:
435 0 : return "user11";
436 :
437 0 : case TextStyleType::USER12:
438 0 : return "user12";
439 :
440 0 : case TextStyleType::DYNAMICS:
441 : case TextStyleType::DEFAULT:
442 : case TextStyleType::GROUP_BRACKET:
443 : case TextStyleType::TEXT_TYPES:
444 : case TextStyleType::IGNORED_TYPES:
445 0 : return QString();
446 : }
447 : }
448 0 : return QString();
449 : }
|