示例#1
0
void TestTools::undoSlashRhythm()
      {
      QString readFile(DIR + "undoSlashRhythm.mscx");
      QString writeFile1("undoSlashRhythm01-test.mscx");
      QString reference1(DIR  + "undoSlashRhythm01-ref.mscx");
      QString writeFile2("undoSlashRhythm02-test.mscx");
      QString reference2(DIR  + "undoSlashRhythm02-ref.mscx");

      Score* score = readScore(readFile);
      score->doLayout();

      // select all
      score->startCmd();
      score->cmdSelectAll();
      score->endCmd();

      // do
      score->startCmd();
      score->cmdSlashRhythm();
      score->endCmd();
      QVERIFY(saveCompareScore(score, writeFile1, reference1));

      // undo
      score->undo()->undo();
      QVERIFY(saveCompareScore(score, writeFile2, reference2));

      delete score;
      }
示例#2
0
void TestTools::undoLockLineBreaks()
      {
      QString readFile(DIR + "undoLockLineBreaks.mscx");
      QString writeFile1("undoLockLineBreaks01-test.mscx");
      QString reference1(DIR  + "undoLockLineBreaks01-ref.mscx");
      QString writeFile2("undoLockLineBreaks02-test.mscx");
      QString reference2(DIR  + "undoLockLineBreaks02-ref.mscx");

      Score* score = readScore(readFile);
      score->doLayout();

      // select all
      score->startCmd();
      score->cmdSelectAll();
      score->endCmd();

      // do
      score->startCmd();
      score->addRemoveBreaks(0, true);
      score->endCmd();
      QVERIFY(saveCompareScore(score, writeFile1, reference1));

      // undo
      score->undo()->undo();
      QVERIFY(saveCompareScore(score, writeFile2, reference2));

      delete score;
      }
示例#3
0
void TestNote::grace()
      {
      Score* score = readScore(DIR + "grace.mscx");
      score->doLayout();
      Chord* chord = score->firstMeasure()->findChord(0, 0);
      Note* note = chord->upNote();

      // create
      score->setGraceNote(chord, note->pitch(), NoteType::APPOGGIATURA, MScore::division/2);
      Chord* gc = chord->graceNotes().first();
      Note* gn = gc->notes().first();
//      Note* n = static_cast<Note*>(writeReadElement(gn));
//      QCOMPARE(n->noteType(), NoteType::APPOGGIATURA);
//      delete n;

      // tie
      score->startCmd();
      score->select(gn);
      score->cmdAddTie();
      score->endCmd();
//      n = static_cast<Note*>(writeReadElement(gn));
//      QVERIFY(n->tieFor() != 0);
//      delete n;

      // tremolo
      score->startCmd();
      Tremolo* tr = new Tremolo(score);
      tr->setTremoloType(TremoloType::R16);
      tr->setParent(gc);
      tr->setTrack(gc->track());
      score->undoAddElement(tr);
      score->endCmd();
//      Chord* c = static_cast<Chord*>(writeReadElement(gc));
//      QVERIFY(c->tremolo() != 0);
//      delete c;

      // articulation
      score->startCmd();
      Articulation* ar = new Articulation(score);
      ar->setArticulationType(ArticulationType::Sforzatoaccent);
      ar->setParent(gc);
      ar->setTrack(gc->track());
      score->undoAddElement(ar);
      score->endCmd();
//      c = static_cast<Chord*>(writeReadElement(gc));
//      QVERIFY(c->articulations().size() == 1);
//      delete c;

      QVERIFY(saveCompareScore(score, "grace-test.mscx", DIR + "grace-ref.mscx"));

      }
示例#4
0
void TestBarline::barline04()
      {
      Score* score = readScore(DIR + "barline04.mscx");
      QVERIFY(score);
      score->doLayout();

      score->startCmd();
      // 'go' to 5th measure
      Measure* msr = score->firstMeasure();
      for (int i=0; i < 4; i++)
            msr = msr->nextMeasure();
      // check span data of measure-initial start-repeat bar line
      Segment* seg = msr->findSegment(SegmentType::StartRepeatBarLine, msr->tick());
      QVERIFY2(seg != nullptr, "No SegStartRepeatBarLine segment in measure 5.");

      BarLine* bar = static_cast<BarLine*>(seg->element(0));
      QVERIFY2(bar != nullptr, "No start-repeat barline in measure 5.");

      bar->undoChangeProperty(Pid::BARLINE_SPAN, 2);
      bar->undoChangeProperty(Pid::BARLINE_SPAN_FROM, 2);
      bar->undoChangeProperty(Pid::BARLINE_SPAN_TO, 6);
      score->endCmd();

      QVERIFY2(bar->spanStaff() && bar->spanFrom() == 2 && bar->spanTo() == 6,
            "Wrong span data in start-repeat barline of measure 5.");

      // check start-repeat bar ine in second staff is gone
      QVERIFY2(seg->element(1) == nullptr, "Extra start-repeat barline in 2nd staff of measure 5.");

//      QVERIFY(saveCompareScore(score, "barline04.mscx", DIR + "barline04-ref.mscx"));
      delete score;
      }
