コード例 #1
0
ファイル: splitMeasure.cpp プロジェクト: AntonioBL/MuseScore
void Score::splitMeasure(Segment* segment)
      {
      if (segment->rtick() == 0) {
            MScore::setError(CANNOT_SPLIT_MEASURE_FIRST_BEAT);
            return;
            }
      if (segment->splitsTuplet()) {
            MScore::setError(CANNOT_SPLIT_MEASURE_TUPLET);
            return;
            }
      Measure* measure = segment->measure();

      ScoreRange range;
      range.read(measure->first(), measure->last());

      undoRemoveMeasures(measure, measure);
      undoInsertTime(measure->tick(), -measure->ticks());

      // create empty measures:
      Measure* m2 = toMeasure(insertMeasure(Element::Type::MEASURE, measure->next(), true));
      Measure* m1 = toMeasure(insertMeasure(Element::Type::MEASURE, m2, true));

      int tick = segment->tick();
      m1->setTick(measure->tick());
      m2->setTick(tick);
      int ticks1 = segment->tick() - measure->tick();
      int ticks2 = measure->ticks() - ticks1;
      m1->setTimesig(measure->timesig());
      m2->setTimesig(measure->timesig());
      m1->adjustToLen(Fraction::fromTicks(ticks1));
      m2->adjustToLen(Fraction::fromTicks(ticks2));
      range.write(this, m1->tick());
      }
コード例 #2
0
ファイル: splitMeasure.cpp プロジェクト: garbo999/MuseScore
void Score::splitMeasure(ChordRest* cr)
      {
      Segment* segment = cr->segment();
      Measure* measure = segment->measure();

      ScoreRange range;
      range.read(measure->first(), measure->last());

      undoRemoveMeasures(measure, measure);
      undoInsertTime(measure->tick(), -(measure->endTick() - measure->tick()));

      // create empty measures:
      Measure* m2 = toMeasure(insertMeasure(Element::Type::MEASURE, measure->next(), true));
      Measure* m1 = toMeasure(insertMeasure(Element::Type::MEASURE, m2, true));

      int tick = segment->tick();
      m1->setTick(measure->tick());
      m2->setTick(tick);
      int ticks1 = segment->tick() - measure->tick();
      int ticks2 = measure->ticks() - ticks1;
      m1->setTimesig(measure->timesig());
      m2->setTimesig(measure->timesig());
      m1->adjustToLen(Fraction::fromTicks(ticks1));
      m2->adjustToLen(Fraction::fromTicks(ticks2));
      range.write(this, m1->tick());
      }