This commit is contained in:
ws 2014-08-21 15:01:54 +02:00
parent 212898437c
commit 8547e27734
4 changed files with 10 additions and 24 deletions

View file

@ -300,7 +300,7 @@ Element* KeySig::drop(const DropData& data)
}
else {
// apply to all staves:
foreach(Staff* s, score()->staves())
foreach(Staff* s, score()->rootScore()->staves())
score()->undoChangeKeySig(s, tick(), k.key());
}
return this;

View file

@ -1783,15 +1783,18 @@ void Score::createMMRests()
ns = mmr->undoGetSegment(Segment::Type::KeySig, m->tick());
for (int staffIdx = 0; staffIdx < _staves.size(); ++staffIdx) {
int track = staffIdx * VOICES;
KeySig* ts = static_cast<KeySig*>(cs->element(track));
KeySig* ts = static_cast<KeySig*>(cs->element(track));
KeySig* nts = static_cast<KeySig*>(ns->element(track));
if (ts) {
if (ns->element(track) == 0) {
if (!nts) {
KeySig* nks = ts->clone();
nks->setParent(ns);
undo(new AddElement(nks));
}
else {
//TODO: check if same key signature
if (nts->keySigEvent() != ts->keySigEvent()) {
undo(new ChangeKeySig(nts, ts->keySigEvent(), nts->showCourtesy()));
}
}
}
}

View file

@ -736,7 +736,7 @@ Segment* Measure::findSegment(Segment::Type st, int t)
for (s = first(); s && s->tick() < t; s = s->next())
;
for (; s && s->tick() == t; s = s->next()) {
if (s->segmentType() == st)
if (s->segmentType() & st)
return s;
}
return 0;

View file

@ -465,25 +465,7 @@ void Score::undoChangeKeySig(Staff* ostaff, int tick, Key key)
lks->linkTo(nks);
else
lks = nks;
}
//
// change all following generated keysigs
//
Measure* lm = measure->nextMeasure();
for (; lm; lm = lm->nextMeasure()) {
Segment* s = lm->findSegment(Segment::Type::KeySig | Segment::Type::KeySigAnnounce, lm->tick());
if (!s)
continue;
KeySig* ks = static_cast<KeySig*>(s->element(track));
if (!ks)
continue;
if (!ks->generated())
break;
if (ks->key() != key) {
KeySigEvent kse = ks->keySigEvent();
kse.setKey(key);
undo(new ChangeKeySig(ks, kse, ks->showCourtesy()));
}
cmdUpdateNotes();
}
}
}
@ -1891,6 +1873,7 @@ void ChangeKeySig::flip()
keysig->setKeySigEvent(ks);
keysig->setShowCourtesy(showCourtesy);
keysig->measure()->setDirty();
int tick = keysig->segment()->tick();
// update keys if keysig was not generated