예제 #1
0
void Marker::setMarkerType(MarkerType t)
      {
      _markerType = t;
      ScoreFont* f = score()->scoreFont();
      switch(t) {
            case MarkerType::SEGNO:
                  setText(f->toString(SymId::segno));
                  setLabel("segno");
                  break;

            case MarkerType::VARSEGNO:
                  setText(f->toString(SymId::segno));       // TODO-smufl
                  setLabel("varsegno");
                  break;

            case MarkerType::CODA:
                  setText(f->toString(SymId::coda));
                  setLabel("codab");
                  break;

            case MarkerType::VARCODA:
                  setText(f->toString(SymId::codaSquare));
                  setLabel("varcoda");
                  break;

            case MarkerType::CODETTA:
                  setText(f->toString(SymId::codaSquare));  // TODO-smufl
                  setLabel("codetta");
                  break;

            case MarkerType::FINE:
                  setText("Fine");
                  setLabel("fine");
                  break;

            case MarkerType::TOCODA:
                  setText("To Coda");
                  setLabel("coda");
                  break;

            case MarkerType::USER:
                  break;

            default:
                  qDebug("unknown marker type %d\n", t);
                  break;
            }
      }
예제 #2
0
void TimeSigProperties::accept()
{
    if (zText->text() != timesig->numeratorString())
        timesig->setNumeratorString(zText->text());
    if (nText->text() != timesig->denominatorString())
        timesig->setDenominatorString(nText->text());

    TimeSigType ts = TimeSigType::NORMAL;
    if (textButton->isChecked())
        ts = TimeSigType::NORMAL;
    else if (fourfourButton->isChecked())
        ts = TimeSigType::FOUR_FOUR;
    else if (allaBreveButton->isChecked())
        ts = TimeSigType::ALLA_BREVE;
    else if (otherButton->isChecked()) {
        // if other symbol, set as normal text...
        ts = TimeSigType::NORMAL;
        ScoreFont* scoreFont = timesig->score()->scoreFont();
        SymId symId = (SymId)( otherCombo->itemData(otherCombo->currentIndex()).toInt() );
        // ...and set numerator to font string for symbol and denominator to empty string
        timesig->setNumeratorString(scoreFont->toString(symId));
        timesig->setDenominatorString(QString());
    }

    Fraction actual(zActual->value(), nActual->value());
    Fraction nominal(zNominal->value(), nNominal->value());
    timesig->setSig(actual, ts);
    timesig->setStretch(nominal / actual);

    Groups g = groups->groups();
    timesig->setGroups(g);
    QDialog::accept();
}
예제 #3
0
void Arpeggio::symbolLine(SymId end, SymId fill)
      {
      qreal y1 = -_userLen1;
      qreal y2 = _height + _userLen2;
      qreal w   = y2 - y1;
      qreal mag = magS();
      ScoreFont* f = score()->scoreFont();
      const QString& fillString = f->toString(fill);

      symbols.clear();
      symbols.append(f->toString(end));
      qreal w1 = f->bbox(end, mag).width();
      qreal w2 = f->width(fill, mag);
      int n    = lrint((w - w1) / w2);
      for (int i = 0; i < n; ++i)
           symbols.prepend(fillString);
      }
예제 #4
0
void TrillSegment::symbolLine(SymId start, SymId fill)
      {
      qreal x1 = 0;
      qreal x2 = pos2().x();
      qreal w   = x2 - x1;
      qreal mag = magS();
      ScoreFont* f = score()->scoreFont();

      _symbols.clear();
      _symbols.append(f->toString(start));
      qreal w1 = f->bbox(start, mag).width();
      qreal w2 = f->width(fill, mag);
      int n    = lrint((w - w1) / w2);
      for (int i = 0; i < n; ++i)
           _symbols.append(f->toString(fill));
      QRectF r(f->bbox(_symbols, mag));
      setbbox(r);
      }
