Skip to content

Commit

Permalink
Restricted adding an element to linked staves
Browse files Browse the repository at this point in the history
  • Loading branch information
Eism committed Oct 17, 2023
1 parent 3a54784 commit 38fcec7
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 6 deletions.
13 changes: 11 additions & 2 deletions src/engraving/dom/measure.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3197,7 +3197,16 @@ void Measure::checkTrailer()

bool Measure::canAddStringTunings(staff_idx_t staffIdx) const
{
const StringData* stringData = score()->staff(staffIdx)->part()->instrument(tick())->stringData();
const Staff* staff = score()->staff(staffIdx);
if (!staff) {
return false;
}

if (staff->isLinked()) {
return false;
}

const StringData* stringData = staff->part()->instrument(tick())->stringData();
if (!stringData || stringData->frettedStrings() == 0) {
return false;
}
Expand All @@ -3206,7 +3215,7 @@ bool Measure::canAddStringTunings(staff_idx_t staffIdx) const
bool alreadyHasStringTunings = false;
for (const Segment& segment : m_segments) {
for (EngravingItem* element : segment.annotations()) {
if (element && element->isStringTunings()) {
if (element && element->isStringTunings() && element->staffIdx() == staffIdx) {
alreadyHasStringTunings = true;
break;
}
Expand Down
4 changes: 2 additions & 2 deletions src/engraving/dom/stringtunings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ String StringTunings::accessibleInfo() const

const std::vector<instrString>& stringList = stringData->stringList();
int numOfStrings = static_cast<int>(stringList.size());
for (string_idx_t i = 0; i < numOfStrings; ++i) {
for (int i = 0; i < numOfStrings; ++i) {
string_idx_t index = numOfStrings - i - 1;
if (mu::contains(m_visibleStrings, index)) {
String pitchStr = pitch2string(stringList[index].pitch);
Expand Down Expand Up @@ -249,7 +249,7 @@ String StringTunings::generateText() const
const std::vector<instrString>& stringList = stringData->stringList();
std::vector<String> visibleStringList;
int numOfStrings = static_cast<int>(stringList.size());
for (string_idx_t i = 0; i < numOfStrings; ++i) {
for (int i = 0; i < numOfStrings; ++i) {
string_idx_t index = numOfStrings - i - 1;
if (mu::contains(m_visibleStrings, index)) {
String pitchStr = pitch2string(stringList[index].pitch);
Expand Down
2 changes: 1 addition & 1 deletion src/engraving/rendering/dev/tlayout.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5024,7 +5024,7 @@ void TLayout::layoutStringTunings(StringTunings* item, LayoutContext& ctx)
}

Segment* parentSegment = item->segment();
item->move(PointF(-parentSegment->x(), 0.0));
item->move(PointF(-parentSegment->x() + item->spatium(), 0.0));

Autoplace::autoplaceSegmentElement(item, item->mutldata());
}
Expand Down
2 changes: 1 addition & 1 deletion src/engraving/rendering/stable/tlayout.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4557,7 +4557,7 @@ void TLayout::layoutStringTunings(StringTunings* item, LayoutContext& ctx)
}

Segment* parentSegment = item->segment();
item->move(PointF(-parentSegment->x(), 0.0));
item->move(PointF(-parentSegment->x() + item->spatium(), 0.0));

Autoplace::autoplaceSegmentElement(item, item->mutldata());
}
Expand Down

0 comments on commit 38fcec7

Please sign in to comment.