示例#5
0
void TestTools::undoSlashFill()
      {
      QString readFile(DIR + "undoSlashFill.mscx");
      QString writeFile1("undoSlashFill01-test.mscx");
      QString reference1(DIR  + "undoSlashFill01-ref.mscx");
      QString writeFile2("undoSlashFill02-test.mscx");
      QString reference2(DIR  + "undoSlashFill02-ref.mscx");

      Score* score = readScore(readFile);
      score->doLayout();

      // select
      Segment* s = score->firstMeasure()->findSegment(Segment::Type::ChordRest, MScore::division * 2);
      score->selection().setRange(s, score->lastSegment(), 0, 2);

      // do
      score->startCmd();
      score->cmdSlashFill();
      score->endCmd();
      QVERIFY(saveCompareScore(score, writeFile1, reference1));

      // undo
      score->undo()->undo();
      QVERIFY(saveCompareScore(score, writeFile2, reference2));

      delete score;
      }
示例#6
0
void TestTranspose::undoDiatonicTranspose()
      {
      QString readFile(DIR + "undoDiatonicTranspose.mscx");
      QString writeFile1("undoDiatonicTranspose01-test.mscx");
      QString reference1(DIR  + "undoDiatonicTranspose01-ref.mscx");
      QString writeFile2("undoDiatonicTranspose02-test.mscx");
      QString reference2(DIR  + "undoDiatonicTranspose02-ref.mscx");

      Score* score = readScore(readFile);

      // select all
      score->cmdSelectAll();

      // transpose diatonic fourth down
      score->startCmd();
      score->transpose(TransposeMode::DIATONICALLY, TransposeDirection::DOWN, 0, 3,
                       true, false, false);
      score->endCmd();
      QVERIFY(saveCompareScore(score, writeFile1, reference1));

      // undo
      score->undo()->undo();
      QVERIFY(saveCompareScore(score, writeFile2, reference2));

      delete score;
      }
示例#7
0
void InspectorTremoloBar::propertiesClicked()
      {
      TremoloBar* b = toTremoloBar(inspector->element());
      Score* score = b->score();
      score->startCmd();
      mscore->currentScoreView()->editTremoloBarProperties(b);
      score->setLayoutAll();
      score->endCmd();
      }
示例#8
0
void InspectorBend::propertiesClicked()
      {
      Bend* b = toBend(inspector->element());
      Score* score = b->score();
      score->startCmd();
      mscore->currentScoreView()->editBendProperties(b);
      score->setLayoutAll();
      score->endCmd();
      }
示例#9
0
void InspectorElement::apply()
      {
      Element* e = inspector->element();
      Score* score = e->score();
      score->startCmd();
      ie->apply();
      score->setLayoutAll(true);
      score->endCmd();
      mscore->endCmd();
      }
示例#10
0
void TestExchangevoices::glissandi()
      {
      QString p1 = DIR + "exchangevoices-gliss.mscx";
      QVERIFY(score);
      Score* score = readScore(p1);
      score->doLayout();

      // select all
      score->startCmd();
      score->cmdSelectAll();
      score->endCmd();

      // do
      score->startCmd();
      score->cmdExchangeVoice(0,1);
      score->endCmd();

      // compare
      QVERIFY(saveCompareScore(score, "exchangevoices-gliss.mscx", DIR + "exchangevoices-gliss-ref.mscx"));
      }
示例#11
0
void InspectorBarLine::presetDefaultClicked()
      {
      BarLine* bl = toBarLine(inspector->element());
      Score* score = bl->score();
      score->startCmd();

      bl->undoResetProperty(P_ID::BARLINE_SPAN);
      bl->undoResetProperty(P_ID::BARLINE_SPAN_FROM);
      bl->undoResetProperty(P_ID::BARLINE_SPAN_TO);

      score->endCmd();
      }
