Skip to content

Commit d407cca

Browse files
Merge pull request #32114 from miiizen/markerLabelPort
[4.7.0] Don't reset marker label on style change
2 parents eb2311f + b95f626 commit d407cca

File tree

9 files changed

+67
-95
lines changed

9 files changed

+67
-95
lines changed

src/engraving/dom/marker.cpp

Lines changed: 38 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,23 @@ static const ElementStyle markerStyle {
4444
{ Sid::repeatMinDistance, Pid::MIN_DISTANCE },
4545
};
4646

47+
//---------------------------------------------------------
48+
// MarkerTypeTable
49+
//---------------------------------------------------------
50+
51+
const std::vector<MarkerTypeTableItem> markerTypeTable {
52+
{ MarkerType::SEGNO, "<sym>segno</sym>", "segno", false },
53+
{ MarkerType::VARSEGNO, "<sym>segnoSerpent1</sym>", "varsegno", false },
54+
{ MarkerType::CODA, "<sym>coda</sym>", "codab", false },
55+
{ MarkerType::VARCODA, "<sym>codaSquare</sym>", "varcoda", false },
56+
{ MarkerType::CODETTA, "<sym>coda</sym><sym>coda</sym>", "codetta", false },
57+
{ MarkerType::FINE, "Fine", "fine", true },
58+
{ MarkerType::TOCODA, "To Coda", "coda", true },
59+
{ MarkerType::TOCODASYM, "To <sym>coda</sym>", "coda", true },
60+
{ MarkerType::DA_CODA, "Da Coda", "coda", true },
61+
{ MarkerType::DA_DBLCODA, "Da Doppia Coda", "coda", true },
62+
};
63+
4764
//---------------------------------------------------------
4865
// Marker
4966
//---------------------------------------------------------
@@ -68,73 +85,23 @@ Marker::Marker(EngravingItem* parent, TextStyleType tid)
6885

6986
void Marker::setMarkerType(MarkerType t)
7087
{
88+
bool changeLabel = getProperty(Pid::LABEL) == propertyDefault(Pid::LABEL);
7189
m_markerType = t;
72-
const char* txt = 0;
73-
switch (t) {
74-
case MarkerType::SEGNO:
75-
txt = "<sym>segno</sym>";
76-
setLabel(u"segno");
77-
break;
78-
79-
case MarkerType::VARSEGNO:
80-
txt = "<sym>segnoSerpent1</sym>";
81-
setLabel(u"varsegno");
82-
break;
83-
84-
case MarkerType::CODA:
85-
txt = "<sym>coda</sym>";
86-
setLabel(u"codab");
87-
break;
88-
89-
case MarkerType::VARCODA:
90-
txt = "<sym>codaSquare</sym>";
91-
setLabel(u"varcoda");
92-
break;
93-
94-
case MarkerType::CODETTA:
95-
txt = "<sym>coda</sym><sym>coda</sym>";
96-
setLabel(u"codetta");
97-
break;
98-
99-
case MarkerType::FINE:
100-
txt = "Fine";
101-
initTextStyleType(TextStyleType::REPEAT_RIGHT, true);
102-
setLabel(u"fine");
103-
break;
104-
105-
case MarkerType::TOCODA:
106-
txt = "To Coda";
107-
initTextStyleType(TextStyleType::REPEAT_RIGHT, true);
108-
setLabel(u"coda");
109-
break;
110-
111-
case MarkerType::TOCODASYM:
112-
txt = "To <font size=\"20\"/><sym>coda</sym>";
113-
initTextStyleType(TextStyleType::REPEAT_RIGHT, true);
114-
setLabel(u"coda");
115-
break;
116-
117-
case MarkerType::DA_CODA:
118-
txt = "Da Coda";
119-
initTextStyleType(TextStyleType::REPEAT_RIGHT, true);
120-
setLabel(u"coda");
121-
break;
122-
123-
case MarkerType::DA_DBLCODA:
124-
txt = "Da Doppia Coda";
125-
initTextStyleType(TextStyleType::REPEAT_RIGHT, true);
126-
setLabel(u"coda");
127-
break;
128-
129-
case MarkerType::USER:
130-
break;
131-
132-
default:
133-
LOGD("unknown marker type %d", int(t));
134-
break;
135-
}
136-
if (empty() && txt) {
137-
setXmlText(String::fromAscii(txt));
90+
for (const MarkerTypeTableItem& p : markerTypeTable) {
91+
if (p.type == t) {
92+
if (empty()) {
93+
setXmlText(String::fromAscii(p.text.ascii()));
94+
}
95+
if (changeLabel) {
96+
setLabel(String::fromAscii(p.label.ascii()));
97+
}
98+
TextStyleType ts = p.rightAligned ? TextStyleType::REPEAT_RIGHT : TextStyleType::REPEAT_LEFT;
99+
if (textStyleType() != ts) {
100+
initTextStyleType(ts);
101+
}
102+
103+
break;
104+
}
138105
}
139106
}
140107

@@ -147,16 +114,6 @@ String Marker::markerTypeUserName() const
147114
return TConv::translatedUserName(m_markerType);
148115
}
149116

