MUSX Document Model
Loading...
Searching...
No Matches
Details.h
1/*
2 * Copyright (C) 2025, Robert Patterson
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a copy
5 * of this software and associated documentation files (the "Software"), to deal
6 * in the Software without restriction, including without limitation the rights
7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 * copies of the Software, and to permit persons to whom the Software is
9 * furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 * THE SOFTWARE.
21 */
22#pragma once
23#include <functional>
24#include <vector>
25#include <unordered_set>
26#include <cmath>
27#include <map>
28
29#include "music_theory/music_theory.hpp"
30
31#include "musx/util/EnigmaString.h"
32#include "MusxInstance.h"
33#include "BaseClasses.h"
34#include "CommonClasses.h"
35#include "Options.h"
36#include "Others.h"
37#include "Staff.h"
38 // do not add other dom class dependencies. Use Implementations.h for implementations that need total class access.
39
40namespace musx {
41namespace dom {
42
43class EntryInfoPtr;
44class EntryFrame;
45class EntryInfo;
46
47namespace others {
48class ChordSuffixElement;
49class FretboardGroup;
50class FretInstrument;
51class FretboardStyle;
52class StaffUsed;
53class Measure;
54class MultiStaffInstrumentGroup;
55class TextBlock;
56} // namespace others
57
58namespace texts {
59 class LyricsChorus;
60 class LyricsSection;
61 class LyricsVerse;
62} // namespace others
63
68namespace details {
69
79{
80public:
82 explicit AccidentalAlterations(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
83 : NoteDetailsBase(document, partId, shareMode, entnum, inci), customFont(std::make_shared<FontInfo>(document))
84 {
85 }
86
88 int percent{};
91 char32_t altChar{};
92 std::shared_ptr<FontInfo> customFont;
93 bool useOwnFont{};
94 bool allowVertPos{};
95
96 NoteNumber getNoteId() const override { return noteId; }
97
98 constexpr static std::string_view XmlNodeName = "acciAlter";
100};
101
109{
110public:
119 explicit ArticulationAssign(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
120 : EntryDetailsBase(document, partId, shareMode, entnum, inci) {}
121
128 bool aboveEntry{};
129 bool hide{};
130 bool neverStack{};
131 bool avoidSlur{};
133
135 constexpr static std::string_view XmlNodeName = "articAssign";
136};
137
142class Baseline : public DetailsBase
143{
144public:
154 explicit Baseline(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, Cmper system, Cmper staff, std::optional<Inci> inci = std::nullopt)
155 : DetailsBase(document, partId, shareMode, system, staff, inci) {}
156
159
161};
162
168{
169public:
170 using Baseline::Baseline;
171
172
174 constexpr static std::string_view XmlNodeName = "baselinesLyricsChorus";
175};
176
182{
183public:
184 using Baseline::Baseline;
185
187 constexpr static std::string_view XmlNodeName = "baselinesLyricsSection";
188};
189
195{
196public:
197 using Baseline::Baseline;
198
200 constexpr static std::string_view XmlNodeName = "baselinesLyricsVerse";
201};
202
210{
211private:
212 bool m_active = true; // this value is set by the factory.
213
214protected:
216 template <typename SecondaryBeamType>
217 static bool calcIsFeatheredBeamImpl(const EntryInfoPtr& entryInfo, Evpu& outLeftY, Evpu& outRightY);
218
219public:
228 explicit BeamAlterations(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum, std::optional<Inci> inci = std::nullopt)
229 : EntryDetailsBase(document, partId, shareMode, entnum, inci) {}
230
233
242
247
250 bool isActive() const { return m_active; }
251
253 template <typename T,
254 std::enable_if_t<std::is_base_of_v<BeamAlterations, T>, int> = 0>
255 static void calcAllActiveFlags(const DocumentPtr& document);
256
258};
259
267{
268public:
276 explicit BeamAlterationsDownStem(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
277 : BeamAlterations(document, partId, shareMode, entnum) {}
278
279 constexpr static std::string_view XmlNodeName = "beamAltPrimDownStem";
280};
281
289{
290public:
298 explicit BeamAlterationsUpStem(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
299 : BeamAlterations(document, partId, shareMode, entnum) {}
300
301 constexpr static std::string_view XmlNodeName = "beamAltPrimUpStem";
302};
303
312{
313public:
321 explicit BeamExtension(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
322 : EntryDetailsBase(document, partId, shareMode, entnum) {}
323
326 unsigned mask{};
333
335};
336
342{
343public:
345
346 constexpr static std::string_view XmlNodeName = "beamExtendDownStem";
347};
348
354{
355public:
357
358 constexpr static std::string_view XmlNodeName = "beamExtendUpStem";
359};
360
370{
371public:
373 explicit BeamStubDirection(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
374 : EntryDetailsBase(document, partId, shareMode, entnum)
375 {
376 }
377
378 unsigned mask{};
381
383 bool isLeft() const { return mask != 0; }
384
385 constexpr static std::string_view XmlNodeName = "beamStub";
387};
388
401class Bracket : public DetailsBase
402{
403public:
405 explicit Bracket(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, Cmper cmper1, Cmper cmper2, Inci inci)
406 : DetailsBase(document, partId, shareMode, cmper1, cmper2, inci)
407 {
408 }
409
411 explicit Bracket(const DocumentWeakPtr& document)
412 : DetailsBase(document, SCORE_PARTID, Base::ShareMode::All, 0, 0, 0)
413 {
414 }
415
420 enum class BracketStyle : int
421 {
422 None = 0,
423 ThickLine = 1,
425 PianoBrace = 3,
426 Unknown4,
427 Unknown5,
429 Unknown7,
430 DeskBracket = 8
431 };
432
438
439 constexpr static std::string_view XmlNodeName = "brackSpec";
441};
442
451{
452 Cmper calcFretboardGroupCmper() const;
453
454public:
464 explicit ChordAssign(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, Cmper staffId, Cmper meas, Inci inci)
465 : DetailsBase(document, partId, shareMode, staffId, meas, inci)
466 {
467 }
468
473 enum class BassPosition
474 {
475 AfterRoot, // default value may not appear in xml (but text appears in Finale binary)
476 UnderRoot,
477 Subtext
478 };
479
486 int rootAlter{};
488 bool playSuffix{};
489 bool showRoot{};
490 bool playRoot{};
492 bool showSuffix{};
495 int bassAlter{};
498 bool showAltBass{};
499 bool playAltBass{};
500 int capoValue{};
512 int chPercent{};
513 int fbPercent{};
514
517
521
525
526 constexpr static std::string_view XmlNodeName = "chordAssign";
528};
529
544class ClefOctaveFlats : public DetailsArray<int, 7>
545{
546 std::string_view xmlTag() const override { return XmlNodeName; }
547
548public:
550
551 constexpr static std::string_view XmlNodeName = "clefOctvFlats";
553};
554
573class ClefOctaveSharps : public DetailsArray<int, 7>
574{
575 std::string_view xmlTag() const override { return XmlNodeName; }
576
577public:
579
580 constexpr static std::string_view XmlNodeName = "clefOctvSharps";
582};
583
593{
594public:
596 explicit CrossStaff(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
597 : NoteDetailsBase(document, partId, shareMode, entnum, inci)
598 {
599 }
600
603
604 NoteNumber getNoteId() const override { return noteId; }
605
606 constexpr static std::string_view XmlNodeName = "crossStaff";
608};
609
619{
620public:
628 explicit CustomStem(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
629 : EntryDetailsBase(document, partId, shareMode, entnum) {}
630
634
641 bool calcIsHiddenStem() const;
642
644};
645
653{
654public:
656
657 constexpr static std::string_view XmlNodeName = "stemDefDown";
658};
659
667{
668public:
670
671 constexpr static std::string_view XmlNodeName = "stemDefUp";
672};
673
683{
684public:
686 explicit DotAlterations(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
687 : NoteDetailsBase(document, partId, shareMode, entnum, inci)
688 {
689 }
690
695
696 NoteNumber getNoteId() const override { return noteId; }
697
698 constexpr static std::string_view XmlNodeName = "dotOffset";
700};
701
711{
712public:
720 explicit EntrySize(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
721 : EntryDetailsBase(document, partId, shareMode, entnum) {}
722
723 int percent{};
724
726 constexpr static std::string_view XmlNodeName = "entrySize";
727};
728
742{
743public:
747 explicit FretboardDiagram(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, Cmper cmper1, Cmper cmper2)
748 : DetailsBase(document, partId, shareMode, cmper1, cmper2)
749 {}
750
758 enum class Shape
759 {
760 None,
761 Closed,
762 Open,
763 Muted,
764 Custom
765 };
766
771 class Cell
772 {
773 public:
774 int string{};
775 int fret{};
777 int fingerNum{};
778
780 };
781
786 class Barre
787 {
788 public:
789 int fret{};
791 int endString{};
792
794 };
795
796 int numFrets{};
798 bool lock{};
799 bool showNum{};
802
803 std::vector<std::shared_ptr<Cell>> cells;
804 std::vector<std::shared_ptr<Barre>> barres;
805
806 void integrityCheck(const std::shared_ptr<Base>& ptrToThis) override
807 {
808 this->DetailsBase::integrityCheck(ptrToThis);
809 if (numFretCells != int(cells.size())) {
810 const int oldVal = numFretCells;
811 numFretCells = int(cells.size());
812 MUSX_INTEGRITY_ERROR("FretboardDiagram " + std::to_string(getCmper1()) + ", " + std::to_string(getCmper2())
813 + " specifies the wrong number of cells (" + std::to_string(oldVal) + ").");
814 }
815 if (numFretBarres != int(barres.size())) {
816 const int oldVal = numFretBarres;
817 numFretBarres = int(barres.size());
818 MUSX_INTEGRITY_ERROR("FretboardDiagram " + std::to_string(getCmper1()) + ", " + std::to_string(getCmper2())
819 + " specifies the wrong number of barres (" + std::to_string(oldVal) + ").");
820 }
821 }
822
823 constexpr static std::string_view XmlNodeName = "fretboard";
825};
826
835{
836public:
845 explicit GFrameHold(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, Cmper staffId, Cmper meas)
846 : DetailsBase(document, partId, shareMode, staffId, meas), frames(MAX_LAYERS) {}
847
848 // Public properties corresponding to the XML structure
849 std::optional<ClefIndex> clefId;
852 bool mirrorFrame{};
855 std::vector<Cmper> frames;
856
859
862
864 bool calcIsMultiLayer() const
865 {
866 return std::count_if(frames.begin(), frames.end(), [](Cmper frameId) { return frameId != 0; }) > 1;
867 }
868
870 bool calcContainsMusic() const
871 {
872 return std::find_if(frames.begin(), frames.end(), [](Cmper frameId) { return frameId != 0; }) != frames.end();
873 }
874
875 void integrityCheck(const std::shared_ptr<Base>& ptrToThis) override
876 {
877 this->DetailsBase::integrityCheck(ptrToThis);
878 if (clefListId && clefId.has_value()) {
879 MUSX_INTEGRITY_ERROR("GFrameHold for staff " + std::to_string(getCmper1()) + " and measure " + std::to_string(getCmper2()) + " has both clef and clef list.");
880 }
881 if (!clefListId && !clefId.has_value()) {
882 MUSX_INTEGRITY_ERROR("GFrameHold for staff " + std::to_string(getCmper1()) + " and measure " + std::to_string(getCmper2()) + " has neither clef nor clef list.");
883 }
884 }
885
886 constexpr static std::string_view XmlNodeName = "gfhold";
888};
889
898{
899public:
908 explicit IndependentStaffDetails(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, Cmper staffId, Cmper meas)
909 : DetailsBase(document, partId, shareMode, staffId, meas)
910 {
911 }
912
913 // Key signature info
914 std::shared_ptr<KeySignature> keySig;
915 bool hasKey{};
916
917 // Time signature info
922
925 bool altNumTsig{};
926 bool altDenTsig{};
928 bool hasDispTime{};
929 bool hasTime{};
930
933
937
938 void integrityCheck(const std::shared_ptr<Base>& ptrToThis) override
939 {
941 if (hasKey && !keySig) {
942 keySig = std::make_shared<KeySignature>(getDocument());
943 }
944 }
945
946 constexpr static std::string_view XmlNodeName = "floats";
948};
949
958public:
960 explicit KeySymbolListElement(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, Cmper cmper1, Cmper cmper2)
961 : DetailsBase(document, partId, shareMode, cmper1, cmper2) {}
962
963 std::string accidentalString;
965
967 int getAlterationValue() const {
968 return static_cast<int16_t>(getCmper2());
969 }
970
971 void integrityCheck(const std::shared_ptr<Base>& ptrToThis) override
972 {
974 if (std::abs(getAlterationValue()) > MAX_ALTERATIONS) {
976 "KeySymbolListElement for list " + std::to_string(getCmper1()) + " has invalid value " + std::to_string(getAlterationValue()));
977 }
978 }
979
980 constexpr static std::string_view XmlNodeName = "keySymList";
982};
983
989{
990protected:
994 template <typename TextType>
996
997public:
1006 explicit LyricAssign(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
1007 : EntryDetailsBase(document, partId, shareMode, entnum, inci) {}
1008
1010 unsigned syllable{};
1018
1020};
1021
1029{
1030public:
1032
1037 { return LyricAssign::getRawTextCtx<TextType>(); }
1038
1040 constexpr static std::string_view XmlNodeName = "lyrDataChorus";
1041};
1042
1050{
1051public:
1053
1058 { return LyricAssign::getRawTextCtx<TextType>(); }
1059
1061 constexpr static std::string_view XmlNodeName = "lyrDataSection";
1062};
1063
1071{
1072public:
1074
1079 { return LyricAssign::getRawTextCtx<TextType>(); }
1080
1082 constexpr static std::string_view XmlNodeName = "lyrDataVerse";
1083};
1084
1093{
1094public:
1097
1106 explicit LyricEntryInfo(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum, std::optional<Inci> inci = std::nullopt)
1107 : EntryDetailsBase(document, partId, shareMode, entnum, inci) {}
1108
1109 std::optional<AlignJustify> justify{};
1110 std::optional<AlignJustify> align{};
1111
1113 constexpr static std::string_view XmlNodeName = "lyricEntryInfo";
1114};
1115
1124{
1125public:
1135 explicit MeasureNumberIndividualPositioning(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, Cmper staffId, Cmper meas, Inci inci)
1136 : DetailsBase(document, partId, shareMode, staffId, meas, inci)
1137 {
1138 }
1139
1145 {
1146 None,
1147 Show,
1148 Hide
1149 };
1150
1157 std::shared_ptr<others::Enclosure> enclosure;
1158
1159 constexpr static std::string_view XmlNodeName = "measNumbIndivPos";
1161};
1162
1179{
1180public:
1190 explicit MeasureTextAssign(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, Cmper staffId, Cmper meas, Inci inci)
1191 : DetailsBase(document, partId, shareMode, staffId, meas, inci)
1192 {
1193 }
1194
1200 bool hidden{};
1201
1204
1207
1208 constexpr static std::string_view XmlNodeName = "measTextAssign";
1210};
1211
1221{
1222public:
1224 explicit NoteAlterations(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
1225 : NoteDetailsBase(document, partId, shareMode, entnum, inci), customFont(new FontInfo(document))
1226 {
1227 }
1228
1230 int percent{};
1232 char32_t altNhead{};
1233 bool useOwnFont{};
1234 std::shared_ptr<FontInfo> customFont{};
1237 bool enharmonic{};
1239
1240 NoteNumber getNoteId() const override { return noteId; }
1241
1242 constexpr static std::string_view XmlNodeName = "noteAlter";
1244};
1245
1255{
1256public:
1258 explicit PercussionNoteCode(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
1259 : NoteDetailsBase(document, partId, shareMode, entnum, inci)
1260 {
1261 }
1262
1265
1266 NoteNumber getNoteId() const override { return noteId; }
1267
1268 constexpr static std::string_view XmlNodeName = "percussionNoteCode";
1270};
1271
1279{
1280public:
1290 explicit SecondaryBeamAlterationsDownStem(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
1291 : BeamAlterations(document, partId, shareMode, entnum, inci) {}
1292
1299 static bool calcIsFeatheredBeam(const EntryInfoPtr& entryInfo, Evpu& outLeftY, Evpu& outRightY)
1300 { return calcIsFeatheredBeamImpl<SecondaryBeamAlterationsDownStem>(entryInfo, outLeftY, outRightY); }
1301
1302 constexpr static std::string_view XmlNodeName = "beamAltSecDownStem";
1303};
1304
1312{
1313public:
1323 explicit SecondaryBeamAlterationsUpStem(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
1324 : BeamAlterations(document, partId, shareMode, entnum, inci) {}
1325
1332 static bool calcIsFeatheredBeam(const EntryInfoPtr& entryInfo, Evpu& outLeftY, Evpu& outRightY)
1333 { return calcIsFeatheredBeamImpl<SecondaryBeamAlterationsUpStem>(entryInfo, outLeftY, outRightY); }
1334
1335 constexpr static std::string_view XmlNodeName = "beamAltSecUpStem";
1336};
1337
1347{
1348public:
1350 explicit SecondaryBeamBreak(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
1351 : EntryDetailsBase(document, partId, shareMode, entnum)
1352 {
1353 }
1354
1355 unsigned mask{};
1357
1365 {
1366 MUSX_ASSERT_IF(!mask || mask >= unsigned(NoteType::Eighth)) {
1367 return 0; // invalid mask values have already been flagged and supposedly corrected by #integrityCheck.
1368 }
1369 for (unsigned shift = 0; true; shift++) {
1370 if (mask & (unsigned(NoteType::Note16th) >> shift)) {
1371 return shift + 2; // the 2nd beam is the 16th beam and the first one we checked.
1372 }
1373 }
1374 assert(false); // should not be able to get here
1375 return 0;
1376 }
1377
1378 void integrityCheck(const std::shared_ptr<Base>& ptrToThis) override
1379 {
1381 if (!mask) {
1382 mask = unsigned(NoteType::Note4096th);
1383 MUSX_INTEGRITY_ERROR("Secondary beam break for entry" + std::to_string(getEntryNumber()) + " has no breaks.");
1384 }
1385 if (mask >= unsigned(NoteType::Eighth)) {
1386 mask = unsigned(NoteType::Eighth) - 1;
1387 MUSX_INTEGRITY_ERROR("Secondary beam break for entry" + std::to_string(getEntryNumber()) + " specifies a value that cannot be a secondary beam.");
1388 }
1389 }
1390
1391 constexpr static std::string_view XmlNodeName = "secBeamBreak";
1393};
1394
1405{
1406public:
1409 explicit ShapeNoteBase(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, Cmper cmper1, Cmper cmper2)
1410 : DetailsBase(document, partId, shareMode, cmper1, cmper2)
1411 {}
1412
1417 {
1418 public:
1419 char32_t doubleWhole{};
1420 char32_t whole{};
1421 char32_t half{};
1422 char32_t quarter{};
1423
1425 };
1426
1427 std::vector<std::shared_ptr<NoteShapes>> noteShapes;
1430
1431 void integrityCheck(const std::shared_ptr<Base>& ptrToThis) override
1432 {
1433 this->DetailsBase::integrityCheck(ptrToThis);
1434 const size_t currentSize = noteShapes.size();
1435 if (currentSize < music_theory::STANDARD_DIATONIC_STEPS) {
1436 for (size_t x = currentSize; x < music_theory::STANDARD_DIATONIC_STEPS; x++) {
1437 noteShapes.emplace_back(std::make_shared<NoteShapes>());
1438 }
1439 MUSX_INTEGRITY_ERROR("For ShapeNoteBase cmper " + std::to_string(getCmper1()) + ", only " + std::to_string(currentSize)
1440 + " note shapes were provided but at least " + std::to_string(music_theory::STANDARD_DIATONIC_STEPS) + " were expected.");
1441 }
1442 }
1443
1445};
1446
1455{
1456public:
1458
1459 constexpr static std::string_view XmlNodeName = "shapeNote";
1460};
1461
1470{
1471public:
1473
1474 constexpr static std::string_view XmlNodeName = "shapeNoteStyle";
1475};
1476
1483class StaffGroup : public DetailsBase {
1484public:
1493 StaffGroup(const DocumentWeakPtr& document, Cmper partId, Base::ShareMode shareMode, Cmper cmper1, Cmper cmper2)
1494 : DetailsBase(document, partId, shareMode, cmper1, cmper2) {}
1495
1498
1501
1507 {
1508 OnlyOnStaves,
1511 };
1512
1517 enum class HideStaves
1518 {
1519 Normally,
1520 AsGroup,
1521 None
1522 };
1523
1524 // Public properties corresponding to the XML structure, ordered as they appear in the XML
1532 std::shared_ptr<Bracket> bracket{};
1537 bool ownBarline{};
1540 bool hideName{};
1549
1555 std::unordered_set<StaffCmper> staves;
1556
1560
1564
1567
1573
1579
1581 bool isAllMeasures() const
1582 { return (startMeas == 1 && endMeas == (std::numeric_limits<MeasCmper>::max)()); }
1583
1584 void integrityCheck(const std::shared_ptr<Base>& ptrToThis) override
1585 {
1586 this->DetailsBase::integrityCheck(ptrToThis);
1587 if (endMeas <= startMeas || startMeas <= 0) {
1588 MUSX_INTEGRITY_ERROR("Staff group " + std::to_string(getCmper2()) + " for part " + std::to_string(getSourcePartId())
1589 + " starts at measure " + std::to_string(startMeas) + " and ends at measure " + std::to_string(endMeas));
1590 }
1591 if (!bracket) {
1592 // this is not an error. Finale omits the bracket node for groups with entirely default bracket info.
1593 bracket = std::make_shared<Bracket>(getDocument());
1594 }
1595 }
1596
1597 constexpr static std::string_view XmlNodeName = "staffGroup";
1599};
1600
1606{
1607public:
1608 std::optional<size_t> startSlot;
1609 std::optional<size_t> endSlot;
1612
1616 StaffGroupInfo(const MusxInstance<StaffGroup>& staffGroup,
1617 const MusxInstanceList<others::StaffUsed>& inpSysStaves);
1618
1620 std::optional<size_t> numStaves() const
1621 {
1622 if (startSlot && endSlot) {
1623 return endSlot.value() - startSlot.value() + 1;
1624 }
1625 return std::nullopt;
1626 }
1627
1632 void iterateStaves(MeasCmper measId, Edu eduPosition, std::function<bool(const MusxInstance<others::StaffComposite>&)> iterator) const;
1633
1638 static std::vector<StaffGroupInfo> getGroupsAtMeasure(MeasCmper measureId, Cmper linkedPartId,
1640};
1641
1651{
1652public:
1661 explicit StaffSize(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, Cmper system, Cmper staffId)
1662 : DetailsBase(document, partId, shareMode, system, staffId)
1663 {
1664 }
1665
1667
1671
1672 constexpr static std::string_view XmlNodeName = "staffSize";
1674};
1675
1685{
1686public:
1688 explicit StemAlterations(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
1689 : EntryDetailsBase(document, partId, shareMode, entnum)
1690 {
1691 }
1692
1697
1698 constexpr static std::string_view XmlNodeName = "stemAdjust";
1700};
1701
1711{
1712public:
1714
1715 constexpr static std::string_view XmlNodeName = "beamStemAdjust";
1716};
1717
1728{
1729public:
1731 explicit TablatureNoteMods(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
1732 : NoteDetailsBase(document, partId, shareMode, entnum, inci)
1733 {
1734 }
1735
1738
1739 NoteNumber getNoteId() const override { return noteId; }
1740
1741 constexpr static std::string_view XmlNodeName = "tabAlter";
1743};
1744
1750{
1751public:
1753 explicit TieAlterBase(const DocumentWeakPtr& document, Cmper partId, Base::ShareMode shareMode, EntryNumber entnum, Inci inci)
1754 : NoteDetailsBase(document, partId, shareMode, entnum, inci)
1755 {
1756 }
1757
1763 bool outerLocal{};
1772 bool down{};
1776 bool breakKeyOn{};
1778 bool stPtAdjOn{};
1779 bool enPtAdjOn{};
1784 bool ctlPtAdjOn{};
1785
1786 NoteNumber getNoteId() const override { return noteId; }
1787
1788 bool requireAllFields() const override { return false; }
1790};
1791
1801{
1802public:
1804
1805 constexpr static std::string_view XmlNodeName = "tieAlterEnd";
1807};
1808
1818{
1819public:
1821
1822 constexpr static std::string_view XmlNodeName = "tieAlterStart";
1824};
1825
1835{
1836public:
1838 explicit TupletDef(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
1839 : EntryDetailsBase(document, partId, shareMode, entnum, inci)
1840 {
1841 }
1842
1851
1856 bool alwaysFlat{};
1857 bool fullDura{};
1859 bool avoidStaff{};
1861 bool hidden{};
1868 bool allowHorz{};
1871 bool matchHooks{};
1880
1883
1886
1889
1890 constexpr static std::string_view XmlNodeName = "tupletDef";
1892};
1893
1894} // namespace details
1895} // namespace dom
1896} // namespace entries
Base class to enforce polymorphism across all DOM classes.
Definition BaseClasses.h:83
DocumentPtr getDocument() const
Gets a reference to the Document.
Definition BaseClasses.h:108
Cmper getSourcePartId() const
Gets the source partId for this instance. If an instance is fully shared with the score,...
Definition BaseClasses.h:124
virtual void integrityCheck(const std::shared_ptr< Base > &ptrToThis)
Allows a class to determine if it has been properly contructed by the factory and fix issues that it ...
Definition BaseClasses.h:154
ShareMode
Describes how this instance is shared between part and score.
Definition BaseClasses.h:91
Template pattern for DetailsBase items consisting of an array of a single item.
Definition BaseClasses.h:509
DetailsArray(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, Cmper cmper1, Cmper cmper2)
Constructor function.
Definition BaseClasses.h:515
Base class for all "details" types.
Definition BaseClasses.h:407
Cmper getCmper1() const
Gets the cmper1 key value.
Definition BaseClasses.h:451
Cmper getCmper2() const
Gets the cmper2 key value.
Definition BaseClasses.h:456
Base class for all "details" types that use entnum rather than cmper and cmper.
Definition BaseClasses.h:479
EntryNumber getEntryNumber() const
Gets the entnum key value.
Definition BaseClasses.h:497
Wraps a frame of shared_ptr<const EntryInfo> and an index for per entry access. This class manages ow...
Definition Entries.h:388
Represents the default font settings for a particular element type.
Definition CommonClasses.h:123
Provides optional per-type extension methods for MusxInstanceList.
Definition MusxInstance.h:96
Base class note details. Note details are entry details associated with a note ID.
Definition BaseClasses.h:540
Represents display alterations to an accidental for a specific note.
Definition Details.h:79
Evpu hOffset
Horizontal offset: positive is right. (XML node: <axDisp>)
Definition Details.h:90
NoteNumber getNoteId() const override
Required virtual function that returns the note id.
Definition Details.h:96
bool useOwnFont
Whether to use customFont.
Definition Details.h:93
std::shared_ptr< FontInfo > customFont
Font settings for the accidental (populated from <fontID>, <fontSize>, and <efx>)
Definition Details.h:92
NoteNumber noteId
The ID of the note being altered.
Definition Details.h:87
AccidentalAlterations(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
Constructor.
Definition Details.h:82
Evpu vOffset
Vertical offset: positive is up. (XML node: <ayDisp>)
Definition Details.h:89
char32_t altChar
If non-zero, the character to use for the accidental. (Utf-32 if the font is a Unicode font....
Definition Details.h:91
bool allowVertPos
Whether to use vOffset.
Definition Details.h:94
int percent
The percentage size for the accidental, where 100 is 100%.
Definition Details.h:88
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:98
static const xml::XmlElementArray< AccidentalAlterations > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
Assigns an articulation to an entry.
Definition Details.h:109
ArticulationAssign(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
Constructor function.
Definition Details.h:119
Cmper articDef
The articulation definition ID.
Definition Details.h:122
bool hide
Inverse of "Show" option.
Definition Details.h:129
bool neverStack
Whether the articulation should never stack relative to others.
Definition Details.h:130
int numSlursAvoided
Number of slurs avoided. Used internally by Finale's stacking algorithm.
Definition Details.h:132
bool avoidSlur
Whether the articulation should avoid slurs.
Definition Details.h:131
bool aboveEntry
When overridePlacement is true: whether the articulation is forced above or below the entry.
Definition Details.h:128
Evpu horzOffset
Horizontal offset from the default position.
Definition Details.h:123
bool overridePlacement
Whether the default placement is overridden.
Definition Details.h:127
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:135
static const xml::XmlElementArray< ArticulationAssign > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
Evpu vertOffset
Vertical offset from the default position.
Definition Details.h:125
Evpu vertAdd
Vertical displacement for character copying. (E.g., arpeggiated chord lines)
Definition Details.h:126
Evpu horzAdd
Horizontal displacement for character copying. (E.g., trill lines)
Definition Details.h:124
Contains the baseline offsets for lyrics chorus records.
Definition Details.h:168
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:174
Contains the baseline offsets for lyrics chorus records.
Definition Details.h:182
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:187
Contains the baseline offsets for lyrics verse records.
Definition Details.h:195
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:200
Contains the baseline information for all baseline types.
Definition Details.h:143
Baseline(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, Cmper system, Cmper staff, std::optional< Inci > inci=std::nullopt)
Constructor function.
Definition Details.h:154
Cmper lyricNumber
the text number of the lyric, if this is a lyrics baseline. Otherwise unused and should be zero.
Definition Details.h:158
static const xml::XmlElementArray< Baseline > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
Evpu baselineDisplacement
the displacment of the baseline from default position. (xml node is <basedisp>)
Definition Details.h:157
Beam alteration for downstem primary beams.
Definition Details.h:267
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:279
BeamAlterationsDownStem(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
Constructor.
Definition Details.h:276
Beam alteration for upstem primary beams.
Definition Details.h:289
BeamAlterationsUpStem(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
Constructor.
Definition Details.h:298
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:301
Represents beam alterations applied to a specific entry. This is used to apply additional shaping or ...
Definition Details.h:210
static const xml::XmlElementArray< BeamAlterations > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
bool isActive() const
Returns whether this beam alteration record is active. Its flattenStyle must match the value in optio...
Definition Details.h:250
Edu dura
For secondary beams, specifies the duration corresponding to the secondary beam (16th beam is 256,...
Definition Details.h:238
Evpu rightOffsetY
Vertical adjustment of the beam end. (xml node is <syAdd>)
Definition Details.h:237
FlattenStyle flattenStyle
Beam shaping style (xml node is <context>).
Definition Details.h:239
BeamAlterations(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum, std::optional< Inci > inci=std::nullopt)
Constructor.
Definition Details.h:228
static bool calcIsFeatheredBeamImpl(const EntryInfoPtr &entryInfo, Evpu &outLeftY, Evpu &outRightY)
Implementation of SecondaryBeamAlterationsDownStem::calcIsFeatheredBeam and SecondaryBeamAlterationsU...
Definition Details.cpp:86
Evpu rightOffsetH
Horizontal adjustment of the beam end. (xml node is <sxAdd>)
Definition Details.h:236
Evpu leftOffsetY
Vertical adjustment of the beam start. (xml node is <yAdd>)
Definition Details.h:235
Evpu leftOffsetH
Horizontal adjustment of the beam start. (xml node is <xAdd>)
Definition Details.h:234
Efix calcEffectiveBeamWidth() const
Calculates the effective beam width by returning either the default width or the width override value...
Definition Details.cpp:59
static void calcAllActiveFlags(const DocumentPtr &document)
Used by the factory to set active indicators.
Definition Details.cpp:39
Efix beamWidth
The calcEffectiveBeamWidth method handles this for you.
Definition Details.h:240
Beam extension for downstem beams.
Definition Details.h:342
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:346
Beam extension for upstem beams.
Definition Details.h:354
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:358
Represents both sides of a beam extension. It is attached to the first entry in the beam....
Definition Details.h:312
bool extBeyond8th
Definition Details.h:329
Evpu rightOffset
Right extension offset. (xml node is <x4Disp>)
Definition Details.h:325
unsigned mask
Definition Details.h:326
static const xml::XmlElementArray< BeamExtension > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
BeamExtension(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
Constructor.
Definition Details.h:321
Evpu leftOffset
Left extension offset. (xml node is <x3Disp>)
Definition Details.h:324
Specifies the direction for beam stubs (if they are manually overridden.)
Definition Details.h:370
unsigned mask
Definition Details.h:378
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:385
static const xml::XmlElementArray< BeamStubDirection > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
bool isLeft() const
True if the beam stub(s) point left.
Definition Details.h:383
BeamStubDirection(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
Constructor function.
Definition Details.h:373
Represents a bracket, used in two different contexts:
Definition Details.h:402
static const xml::XmlElementArray< Bracket > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:439
Evpu horzAdjLeft
"Distance from Left Edge of Staff" (xml node is <bracPos>)
Definition Details.h:434
Evpu vertAdjTop
"Vertical Adjust (Top of Bracket)" (xml node is <bracTop>)
Definition Details.h:435
Bracket(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, Cmper cmper1, Cmper cmper2, Inci inci)
Constructor for top-level instances.
Definition Details.h:405
Evpu vertAdjBot
"Vertical Adjust (Bottom of Bracket)" (xml node is <bracBot>)
Definition Details.h:436
Bracket(const DocumentWeakPtr &document)
Constructor for embedded instances.
Definition Details.h:411
BracketStyle style
Bracket style (xml node is <id>)
Definition Details.h:433
BracketStyle
Bracket types.
Definition Details.h:421
@ BracketCurvedHooks
Thick bracket with curved hooks.
@ DeskBracket
Thin bracket with horizontal hook lines.
@ BracketStraightHooks
Thick bracket with straight hooks.
bool showOnSingleStaff
"Show Bracket If Group Contains Only One Staff" (only applies to staff groups: xml node is <onSingle>...
Definition Details.h:437
Represents chord symbol assignment for a staff and measure.
Definition Details.h:451
Edu horzEdu
Edu position in measure.
Definition Details.h:511
Evpu fbHorzOff
Horizontal offset of fretboard (in EVPU)
Definition Details.h:509
bool showFretboard
Show fretboard.
Definition Details.h:491
bool rootLowerCase
Display root in lowercase (minor triad)
Definition Details.h:487
bool playRoot
Playback root.
Definition Details.h:490
bool showRoot
Show root.
Definition Details.h:489
int bassAlter
Bass alteration.
Definition Details.h:495
BassPosition
Bass position options.
Definition Details.h:474
ChordAssign(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, Cmper staffId, Cmper meas, Inci inci)
Constructor.
Definition Details.h:464
int rootScaleNum
Root scale degree: 0–6, where zero is the tonic.
Definition Details.h:485
Evpu fbVertOff
Vertical offset of fretboard (in EVPU)
Definition Details.h:510
bool showAltBass
Show alternate bass.
Definition Details.h:498
MusxInstanceList< others::ChordSuffixElement > getChordSuffix() const
Returns the chord suffix as an array of others::ChordSuffixElement.
Definition Details.cpp:161
Evpu horzOff
Horizontal offset of chord (in EVPU)
Definition Details.h:507
bool showSuffix
Show suffix.
Definition Details.h:492
MusxInstance< others::FretboardGroup > getFretboardGroup() const
Get the others::FretboardGroup instance for this chord assignment. You can use this to get the fret i...
Definition Details.cpp:166
Cmper suffixId
Definition Details.h:480
bool useFretboardFont
Definition Details.h:505
Inci fretboardGroupInci
Definition Details.h:502
bool playFretboard
Playback fretboard.
Definition Details.h:493
Cmper fbStyleId
The others::FretboardStyle ID. (Ignored when useFretboardFont is true.)
Definition Details.h:484
int fbPercent
FretboardDiagram scaling (100 means 100%)
Definition Details.h:513
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:526
int bassScaleNum
Bass scale degree: 0–6, where zero is the tonic.
Definition Details.h:494
Evpu vertOff
Vertical offset of chord (in EVPU)
Definition Details.h:508
int capoValue
Capo value (if useLocalCapo is true)
Definition Details.h:500
bool playAltBass
Playback alternate bass.
Definition Details.h:499
MusxInstance< others::FretboardStyle > getFretboardStyle() const
Returns the others::FretboardStyle instance for this chord assignment.
Definition Details.cpp:175
int chPercent
Chord scaling (100 means 100%)
Definition Details.h:512
int rootAlter
Root alteration.
Definition Details.h:486
bool playSuffix
Playback suffix.
Definition Details.h:488
bool useLocalCapo
Use local capo.
Definition Details.h:501
static const xml::XmlElementArray< ChordAssign > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
bool bassLowerCase
Display bass in lowercase.
Definition Details.h:496
BassPosition bassPosition
Visual position of bass relative to root.
Definition Details.h:497
Defines the octaves in which each clef should display flats in key signatures. Only linear key signat...
Definition Details.h:545
static const xml::XmlElementArray< ClefOctaveFlats > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:551
Defines the octaves in which each clef should display sharps in key signatures.
Definition Details.h:574
static const xml::XmlElementArray< ClefOctaveSharps > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:580
Represents a cross-staff assignment for the note, if any.
Definition Details.h:593
NoteNumber getNoteId() const override
Required virtual function that returns the note id.
Definition Details.h:604
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:606
static const xml::XmlElementArray< CrossStaff > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
CrossStaff(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
Constructor function.
Definition Details.h:596
NoteNumber noteId
The ID of the note being assigned to a different staff (XML node: <noteID>)
Definition Details.h:601
StaffCmper staff
The target staff (XML node: <instrument>)
Definition Details.h:602
Custom stem for downstem context.
Definition Details.h:653
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:657
Represents a custom stem definition (up or down) for an entry. Which stem direction this instance con...
Definition Details.h:619
Evpu yOffset
Optional vertical displacement. (xml node is <ydisp>)
Definition Details.h:633
bool calcIsHiddenStem() const
Calculates if this custom stem record hides the stem. The stem is determined to be hidden if one of t...
Definition Details.cpp:187
static const xml::XmlElementArray< CustomStem > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
Cmper shapeDef
The Cmper of the associated others::ShapeDef. Setting this value to zero hides the stem.
Definition Details.h:631
Evpu xOffset
Optional horizontal displacement. (xml node is <xdisp>)
Definition Details.h:632
CustomStem(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
Constructor.
Definition Details.h:628
Custom stem for upstem context.
Definition Details.h:667
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:671
Represents display offsets and spacing adjustments for augmentation dots on a specific note.
Definition Details.h:683
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:698
NoteNumber noteId
The ID of the note whose dots are adjusted.
Definition Details.h:691
Evpu hOffset
Horizontal offset for the dot (XML: <xadd>)
Definition Details.h:692
Evpu vOffset
Vertical offset for the dot (XML: <yadd>)
Definition Details.h:693
static const xml::XmlElementArray< DotAlterations > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
Evpu interdotSpacing
Additional spacing between dots (XML: <posIncr>)
Definition Details.h:694
DotAlterations(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
Constructor.
Definition Details.h:686
NoteNumber getNoteId() const override
Required virtual function that returns the note id.
Definition Details.h:696
Specifies a custom size for an entry. It scales the entire entry, including the stem and all notehead...
Definition Details.h:711
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:726
int percent
The note/chord size as a percent (e.g., 65 for 65%).
Definition Details.h:723
static const xml::XmlElementArray< EntrySize > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
EntrySize(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
Constructor.
Definition Details.h:720
Represents a barre (spanning multiple strings).
Definition Details.h:787
int endString
Ending 1-based string number.
Definition Details.h:791
int startString
Starting 1-based string number.
Definition Details.h:790
static const xml::XmlElementArray< Barre > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
int fret
0-based fret number, where 0 signifies the open string. (Finale allows nut barres....
Definition Details.h:789
Represents a single fretboard cell (string/fret position).
Definition Details.h:772
Shape shape
Cell shape.
Definition Details.h:776
int fingerNum
Finger number 0..5, where 0 means there is no finger number and 5 means T (thumb).
Definition Details.h:777
int fret
0-based fret number, where 0 signifies the open string.
Definition Details.h:775
static const xml::XmlElementArray< Cell > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
FretboardDiagram diagram for chord symbols.
Definition Details.h:742
int fretboardNum
FretboardDiagram number: the starting fret of the fretboard diagram (xml node <fretNum>).
Definition Details.h:797
bool showNum
Show fretboard number.
Definition Details.h:799
std::vector< std::shared_ptr< Barre > > barres
Array of fretboard barres.
Definition Details.h:804
static const xml::XmlElementArray< FretboardDiagram > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
int numFretCells
Number of fret cells (xml node <numFretCells>).
Definition Details.h:800
Shape
Shape type for a fretboard cell.
Definition Details.h:759
@ None
No explicit shape. This is the default value and may not occur in the xml.
@ Custom
Custom symbol. By default this is an open diamond signifying a harmonic.
bool lock
Lock flag (xml node <lock>).
Definition Details.h:798
void integrityCheck(const std::shared_ptr< Base > &ptrToThis) override
Allows a class to determine if it has been properly contructed by the factory and fix issues that it ...
Definition Details.h:806
int numFretBarres
Number of fret barres (xml node <numFretBarres>).
Definition Details.h:801
FretboardDiagram(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, Cmper cmper1, Cmper cmper2)
Constructor function.
Definition Details.h:747
int numFrets
Number of frets.
Definition Details.h:796
static constexpr std::string_view XmlNodeName
XML node name for this type.
Definition Details.h:823
std::vector< std::shared_ptr< Cell > > cells
Array of fretboard cells.
Definition Details.h:803
Represents the attributes of a Finale frame holder.
Definition Details.h:835
StaffCmper getStaff() const
returns the staffId (staff) number for this GFrameHold
Definition Details.h:858
GFrameHold(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, Cmper staffId, Cmper meas)
Constructor function.
Definition Details.h:845
std::optional< ClefIndex > clefId
clef index when there are no mid-measure clef changes. (xml tag is <clefID>).
Definition Details.h:849
int clefPercent
Clef percent where 100 means 100%.
Definition Details.h:854
ShowClefMode showClefMode
"Show Clef" mode. (xml tag is <clefMode>)
Definition Details.h:851
bool mirrorFrame
Indicates this is a mirror frame. (Not used after Finale 14.5.)
Definition Details.h:852
static const xml::XmlElementArray< GFrameHold > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
MeasCmper getMeasure() const
returns the measure number for this GFrameHold
Definition Details.h:861
bool calcContainsMusic() const
Returns true if the GFrameHold contains any layer frames.
Definition Details.h:870
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:886
bool calcIsMultiLayer() const
Returns true if the GFrameHold instance has more than one layer.
Definition Details.h:864
bool clefAfterBarline
"Place Clef After Barline"
Definition Details.h:853
Cmper clefListId
The clef list ID when there are mid-measure clef changes, if non-zero. (xml tag is <clefListID>).
Definition Details.h:850
std::vector< Cmper > frames
others::Frame values for layers 1..4 (layer indices 0..3) if non-zero
Definition Details.h:855
void integrityCheck(const std::shared_ptr< Base > &ptrToThis) override
Allows a class to determine if it has been properly contructed by the factory and fix issues that it ...
Definition Details.h:875
Represents independent time and key signature overrides for a staff.
Definition Details.h:898
bool hasTime
If true, this item contains an independent time signature.
Definition Details.h:929
MusxInstance< TimeSignature > createTimeSignature() const
Create a shared pointer to an instance of the TimeSignature for this instance.
Definition Details.cpp:201
Cmper divBeat
Time signature denominator in Edu or a Cmper to a composite record.
Definition Details.h:919
bool displayAltDenTsig
If true, dispDivBeat is the Cmper of a others::TimeCompositeLower record.
Definition Details.h:924
Cmper dispDivBeat
Display time signature denominator in Edu or a Cmper to a composite record.
Definition Details.h:921
bool altNumTsig
If true, beats is the Cmper of a others::TimeCompositeUpper record.
Definition Details.h:925
bool hasKey
If true, this item contains an independent key signature.
Definition Details.h:915
std::shared_ptr< KeySignature > keySig
The key signature value if present. (xml tag is <keySig>/<key>)
Definition Details.h:914
IndependentStaffDetails(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, Cmper staffId, Cmper meas)
Constructor function.
Definition Details.h:908
bool altDenTsig
If true, divBeat is the Cmper of a others::TimeCompositeLower record.
Definition Details.h:926
static const xml::XmlElementArray< IndependentStaffDetails > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
bool hasDispTime
If true, the display time signature is present.
Definition Details.h:928
void integrityCheck(const std::shared_ptr< Base > &ptrToThis) override
Allows a class to determine if it has been properly contructed by the factory and fix issues that it ...
Definition Details.h:938
bool displayAbbrvTime
If true, the display time signature is abbreviated.
Definition Details.h:927
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:946
Cmper dispBeats
Display time signature numerator or a Cmper to a composite record.
Definition Details.h:920
bool displayAltNumTsig
If true, dispBeats is the Cmper of a others::TimeCompositeUpper record.
Definition Details.h:923
MusxInstance< TimeSignature > createDisplayTimeSignature() const
Create a shared pointer to an instance of the display TimeSignature for this measure and staff.
Definition Details.cpp:206
Cmper beats
Time signature numerator or a Cmper to a composite record.
Definition Details.h:918
Represents a single element in a Finale accidental symbol list.
Definition Details.h:957
void integrityCheck(const std::shared_ptr< Base > &ptrToThis) override
Allows a class to determine if it has been properly contructed by the factory and fix issues that it ...
Definition Details.h:971
int getAlterationValue() const
Returns the alteration value that this symbol corresponds with.
Definition Details.h:967
KeySymbolListElement(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, Cmper cmper1, Cmper cmper2)
Constructor function.
Definition Details.h:960
static const xml::XmlElementArray< KeySymbolListElement > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:980
std::string accidentalString
Definition Details.h:963
Contains the syllable assignments for lyrics chorus blocks.
Definition Details.h:1029
util::EnigmaParsingContext getRawTextCtx() const
Return an Enigma parsing context for the associated lyrics text block.
Definition Details.h:1036
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:1040
Contains the syllable assignments for lyrics section blocks.
Definition Details.h:1050
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:1061
util::EnigmaParsingContext getRawTextCtx() const
Return an Enigma parsing context for the associated lyrics text block.
Definition Details.h:1057
Contains the syllable assignments for lyrics verse blocks.
Definition Details.h:1071
util::EnigmaParsingContext getRawTextCtx() const
Return an Enigma parsing context for the associated lyrics text block.
Definition Details.h:1078
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:1082
Contains assignment data for a lyric assignment (a single syllable)
Definition Details.h:989
Evpu wext
Definition Details.h:1014
LyricAssign(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
Constructor function.
Definition Details.h:1006
static const xml::XmlElementArray< LyricAssign > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
Cmper lyricNumber
the text number of the lyric.
Definition Details.h:1009
unsigned syllable
the 1-based syllable number. Subtract 1 to get the index. (xml node is <syll>)
Definition Details.h:1010
Evpu floatingHorzOff
This appears to have something to do with note spacing. It may simply be a cache that Finale changes ...
Definition Details.h:1013
Evpu horzOffset
horizontal offset from default position. (xml node is <horzOff>)
Definition Details.h:1011
Evpu vertOffset
horizontal offset from default position. (xml node is <vertOff>)
Definition Details.h:1012
bool displayVerseNum
If set, the text block number displays to the left of the syllable. (E.g., when numbering verses in a...
Definition Details.h:1017
util::EnigmaParsingContext getRawTextCtx() const
Return an Enigma parsing context for the associated lyrics text block.
Specifies lyric alignment and justification for a single entry. This affects all lyric assignments on...
Definition Details.h:1093
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:1113
std::optional< AlignJustify > align
Override default alignment if present. (xml node is <align>)
Definition Details.h:1110
static const xml::XmlElementArray< LyricEntryInfo > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
LyricEntryInfo(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum, std::optional< Inci > inci=std::nullopt)
Constructor.
Definition Details.h:1106
std::optional< AlignJustify > justify
Override default justification if present. (xml node is <justify>)
Definition Details.h:1109
Per-staff/per-measure overrides for the position and appearance of a measure number.
Definition Details.h:1124
ForceVisibility
Force-visibility options for the measure number at this location.
Definition Details.h:1145
@ Show
Force the number to display (xml text value: "force")
@ Hide
Force the number to be hidden (xml text value: "hide")
@ None
No override (default; node may be omitted in XML)
bool useEnclosure
Whether to use an enclosure for this number. (xml node is <useEncl>)
Definition Details.h:1156
Evpu xOffset
Horizontal offset for the measure number. (xml node is <x1add>)
Definition Details.h:1152
Evpu xOffset2
Horizontal offset for the measure number range under a multimeasure rest (Page View only)....
Definition Details.h:1154
MeasureNumberIndividualPositioning(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, Cmper staffId, Cmper meas, Inci inci)
Constructor.
Definition Details.h:1135
static const xml::XmlElementArray< MeasureNumberIndividualPositioning > & xmlMappingArray()
Required for musx::
ForceVisibility forceVisibility
Force-visibility behavior. (xml node is <forceHide>)
Definition Details.h:1155
Cmper measNumRegion
The Cmper of the others::MeasureNumberRegion that this override applies to. (xml node is <region>)
Definition Details.h:1151
std::shared_ptr< others::Enclosure > enclosure
Optional enclosure settings. (xml node is <encl>)
Definition Details.h:1157
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:1159
Evpu yOffset
Vertical offset for the measure number. (xml node is <y1add>)
Definition Details.h:1153
Represents a text block assignment for a staff and measure.
Definition Details.h:1179
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:1208
util::EnigmaParsingContext getRawTextCtx(Cmper forPartId) const
Gets the raw text for this assignment, or nullptr if none.
Definition Details.cpp:244
Evpu yDisp
Vertical displacement in Evpu (xml node is <ydisp>)
Definition Details.h:1199
Evpu xDispEvpu
Negative horizontal displacement in Evpu, when xDispEdu is zero. (xml node is <xdispEvpu>)
Definition Details.h:1198
MusxInstance< others::TextBlock > getTextBlock() const
Gets the TextBlock for this assignment, or nullptr if none.
Definition Details.cpp:239
MeasureTextAssign(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, Cmper staffId, Cmper meas, Inci inci)
Constructor.
Definition Details.h:1190
Cmper block
Text block ID.
Definition Details.h:1195
bool hidden
Indicates the text appears only on screen (xml node is <postIt/>)
Definition Details.h:1200
static const xml::XmlElementArray< MeasureTextAssign > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
Edu xDispEdu
Definition Details.h:1196
Represents graphical and notational alterations applied to a note.
Definition Details.h:1221
bool allowVertPos
Whether vertical positioning is allowed .
Definition Details.h:1235
int percent
Size percentage for the notehead. (A value of 100 means 100%.)
Definition Details.h:1230
char32_t altNhead
Alternate notehead character.
Definition Details.h:1232
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:1242
NoteAlterations(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
Constructor function.
Definition Details.h:1224
Evpu nydisp
Vertical notehead offset.
Definition Details.h:1236
std::shared_ptr< FontInfo > customFont
Custom font info (consolidates: <fontID>, <fontSize>, <efx>)
Definition Details.h:1234
bool useOwnFont
Whether to use the custom font.
Definition Details.h:1233
Evpu nxdisp
Horizontal notehead offset.
Definition Details.h:1231
NoteNumber getNoteId() const override
Required virtual function that returns the note id.
Definition Details.h:1240
bool enharmonic
Definition Details.h:1237
NoteNumber noteId
The ID of the note being altered. (xml node is <noteID>)
Definition Details.h:1229
static const xml::XmlElementArray< NoteAlterations > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
Represents a percussion note code override for a single note.
Definition Details.h:1255
NoteNumber getNoteId() const override
Required virtual function that returns the note id.
Definition Details.h:1266
NoteNumber noteId
The ID of the note being assigned a code.
Definition Details.h:1263
PercussionNoteTypeId noteCode
The percussion note code. Use this to search the incis of the percussion map for the specific note.
Definition Details.h:1264
static const xml::XmlElementArray< PercussionNoteCode > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
PercussionNoteCode(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
Constructor function.
Definition Details.h:1258
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:1268
Beam alteration for downstem secondary beams.
Definition Details.h:1279
static bool calcIsFeatheredBeam(const EntryInfoPtr &entryInfo, Evpu &outLeftY, Evpu &outRightY)
Calculates if the input entry starts a feathered beam and returns information about it.
Definition Details.h:1299
SecondaryBeamAlterationsDownStem(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
Constructor.
Definition Details.h:1290
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:1302
Beam alteration for downstem secondary beams.
Definition Details.h:1312
static bool calcIsFeatheredBeam(const EntryInfoPtr &entryInfo, Evpu &outLeftY, Evpu &outRightY)
Calculates if the input entry starts a feathered beam and returns information about it.
Definition Details.h:1332
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:1335
SecondaryBeamAlterationsUpStem(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
Constructor.
Definition Details.h:1323
Specifies which secondary beams break and restart on the associated entry.
Definition Details.h:1347
SecondaryBeamBreak(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
Constructor function.
Definition Details.h:1350
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:1391
void integrityCheck(const std::shared_ptr< Base > &ptrToThis) override
Allows a class to determine if it has been properly contructed by the factory and fix issues that it ...
Definition Details.h:1378
BeamNumber calcLowestBreak() const
Calculates the lowest (largest note-value) beam specified for a secondary beam break.
Definition Details.h:1364
bool breakThrough
True if the beam should be broken through to the largest specified beam value.
Definition Details.h:1356
unsigned mask
Composite mask of beam breaks, derived from <do16th> through <do4096th> tags.
Definition Details.h:1355
static const xml::XmlElementArray< SecondaryBeamBreak > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
Embedded shape record for a single index in noteShapes.
Definition Details.h:1417
char32_t quarter
Filled (quarter) notehead symbol (xml nodename is <q>).
Definition Details.h:1422
char32_t whole
Whole notehead symbol (xml nodename is <w>).
Definition Details.h:1420
static const xml::XmlElementArray< NoteShapes > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
char32_t doubleWhole
Double-whole notehead symbol (xml nodename is <d>).
Definition Details.h:1419
char32_t half
Half notehead symbol (xml nodename is <h>).
Definition Details.h:1421
Shape Note settings for staves and staffs style.
Definition Details.h:1405
void integrityCheck(const std::shared_ptr< Base > &ptrToThis) override
Allows a class to determine if it has been properly contructed by the factory and fix issues that it ...
Definition Details.h:1431
ShapeNoteBase(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, Cmper cmper1, Cmper cmper2)
Constructor function.
Definition Details.h:1409
std::vector< std::shared_ptr< NoteShapes > > noteShapes
Notehead shapes (only the first seven elements are used).
Definition Details.h:1427
bool arrangedByPitch
Definition Details.h:1428
static const xml::XmlElementArray< ShapeNoteBase > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
Shape Note settings for staff styles.
Definition Details.h:1470
static constexpr std::string_view XmlNodeName
XML node name for this type.
Definition Details.h:1474
Shape Note settings for staves.
Definition Details.h:1455
static constexpr std::string_view XmlNodeName
XML node name for this type.
Definition Details.h:1459
Provides run-time information about Staff Groups within a system or list of others::StaffUsed.
Definition Details.h:1606
std::optional< size_t > startSlot
the 0-based start slot (index) of the group in the system staves.
Definition Details.h:1608
std::optional< size_t > endSlot
the 0-based end slot (index) of the group in the system staves.
Definition Details.h:1609
std::optional< size_t > numStaves() const
The number of staves in the group for the systemStaves.
Definition Details.h:1620
MusxInstanceList< others::StaffUsed > systemStaves
the system staves referred to by startSlot and endSlot
Definition Details.h:1611
MusxInstance< StaffGroup > group
the StaffGroup record for the group.
Definition Details.h:1610
void iterateStaves(MeasCmper measId, Edu eduPosition, std::function< bool(const MusxInstance< others::StaffComposite > &)> iterator) const
Iterates the staves in the group in order according to systemStaves.
Definition Details.cpp:323
static std::vector< StaffGroupInfo > getGroupsAtMeasure(MeasCmper measureId, Cmper linkedPartId, const MusxInstanceList< others::StaffUsed > &systemStaves)
Creates a vector of StaffGroupInfo instances for the measure, part, and system staves.
Definition Details.cpp:343
Represents the attributes of a Finale staff group that brackets staves.
Definition Details.h:1483
AlignJustify abbrvNameJustify
Abbreviated name justification (xml node is <abbrvJustify>)
Definition Details.h:1535
bool abbrvNameExpand
"Expand Single Word" for abbreviated name (xml node is <abbrvExpand>)
Definition Details.h:1547
Cmper multiStaffGroupId
Definition Details.h:1550
static const xml::XmlElementArray< StaffGroup > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
bool fullNameExpand
"Expand Single Word" for full name (xml node is <fullExpand>)
Definition Details.h:1546
bool ownBarline
"Use Alternate Group Barline"
Definition Details.h:1537
int abbrvNameYadj
Vertical adjustment for abbreviated name (xml node is <abbrvYadj>)
Definition Details.h:1543
DrawBarlineStyle
Enum for how to draw group barlines.
Definition Details.h:1507
@ Mensurstriche
Draw barlines between staves (xml value is "Mensurstriche" with capitalization)
@ ThroughStaves
Draw barlines through staves (xml value is "group")
@ OnlyOnStaves
Default value (may not appear in xml)
std::string getAbbreviatedInstrumentName(util::EnigmaString::AccidentalStyle accidentalStyle=util::EnigmaString::AccidentalStyle::Ascii) const
Returns the abbreviated instrument name for this group without Enigma tags and with autonumbering (if...
Definition Details.cpp:289
bool isAllMeasures() const
Returns true if this group spans all measures.
Definition Details.h:1581
Cmper abbrvNameId
Abbreviated name TextBlock cmper (xml node is <abbrvID>)
Definition Details.h:1541
StaffCmper startInst
Starting staff ID.
Definition Details.h:1525
int fullNameXadj
Horizontal adjustment for full name (xml node is <fullXadj>)
Definition Details.h:1530
std::shared_ptr< Bracket > bracket
Bracket Options. The factory guarantees this value to exist.
Definition Details.h:1532
std::string getAbbreviatedName(util::EnigmaString::AccidentalStyle accidentalStyle=util::EnigmaString::AccidentalStyle::Ascii) const
Get the abbreviated staff name without Enigma tags.
Definition Details.cpp:263
AlignJustify fullNameJustify
Full name justification (xml node is <fullJustify>)
Definition Details.h:1534
DrawBarlineStyle drawBarlines
"Draw Barlines" option (xml node is <groupBarlineStyle>)
Definition Details.h:1536
AlignJustify abbrvNameAlign
Abbreviated name horizontal alignment (xml node is <abbrvHAlign>)
Definition Details.h:1545
std::unordered_set< StaffCmper > staves
Calculated list of staves in the group.
Definition Details.h:1555
int fullNameYadj
Vertical adjustment for full name (xml node is <fullYadj>)
Definition Details.h:1531
HideStaves hideStaves
"When Hiding Empty Staves" option (xml node is <optimize>)
Definition Details.h:1548
BarlineType barlineType
Group barline type (xml node is <barline>)
Definition Details.h:1533
AlignJustify fullNameAlign
Full name horizontal alignment (xml node is <fullHAlign>)
Definition Details.h:1544
Cmper fullNameId
Full name TextBlock cmper (xml node is <fullID>)
Definition Details.h:1529
std::string getFullInstrumentName(util::EnigmaString::AccidentalStyle accidentalStyle=util::EnigmaString::AccidentalStyle::Ascii) const
Returns the full instrument name for this group without Enigma tags and with autonumbering (if any).
Definition Details.cpp:279
StaffGroup(const DocumentWeakPtr &document, Cmper partId, Base::ShareMode shareMode, Cmper cmper1, Cmper cmper2)
Constructor.
Definition Details.h:1493
StaffCmper endInst
Ending staff ID.
Definition Details.h:1526
static constexpr std::string_view XmlNodeName
XML node name for this type.
Definition Details.h:1597
void integrityCheck(const std::shared_ptr< Base > &ptrToThis) override
Allows a class to determine if it has been properly contructed by the factory and fix issues that it ...
Definition Details.h:1584
MeasCmper startMeas
Starting measure number.
Definition Details.h:1527
std::string getFullName(util::EnigmaString::AccidentalStyle accidentalStyle=util::EnigmaString::AccidentalStyle::Ascii) const
Get the full staff name without Enigma tags.
Definition Details.cpp:258
MusxInstance< others::MultiStaffInstrumentGroup > getMultiStaffInstGroup() const
Returns the others::MultiStaffInstrumentGroup for this group if it is part of one....
Definition Details.cpp:268
MeasCmper endMeas
Ending measure number.
Definition Details.h:1528
bool hideName
Inverse of "Show Group Name".
Definition Details.h:1540
bool fullNameIndivPos
Indicates if full name has individual position (xml node is <fullIndivPos>)
Definition Details.h:1538
bool abbrvNameIndivPos
Indicates if abbreviated name has individual position (xml node is <abbrvIndivPos>)
Definition Details.h:1539
int abbrvNameXadj
Horizontal adjustment for abbreviated name (xml node is <abbrvXadj>)
Definition Details.h:1542
HideStaves
Enum for optimization options.
Definition Details.h:1518
@ AsGroup
Hide staves only if all staves are empty.
@ Normally
Hide staves as if there were no StaffGroup (this is the default and may not appear in the xml)
@ None
Never hide the staves in this StaffGroup.
Represents a per-staff-size override for a specific staff in a system.
Definition Details.h:1651
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:1672
static const xml::XmlElementArray< StaffSize > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
util::Fraction calcStaffScaling() const
Calculate the effect staff scaling.
Definition Details.h:1669
StaffSize(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, Cmper system, Cmper staffId)
Constructor.
Definition Details.h:1661
int staffPercent
The staff size percentage override. (A value of 100 means 100%, i.e, no staff scaling....
Definition Details.h:1666
Specifies horizontal and vertical adjustments for stems under beam.
Definition Details.h:1711
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:1715
Specifies horizontal and vertical stem adjustments for upstem and downstem contexts.
Definition Details.h:1685
Evpu upVertAdjust
Vertical adjustment for upstem context (positive is up).
Definition Details.h:1693
Evpu downHorzAdjust
Horizontal adjustment for downstem context (positive is right).
Definition Details.h:1696
Evpu downVertAdjust
Vertical adjustment for downstem context (positive is up).
Definition Details.h:1694
static const xml::XmlElementArray< StemAlterations > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
Evpu upHorzAdjust
Horizontal adjustment for upstem context (positive is right).
Definition Details.h:1695
StemAlterations(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
Constructor function.
Definition Details.h:1688
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:1698
Specifies the TAB string a note appears on. Finale automatically figures out the fret number from the...
Definition Details.h:1728
TablatureNoteMods(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
Constructor function.
Definition Details.h:1731
NoteNumber getNoteId() const override
Required virtual function that returns the note id.
Definition Details.h:1739
static const xml::XmlElementArray< TablatureNoteMods > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:1741
NoteNumber noteId
The ID of the tablature note being modified. (xml node is <noteID>)
Definition Details.h:1736
int stringNumber
The string number on which the note is played.
Definition Details.h:1737
Base class for tie alteration properties. (Used for both ties and tie ends.)
Definition Details.h:1750
Evpu yEnd
Vertical end position of the tie.
Definition Details.h:1762
NoteNumber noteId
Note ID associated with the tie alteration. (xml node is <noteID>)
Definition Details.h:1758
bool outerLocal
Local setting for "Outer Tie".
Definition Details.h:1763
Evpu xStart
Horizontal start position of the tie.
Definition Details.h:1759
Evpu height1
Height of the first control point.
Definition Details.h:1781
NoteNumber getNoteId() const override
Required virtual function that returns the note id.
Definition Details.h:1786
bool afterMultiDotsLocal
Local setting for "After Multiple Dots".
Definition Details.h:1766
bool shiftForSecondsOn
Enable "Shift for Seconds".
Definition Details.h:1769
Evpu height2
Height of the second control point.
Definition Details.h:1783
TieAlterBase(const DocumentWeakPtr &document, Cmper partId, Base::ShareMode shareMode, EntryNumber entnum, Inci inci)
Constructor function.
Definition Details.h:1753
Evpu insetRatio1
Inset ratio for the first control point.
Definition Details.h:1780
bool enPtAdjOn
Enable end point adjustment.
Definition Details.h:1779
bool shiftForSecondsLocal
Local setting for "Shift for Seconds".
Definition Details.h:1768
bool afterSingleDotOn
Enable "After Single Dot".
Definition Details.h:1765
bool afterMultiDotsOn
Enable "After Multiple Dots".
Definition Details.h:1767
Evpu insetRatio2
Inset ratio for the second control point.
Definition Details.h:1782
bool breakKeyLocal
Local setting for "Break at Key Signature".
Definition Details.h:1775
bool breakKeyOn
Enable "Break at Key Signature".
Definition Details.h:1776
bool down
Downward tie. Only applicable if freezeDirection is true. (False freezes the tie up....
Definition Details.h:1772
bool beforeSingleAcciOn
Enable "Before Single Accidental".
Definition Details.h:1771
bool stPtAdjOn
Enable start point adjustment.
Definition Details.h:1778
static const xml::XmlElementArray< TieAlterBase > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
bool beforeSingleAcciLocal
Local setting for "Before Single Accidental".
Definition Details.h:1770
Evpu xEnd
Horizontal end position of the tie.
Definition Details.h:1760
bool ctlPtAdjOn
Enable control point adjustment.
Definition Details.h:1784
bool breakTimeLocal
Local setting for "Break at Time Signature".
Definition Details.h:1773
bool freezeDirection
Freeze tie direction. (xml node is <freeze>)
Definition Details.h:1777
Evpu yStart
Vertical start position of the tie.
Definition Details.h:1761
bool afterSingleDotLocal
Local setting for "After Single Dot".
Definition Details.h:1764
bool breakTimeOn
Enable "Break at Time Signature".
Definition Details.h:1774
bool requireAllFields() const override
Unless we decide to figure out connection types, this will stay here.
Definition Details.h:1788
Alterations for tie ends.
Definition Details.h:1801
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:1805
static const xml::XmlElementArray< TieAlterEnd > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
Alterations for tie starts. (Tie starts are normal ties.)
Definition Details.h:1818
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:1822
static const xml::XmlElementArray< TieAlterStart > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
Options controlling the appearance of tuplets.
Definition Details.h:1835
bool hidden
Inverse of "Show".
Definition Details.h:1861
util::Fraction calcRatio() const
return the tuplet ratio (reference / display)
Definition Details.h:1888
util::Fraction calcDisplayDuration() const
return the display duration as a util::Fraction of a whole note
Definition Details.h:1885
Evpu tupOffX
Horizontal offset.
Definition Details.h:1862
Evpu rightHookLen
Length of the right hook in the tuplet bracket. (This value is sign-reversed in the Finale UI....
Definition Details.h:1877
Evpu brackOffY
Vertical offset for brackets.
Definition Details.h:1865
BracketStyle brackStyle
Bracket style.
Definition Details.h:1873
bool avoidStaff
"Avoid Staff"
Definition Details.h:1859
AutoBracketStyle autoBracketStyle
Autobracket style.
Definition Details.h:1860
bool alwaysFlat
"Always Flat" (xml node is <flat>)
Definition Details.h:1856
bool fullDura
"Bracket Full Duration"
Definition Details.h:1857
bool allowHorz
"Allow Horizontal Drag"
Definition Details.h:1868
int referenceNumber
The number of notes "in the time of" (xml node is <refNum>)
Definition Details.h:1854
Evpu rightHookExt
Extension of the right hook beyond the tuplet bracket.
Definition Details.h:1878
Evpu leftHookExt
Extension of the left hook beyond the tuplet bracket.
Definition Details.h:1876
bool ignoreHorzNumOffset
"Ignore Horizontal Number Offset" (xml node is <ignoreGlOffs>)
Definition Details.h:1869
TupletDef(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
Constructor function.
Definition Details.h:1838
util::Fraction calcReferenceDuration() const
return the reference duration as a util::Fraction of a whole note
Definition Details.h:1882
bool smartTuplet
"Engraver Tuplets"
Definition Details.h:1874
Edu displayDuration
The duration of each note to display (xml node is <symbolicDur>)
Definition Details.h:1853
Evpu tupOffY
Vertical.
Definition Details.h:1863
NumberStyle numStyle
Number style.
Definition Details.h:1866
static const xml::XmlElementArray< TupletDef > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
Evpu brackOffX
Horizontal offset for brackets.
Definition Details.h:1864
Evpu manualSlopeAdj
"Manual Slope Adjustment" in Evpu. (xml node is <slope>)
Definition Details.h:1879
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:1890
bool breakBracket
"Break Slur or Bracket"
Definition Details.h:1870
int displayNumber
The number of notes to display (xml node is <symbolicNum>)
Definition Details.h:1852
bool metricCenter
"Center Number Using Duration"
Definition Details.h:1858
bool useBottomNote
"Use Bottom Note" (xml node is <noteBelow>)
Definition Details.h:1872
bool matchHooks
"Match Length of Hooks"
Definition Details.h:1871
PositioningStyle posStyle
Positioning style.
Definition Details.h:1867
Edu referenceDuration
The duration of eacn note "in the time of" (xml node is <refDur>)
Definition Details.h:1855
Evpu leftHookLen
Length of the left hook in the tuplet bracket. (This value is sign-reversed in the Finale UI....
Definition Details.h:1875
FlattenStyle
Beaming style choices for when to flatten beams.
Definition Options.h:177
AlignJustify
Horizontal and vertical alignment/justification values.
Definition Options.h:605
BracketStyle
Bracket style options.
Definition Options.h:1825
PositioningStyle
Positioning style options.
Definition Options.h:1812
AutoBracketStyle
Auto-bracket style options.
Definition Options.h:1784
NumberStyle
Number style options.
Definition Options.h:1799
BarlineType
Barline type for left and right barlines.
Definition Others.h:1110
AlignJustify
Alignment and justification options for staff and group names.
Definition CommonClasses.h:654
Contains chorus text for lyrics.
Definition Texts.h:152
Contains section text for lyrics.
Definition Texts.h:167
Contains verse text for lyrics.
Definition Texts.h:137
Wrapper class for interpreting and rendering Enigma-style strings with insert handling.
Definition EnigmaString.h:415
AccidentalStyle
Enumeration to specify the type of accidental substitution representation.
Definition EnigmaString.h:191
@ Ascii
Use ASCII substitutions for accidentals.
A class to represent fractions with integer m_numerator and m_denominator, automatically reduced to s...
Definition Fraction.h:38
static Fraction fromPercent(int percent)
Constructs a Fraction from a percent (where 100 is 100%)
Definition Fraction.h:89
@ Verbose
Informational messages that should only displayed when verbose logging is requested.
static void log(LogLevel level, const std::string &message)
Logs a message with a specific severity level.
Definition Logger.h:87
constexpr int STANDARD_DIATONIC_STEPS
currently this is the only supported number of diatonic steps.
Definition music_theory.hpp:45
constexpr int MAX_ALTERATIONS
Maximum absolute value for chromatic alterations supported in Finale.
Definition Fundamentals.h:78
ShowClefMode
Enum representing the clef display mode for a frame.
Definition CommonClasses.h:109
uint16_t PercussionNoteTypeId
multiple times in one layout. The rest are the "pure" note type. See percussion::PercussionNoteType.
Definition Fundamentals.h:74
int16_t MeasCmper
Enigma meas Cmper (may be negative when not applicable)
Definition Fundamentals.h:64
int32_t Efix
EFIX value (64 per EVPU, 64*288=18432 per inch)
Definition Fundamentals.h:60
std::shared_ptr< const T > MusxInstance
Defines the type of a musx instance stored in a pool.
Definition MusxInstance.h:35
constexpr Cmper SCORE_PARTID
The part id of the score.
Definition Fundamentals.h:79
int16_t Inci
Enigma "incident" key type.
Definition Fundamentals.h:56
int32_t Evpu
EVPU value (288 per inch)
Definition Fundamentals.h:57
constexpr int MAX_LAYERS
The maximum number of music layers in a Finale document.
Definition Fundamentals.h:77
uint16_t Cmper
Enigma "comperator" key type.
Definition Fundamentals.h:55
int32_t Edu
"Enigma Durational Units" value (1024 per quarter note)
Definition Fundamentals.h:61
std::weak_ptr< Document > DocumentWeakPtr
Shared weak Document pointer.
Definition BaseClasses.h:57
int32_t EntryNumber
Entry identifier.
Definition Fundamentals.h:69
uint16_t NoteNumber
Note identifier.
Definition Fundamentals.h:70
std::shared_ptr< Document > DocumentPtr
Shared Document pointer.
Definition BaseClasses.h:55
int16_t StaffCmper
Enigma staff (staffId) Cmper (may be negative when not applicable)
Definition Fundamentals.h:65
unsigned int BeamNumber
A number where 1 corresponds to the primary (8th note) beam, 2 the 16th beam, 3 the 32nd beam,...
Definition Fundamentals.h:72
std::vector< XmlElementDescriptor< T > > XmlElementArray
an array type for XmlElementDescriptor instances.
Definition XmlInterface.h:127
object model for musx file (enigmaxml)
Definition BaseClasses.h:36