示例#12
0
void InspectorBarLine::presetTick2Clicked()
      {
      BarLine* bl = toBarLine(inspector->element());
      Score* score = bl->score();
      score->startCmd();

      bl->undoChangeProperty(P_ID::BARLINE_SPAN, false);
      bl->undoChangeProperty(P_ID::BARLINE_SPAN_FROM, BARLINE_SPAN_TICK2_FROM);
      bl->undoChangeProperty(P_ID::BARLINE_SPAN_TO,   BARLINE_SPAN_TICK2_TO);

      score->endCmd();
      }
示例#13
0
void InspectorGroupElement::setColor()
      {
      if (inspector->el().isEmpty())
            return;
      Score* score = inspector->el().front()->score();
      score->startCmd();
      for (Element* e : inspector->el()) {
            if (e->getProperty(P_ID::COLOR) != QVariant(ge.color->color()))
                  e->undoChangeProperty(P_ID::COLOR, ge.color->color());
            }
      score->endCmd();
      }
示例#14
0
void InspectorGroupElement::setVisible()
      {
      if (inspector->el().isEmpty())
            return;
      Score* score = inspector->el().front()->score();
      score->startCmd();
      for (Element* e : inspector->el()) {
            if (!e->getProperty(P_ID::VISIBLE).toBool())
                  e->undoChangeProperty(P_ID::VISIBLE, true);
            }
      score->endCmd();
      }
示例#15
0
void InspectorClef::apply()
      {
      Clef* clef   = static_cast<Clef*>(inspector->element());
      Score* score = clef->score();
      score->startCmd();

      iElement->apply();
      iSegment->apply();

      score->setLayoutAll(true);
      score->endCmd();
      mscore->endCmd();
      }
示例#16
0
void InspectorBarLine::presetShort2Clicked()
      {
      BarLine* bl = toBarLine(inspector->element());
      Score* score = bl->score();
      score->startCmd();

      bl->undoChangeProperty(P_ID::BARLINE_SPAN, false);
      bl->undoChangeProperty(P_ID::BARLINE_SPAN_FROM, BARLINE_SPAN_SHORT2_FROM);
      int shortDelta = bl->staff() ? (bl->staff()->lines(bl->tick()) - 5) * 2 : 0;
      bl->undoChangeProperty(P_ID::BARLINE_SPAN_TO,   BARLINE_SPAN_SHORT2_TO + shortDelta);

      score->endCmd();
      }
示例#17
0
void InspectorBarLine::setAsStaffDefault()
      {
      BarLine* bl = toBarLine(inspector->element());
      Staff* staff = bl->staff();
      Score* score = bl->score();
      score->startCmd();
      staff->undoChangeProperty(Pid::STAFF_BARLINE_SPAN,      bl->getProperty(Pid::BARLINE_SPAN));
      staff->undoChangeProperty(Pid::STAFF_BARLINE_SPAN_FROM, bl->getProperty(Pid::BARLINE_SPAN_FROM));
      staff->undoChangeProperty(Pid::STAFF_BARLINE_SPAN_TO,   bl->getProperty(Pid::BARLINE_SPAN_TO));
      if (bl->barLineType() == BarLineType::NORMAL)
            bl->setGenerated(true);
      score->endCmd();
      }
示例#18
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;
      }
示例#19
0
void InspectorNote::apply()
      {
      Note* note    = static_cast<Note*>(inspector->element());
      Score*  score = note->score();
      score->startCmd();

      iElement->apply();
      iNote->apply();
      iSegment->apply();

      score->setLayoutAll(true);
      score->endCmd();
      mscore->endCmd();
      }
示例#20
0
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;
      }
示例#21
0
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 TestInstrumentChange::testChange()
      {
      Score* score = test_pre("change");
      Measure* m = score->firstMeasure()->nextMeasure();
      Segment* s = m->first(Segment::Type::ChordRest);
      InstrumentChange* ic = static_cast<InstrumentChange*>(s->annotations()[0]);
      Instrument* ni = score->staff(1)->part()->instr();
      ic->setInstrument(*ni);
      score->startCmd();
      ic->setText("Instrument Oboe");
      score->undo(new ChangeInstrument(ic, ic->instrument()));
      score->endCmd();
      score->doLayout();
      test_post(score, "change");
      }