150-
//---------------------------------------------------------
151-
// styleChanged
152-
//---------------------------------------------------------
153-
154-
void Marker::styleChanged()
155-
{
156-
setMarkerType(m_markerType);
157-
TextBase::styleChanged();
158-
}
159-
160117
//---------------------------------------------------------
161118
// getProperty
162119
//---------------------------------------------------------
@@ -210,6 +167,11 @@ PropertyValue Marker::propertyDefault(Pid propertyId) const
210167
{
211168
switch (propertyId) {
212169
case Pid::LABEL:
170+
for (const MarkerTypeTableItem& p : markerTypeTable) {
171+
if (m_markerType == p.type) {
172+
return String::fromAscii(p.label.ascii());
173+
}
174+
}
213175
return String();
214176
case Pid::MARKER_TYPE:
215177
return MarkerType::FINE;

src/engraving/dom/marker.h

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,6 @@ class Marker final : public TextBase
6969
String label() const { return m_label; }
7070
void setLabel(const String& s) { m_label = s; }
7171

72-
void styleChanged() override;
73-
7472
PropertyValue getProperty(Pid propertyId) const override;
7573
bool setProperty(Pid propertyId, const PropertyValue&) override;
7674
PropertyValue propertyDefault(Pid) const override;
@@ -102,4 +100,13 @@ class Marker final : public TextBase
102100

103101
bool m_centerOnSymbol = true;
104102
};
103+
104+
struct MarkerTypeTableItem {
105+
MarkerType type;
106+
AsciiStringView text;
107+
AsciiStringView label;
108+
bool rightAligned;
109+
};
110+
111+
extern const std::vector<MarkerTypeTableItem> markerTypeTable;
105112
} // namespace mu::engraving

src/importexport/guitarpro/internal/gtp/gpconverter.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -838,11 +838,7 @@ void GPConverter::addDirection(const GPMasterBar* mB, Measure* measure)
838838
} else {
839839
Marker* marker = Factory::createMarker(measure);
840840
marker->setMarkerType(markerType(dir.name));
841-
if (dir.name != "Segno"
842-
&& dir.name != "SegnoSegno"
843-
&& dir.name != "Coda") {
844-
marker->initTextStyleType(TextStyleType::REPEAT_RIGHT);
845-
}
841+
marker->resetProperty(Pid::LABEL);
846842
marker->setTrack(0);
847843
measure->add(marker);
848844
}

src/importexport/guitarpro/tests/data/directions.gp-ref.mscx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -716,7 +716,7 @@
716716
<eid>OC_OC</eid>
717717
<Marker>
718718
<eid>PC_PC</eid>
719-
<style>repeat_right</style>
719+
<style>repeat_left</style>
720720
<text><sym>codaSquare</sym></text>
721721
<label>varcoda</label>
722722
<markerType>varcoda</markerType>

src/importexport/guitarpro/tests/data/directions.gpx-ref.mscx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -716,7 +716,7 @@
716716
<eid>OC_OC</eid>
717717
<Marker>
718718
<eid>PC_PC</eid>
719-
<style>repeat_right</style>
719+
<style>repeat_left</style>
720720
<text><sym>codaSquare</sym></text>
721721
<label>varcoda</label>
722722
<markerType>varcoda</markerType>

src/importexport/mei/internal/meiconverter.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2134,6 +2134,7 @@ void Convert::markerFromMEI(engraving::Marker* marker, const libmei::RepeatMark&
21342134
}
21352135

21362136
marker->setMarkerType(markerType);
2137+
marker->resetProperty(engraving::Pid::LABEL);
21372138

21382139
// @color
21392140
Convert::colorFromMEI(marker, meiRepeatMark);

