void TmultiScore::updateSceneRect() { qreal sh; if (m_staves.size() == 1) sh = staff()->height() * m_scale; else sh = m_staves.last()->pos().y() + m_staves.last()->height(); sh = qMax<qreal>(sh, viewport()->height() / transform().m11()); QRectF scRec = staff()->mapToScene(QRectF(0.0, 0.0, staff()->width() + (staff()->isPianoStaff() ? 1.1 : 0.0), sh)).boundingRect(); scoreScene()->setSceneRect(0.0, 0.0, scRec.width(), scRec.height()); scoreScene()->restoreAfterRectChange(); qreal minFree = 17.0; qreal free = viewport()->height() / transform().m11() - (m_staves.last()->pos().y() + m_staves.last()->height()); if (free > minFree) { if ((int)(free / minFree) > m_fakeLines.size()) { for (int i = 0; i < int(free / minFree) - m_fakeLines.size(); ++i) { m_fakeLines << new Tscore5lines(scoreScene()); m_fakeLines.last()->setDisabled(true); } } else if (free / minFree < (qreal)m_fakeLines.size()) deleteFakeLines(m_fakeLines.size() - int(free / minFree)); } else if (free < minFree) deleteFakeLines(m_fakeLines.size()); for (int i = 0; i < m_fakeLines.size(); ++i) { m_fakeLines[i]->setWidth(staff()->width()); m_fakeLines[i]->setPos(lastStaff()->pos().x(), lastStaff()->y() + lastStaff()->height() + i * (minFree)); } // qDebug() << "updateSceneRect" << scoreScene()->sceneRect() << m_staves.size() << staff()->maxNoteCount() << m_fakeLines.size(); }
void TmultiScore::addStaff(TscoreStaff* st) { if (st == 0) { // create new staff at the end of a list m_staves << new TscoreStaff(scoreScene(), 0); lastStaff()->onClefChanged(m_staves.first()->scoreClef()->clef()); lastStaff()->scoreClef()->setReadOnly(m_staves.first()->scoreClef()->readOnly()); lastStaff()->setEnableKeySign(staff()->scoreKey()); if (lastStaff()->scoreKey()) lastStaff()->scoreKey()->setKeySignature(m_staves.first()->scoreKey()->keySignature()); connect(lastStaff(), SIGNAL(hiNoteChanged(int,qreal)), this, SLOT(staffHiNoteChanged(int,qreal))); // ignore for first lastStaff()->setDisabled(m_isDisabled); } else { // staff of TsimpleScore is added this way
Element* Bracket::drop(const DropData& data) { Element* e = data.element; if (e->type() == BRACKET) { Bracket* b = static_cast<Bracket*>(e); b->setParent(parent()); b->setTrack(track()); b->setSpan(span()); b->setFirstStaff(firstStaff()); b->setLastStaff(lastStaff()); b->setLevel(level()); score()->undoRemoveElement(this); score()->undoAddElement(b); return b; } delete e; return 0; }