Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions src/engraving/dom/mscore.h
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,16 @@ enum class KeySigNatural : char {
AFTER = 2 // naturals after accidentals (but always before if going sharps <=> flats)
};

//---------------------------------------------------------
// CourtesyBarlineMode (for key sig. and time sig. changes)
//---------------------------------------------------------

enum class CourtesyBarlineMode : char {
ALWAYS_SINGLE = 0,
ALWAYS_DOUBLE = 1,
DOUBLE_BEFORE_COURTESY = 2,
};

//---------------------------------------------------------
// UpDownMode
//---------------------------------------------------------
Expand Down
62 changes: 51 additions & 11 deletions src/engraving/rendering/dev/measurelayout.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1411,17 +1411,18 @@ double MeasureLayout::createEndBarLines(Measure* m, bool isLastMeasureInSystem,
seg = m->getSegmentR(SegmentType::EndBarLine, m->ticks());
}
seg->setEnabled(true);
//

m->setHasCourtesyKeySig(false);
// Set flag "hasCourtesyKeySig" if this measure needs a courtesy key sig.
// This flag is later used to set a double end bar line and to actually
// create the courtesy key sig.
//

bool show = ctx.conf().styleB(Sid::genCourtesyKeysig) && !m->sectionBreak() && nm;

m->setHasCourtesyKeySig(false);
if (nm && !m->sectionBreak()) {
// Don't change barlines at the end of a section break,
// and don't create courtesy key/time signatures.
bool hasKeySig = false;
bool showCourtesyKeySig = isLastMeasureInSystem && ctx.conf().styleB(Sid::genCourtesyKeysig);

if (isLastMeasureInSystem && show) {
Fraction tick = m->endTick();
for (staff_idx_t staffIdx = 0; staffIdx < nstaves; ++staffIdx) {
const Staff* staff = ctx.dom().staff(staffIdx);
Expand All @@ -1432,25 +1433,64 @@ double MeasureLayout::createEndBarLines(Measure* m, bool isLastMeasureInSystem,
// check if it has court. sig turned off
Segment* s = nm->findSegment(SegmentType::KeySig, tick);
if (s) {
hasKeySig = true;
KeySig* ks = toKeySig(s->element(staffIdx * VOICES));
if (ks && !ks->showCourtesy()) {
continue;
}
}
m->setHasCourtesyKeySig(true);
t = BarLineType::DOUBLE;
if (showCourtesyKeySig) {
m->setHasCourtesyKeySig(true);
}
break;
}
}

int keySigBarlineMode = ctx.conf().styleI(Sid::keySigCourtesyBarlineMode);
if (keySigBarlineMode == int(CourtesyBarlineMode::DOUBLE_BEFORE_COURTESY)) {
if (m->hasCourtesyKeySig()) {
t = BarLineType::DOUBLE;
}
} else if (keySigBarlineMode == int(CourtesyBarlineMode::ALWAYS_DOUBLE)) {
if (hasKeySig) {
t = BarLineType::DOUBLE;
}
}

bool hasTimeSig = false;
bool hasCourtesyTimeSig = false;
bool showCourtesyTimeSig = isLastMeasureInSystem && ctx.conf().styleB(Sid::genCourtesyTimesig);

Segment* tss = nm->findSegmentR(SegmentType::TimeSig, Fraction(0, 1));
if (tss) {
for (track_idx_t track = 0; track < nstaves * VOICES; track += VOICES) {
TimeSig* ts = toTimeSig(tss->element(track));
if (ts) {
hasTimeSig = true;
if (ts->showCourtesySig() && showCourtesyTimeSig) {
hasCourtesyTimeSig = true;
}
break;
}
}
}

int timeSigBarlineMode = ctx.conf().styleI(Sid::timeSigCourtesyBarlineMode);
if (timeSigBarlineMode == int(CourtesyBarlineMode::DOUBLE_BEFORE_COURTESY)) {
if (hasCourtesyTimeSig) {
t = BarLineType::DOUBLE;
}
} else if (timeSigBarlineMode == int(CourtesyBarlineMode::ALWAYS_DOUBLE)) {
if (hasTimeSig) {
t = BarLineType::DOUBLE;
}
}
}

bool force = false;
if (m->repeatEnd()) {
t = BarLineType::END_REPEAT;
force = true;
} else if (isLastMeasureInSystem && m->nextMeasure() && m->nextMeasure()->repeatStart()) {
t = BarLineType::NORMAL;
// force = true;
}

for (staff_idx_t staffIdx = 0; staffIdx < nstaves; ++staffIdx) {
Expand Down
2 changes: 2 additions & 0 deletions src/engraving/style/styledef.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -417,6 +417,8 @@ const std::array<StyleDef::StyleValue, size_t(Sid::STYLES)> StyleDef::styleValue
{ Sid::genCourtesyTimesig, "genCourtesyTimesig", true },
{ Sid::genCourtesyKeysig, "genCourtesyKeysig", true },
{ Sid::genCourtesyClef, "genCourtesyClef", true },
{ Sid::keySigCourtesyBarlineMode, "keySigCourtesyBarlineMode", PropertyValue(int(CourtesyBarlineMode::DOUBLE_BEFORE_COURTESY)) },
{ Sid::timeSigCourtesyBarlineMode, "timeSigCourtesyBarlineMode", PropertyValue(int(CourtesyBarlineMode::ALWAYS_SINGLE)) },
{ Sid::swingRatio, "swingRatio", PropertyValue(60) },
{ Sid::swingUnit, "swingUnit", PropertyValue(String(u"")) },
{ Sid::useStandardNoteNames, "useStandardNoteNames", true },
Expand Down
3 changes: 3 additions & 0 deletions src/engraving/style/styledef.h
Original file line number Diff line number Diff line change
Expand Up @@ -432,6 +432,9 @@ enum class Sid {
genCourtesyKeysig,
genCourtesyClef,

keySigCourtesyBarlineMode,
timeSigCourtesyBarlineMode,

swingRatio,
swingUnit,

Expand Down
12 changes: 12 additions & 0 deletions src/notation/view/widgets/editstyle.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,16 @@ EditStyle::EditStyle(QWidget* parent)
ksng->addButton(radioKeySigNatBefore, int(KeySigNatural::BEFORE));
ksng->addButton(radioKeySigNatAfter, int(KeySigNatural::AFTER));

QButtonGroup* ksbl = new QButtonGroup(this);
ksbl->addButton(radioKeySigCourtesyBarlineAlwaysSingle, int(CourtesyBarlineMode::ALWAYS_SINGLE));
ksbl->addButton(radioKeySigCourtesyBarlineAlwaysDouble, int(CourtesyBarlineMode::ALWAYS_DOUBLE));
ksbl->addButton(radioKeySigCourtesyBarlineDoubleBeforeNewSystem, int(CourtesyBarlineMode::DOUBLE_BEFORE_COURTESY));

QButtonGroup* tsbl = new QButtonGroup(this);
tsbl->addButton(radioTimeSigCourtesyBarlineAlwaysSingle, int(CourtesyBarlineMode::ALWAYS_SINGLE));
tsbl->addButton(radioTimeSigCourtesyBarlineAlwaysDouble, int(CourtesyBarlineMode::ALWAYS_DOUBLE));
tsbl->addButton(radioTimeSigCourtesyBarlineDoubleBeforeNewSystem, int(CourtesyBarlineMode::DOUBLE_BEFORE_COURTESY));

QButtonGroup* ctg = new QButtonGroup(this);
ctg->addButton(clefTab1, int(ClefType::TAB));
ctg->addButton(clefTab2, int(ClefType::TAB_SERIF));
Expand Down Expand Up @@ -539,6 +549,8 @@ EditStyle::EditStyle(QWidget* parent)
{ StyleId::genCourtesyTimesig, false, genCourtesyTimesig, 0 },
{ StyleId::genCourtesyKeysig, false, genCourtesyKeysig, 0 },
{ StyleId::genCourtesyClef, false, genCourtesyClef, 0 },
{ StyleId::keySigCourtesyBarlineMode, false, ksbl, 0 },
{ StyleId::timeSigCourtesyBarlineMode, false, tsbl, 0 },
{ StyleId::swingRatio, false, swingBox, 0 },
{ StyleId::chordsXmlFile, false, chordsXmlFile, 0 },
{ StyleId::dotMag, true, dotMag, 0 },
Expand Down
69 changes: 66 additions & 3 deletions src/notation/view/widgets/editstyle.ui
Original file line number Diff line number Diff line change
Expand Up @@ -4933,9 +4933,6 @@ By default, they will be placed such as that their right end are at the same lev
</widget>
<widget class="QWidget" name="PageBarlines">
<layout class="QVBoxLayout" name="verticalLayout_17">
<property name="spacing">
<number>0</number>
</property>
<item>
<widget class="QGroupBox" name="groupBox_barlines">
<property name="title">
Expand Down Expand Up @@ -5257,6 +5254,66 @@ By default, they will be placed such as that their right end are at the same lev
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="keySigCourtesyBarlineGroup">
<property name="title">
<string>Use double barlines before key signatures</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_61">
<item>
<widget class="QRadioButton" name="radioKeySigCourtesyBarlineAlwaysDouble">
<property name="text">
<string>Always</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioKeySigCourtesyBarlineAlwaysSingle">
<property name="text">
<string>Never</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioKeySigCourtesyBarlineDoubleBeforeNewSystem">
<property name="text">
<string>Only before courtesy key signatures</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="timeSigCourtesyBarlineGroup">
<property name="title">
<string>Use double barlines before time signatures</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_62">
<item>
<widget class="QRadioButton" name="radioTimeSigCourtesyBarlineAlwaysDouble">
<property name="text">
<string>Always</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioTimeSigCourtesyBarlineAlwaysSingle">
<property name="text">
<string>Never</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioTimeSigCourtesyBarlineDoubleBeforeNewSystem">
<property name="text">
<string>Only before courtesy time signatures</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer_12">
<property name="orientation">
Expand Down Expand Up @@ -14604,6 +14661,12 @@ articulation markings are present</string>
<tabstop>resetDoubleBarDistance</tabstop>
<tabstop>repeatBarlineDotSeparation</tabstop>
<tabstop>resetRepeatBarlineDotSeparation</tabstop>
<tabstop>radioKeySigCourtesyBarlineAlwaysDouble</tabstop>
<tabstop>radioKeySigCourtesyBarlineAlwaysSingle</tabstop>
<tabstop>radioKeySigCourtesyBarlineDoubleBeforeNewSystem</tabstop>
<tabstop>radioTimeSigCourtesyBarlineAlwaysDouble</tabstop>
<tabstop>radioTimeSigCourtesyBarlineAlwaysSingle</tabstop>
<tabstop>radioTimeSigCourtesyBarlineDoubleBeforeNewSystem</tabstop>
<tabstop>shortenStem</tabstop>
<tabstop>shortestStem</tabstop>
<tabstop>accidentalNoteDistance</tabstop>
Expand Down