src/importexport/mnx/internal/import/mnximporter.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -638,6 +638,7 @@ void MnxImporter::createJumpOrMarker(engraving::Measure* measure, const mnx::Fra
638638
throw std::logic_error("Variant is MarkerType but created item is not a Marker.");
639639
}
640640
toMarker(item)->setMarkerType(v);
641+
toMarker(item)->resetProperty(engraving::Pid::LABEL);
641642
} else {
642643
static_assert(!sizeof(T), "Unhandled std::variant alternative in createJumpOrMarker");
643644
}

src/importexport/musicxml/internal/import/importmusicxmlpass2.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4778,18 +4778,19 @@ Marker* MusicXmlParserDirection::findMarker(const String& repeat) const
47784778
// avoid duplicated code
47794779
// apparently this MUST be after setTextStyle
47804780
m->setMarkerType(MarkerType::SEGNO);
4781-
m->setLabel(m->label() + m_segnoId);
4781+
m->setLabel(m->propertyDefault(Pid::LABEL).value<String>() + m_segnoId);
47824782
} else if (repeat == u"coda") {
47834783
m = Factory::createMarker(m_score->dummy());
47844784
m->setMarkerType(MarkerType::CODA);
4785-
m->setLabel(m->label() + m_codaId);
4785+
m->setLabel(m->propertyDefault(Pid::LABEL).value<String>() + m_codaId);
47864786
} else if (repeat == u"fine") {
47874787
m = Factory::createMarker(m_score->dummy(), TextStyleType::REPEAT_RIGHT);
47884788
m->setMarkerType(MarkerType::FINE);
4789+
m->resetProperty(Pid::LABEL);
47894790
} else if (repeat == u"toCoda") {
47904791
m = Factory::createMarker(m_score->dummy(), TextStyleType::REPEAT_RIGHT);
47914792
m->setMarkerType(MarkerType::TOCODA);
4792-
m->setLabel(m->label() + m_codaId);
4793+
m->setLabel(m->propertyDefault(Pid::LABEL).value<String>() + m_codaId);
47934794
}
47944795
return m;
47954796
}

src/importexport/ove/internal/importove.cpp

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,7 @@ void OveToMScore::convertGroups()
416416
for (i = 0; i < m_ove->getPartCount(); ++i) {
417417
int partStaffCount = m_ove->getStaffCount(i);
418418
//if(parts == 0)
419-
// continue;
419+
// continue;
420420
Part* part = parts.at(i);
421421
if (part == 0) {
422422
continue;
@@ -2208,15 +2208,17 @@ void OveToMScore::convertRepeats(Measure* measure, int part, int staff, int trac
22082208

22092209
switch (type) {
22102210
case ovebase::RepeatType::Segno: {
2211-
Marker* marker = Factory::createMarker(measure);
2212-
marker->setMarkerType(MarkerType::SEGNO);
2213-
e = marker;
2211+
Marker* m = Factory::createMarker(measure);
2212+
m->setMarkerType(MarkerType::SEGNO);
2213+
m->resetProperty(Pid::LABEL);
2214+
e = m;
22142215
break;
22152216
}
22162217
case ovebase::RepeatType::Coda: {
2217-
Marker* marker = Factory::createMarker(measure);
2218-
marker->setMarkerType(MarkerType::CODA);
2219-
e = marker;
2218+
Marker* m = Factory::createMarker(measure);
2219+
m->setMarkerType(MarkerType::CODA);
2220+
m->resetProperty(Pid::LABEL);
2221+
e = m;
22202222
break;
22212223
}
22222224
case ovebase::RepeatType::DSAlCoda: {
@@ -2246,12 +2248,14 @@ void OveToMScore::convertRepeats(Measure* measure, int part, int staff, int trac
22462248
case ovebase::RepeatType::ToCoda: {
22472249
Marker* m = Factory::createMarker(measure);
22482250
m->setMarkerType(MarkerType::TOCODA);
2251+
m->resetProperty(Pid::LABEL);
22492252
e = m;
22502253
break;
22512254
}
22522255
case ovebase::RepeatType::Fine: {
22532256
Marker* m = Factory::createMarker(measure);
22542257
m->setMarkerType(MarkerType::FINE);
2258+
m->resetProperty(Pid::LABEL);
22552259
e = m;
22562260
break;
22572261
}

0 commit comments

Comments
 (0)