QSplitter* ScoreTab::viewSplitter(int n) const { TabScoreView* tsv = static_cast<TabScoreView*>(tab->tabData(n).value<void*>()); if (tsv == 0) { // qDebug("ScoreTab::viewSplitter %d is zero", n); return 0; } Score* score = tsv->score; if (tsv->part) { QList<Excerpt*>& excerpts = score->excerpts(); if (!excerpts.isEmpty() && ((tsv->part - 1) < excerpts.size())) score = excerpts.at(tsv->part - 1)->partScore(); } int nn = stack->count(); for (int i = 0; i < nn; ++i) { QSplitter* sp = static_cast<QSplitter*>(stack->widget(i)); if (sp->count() == 0) return 0; ScoreView* v = static_cast<ScoreView*>(sp->widget(0)); if (v->score() == score) return sp; } return 0; }
void TestMeasure::insertMeasureEnd() { Score* score = readScore(DIR + "measure01.mscx"); score->doLayout(); foreach(Excerpt* e, score->excerpts()) e->score()->doLayout(); score->startCmd(); score->insertMeasure(Element::MEASURE, 0); score->endCmd(); QVERIFY(saveCompareScore(score, "measure01-3.mscx", DIR + "measure01-3-ref.mscx")); delete score; }
void TestMeasure::insertMeasureBegin() { Score* score = readScore(DIR + "measure1.mscx"); score->doLayout(); foreach(Excerpt* e, score->excerpts()) e->score()->doLayout(); Measure* m = score->firstMeasure(); score->startCmd(); score->insertMeasure(Element::MEASURE, m); score->endCmd(); QVERIFY(saveCompareScore(score, "measure1-2.mscx", DIR + "measure1-2o.mscx")); delete score; }
void TestMeasure::spanner_a() { Score* score = readScore(DIR + "measure-3.mscx"); score->doLayout(); foreach(Excerpt* e, score->excerpts()) e->score()->doLayout(); Measure* m = score->firstMeasure()->nextMeasure(); score->startCmd(); score->insertMeasure(Element::MEASURE, m); score->endCmd(); QVERIFY(saveCompareScore(score, "measure-4.mscx", DIR + "measure-4-ref.mscx")); delete score; }
void TestMeasure::spanner_D() { Score* score = readScore(DIR + "measure-9.mscx"); score->doLayout(); foreach(Excerpt* e, score->excerpts()) e->score()->doLayout(); Measure* m = score->firstMeasure()->nextMeasure(); score->startCmd(); score->select(m); score->cmdDeleteSelectedMeasures(); score->endCmd(); QVERIFY(saveCompareScore(score, "measure-9.mscx", DIR + "measure-9-ref.mscx")); delete score; }
Score* MTest::readCreatedScore(const QString& name) { Score* score = new Score(mscore->baseStyle()); score->setName(name); // MScore::testMode = true; QString csl = score->fileInfo()->suffix().toLower(); Score::FileError rv; if (csl == "cap") rv = importCapella(score, name); else if (csl == "capx") rv = importCapXml(score, name); else if (csl == "sgu") rv = importBB(score, name); else if (csl == "mscz" || csl == "mscx") rv = score->loadMsc(name, false); else if (csl == "mxl") rv = importCompressedMusicXml(score, name); #ifdef OMR else if (csl == "pdf") rv = importPdf(score, name); #endif else if (csl == "xml") rv = importMusicXml(score, name); else if (csl == "gp3" || csl == "gp4" || csl == "gp5") rv = importGTP(score, name); else rv = Score::FileError::FILE_UNKNOWN_TYPE; if (rv != Score::FileError::FILE_NO_ERROR) { QWARN(qPrintable(QString("readScore: cannot load <%1> type <%2>\n").arg(name).arg(csl))); delete score; return 0; } score->updateNotes(); for (Excerpt* e : score->excerpts()) e->score()->updateNotes(); return score; }
void ScoreTab::setCurrent(int n) { if (n == -1) { clearTab2(); tab2->setVisible(false); // clearTab2(); //?? emit currentScoreViewChanged(0); return; } TabScoreView* tsv = static_cast<TabScoreView*>(tab->tabData(n).value<void*>()); QSplitter* vs = viewSplitter(n); ScoreView* v; if (!vs) { vs = new QSplitter; v = new ScoreView; tab2->blockSignals(true); tab2->setCurrentIndex(0); tab2->blockSignals(false); vs->addWidget(v); v->setScore(scoreList->value(n)); stack->addWidget(vs); } else { v = static_cast<ScoreView*>(vs->widget(0)); } #ifdef OMR if (v) { Score* score = v->score(); if (score->showOmr() && score->omr()) { if (vs->count() < 2) { Omr* omr = score->omr(); OmrView* sv = omr->newOmrView(v); v->setOmrView(sv); vs->addWidget(sv); connect(v, SIGNAL(scaleChanged(double)), sv, SLOT(setScale(double))); connect(v, SIGNAL(offsetChanged(double,double)), sv, SLOT(setOffset(double,double))); const QTransform _matrix = v->matrix(); double _spatium = score->spatium(); double scale = _matrix.m11() * _spatium; sv->setScale(scale); sv->setOffset(_matrix.dx(), _matrix.dy()); QList<int> sizes; sizes << 100 << 100; vs->setSizes(sizes); } } else { if (vs->count() > 1) { QWidget* w = vs->widget(1); delete w; } } } #endif stack->setCurrentWidget(vs); clearTab2(); if (v) { Score* score = v->score(); if (score->parentScore()) score = score->parentScore(); QList<Excerpt*>& excerpts = score->excerpts(); if (!excerpts.isEmpty()) { tab2->blockSignals(true); tab2->addTab(score->name().replace("&","&&")); foreach(const Excerpt* excerpt, excerpts) { tab2->addTab(excerpt->partScore()->name().replace("&","&&")); } tab2->setCurrentIndex(tsv->part); tab2->blockSignals(false); tab2->setVisible(true); }
bool Album::createScore(const QString& fn) { loadScores(); Score* firstScore = _scores[0]->score; if (!firstScore) { qDebug("First score is NULL. Will not attempt to join scores."); return false; } // do layout for first score's root and excerpt scores firstScore->doLayout(); for (int i = 0; i < firstScore->excerpts().count(); i++) { if (firstScore->excerpts().at(i)->partScore()) { firstScore->excerpts().at(i)->partScore()->doLayout(); } else { qDebug("First score has excerpts, but excerpt %d is NULL. Will not attempt to join scores.", i); return false; } } Score* score = firstScore->clone(); int excerptCount = firstScore->excerpts().count(); bool joinExcerpt = true; for (AlbumItem* item : _scores) { if (item->score == 0 || item->score == firstScore) continue; if (item->score->excerpts().count() != excerptCount) { joinExcerpt = false; qDebug("Will not join parts. Album item \"%s\". Mismatch between number of excerpts with first album item \"%s\"", qPrintable(item->name), qPrintable(_scores[0]->name)); break; } } if (!joinExcerpt) { for (Excerpt* ex : score->excerpts()) score->removeExcerpt(ex->partScore()); } for (AlbumItem* item : _scores) { if (item->score == 0 || item->score == firstScore) continue; // try to append root score item->score->doLayout(); if (!score->appendScore(item->score)) { qDebug("Cannot append root score of album item \"%s\".", qPrintable(item->name)); delete score; return false; } // try to append each excerpt if (joinExcerpt) { for (int i = 0; i < score->excerpts().count(); i++) { Score* currentScoreExcerpt = item->score->excerpts().at(i)->partScore(); if (currentScoreExcerpt) { currentScoreExcerpt->doLayout(); if (!score->excerpts().at(i)->partScore()->appendScore(currentScoreExcerpt)) { qDebug("Cannot append excerpt %d of album item \"%s\".", i, qPrintable(item->name)); delete score; return false; } } else { qDebug("First score has excerpts, but excerpt %d of album item \"%s\" is NULL. Will not attempt to join scores.", i, qPrintable(item->name)); delete score; return false; } } } } score->fileInfo()->setFile(fn); qDebug("Album::createScore: save file"); try { QString suffix = score->fileInfo()->suffix().toLower(); if (suffix == "mscz") score->saveCompressedFile(*score->fileInfo(), false); else if (suffix == "mscx") score->saveFile(*score->fileInfo()); } catch (QString s) { delete score; return false; } delete score; return true; }