void MediaDialog::setScore(Score* s) { score = s; Omr* omr = score->omr(); if (omr) { scanFile->setText(omr->path()); addScan->setEnabled(false); removeScan->setEnabled(true); scanFileButton->setEnabled(false); } else { scanFile->setText(QString()); addScan->setEnabled(true); removeScan->setEnabled(false); scanFileButton->setEnabled(true); } Audio* audio = score->audio(); if (audio) { audioFile->setText(audio->path()); addAudio->setEnabled(false); removeAudio->setEnabled(true); audioFileButton->setEnabled(false); } else { audioFile->setText(QString()); addAudio->setEnabled(true); removeAudio->setEnabled(false); audioFileButton->setEnabled(true); } }
void MediaDialog::addScanPressed() { QString path = scanFile->text(); if (score->masterScore()->omr() || path.isEmpty()) return; Omr* omr = new Omr(path, score); if (!omr->readPdf()) { qDebug("read omr failed"); delete omr; return; } score->masterScore()->setOmr(omr); mscore->currentScoreView()->showOmr(true); }
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 MuseScore::importPdf(Score* score, const QString& path) { Omr* omr = new Omr(path, score); if (!omr->readPdf()) { delete omr; return false; } score->setOmr(omr); qreal sp = omr->spatiumMM(); if (sp == 0.0) sp = 1.5; score->setSpatium(sp * DPMM); score->style()->set(StyleVal(ST_pageFillLimit, 1.0)); score->style()->set(StyleVal(ST_lastSystemFillLimit, 0.0)); score->style()->set(StyleVal(ST_staffLowerBorder, 0.0)); score->style()->set(StyleVal(ST_measureSpacing, 1.0)); PageFormat pF(*score->pageFormat()); pF.setEvenLeftMargin(5.0 * DPMM / DPI); pF.setEvenTopMargin(0); pF.setEvenBottomMargin(0); pF.setOddLeftMargin(5.0 * DPMM / DPI); pF.setOddTopMargin(0); pF.setOddBottomMargin(0); score->setPageFormat(pF); score->style()->set(StyleVal(ST_systemDistance, Spatium(omr->systemDistance()))); score->style()->set(StyleVal(ST_akkoladeDistance, Spatium(omr->staffDistance()))); Part* part = new Part(score); Staff* staff = new Staff(score, part, 0); part->staves()->push_back(staff); score->staves().insert(0, staff); staff = new Staff(score, part, 1); part->staves()->push_back(staff); score->staves().insert(1, staff); part->staves()->front()->setBarLineSpan(part->nstaves()); score->insertPart(part, 0); TDuration d(TDuration::V_MEASURE); Measure* measure = 0; int tick = 0; foreach(const OmrPage* omrPage, omr->pages()) { int nsystems = omrPage->systems().size(); int n = nsystems == 0 ? 1 : nsystems; for (int k = 0; k < n; ++k) { int numMeasures = 1; if (k < nsystems) { const OmrSystem& omrSystem = omrPage->systems().at(k); numMeasures = omrSystem.barLines.size() - 1; if (numMeasures < 1) numMeasures = 1; else if (numMeasures > 50) // sanity check numMeasures = 50; } for (int i = 0; i < numMeasures; ++i) { measure = new Measure(score); measure->setTick(tick); Rest* rest = new Rest(score, d); rest->setDuration(Fraction(4,4)); rest->setTrack(0); Segment* s = measure->getSegment(SegChordRest, tick); s->add(rest); rest = new Rest(score, d); rest->setDuration(Fraction(4,4)); rest->setTrack(4); s->add(rest); score->measures()->add(measure); tick += MScore::division * 4; } if (k < (nsystems-1)) { LayoutBreak* b = new LayoutBreak(score); b->setSubtype(LAYOUT_BREAK_LINE); measure->add(b); } } if (measure) { LayoutBreak* b = new LayoutBreak(score); b->setSubtype(LAYOUT_BREAK_PAGE); measure->add(b); } } //---create bracket score->staff(0)->setBracket(0, BRACKET_AKKOLADE); score->staff(0)->setBracketSpan(0, 2); //---create clefs measure = score->firstMeasure(); if (measure) { Clef* clef = new Clef(score); clef->setClefType(CLEF_G); clef->setTrack(0); Segment* segment = measure->getSegment(SegClef, 0); segment->add(clef); clef = new Clef(score); clef->setClefType(CLEF_F); clef->setTrack(4); segment->add(clef); } score->setShowOmr(true); omr->page(0)->readHeader(score); score->rebuildMidiMapping(); return true; }