示例#23
0
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;
      }
void UploadScoreDialog::uploadSuccess(const QString& url)
      {
      setVisible(false);
      Score* score = mscore->currentScore()->rootScore();
      QMap<QString, QString>  metatags = score->metaTags();
      metatags.insert("source", url);
      score->startCmd();
      score->undo(new ChangeMetaTags(score, metatags));
      score->endCmd();
      QMessageBox::information(this,
               tr("Success"),
               tr("Finished! <a href=\"%1\">Go to my score</a>.").arg(url),
               QMessageBox::Ok, QMessageBox::NoButton);

      }
示例#25
0
void TestNote::tpcTranspose()
      {
      Score* score = readScore(DIR + "tpc-transpose.mscx");
      score->doLayout();

      score->startCmd();
      Measure* m = score->firstMeasure();
      score->select(m, SelectType::SINGLE, 0);
      score->changeAccidental(AccidentalType::FLAT);
      score->endCmd();

      score->startCmd();
      m = m->nextMeasure();
      score->select(m, SelectType::SINGLE, 0);
      score->upDown(false, UpDownMode::CHROMATIC);
      score->endCmd();

      score->startCmd();
      score->cmdConcertPitchChanged(true, true);
      score->endCmd();

      QVERIFY(saveCompareScore(score, "tpc-transpose-test.mscx", DIR + "tpc-transpose-ref.mscx"));

      }
示例#26
0
void InspectorRest::apply()
      {
      Rest* rest       = static_cast<Rest*>(inspector->element());
      Score* score     = rest->score();
      score->startCmd();

      iElement->apply();
      iSegment->apply();
      bool val = small->isChecked();
      if (val != rest->small())
            score->undoChangeProperty(rest, P_SMALL, val);
      score->setLayoutAll(true);
      score->endCmd();
      mscore->endCmd();
      }
示例#27
0
void InspectorHairpin::apply()
      {
      HairpinSegment* hairpinSegment = static_cast<HairpinSegment*>(inspector->element());

      Hairpin* hairpin = hairpinSegment->hairpin();
      Hairpin::HairpinType vt = hairpin->subtype();
      Hairpin::HairpinType nt = Hairpin::HairpinType(iHairpin.subtype->currentIndex());
      if (vt != nt) {
            Score* score = hairpin->score();
            score->startCmd();
            score->undoChangeProperty(hairpin, P_HAIRPIN_TYPE, nt);
            score->endCmd();
            mscore->endCmd();
            }
      }
示例#28
0
void TestMeasure::insertBfKeyChange()
      {
      Score* score = readScore(DIR + "measure-insert_bf_key.mscx");
      score->doLayout();
      // 4th measure
      Measure* m = score->firstMeasure()->nextMeasure();
      m = m->nextMeasure()->nextMeasure();
      score->startCmd();
      score->insertMeasure(Element::MEASURE, m);
      score->endCmd();
      QVERIFY(saveCompareScore(score, "measure-insert_bf_key.mscx", DIR + "measure-insert_bf_key-ref.mscx"));
      score->undo()->undo();
      score->doLayout();
      QVERIFY(saveCompareScore(score, "measure-insert_bf_key_undo.mscx", DIR + "measure-insert_bf_key.mscx"));
      delete score;
      }
示例#29
0
void InspectorBeam::apply()
      {
      Beam* beam   = static_cast<Beam*>(inspector->element());
      Score* score = beam->score();

      bool distribute = b.distribute->isChecked();
      Direction d     = Direction(b.direction->currentIndex());
      score->startCmd();
      if (beam->distribute() != distribute)
            score->undoChangeProperty(beam, P_DISTRIBUTE, distribute);
      if (beam->beamDirection() != d)
            score->undoChangeProperty(beam, P_DIRECTION, d);
      score->setLayoutAll(true);
      score->endCmd();
      mscore->endCmd();
      }
示例#30
0
void InspectorSpacer::apply()
      {
      Spacer* spacer = static_cast<Spacer*>(inspector->element());
      Score* score   = spacer->score();
      qreal space    = sp.height->value() * spacer->spatium();
      if (space != spacer->gap()) {
            score->startCmd();
            //TODO make undoable
            spacer->setGap(space);
            score->setLayoutAll(true);
            score->setDirty(true);

            score->endCmd();
            mscore->endCmd();
            }
      }