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 "musx/util/EnigmaString.h"
30#include "BaseClasses.h"
31#include "CommonClasses.h"
32#include "Options.h"
33#include "Others.h"
34 // do not add other dom class dependencies. Use Implementations.h for implementations that need total class access.
35
36namespace musx {
37namespace dom {
38
39class EntryInfoPtr;
40class EntryFrame;
41class EntryInfo;
42
43namespace others {
44class InstrumentUsed;
45class Measure;
46class MultiStaffInstrumentGroup;
47} // namespace others
48
49namespace texts {
50 class LyricsChorus;
51 class LyricsSection;
52 class LyricsVerse;
53} // namespace others
54
59namespace details {
60
70{
71public:
73 explicit AccidentalAlterations(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
74 : NoteDetailsBase(document, partId, shareMode, entnum, inci), customFont(std::make_shared<FontInfo>(document))
75 {
76 }
77
79 int percent{};
82 char32_t altChar{};
83 std::shared_ptr<FontInfo> customFont;
84 bool useOwnFont{};
85 bool allowVertPos{};
86
87 NoteNumber getNoteId() const override { return noteId; }
88
89 constexpr static std::string_view XmlNodeName = "acciAlter";
91};
92
100{
101public:
110 explicit ArticulationAssign(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
111 : EntryDetailsBase(document, partId, shareMode, entnum, inci) {}
112
119 bool aboveEntry{};
120 bool hide{};
121 bool neverStack{};
122 bool avoidSlur{};
124
126 constexpr static std::string_view XmlNodeName = "articAssign";
127};
128
133class Baseline : public DetailsBase
134{
135public:
145 explicit Baseline(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, Cmper system, Cmper staff, std::optional<Inci> inci = std::nullopt)
146 : DetailsBase(document, partId, shareMode, system, staff, inci) {}
147
150
152};
153
159{
160public:
161 using Baseline::Baseline;
162
163
165 constexpr static std::string_view XmlNodeName = "baselinesLyricsChorus";
166};
167
173{
174public:
175 using Baseline::Baseline;
176
178 constexpr static std::string_view XmlNodeName = "baselinesLyricsSection";
179};
180
186{
187public:
188 using Baseline::Baseline;
189
191 constexpr static std::string_view XmlNodeName = "baselinesLyricsVerse";
192};
193
201{
202private:
203 bool m_active = true; // this value is set by the factory.
204
205protected:
207 template <typename SecondaryBeamType>
208 static bool calcIsFeatheredBeamImpl(const EntryInfoPtr& entryInfo, Evpu& outLeftY, Evpu& outRightY);
209
210public:
219 explicit BeamAlterations(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum, std::optional<Inci> inci = std::nullopt)
220 : EntryDetailsBase(document, partId, shareMode, entnum, inci) {}
221
224
233
238
241 bool isActive() const { return m_active; }
242
244 template <typename T,
245 std::enable_if_t<std::is_base_of_v<BeamAlterations, T>, int> = 0>
246 static void calcAllActiveFlags(const DocumentPtr& document);
247
249};
250
258{
259public:
267 explicit BeamAlterationsDownStem(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
268 : BeamAlterations(document, partId, shareMode, entnum) {}
269
270 constexpr static std::string_view XmlNodeName = "beamAltPrimDownStem";
271};
272
280{
281public:
289 explicit BeamAlterationsUpStem(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
290 : BeamAlterations(document, partId, shareMode, entnum) {}
291
292 constexpr static std::string_view XmlNodeName = "beamAltPrimUpStem";
293};
294
303{
304public:
312 explicit BeamExtension(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
313 : EntryDetailsBase(document, partId, shareMode, entnum) {}
314
317 unsigned mask{};
324
326};
327
333{
334public:
336
337 constexpr static std::string_view XmlNodeName = "beamExtendDownStem";
338};
339
345{
346public:
348
349 constexpr static std::string_view XmlNodeName = "beamExtendUpStem";
350};
351
361{
362public:
364 explicit BeamStubDirection(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
365 : EntryDetailsBase(document, partId, shareMode, entnum)
366 {
367 }
368
369 unsigned mask{};
372
374 bool isLeft() const { return mask != 0; }
375
376 constexpr static std::string_view XmlNodeName = "beamStub";
378};
379
388{
389public:
399 explicit ChordAssign(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, Cmper inst, Cmper meas, Inci inci)
400 : DetailsBase(document, partId, shareMode, inst, meas, inci)
401 {
402 }
403
405 enum class BassPosition
406 {
407 AfterRoot, // default value may not appear in xml (but text appears in Finale binary)
408 UnderRoot,
409 Subtext
410 };
411
415 int rootAlter{};
417 bool playSuffix{};
418 bool showRoot{};
419 bool playRoot{};
421 bool showSuffix{};
424 int bassAlter{};
427 bool showAltBass{};
428 bool playAltBass{};
429 int capoValue{};
432 bool useFretFont{};
438 int chPercent{};
439 int fbPercent{};
440
441 constexpr static std::string_view XmlNodeName = "chordAssign";
443};
444
459class ClefOctaveFlats : public DetailsArray<int, 7>
460{
461 std::string_view xmlTag() const override { return XmlNodeName; }
462
463public:
465
466 constexpr static std::string_view XmlNodeName = "clefOctvFlats";
468};
469
488class ClefOctaveSharps : public DetailsArray<int, 7>
489{
490 std::string_view xmlTag() const override { return XmlNodeName; }
491
492public:
494
495 constexpr static std::string_view XmlNodeName = "clefOctvSharps";
497};
498
508{
509public:
511 explicit CrossStaff(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
512 : NoteDetailsBase(document, partId, shareMode, entnum, inci)
513 {
514 }
515
518
519 NoteNumber getNoteId() const override { return noteId; }
520
521 constexpr static std::string_view XmlNodeName = "crossStaff";
523};
524
534{
535public:
543 explicit CustomStem(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
544 : EntryDetailsBase(document, partId, shareMode, entnum) {}
545
549
556 bool calcIsHiddenStem() const;
557
559};
560
568{
569public:
571
572 constexpr static std::string_view XmlNodeName = "stemDefDown";
573};
574
582{
583public:
585
586 constexpr static std::string_view XmlNodeName = "stemDefUp";
587};
588
598{
599public:
601 explicit DotAlterations(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
602 : NoteDetailsBase(document, partId, shareMode, entnum, inci)
603 {
604 }
605
610
611 NoteNumber getNoteId() const override { return noteId; }
612
613 constexpr static std::string_view XmlNodeName = "dotOffset";
615};
616
626{
627public:
635 explicit EntrySize(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
636 : EntryDetailsBase(document, partId, shareMode, entnum) {}
637
638 int percent{};
639
641 constexpr static std::string_view XmlNodeName = "entrySize";
642};
643
652{
653public:
662 explicit GFrameHold(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, Cmper inst, Cmper meas)
663 : DetailsBase(document, partId, shareMode, inst, meas), frames(MAX_LAYERS) {}
664
665 // Public properties corresponding to the XML structure
666 std::optional<ClefIndex> clefId;
669 bool mirrorFrame{};
672 std::vector<Cmper> frames;
673
675 InstCmper getStaff() const { return InstCmper(getCmper1()); }
676
679
681 bool calcIsMultiLayer() const
682 {
683 return std::count_if(frames.begin(), frames.end(), [](Cmper frameId) { return frameId != 0; }) > 1;
684 }
685
687 bool calcContainsMusic() const
688 {
689 return std::find_if(frames.begin(), frames.end(), [](Cmper frameId) { return frameId != 0; }) != frames.end();
690 }
691
692 void integrityCheck() override
693 {
695 if (clefListId && clefId.has_value()) {
696 MUSX_INTEGRITY_ERROR("GFrameHold for staff " + std::to_string(getCmper1()) + " and measure " + std::to_string(getCmper2()) + " has both clef and clef list.");
697 }
698 if (!clefListId && !clefId.has_value()) {
699 MUSX_INTEGRITY_ERROR("GFrameHold for staff " + std::to_string(getCmper1()) + " and measure " + std::to_string(getCmper2()) + " has neither clef nor clef list.");
700 }
701 }
702
703 constexpr static std::string_view XmlNodeName = "gfhold";
705};
706
715{
716public:
725 explicit IndependentStaffDetails(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, Cmper inst, Cmper meas)
726 : DetailsBase(document, partId, shareMode, inst, meas)
727 {
728 }
729
730 // Key signature info
731 std::shared_ptr<KeySignature> keySig;
732 bool hasKey{};
733
734 // Time signature info
739
742 bool altNumTsig{};
743 bool altDenTsig{};
745 bool hasDispTime{};
746 bool hasTime{};
747
749 std::shared_ptr<TimeSignature> createTimeSignature() const;
750
753 std::shared_ptr<TimeSignature> createDisplayTimeSignature() const;
754
755 void integrityCheck() override
756 {
758 if (hasKey && !keySig) {
759 keySig = std::make_shared<KeySignature>(getDocument());
760 }
761 }
762
763 constexpr static std::string_view XmlNodeName = "floats";
765};
766
775public:
777 explicit KeySymbolListElement(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, Cmper cmper1, Cmper cmper2)
778 : DetailsBase(document, partId, shareMode, cmper1, cmper2) {}
779
780 std::string accidentalString;
782
784 int getAlterationValue() const {
785 return static_cast<int16_t>(getCmper2());
786 }
787
788 void integrityCheck() override
789 {
791 if (std::abs(getAlterationValue()) > MAX_ALTERATIONS) {
792 MUSX_INTEGRITY_ERROR("KeySymbolListElement for list " + std::to_string(getCmper1()) + " has invalid value " + std::to_string(getAlterationValue()));
793 }
794 }
795
796 constexpr static std::string_view XmlNodeName = "keySymList";
798};
799
805{
806public:
815 explicit LyricAssign(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
816 : EntryDetailsBase(document, partId, shareMode, entnum, inci) {}
817
819 unsigned syllable{};
823 int wext{};
825
827};
828
836{
837public:
839
841 constexpr static std::string_view XmlNodeName = "lyrDataChorus";
842};
843
851{
852public:
854
856 constexpr static std::string_view XmlNodeName = "lyrDataSection";
857};
858
866{
867public:
869
871 constexpr static std::string_view XmlNodeName = "lyrDataVerse";
872};
873
882{
883public:
886
895 explicit LyricEntryInfo(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum, std::optional<Inci> inci = std::nullopt)
896 : EntryDetailsBase(document, partId, shareMode, entnum, inci) {}
897
898 std::optional<AlignJustify> justify{};
899 std::optional<AlignJustify> align{};
900
902 constexpr static std::string_view XmlNodeName = "lyricEntryInfo";
903};
904
921{
922public:
932 explicit MeasureTextAssign(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, Cmper inst, Cmper meas, Inci inci)
933 : DetailsBase(document, partId, shareMode, inst, meas, inci)
934 {
935 }
936
942 bool hidden{};
943
944 constexpr static std::string_view XmlNodeName = "measTextAssign";
946};
947
957{
958public:
960 explicit NoteAlterations(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
961 : NoteDetailsBase(document, partId, shareMode, entnum, inci), customFont(new FontInfo(document))
962 {
963 }
964
966 int percent{};
968 char32_t altNhead{};
969 bool useOwnFont{};
970 std::shared_ptr<FontInfo> customFont{};
973 bool enharmonic{};
975
976 NoteNumber getNoteId() const override { return noteId; }
977
978 constexpr static std::string_view XmlNodeName = "noteAlter";
980};
981
991{
992public:
994 explicit PercussionNoteCode(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
995 : NoteDetailsBase(document, partId, shareMode, entnum, inci)
996 {
997 }
998
1001
1002 NoteNumber getNoteId() const override { return noteId; }
1003
1004 constexpr static std::string_view XmlNodeName = "percussionNoteCode";
1006};
1007
1015{
1016public:
1026 explicit SecondaryBeamAlterationsDownStem(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
1027 : BeamAlterations(document, partId, shareMode, entnum, inci) {}
1028
1037
1038 constexpr static std::string_view XmlNodeName = "beamAltSecDownStem";
1039};
1040
1073
1083{
1084public:
1086 explicit SecondaryBeamBreak(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
1087 : EntryDetailsBase(document, partId, shareMode, entnum)
1088 {
1089 }
1090
1091 unsigned mask{};
1093
1101 {
1102 MUSX_ASSERT_IF(!mask || mask >= unsigned(NoteType::Eighth)) {
1103 return 0; // invalid mask values have already been flagged and supposedly corrected by #integrityCheck.
1104 }
1105 for (unsigned shift = 0; true; shift++) {
1106 if (mask & (unsigned(NoteType::Note16th) >> shift)) {
1107 return shift + 2; // the 2nd beam is the 16th beam and the first one we checked.
1108 }
1109 }
1110 assert(false); // should not be able to get here
1111 return 0;
1112 }
1113
1114 void integrityCheck() override
1115 {
1117 if (!mask) {
1118 mask = unsigned(NoteType::Note4096th);
1119 MUSX_INTEGRITY_ERROR("Secondary beam break for entry" + std::to_string(getEntryNumber()) + " has no breaks.");
1120 }
1121 if (mask >= unsigned(NoteType::Eighth)) {
1122 mask = unsigned(NoteType::Eighth) - 1;
1123 MUSX_INTEGRITY_ERROR("Secondary beam break for entry" + std::to_string(getEntryNumber()) + " specifies a value that cannot be a secondary beam.");
1124 }
1125 }
1126
1127 constexpr static std::string_view XmlNodeName = "secBeamBreak";
1129};
1130
1137class StaffGroup : public DetailsBase {
1138public:
1147 StaffGroup(const DocumentWeakPtr& document, Cmper partId, Base::ShareMode shareMode, Cmper cmper1, Cmper cmper2)
1148 : DetailsBase(document, partId, shareMode, cmper1, cmper2) {}
1149
1152
1155
1158 {
1159 OnlyOnStaves,
1162 };
1163
1165 enum class HideStaves
1166 {
1167 Normally,
1168 AsGroup,
1169 None
1170 };
1171
1173 enum class BracketStyle : int
1174 {
1175 None = 0,
1176 ThickLine = 1,
1178 PianoBrace = 3,
1179 Unknown4,
1180 Unknown5,
1181 BracketCurvedHooks = 6,
1182 Unknown7,
1183 DeskBracket = 8
1184 };
1185
1203
1204 // Public properties corresponding to the XML structure, ordered as they appear in the XML
1212 std::shared_ptr<Bracket> bracket{};
1217 bool ownBarline{};
1220 bool hideName{};
1229
1232 std::unordered_set<InstCmper> staves;
1233
1237
1241
1243 std::shared_ptr<others::MultiStaffInstrumentGroup> getMultiStaffInstGroup() const;
1244
1250
1256
1258 bool isAllMeasures() const
1259 { return (startMeas == 1 && endMeas == (std::numeric_limits<MeasCmper>::max)()); }
1260
1261 void integrityCheck() override
1262 {
1264 if (endMeas <= startMeas || startMeas <= 0) {
1265 MUSX_INTEGRITY_ERROR("Staff group " + std::to_string(getCmper2()) + " for part " + std::to_string(getPartId())
1266 + " starts at measure " + std::to_string(startMeas) + " and ends at measure " + std::to_string(endMeas));
1267 }
1268 if (!bracket) {
1269 // this is not an error. Finale omits the bracket node for groups with entirely default bracket info.
1270 bracket = std::make_shared<Bracket>();
1271 }
1272 }
1273
1274 constexpr static std::string_view XmlNodeName = "staffGroup";
1276};
1277
1283{
1284public:
1285 std::optional<size_t> startSlot;
1286 std::optional<size_t> endSlot;
1287 std::shared_ptr<StaffGroup> group;
1288 std::vector<std::shared_ptr<others::InstrumentUsed>> systemStaves;
1289
1293 StaffGroupInfo(const std::shared_ptr<StaffGroup>& staffGroup,
1294 const std::vector<std::shared_ptr<others::InstrumentUsed>>& inpSysStaves);
1295
1297 std::optional<size_t> numStaves() const
1298 {
1299 if (startSlot && endSlot) {
1300 return endSlot.value() - startSlot.value() + 1;
1301 }
1302 return std::nullopt;
1303 }
1304
1309 void iterateStaves(MeasCmper measId, Edu eduPosition, std::function<bool(const std::shared_ptr<others::StaffComposite>&)> iterator) const;
1310
1315 static std::vector<StaffGroupInfo> getGroupsAtMeasure(MeasCmper measureId, Cmper linkedPartId,
1316 const std::vector<std::shared_ptr<others::InstrumentUsed>>& systemStaves);
1317};
1318
1328{
1329public:
1338 explicit StaffSize(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, Cmper system, Cmper inst)
1339 : DetailsBase(document, partId, shareMode, system, inst)
1340 {
1341 }
1342
1344
1345 constexpr static std::string_view XmlNodeName = "staffSize";
1347};
1348
1358{
1359public:
1361 explicit StemAlterations(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
1362 : EntryDetailsBase(document, partId, shareMode, entnum)
1363 {
1364 }
1365
1370
1371 constexpr static std::string_view XmlNodeName = "stemAdjust";
1373};
1374
1384{
1385public:
1387
1388 constexpr static std::string_view XmlNodeName = "beamStemAdjust";
1389};
1390
1396{
1397public:
1399 explicit TieAlterBase(const DocumentWeakPtr& document, Cmper partId, Base::ShareMode shareMode, EntryNumber entnum, Inci inci)
1400 : NoteDetailsBase(document, partId, shareMode, entnum, inci)
1401 {
1402 }
1403
1409 bool outerLocal{};
1418 bool down{};
1422 bool breakKeyOn{};
1424 bool stPtAdjOn{};
1425 bool enPtAdjOn{};
1430 bool ctlPtAdjOn{};
1431
1432 NoteNumber getNoteId() const override { return noteId; }
1433
1434 bool requireAllFields() const override { return false; }
1436};
1437
1447{
1448public:
1450
1451 constexpr static std::string_view XmlNodeName = "tieAlterEnd";
1453};
1454
1464{
1465public:
1467
1468 constexpr static std::string_view XmlNodeName = "tieAlterStart";
1470};
1471
1481{
1482public:
1484 explicit TupletDef(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
1485 : EntryDetailsBase(document, partId, shareMode, entnum, inci)
1486 {
1487 }
1488
1497
1502 bool alwaysFlat{};
1503 bool fullDura{};
1505 bool avoidStaff{};
1507 bool hidden{};
1514 bool allowHorz{};
1517 bool matchHooks{};
1526
1529
1532
1535
1536 constexpr static std::string_view XmlNodeName = "tupletDef";
1538};
1539
1540} // namespace details
1541} // namespace dom
1542} // namespace entries
DocumentPtr getDocument() const
Gets a reference to the Document.
Definition BaseClasses.h:85
virtual void integrityCheck()
Allows a class to determine if it has been properly contructed by the factory and fix issues that it ...
Definition BaseClasses.h:132
ShareMode
Describes how this instance is shared between part and score.
Definition BaseClasses.h:68
virtual Cmper getPartId() const
Gets the partId for this instance (or SCORE_PARTID for score)
Definition BaseClasses.h:104
Template pattern for DetailsBase items consisting of an array of a single item.
Definition BaseClasses.h:369
DetailsArray(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, Cmper cmper1, Cmper cmper2)
Constructor function.
Definition BaseClasses.h:375
Base class for all "details" types.
Definition BaseClasses.h:298
Cmper getCmper1() const
Gets the cmper1 key value.
Definition BaseClasses.h:317
Cmper getCmper2() const
Gets the cmper2 key value.
Definition BaseClasses.h:322
Base class for all "details" types that use entnum rather than cmper and cmper.
Definition BaseClasses.h:339
EntryNumber getEntryNumber() const
Gets the entnum key value.
Definition BaseClasses.h:357
Wraps a frame of shared_ptr<const EntryInfo> and an index for per entry access. This class manages ow...
Definition Entries.h:387
Represents the default font settings for a particular element type.
Definition CommonClasses.h:119
Base class note details. Note details are entry details associated with a note ID.
Definition BaseClasses.h:402
Represents display alterations to an accidental for a specific note.
Definition Details.h:70
Evpu hOffset
Horizontal offset: positive is right. (XML node: <axDisp>)
Definition Details.h:81
NoteNumber getNoteId() const override
Required virtual function that returns the note id.
Definition Details.h:87
bool useOwnFont
Whether to use customFont.
Definition Details.h:84
std::shared_ptr< FontInfo > customFont
Font settings for the accidental (populated from <fontID>, <fontSize>, and <efx>)
Definition Details.h:83
NoteNumber noteId
The ID of the note being altered.
Definition Details.h:78
AccidentalAlterations(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
Constructor.
Definition Details.h:73
Evpu vOffset
Vertical offset: positive is up. (XML node: <ayDisp>)
Definition Details.h:80
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:82
bool allowVertPos
Whether to use vOffset.
Definition Details.h:85
int percent
The percentage size for the accidental, where 100 is 100%.
Definition Details.h:79
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:89
static const xml::XmlElementArray< AccidentalAlterations > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
Assigns an articulation to an entry.
Definition Details.h:100
ArticulationAssign(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
Constructor function.
Definition Details.h:110
Cmper articDef
The articulation definition ID.
Definition Details.h:113
bool hide
Inverse of "Show" option.
Definition Details.h:120
bool neverStack
Whether the articulation should never stack relative to others.
Definition Details.h:121
int numSlursAvoided
Number of slurs avoided. Used internally by Finale's stacking algorithm.
Definition Details.h:123
bool avoidSlur
Whether the articulation should avoid slurs.
Definition Details.h:122
bool aboveEntry
When overridePlacement is true: whether the articulation is forced above or below the entry.
Definition Details.h:119
Evpu horzOffset
Horizontal offset from the default position.
Definition Details.h:114
bool overridePlacement
Whether the default placement is overridden.
Definition Details.h:118
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:126
static const xml::XmlElementArray< ArticulationAssign > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
Evpu vertOffset
Vertical offset from the default position.
Definition Details.h:116
Evpu vertAdd
Vertical displacement for character copying. (E.g., arpeggiated chord lines)
Definition Details.h:117
Evpu horzAdd
Horizontal displacement for character copying. (E.g., trill lines)
Definition Details.h:115
Contains the baseline offsets for lyrics chorus records.
Definition Details.h:159
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:165
Contains the baseline offsets for lyrics chorus records.
Definition Details.h:173
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:178
Contains the baseline offsets for lyrics verse records.
Definition Details.h:186
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:191
Contains the baseline information for all baseline types.
Definition Details.h:134
Baseline(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, Cmper system, Cmper staff, std::optional< Inci > inci=std::nullopt)
Constructor function.
Definition Details.h:145
Cmper lyricNumber
the text number of the lyric, if this is a lyrics baseline. Otherwise unused and should be zero.
Definition Details.h:149
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:148
Beam alteration for downstem primary beams.
Definition Details.h:258
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:270
BeamAlterationsDownStem(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
Constructor.
Definition Details.h:267
Beam alteration for upstem primary beams.
Definition Details.h:280
BeamAlterationsUpStem(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
Constructor.
Definition Details.h:289
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:292
Represents beam alterations applied to a specific entry. This is used to apply additional shaping or ...
Definition Details.h:201
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:241
Edu dura
For secondary beams, specifies the duration corresponding to the secondary beam (16th beam is 256,...
Definition Details.h:229
Evpu rightOffsetY
Vertical adjustment of the beam end. (xml node is <syAdd>)
Definition Details.h:228
FlattenStyle flattenStyle
Beam shaping style (xml node is <context>).
Definition Details.h:230
BeamAlterations(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum, std::optional< Inci > inci=std::nullopt)
Constructor.
Definition Details.h:219
static bool calcIsFeatheredBeamImpl(const EntryInfoPtr &entryInfo, Evpu &outLeftY, Evpu &outRightY)
Implementation of SecondaryBeamAlterationsDownStem::calcIsFeatheredBeam and SecondaryBeamAlterationsU...
Definition Implementations.cpp:99
Evpu rightOffsetH
Horizontal adjustment of the beam end. (xml node is <sxAdd>)
Definition Details.h:227
Evpu leftOffsetY
Vertical adjustment of the beam start. (xml node is <yAdd>)
Definition Details.h:226
Evpu leftOffsetH
Horizontal adjustment of the beam start. (xml node is <xAdd>)
Definition Details.h:225
Efix calcEffectiveBeamWidth() const
Calculates the effective beam width by returning either the default width or the width override value...
Definition Implementations.cpp:72
static void calcAllActiveFlags(const DocumentPtr &document)
Used by the factory to set active indicators.
Definition Implementations.cpp:50
Efix beamWidth
The calcEffectiveBeamWidth method handles this for you.
Definition Details.h:231
Beam extension for downstem beams.
Definition Details.h:333
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:337
Beam extension for upstem beams.
Definition Details.h:345
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:349
Represents both sides of a beam extension. It is attached to the first entry in the beam....
Definition Details.h:303
bool extBeyond8th
Definition Details.h:320
Evpu rightOffset
Right extension offset. (xml node is <x4Disp>)
Definition Details.h:316
unsigned mask
Definition Details.h:317
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:312
Evpu leftOffset
Left extension offset. (xml node is <x3Disp>)
Definition Details.h:315
Specifies the direction for beam stubs (if they are manually overridden.)
Definition Details.h:361
unsigned mask
Definition Details.h:369
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:376
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:374
BeamStubDirection(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
Constructor function.
Definition Details.h:364
Represents chord symbol assignment for a staff and measure.
Definition Details.h:388
Edu horzEdu
<horzEdu>: Edu position in measure
Definition Details.h:437
Evpu fbHorzOff
<fbHorzOff>: Horizontal offset of fretboard (in EVPU)
Definition Details.h:435
bool showFretboard
<showFretboard/>: Show fretboard
Definition Details.h:420
bool rootLowerCase
<rootLowerCase/>: Display root in lowercase
Definition Details.h:416
bool playRoot
<playRoot/>: Playback root
Definition Details.h:419
bool useFretFont
<useFretFont/>: Use fret font
Definition Details.h:432
bool showRoot
<showRoot/>: Show root
Definition Details.h:418
int bassAlter
<bassAlter>: Bass alteration
Definition Details.h:424
BassPosition
Bass position options.
Definition Details.h:406
int rootScaleNum
<rootScaleNum>: Root scale degree (0–76)
Definition Details.h:414
Evpu fbVertOff
<fbVertOff>: Vertical offset of fretboard (in EVPU)
Definition Details.h:436
bool showAltBass
<showAltBass/>: Show alternate bass
Definition Details.h:427
Evpu horzOff
<horzOff>: Horizontal offset of chord (in EVPU)
Definition Details.h:433
bool showSuffix
<showSuffix/>: Show suffix
Definition Details.h:421
Cmper suffixId
<suffix>: Chord suffix ID
Definition Details.h:412
bool playFretboard
<playFretboard/>: Playback fretboard
Definition Details.h:422
ChordAssign(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, Cmper inst, Cmper meas, Inci inci)
Constructor.
Definition Details.h:399
Cmper fbStyleId
<fbStyleID>: Fretboard style ID
Definition Details.h:413
int fbPercent
<fbPercent>: Fretboard percent scaling (100 is 100%)
Definition Details.h:439
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:441
int bassScaleNum
<bassScaleNum>: Bass scale degree (0-6)
Definition Details.h:423
Evpu vertOff
<vertOff>: Vertical offset of chord (in EVPU)
Definition Details.h:434
int capoValue
<capoValue>: Capo value (if useLocalCapo is true)
Definition Details.h:429
bool playAltBass
<playAltBass/>: Playback alternate bass
Definition Details.h:428
Cmper fretInci
One less than the 1-based Cmper value for the fretboard group. (Meaningless if useFretFont is true....
Definition Details.h:431
int chPercent
<chPercent>: Chord percent scaling (100 is 100%)
Definition Details.h:438
int rootAlter
<rootAlter>: Root alteration
Definition Details.h:415
bool playSuffix
<playSuffix/>: Playback suffix
Definition Details.h:417
bool useLocalCapo
<useLocalCapo/>: Use local capo
Definition Details.h:430
static const xml::XmlElementArray< ChordAssign > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
bool bassLowerCase
<bassLowerCase/>: Display bass in lowercase
Definition Details.h:425
BassPosition bassPosition
<bassPosition>: Position of bass relative to root
Definition Details.h:426
Defines the octaves in which each clef should display flats in key signatures. Only linear key signat...
Definition Details.h:460
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:466
Defines the octaves in which each clef should display sharps in key signatures.
Definition Details.h:489
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:495
Represents a cross-staff assignment for the note, if any.
Definition Details.h:508
NoteNumber getNoteId() const override
Required virtual function that returns the note id.
Definition Details.h:519
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:521
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:511
NoteNumber noteId
The ID of the note being assigned to a different staff (XML node: <noteID>)
Definition Details.h:516
InstCmper staff
The target staff (XML node: <instrument>)
Definition Details.h:517
Custom stem for downstem context.
Definition Details.h:568
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:572
Represents a custom stem definition (up or down) for an entry. Which stem direction this instance con...
Definition Details.h:534
Evpu yOffset
Optional vertical displacement. (xml node is <ydisp>)
Definition Details.h:548
bool calcIsHiddenStem() const
Calculates if this custom stem record hides the stem. The stem is determined to be hidden if one of t...
Definition Implementations.cpp:1300
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:546
Evpu xOffset
Optional horizontal displacement. (xml node is <xdisp>)
Definition Details.h:547
CustomStem(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
Constructor.
Definition Details.h:543
Custom stem for upstem context.
Definition Details.h:582
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:586
Represents display offsets and spacing adjustments for augmentation dots on a specific note.
Definition Details.h:598
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:613
NoteNumber noteId
The ID of the note whose dots are adjusted.
Definition Details.h:606
Evpu hOffset
Horizontal offset for the dot (XML: <xadd>)
Definition Details.h:607
Evpu vOffset
Vertical offset for the dot (XML: <yadd>)
Definition Details.h:608
static const xml::XmlElementArray< DotAlterations > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
Evpu interdotSpacing
Additional spacing between dots (XML: <posIncr>)
Definition Details.h:609
DotAlterations(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
Constructor.
Definition Details.h:601
NoteNumber getNoteId() const override
Required virtual function that returns the note id.
Definition Details.h:611
Specifies a custom size for an entry. It scales the entire entry, including the stem and all notehead...
Definition Details.h:626
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:641
int percent
The note/chord size as a percent (e.g., 65 for 65%).
Definition Details.h:638
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:635
Represents the attributes of a Finale frame holder.
Definition Details.h:652
InstCmper getStaff() const
returns the inst (staff) number for this GFrameHold
Definition Details.h:675
std::optional< ClefIndex > clefId
clef index when there are no mid-measure clef changes. (xml tag is <clefID>).
Definition Details.h:666
GFrameHold(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, Cmper inst, Cmper meas)
Constructor function.
Definition Details.h:662
int clefPercent
Clef percent where 100 means 100%.
Definition Details.h:671
ShowClefMode showClefMode
"Show Clef" mode. (xml tag is <clefMode>)
Definition Details.h:668
bool mirrorFrame
Indicates this is a mirror frame. (Not used after Finale 14.5.)
Definition Details.h:669
static const xml::XmlElementArray< GFrameHold > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
MeasCmper getMeasure() const
returns the measure number for this GFrameHold
Definition Details.h:678
bool calcContainsMusic() const
Returns true if the GFrameHold contains any layer frames.
Definition Details.h:687
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:703
bool calcIsMultiLayer() const
Returns true if the GFrameHold instance has more than one layer.
Definition Details.h:681
void integrityCheck() override
Allows a class to determine if it has been properly contructed by the factory and fix issues that it ...
Definition Details.h:692
bool clefAfterBarline
"Place Clef After Barline"
Definition Details.h:670
Cmper clefListId
The clef list ID when there are mid-measure clef changes, if non-zero. (xml tag is <clefListID>).
Definition Details.h:667
std::vector< Cmper > frames
others::Frame values for layers 1..4 (layer indices 0..3) if non-zero
Definition Details.h:672
Represents independent time and key signature overrides for a staff.
Definition Details.h:715
bool hasTime
If true, this item contains an independent time signature.
Definition Details.h:746
Cmper divBeat
Time signature denominator in Edu or a Cmper to a composite record.
Definition Details.h:736
bool displayAltDenTsig
If true, dispDivBeat is the Cmper of a others::TimeCompositeLower record.
Definition Details.h:741
Cmper dispDivBeat
Display time signature denominator in Edu or a Cmper to a composite record.
Definition Details.h:738
bool altNumTsig
If true, beats is the Cmper of a others::TimeCompositeUpper record.
Definition Details.h:742
bool hasKey
If true, this item contains an independent key signature.
Definition Details.h:732
std::shared_ptr< KeySignature > keySig
The key signature value if present. (xml tag is <keySig>/<key>)
Definition Details.h:731
bool altDenTsig
If true, divBeat is the Cmper of a others::TimeCompositeLower record.
Definition Details.h:743
std::shared_ptr< TimeSignature > createDisplayTimeSignature() const
Create a shared pointer to an instance of the display TimeSignature for this measure and staff.
Definition Implementations.cpp:1585
static const xml::XmlElementArray< IndependentStaffDetails > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
bool hasDispTime
If true, the display time signature is present.
Definition Details.h:745
IndependentStaffDetails(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, Cmper inst, Cmper meas)
Constructor function.
Definition Details.h:725
std::shared_ptr< TimeSignature > createTimeSignature() const
Create a shared pointer to an instance of the TimeSignature for this instance.
Definition Implementations.cpp:1580
bool displayAbbrvTime
If true, the display time signature is abbreviated.
Definition Details.h:744
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:763
Cmper dispBeats
Display time signature numerator or a Cmper to a composite record.
Definition Details.h:737
bool displayAltNumTsig
If true, dispBeats is the Cmper of a others::TimeCompositeUpper record.
Definition Details.h:740
Cmper beats
Time signature numerator or a Cmper to a composite record.
Definition Details.h:735
void integrityCheck() override
Allows a class to determine if it has been properly contructed by the factory and fix issues that it ...
Definition Details.h:755
Represents a single element in a Finale accidental symbol list.
Definition Details.h:774
int getAlterationValue() const
Returns the alteration value that this symbol corresponds with.
Definition Details.h:784
KeySymbolListElement(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, Cmper cmper1, Cmper cmper2)
Constructor function.
Definition Details.h:777
void integrityCheck() override
Allows a class to determine if it has been properly contructed by the factory and fix issues that it ...
Definition Details.h:788
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:796
std::string accidentalString
Definition Details.h:780
Contains the syllable assignments for lyrics chorus blocks.
Definition Details.h:836
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:841
Contains the syllable assignments for lyrics section blocks.
Definition Details.h:851
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:856
Contains the syllable assignments for lyrics verse blocks.
Definition Details.h:866
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:871
Contains assignment data for a lyric assignment (a single syllable)
Definition Details.h:805
LyricAssign(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
Constructor function.
Definition Details.h:815
static const xml::XmlElementArray< LyricAssign > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
int wext
Somehow indicates a word extension, but its meaning is uncertain. It does not appear to be a smart sh...
Definition Details.h:823
Cmper lyricNumber
the text number of the lyric.
Definition Details.h:818
unsigned syllable
the 1-based syllable number. Subtract 1 to get the index. (xml node is <syll>)
Definition Details.h:819
Evpu floatingHorzOff
This appears to have something to do with note spacing. It may simply be a cache that Finale changes ...
Definition Details.h:822
Evpu horzOffset
horizontal offset from default position. (xml node is <horzOff>)
Definition Details.h:820
Evpu vertOffset
horizontal offset from default position. (xml node is <vertOff>)
Definition Details.h:821
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:824
Specifies lyric alignment and justification for a single entry. This affects all lyric assignments on...
Definition Details.h:882
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:902
std::optional< AlignJustify > align
Override default alignment if present. (xml node is <align>)
Definition Details.h:899
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:895
std::optional< AlignJustify > justify
Override default justification if present. (xml node is <justify>)
Definition Details.h:898
Represents a text block assignment for a staff and measure.
Definition Details.h:921
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:944
Evpu yDisp
Vertical displacement in Evpu (xml node is <ydisp>)
Definition Details.h:941
MeasureTextAssign(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, Cmper inst, Cmper meas, Inci inci)
Constructor.
Definition Details.h:932
Evpu xDispEvpu
Negative horizontal displacement in Evpu (xml node is <xdispEvpu>)
Definition Details.h:940
Cmper block
Text block ID.
Definition Details.h:937
bool hidden
Indicates the text appears only on screen (xml node is <postIt/>)
Definition Details.h:942
static const xml::XmlElementArray< MeasureTextAssign > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
Edu xDispEdu
Definition Details.h:938
Represents graphical and notational alterations applied to a note.
Definition Details.h:957
bool allowVertPos
Whether vertical positioning is allowed .
Definition Details.h:971
int percent
Size percentage for the notehead. (A value of 100 means 100%.)
Definition Details.h:966
char32_t altNhead
Alternate notehead character.
Definition Details.h:968
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:978
NoteAlterations(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
Constructor function.
Definition Details.h:960
Evpu nydisp
Vertical notehead offset.
Definition Details.h:972
std::shared_ptr< FontInfo > customFont
Custom font info (consolidates: <fontID>, <fontSize>, <efx>)
Definition Details.h:970
bool useOwnFont
Whether to use the custom font.
Definition Details.h:969
Evpu nxdisp
Horizontal notehead offset.
Definition Details.h:967
NoteNumber getNoteId() const override
Required virtual function that returns the note id.
Definition Details.h:976
bool enharmonic
Definition Details.h:973
NoteNumber noteId
The ID of the note being altered. (xml node is <noteID>)
Definition Details.h:965
static const xml::XmlElementArray< NoteAlterations > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
Represents a percussion note code override for a single note.
Definition Details.h:991
NoteNumber getNoteId() const override
Required virtual function that returns the note id.
Definition Details.h:1002
NoteNumber noteId
The ID of the note being assigned a code.
Definition Details.h:999
PercussionNoteType noteCode
The percussion note code. Use this to search the incis of the percussion map for the specific note.
Definition Details.h:1000
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:994
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:1004
Beam alteration for downstem secondary beams.
Definition Details.h:1015
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:1035
SecondaryBeamAlterationsDownStem(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
Constructor.
Definition Details.h:1026
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:1038
Beam alteration for downstem secondary beams.
Definition Details.h:1048
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:1068
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:1071
SecondaryBeamAlterationsUpStem(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
Constructor.
Definition Details.h:1059
Specifies which secondary beams break and restart on the associated entry.
Definition Details.h:1083
SecondaryBeamBreak(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
Constructor function.
Definition Details.h:1086
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:1127
void integrityCheck() override
Allows a class to determine if it has been properly contructed by the factory and fix issues that it ...
Definition Details.h:1114
BeamNumber calcLowestBreak() const
Calculates the lowest (largest note-value) beam specified for a secondary beam break.
Definition Details.h:1100
bool breakThrough
True if the beam should be broken through to the largest specified beam value.
Definition Details.h:1092
unsigned mask
Composite mask of beam breaks, derived from <do16th> through <do4096th> tags.
Definition Details.h:1091
static const xml::XmlElementArray< SecondaryBeamBreak > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
Provides run-time information about Staff Groups within a system or list of others::InstrumentUsed.
Definition Details.h:1283
std::optional< size_t > startSlot
the 0-based start slot (index) of the group in the system staves.
Definition Details.h:1285
std::optional< size_t > endSlot
the 0-based end slot (index) of the group in the system staves.
Definition Details.h:1286
std::shared_ptr< StaffGroup > group
the StaffGroup record for the group.
Definition Details.h:1287
std::optional< size_t > numStaves() const
The number of staves in the group for the systemStaves.
Definition Details.h:1297
static std::vector< StaffGroupInfo > getGroupsAtMeasure(MeasCmper measureId, Cmper linkedPartId, const std::vector< std::shared_ptr< others::InstrumentUsed > > &systemStaves)
Creates a vector of StaffGroupInfo instances for the measure, part, and system staves.
Definition Implementations.cpp:3516
void iterateStaves(MeasCmper measId, Edu eduPosition, std::function< bool(const std::shared_ptr< others::StaffComposite > &)> iterator) const
Iterates the staves in the group in order according to systemStaves.
Definition Implementations.cpp:3496
std::vector< std::shared_ptr< others::InstrumentUsed > > systemStaves
the system staves referred to by startSlot and endSlot
Definition Details.h:1288
Embedded class to represent the "bracket" node.
Definition Details.h:1188
static const xml::XmlElementArray< Bracket > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
BracketStyle style
Bracket style (xml node is <id>)
Definition Details.h:1190
Evpu vertAdjBot
"Vertical Adjust (Bottom of Bracket)" (xml node is <bracBot>)
Definition Details.h:1193
Evpu vertAdjTop
"Vertical Adjust (Top of Bracket)" (xml node is <bracTop>)
Definition Details.h:1192
bool showOnSingleStaff
"Show Bracket If Group Contains Only One Staff" (xml node is <onSingle>)
Definition Details.h:1194
Evpu horzAdjLeft
"Distance from Left Edge of Staff" (xml node is <bracPos>)
Definition Details.h:1191
Bracket()=default
Default constructor for Bracket.
Represents the attributes of a Finale staff group that brackets staves.
Definition Details.h:1137
AlignJustify abbrvNameJustify
Abbreviated name justification (xml node is <abbrvJustify>)
Definition Details.h:1215
bool abbrvNameExpand
"Expand Single Word" for abbreviated name (xml node is <abbrvExpand>)
Definition Details.h:1227
Cmper multiStaffGroupId
Definition Details.h:1230
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:1226
bool ownBarline
"Use Alternate Group Barline"
Definition Details.h:1217
int abbrvNameYadj
Vertical adjustment for abbreviated name (xml node is <abbrvYadj>)
Definition Details.h:1223
DrawBarlineStyle
Enum for how to draw group barlines.
Definition Details.h:1158
@ 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 Implementations.cpp:3462
void integrityCheck() override
Allows a class to determine if it has been properly contructed by the factory and fix issues that it ...
Definition Details.h:1261
bool isAllMeasures() const
Returns true if this group spans all measures.
Definition Details.h:1258
Cmper abbrvNameId
Abbreviated name TextBlock cmper (xml node is <abbrvID>)
Definition Details.h:1221
int fullNameXadj
Horizontal adjustment for full name (xml node is <fullXadj>)
Definition Details.h:1210
std::shared_ptr< Bracket > bracket
Bracket Options. The factory guarantees this value to exist.
Definition Details.h:1212
std::shared_ptr< others::MultiStaffInstrumentGroup > getMultiStaffInstGroup() const
Returns the others::MultiStaffInstrumentGroup for this group if it is part of one....
Definition Implementations.cpp:3441
std::string getAbbreviatedName(util::EnigmaString::AccidentalStyle accidentalStyle=util::EnigmaString::AccidentalStyle::Ascii) const
Get the abbreviated staff name without Enigma tags.
Definition Implementations.cpp:3436
AlignJustify fullNameJustify
Full name justification (xml node is <fullJustify>)
Definition Details.h:1214
DrawBarlineStyle drawBarlines
"Draw Barlines" option (xml node is <groupBarlineStyle>)
Definition Details.h:1216
InstCmper startInst
Starting staff ID.
Definition Details.h:1205
BracketStyle
Bracket style enum for StaffGroup.
Definition Details.h:1174
@ BracketCurvedHooks
Thick bracket with curved hooks.
@ DeskBracket
Thin bracket with horizontal hook lines.
@ BracketStraightHooks
Thick bracket with straight hooks.
AlignJustify abbrvNameAlign
Abbreviated name horizontal alignment (xml node is <abbrvHAlign>)
Definition Details.h:1225
int fullNameYadj
Vertical adjustment for full name (xml node is <fullYadj>)
Definition Details.h:1211
HideStaves hideStaves
"When Hiding Empty Staves" option (xml node is <optimize>)
Definition Details.h:1228
BarlineType barlineType
Group barline type (xml node is <barline>)
Definition Details.h:1213
AlignJustify fullNameAlign
Full name horizontal alignment (xml node is <fullHAlign>)
Definition Details.h:1224
std::unordered_set< InstCmper > staves
Calculated list of staves in the group.
Definition Details.h:1232
Cmper fullNameId
Full name TextBlock cmper (xml node is <fullID>)
Definition Details.h:1209
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 Implementations.cpp:3452
StaffGroup(const DocumentWeakPtr &document, Cmper partId, Base::ShareMode shareMode, Cmper cmper1, Cmper cmper2)
Constructor.
Definition Details.h:1147
InstCmper endInst
Ending staff ID.
Definition Details.h:1206
static constexpr std::string_view XmlNodeName
XML node name for this type.
Definition Details.h:1274
MeasCmper startMeas
Starting measure number.
Definition Details.h:1207
std::string getFullName(util::EnigmaString::AccidentalStyle accidentalStyle=util::EnigmaString::AccidentalStyle::Ascii) const
Get the full staff name without Enigma tags.
Definition Implementations.cpp:3431
MeasCmper endMeas
Ending measure number.
Definition Details.h:1208
bool hideName
Inverse of "Show Group Name".
Definition Details.h:1220
bool fullNameIndivPos
Indicates if full name has individual position (xml node is <fullIndivPos>)
Definition Details.h:1218
bool abbrvNameIndivPos
Indicates if abbreviated name has individual position (xml node is <abbrvIndivPos>)
Definition Details.h:1219
int abbrvNameXadj
Horizontal adjustment for abbreviated name (xml node is <abbrvXadj>)
Definition Details.h:1222
HideStaves
Enum for optimization options.
Definition Details.h:1166
@ 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:1328
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:1345
static const xml::XmlElementArray< StaffSize > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
int staffPercent
The staff size percentage override. (A value of 100 means 100%, i.e, no staff scaling....
Definition Details.h:1343
StaffSize(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, Cmper system, Cmper inst)
Constructor.
Definition Details.h:1338
Specifies horizontal and vertical adjustments for stems under beam.
Definition Details.h:1384
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:1388
Specifies horizontal and vertical stem adjustments for upstem and downstem contexts.
Definition Details.h:1358
Evpu upVertAdjust
Vertical adjustment for upstem context (positive is up).
Definition Details.h:1366
Evpu downHorzAdjust
Horizontal adjustment for downstem context (positive is right).
Definition Details.h:1369
Evpu downVertAdjust
Vertical adjustment for downstem context (positive is up).
Definition Details.h:1367
static const xml::XmlElementArray< StemAlterations > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
Evpu upHorzAdjust
Horizontal adjustment for upstem context (positive is right).
Definition Details.h:1368
StemAlterations(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum)
Constructor function.
Definition Details.h:1361
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:1371
Base class for tie alteration properties. (Used for both ties and tie ends.)
Definition Details.h:1396
Evpu yEnd
Vertical end position of the tie.
Definition Details.h:1408
NoteNumber noteId
Note ID associated with the tie alteration. (xml node is <noteID>)
Definition Details.h:1404
bool outerLocal
Local setting for "Outer Tie".
Definition Details.h:1409
Evpu xStart
Horizontal start position of the tie.
Definition Details.h:1405
Evpu height1
Height of the first control point.
Definition Details.h:1427
NoteNumber getNoteId() const override
Required virtual function that returns the note id.
Definition Details.h:1432
bool afterMultiDotsLocal
Local setting for "After Multiple Dots".
Definition Details.h:1412
bool shiftForSecondsOn
Enable "Shift for Seconds".
Definition Details.h:1415
Evpu height2
Height of the second control point.
Definition Details.h:1429
TieAlterBase(const DocumentWeakPtr &document, Cmper partId, Base::ShareMode shareMode, EntryNumber entnum, Inci inci)
Constructor function.
Definition Details.h:1399
Evpu insetRatio1
Inset ratio for the first control point.
Definition Details.h:1426
bool enPtAdjOn
Enable end point adjustment.
Definition Details.h:1425
bool shiftForSecondsLocal
Local setting for "Shift for Seconds".
Definition Details.h:1414
bool afterSingleDotOn
Enable "After Single Dot".
Definition Details.h:1411
bool afterMultiDotsOn
Enable "After Multiple Dots".
Definition Details.h:1413
Evpu insetRatio2
Inset ratio for the second control point.
Definition Details.h:1428
bool breakKeyLocal
Local setting for "Break at Key Signature".
Definition Details.h:1421
bool breakKeyOn
Enable "Break at Key Signature".
Definition Details.h:1422
bool down
Downward tie. Only applicable if freezeDirection is true. (False freezes the tie up....
Definition Details.h:1418
bool beforeSingleAcciOn
Enable "Before Single Accidental".
Definition Details.h:1417
bool stPtAdjOn
Enable start point adjustment.
Definition Details.h:1424
static const xml::XmlElementArray< TieAlterBase > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
bool beforeSingleAcciLocal
Local setting for "Before Single Accidental".
Definition Details.h:1416
Evpu xEnd
Horizontal end position of the tie.
Definition Details.h:1406
bool ctlPtAdjOn
Enable control point adjustment.
Definition Details.h:1430
bool breakTimeLocal
Local setting for "Break at Time Signature".
Definition Details.h:1419
bool freezeDirection
Freeze tie direction. (xml node is <freeze>)
Definition Details.h:1423
Evpu yStart
Vertical start position of the tie.
Definition Details.h:1407
bool afterSingleDotLocal
Local setting for "After Single Dot".
Definition Details.h:1410
bool breakTimeOn
Enable "Break at Time Signature".
Definition Details.h:1420
bool requireAllFields() const override
Unless we decide to figure out connection types, this will stay here.
Definition Details.h:1434
Alterations for tie ends.
Definition Details.h:1447
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:1451
static const xml::XmlElementArray< TieAlterEnd > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
Alterations for tie starts. (Tie starts are normal ties.)
Definition Details.h:1464
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:1468
static const xml::XmlElementArray< TieAlterStart > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
Options controlling the appearance of tuplets.
Definition Details.h:1481
bool hidden
Inverse of "Show".
Definition Details.h:1507
util::Fraction calcRatio() const
return the tuplet ratio (reference / display)
Definition Details.h:1534
util::Fraction calcDisplayDuration() const
return the display duration as a util::Fraction of a whole note
Definition Details.h:1531
Evpu tupOffX
Horizontal offset.
Definition Details.h:1508
Evpu rightHookLen
Length of the right hook in the tuplet bracket. (This value is sign-reversed in the Finale UI....
Definition Details.h:1523
Evpu brackOffY
Vertical offset for brackets.
Definition Details.h:1511
BracketStyle brackStyle
Bracket style.
Definition Details.h:1519
bool avoidStaff
"Avoid Staff"
Definition Details.h:1505
AutoBracketStyle autoBracketStyle
Autobracket style.
Definition Details.h:1506
bool alwaysFlat
"Always Flat" (xml node is <flat>)
Definition Details.h:1502
bool fullDura
"Bracket Full Duration"
Definition Details.h:1503
bool allowHorz
"Allow Horizontal Drag"
Definition Details.h:1514
int referenceNumber
The number of notes "in the time of" (xml node is <refNum>)
Definition Details.h:1500
Evpu rightHookExt
Extension of the right hook beyond the tuplet bracket.
Definition Details.h:1524
Evpu leftHookExt
Extension of the left hook beyond the tuplet bracket.
Definition Details.h:1522
bool ignoreHorzNumOffset
"Ignore Horizontal Number Offset" (xml node is <ignoreGlOffs>)
Definition Details.h:1515
TupletDef(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum, Inci inci)
Constructor function.
Definition Details.h:1484
util::Fraction calcReferenceDuration() const
return the reference duration as a util::Fraction of a whole note
Definition Details.h:1528
bool smartTuplet
"Engraver Tuplets"
Definition Details.h:1520
Edu displayDuration
The duration of each note to display (xml node is <symbolicDur>)
Definition Details.h:1499
Evpu tupOffY
Vertical.
Definition Details.h:1509
NumberStyle numStyle
Number style.
Definition Details.h:1512
static const xml::XmlElementArray< TupletDef > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
Evpu brackOffX
Horizontal offset for brackets.
Definition Details.h:1510
Evpu manualSlopeAdj
"Manual Slope Adjustment" in Evpu. (xml node is <slope>)
Definition Details.h:1525
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Details.h:1536
bool breakBracket
"Break Slur or Bracket"
Definition Details.h:1516
int displayNumber
The number of notes to display (xml node is <symbolicNum>)
Definition Details.h:1498
bool metricCenter
"Center Number Using Duration"
Definition Details.h:1504
bool useBottomNote
"Use Bottom Note" (xml node is <noteBelow>)
Definition Details.h:1518
bool matchHooks
"Match Length of Hooks"
Definition Details.h:1517
PositioningStyle posStyle
Positioning style.
Definition Details.h:1513
Edu referenceDuration
The duration of eacn note "in the time of" (xml node is <refDur>)
Definition Details.h:1501
Evpu leftHookLen
Length of the left hook in the tuplet bracket. (This value is sign-reversed in the Finale UI....
Definition Details.h:1521
FlattenStyle
Beaming style choices for when to flatten beams.
Definition Options.h:168
AlignJustify
Horizontal and vertical alignment/justification values.
Definition Options.h:560
BracketStyle
Bracket style options.
Definition Options.h:1506
PositioningStyle
Positioning style options.
Definition Options.h:1496
AutoBracketStyle
Auto-bracket style options.
Definition Options.h:1473
NumberStyle
Number style options.
Definition Options.h:1486
BarlineType
Barline type for left and right barlines.
Definition Others.h:984
AlignJustify
Alignment and justification options for staff and group names.
Definition CommonClasses.h:600
Contains chorus text for lyrics.
Definition Texts.h:148
Contains section text for lyrics.
Definition Texts.h:163
Contains verse text for lyrics.
Definition Texts.h:133
AccidentalStyle
Enumeration to specify the type of accidental replacement.
Definition EnigmaString.h:57
@ 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:37
constexpr int MAX_ALTERATIONS
Maximum absolute value for chromatic alterations supported in Finale.
Definition Fundamentals.h:79
ShowClefMode
Enum representing the clef display mode for a frame.
Definition CommonClasses.h:105
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
uint16_t PercussionNoteType
Definition Fundamentals.h:75
int16_t InstCmper
Enigma staff (inst) Cmper (may be negative when not applicable)
Definition Fundamentals.h:65
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:78
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:53
int32_t EntryNumber
Entry identifier.
Definition Fundamentals.h:68
uint16_t NoteNumber
Note identifier.
Definition Fundamentals.h:69
std::shared_ptr< Document > DocumentPtr
Shared Document pointer.
Definition BaseClasses.h:51
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:71
std::vector< XmlElementDescriptor< T > > XmlElementArray
an array type for XmlElementDescriptor instances.
Definition XmlInterface.h:127
object model for musx file (enigmaxml)
Definition BaseClasses.h:32