예제 #5
0
TimeSigProperties::TimeSigProperties(TimeSig* t, QWidget* parent)
    : QDialog(parent)
{
    setupUi(this);
    setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint);
    timesig = t;

    zText->setText(timesig->numeratorString());
    nText->setText(timesig->denominatorString());
    // set validators for numerator and denominator strings
    // which only accept '+', '(', ')', digits and some time symb conventional representations
    QRegExp rx("[0-9+CO()\\x00A2\\x00D8]*");
    QValidator *validator = new QRegExpValidator(rx, this);
    zText->setValidator(validator);
    nText->setValidator(validator);

    Fraction nominal = timesig->sig() / timesig->stretch();
    nominal.reduce();
    zNominal->setValue(nominal.numerator());
    nNominal->setValue(nominal.denominator());
    Fraction sig(timesig->sig());
    zActual->setValue(sig.numerator());
    nActual->setValue(sig.denominator());
    zNominal->setEnabled(false);
    nNominal->setEnabled(false);

    // TODO: fix http://musescore.org/en/node/42341
    // for now, editing of actual (local) time sig is disabled in dialog
    // but more importantly, the dialog should make it clear that this is "local" change only
    // and not normally the right way to add 7/4 to a score
    zActual->setEnabled(false);
    nActual->setEnabled(false);
    switch (timesig->timeSigType()) {
    case TimeSigType::NORMAL:
        textButton->setChecked(true);
        break;
    case TimeSigType::FOUR_FOUR:
        fourfourButton->setChecked(true);
        break;
    case TimeSigType::ALLA_BREVE:
        allaBreveButton->setChecked(true);
        break;
    }

    // set ID's of other symbols
    static const SymId prolatioSymbols[] = {
        SymId::mensuralProlation1,          // tempus perfectum, prol. perfecta
        SymId::mensuralProlation2,          // tempus perfectum, prol. imperfecta
        SymId::mensuralProlation3,          // tempus perfectum, prol. imperfecta, dimin.
        SymId::mensuralProlation4,          // tempus perfectum, prol. perfecta, dimin.
        SymId::mensuralProlation5,          // tempus imperf. prol. perfecta
//            SymId::mensuralProlation6,              // same shape as common time
        SymId::mensuralProlation7,          // tempus imperf., prol. imperfecta, reversed
        SymId::mensuralProlation8,          // tempus imperf., prol. perfecta, dimin.
//            SymId::mensuralProlation9,              // same shape as alla breve
        SymId::mensuralProlation10,         // tempus imperf., prol imperfecta, dimin., reversed
        SymId::mensuralProlation11,         // tempus inperf., prol. perfecta, reversed
    };

    ScoreFont* scoreFont = t->score()->scoreFont();
    int idx = 0;
    for (SymId symId : prolatioSymbols) {
        const QString& str = scoreFont->toString(symId);
        if (str.size() > 0) {
            otherCombo->setItemData(idx, (int)symId);
            // if time sig matches this symbol string, set as selected
            if (timesig->timeSigType() == TimeSigType::NORMAL && timesig->denominatorString().isEmpty()
                    && timesig->numeratorString() == str) {
                textButton->setChecked(false);
                otherButton->setChecked(true);
                otherCombo->setCurrentIndex(idx);
            }
        }
        idx++;
    }

    Groups g = t->groups();
    if (g.empty())
        g = Groups::endings(timesig->sig());     // initialize with default
    groups->setSig(timesig->sig(), g);
}
예제 #6
0
TimeSigProperties::TimeSigProperties(TimeSig* t, QWidget* parent)
   : QDialog(parent)
      {
      setupUi(this);
      setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint);
      timesig = t;

      zText->setText(timesig->numeratorString());
      nText->setText(timesig->denominatorString());
      // set validators for numerator and denominator strings
      // which only accept '+', '(', ')' and digits
      QRegExp rx("[0-9+()]*");
      QValidator *validator = new QRegExpValidator(rx, this);
      zText->setValidator(validator);
      nText->setValidator(validator);

      Fraction nominal = timesig->sig() * timesig->stretch();
      nominal.reduce();
      zNominal->setValue(nominal.numerator());
      nNominal->setValue(nominal.denominator());
      zActual->setValue(timesig->sig().numerator());
      nActual->setValue(timesig->sig().denominator());
      switch (timesig->timeSigType()) {
            case TSIG_NORMAL:
                  textButton->setChecked(true);
                  break;
            case TSIG_FOUR_FOUR:
                  fourfourButton->setChecked(true);
                  break;
            case TSIG_ALLA_BREVE:
                  allaBreveButton->setChecked(true);
                  break;
            }

      // set ID's of other symbols
      static const SymId prolatioSymbols[] = {
            SymId::mensuralTempPerfProlPerf,
            SymId::mensuralTempPerfProlImp,
            SymId::mensuralTempPerfProlImpDimin,
            SymId::mensuralTempPerfProlPerfDimin,
            SymId::mensuralTempImpProlPerf,
//            SymId::mensuralTempImpProlImp,          // same shape as common time
            SymId::mensuralTempImpProlImpRev,
            SymId::mensuralTempImpProlPerfDimin,
//            SymId::mensuralTempImpProlImpDimin,     // same shape as alla breve
            SymId::mensuralTempImpProlImpDiminRev,
            SymId::mensuralTempImpProlPerfRev,
            };

      ScoreFont* scoreFont = t->score()->scoreFont();
      int idx = 0;
      for (SymId symId : prolatioSymbols) {
            const QString& str = scoreFont->toString(symId);
            if (str.size() > 0) {
                  otherCombo->setItemData(idx, (int)symId);
                  // if time sig matches this symbol string, set as selected
                  if (timesig->timeSigType() == TSIG_NORMAL && timesig->denominatorString().isEmpty()
                  && timesig->numeratorString() == str) {
                        textButton->setChecked(false);
                        otherButton->setChecked(true);
                        otherCombo->setCurrentIndex(idx);
                        }
                  }
            idx++;
            }

      Groups g = t->groups();
      if (g.empty())
            g = Groups::endings(timesig->sig());     // initialize with default
      groups->setSig(timesig->sig(), g);
      }