void Box::read(const QDomElement& de) { _leftMargin = _rightMargin = _topMargin = _bottomMargin = 0.0; bool keepMargins = false; // whether original margins have to be kept when reading old file for (QDomElement e = de.firstChildElement(); !e.isNull(); e = e.nextSiblingElement()) { const QString& tag(e.tagName()); const QString& text(e.text()); if (tag == "height") _boxHeight = Spatium(text.toDouble()); else if (tag == "width") _boxWidth = Spatium(text.toDouble()); else if (tag == "topGap") _topGap = text.toDouble(); else if (tag == "bottomGap") _bottomGap = text.toDouble(); else if (tag == "leftMargin") _leftMargin = text.toDouble(); else if (tag == "rightMargin") _rightMargin = text.toDouble(); else if (tag == "topMargin") _topMargin = text.toDouble(); else if (tag == "bottomMargin") _bottomMargin = text.toDouble(); else if (tag == "Text") { Text* t; if (type() == TBOX) { t = static_cast<TBox*>(this)->getText(); t->read(e); } else { t = new Text(score()); t->read(e); add(t); if (score()->mscVersion() <= 114) t->setLayoutToParentWidth(true); } } else if (tag == "Symbol") { Symbol* s = new Symbol(score()); s->read(e); add(s); } else if (tag == "Image") { // look ahead for image type QString path; QDomElement ee = e.firstChildElement("path"); if (!ee.isNull()) path = ee.text(); Image* image = 0; QString s(path.toLower()); if (s.endsWith(".svg")) image = new SvgImage(score()); else if (s.endsWith(".jpg") || s.endsWith(".png") || s.endsWith(".gif") || s.endsWith(".xpm") ) { image = new RasterImage(score()); } else { qDebug("unknown image format <%s>\n", path.toLatin1().data()); } if (image) { image->setTrack(score()->curTrack); image->read(e); add(image); } } else if (tag == "FretDiagram") { FretDiagram* f = new FretDiagram(score()); f->read(e); add(f); } else if (tag == "LayoutBreak") { LayoutBreak* lb = new LayoutBreak(score()); lb->read(e); add(lb); } else if (tag == "HBox") { HBox* hb = new HBox(score()); hb->read(e); add(hb); keepMargins = true; // in old file, box nesting used outer box margins } else if (tag == "VBox") { VBox* vb = new VBox(score()); vb->read(e); add(vb); keepMargins = true; // in old file, box nesting used outer box margins } else domError(e); } // with .msc versions prior to 1.17, box margins were only used when nesting another box inside this box: // for backward compatibility set them to 0 in all other cases if (score()->mscVersion() < 117 && (type() == HBOX || type() == VBOX) && !keepMargins) { _leftMargin = _rightMargin = _topMargin = _bottomMargin = 0.0; } }
void MeasureBase::add(Element* e) { e->setParent(this); if (e->isLayoutBreak()) { LayoutBreak* b = toLayoutBreak(e); switch (b->layoutBreakType()) { case LayoutBreak::PAGE: setPageBreak(true); setLineBreak(false); setNoBreak(false); break; case LayoutBreak::LINE: setPageBreak(false); setLineBreak(true); setSectionBreak(false); setNoBreak(false); break; case LayoutBreak::SECTION: setLineBreak(false); setSectionBreak(true); setNoBreak(false); //does not work with repeats: score()->tempomap()->setPause(endTick(), b->pause()); score()->setLayoutAll(); break; case LayoutBreak::NOBREAK: setPageBreak(false); setLineBreak(false); setSectionBreak(false); setNoBreak(true); break; } } triggerLayout(); _el.push_back(e); }
void MeasureBase::remove(Element* el) { if (el->isLayoutBreak()) { LayoutBreak* lb = toLayoutBreak(el); switch (lb->layoutBreakType()) { case LayoutBreak::PAGE: setPageBreak(false); break; case LayoutBreak::LINE: setLineBreak(false); break; case LayoutBreak::SECTION: setSectionBreak(false); score()->setPause(endTick(), 0); score()->setLayoutAll(); break; case LayoutBreak::NOBREAK: setNoBreak(false); break; } } if (!_el.remove(el)) { qDebug("MeasureBase(%p)::remove(%s,%p) not found", this, el->name(), el); } }
Palette* MuseScore::newBreaksPalette() { qreal _spatium = gscore->spatium(); Palette* sp = new Palette; sp->setName(QT_TRANSLATE_NOOP("Palette", "Breaks && Spacer")); sp->setMag(.7); sp->setGrid(42, 36); sp->setDrawGrid(true); LayoutBreak* lb = new LayoutBreak(gscore); lb->setLayoutBreakType(LAYOUT_BREAK_LINE); sp->append(lb, tr("Line break")); lb = new LayoutBreak(gscore); lb->setLayoutBreakType(LAYOUT_BREAK_PAGE); sp->append(lb, tr("Page break")); lb = new LayoutBreak(gscore); lb->setLayoutBreakType(LAYOUT_BREAK_SECTION); sp->append(lb, tr("Section break")); Spacer* spacer = new Spacer(gscore); spacer->setGap(3 * _spatium); spacer->setSpacerType(SPACER_DOWN); sp->append(spacer, tr("Staff spacer down")); spacer = new Spacer(gscore); spacer->setGap(3 * _spatium); spacer->setSpacerType(SPACER_UP); sp->append(spacer, tr("Staff spacer up")); return sp; }
void TestSpanners::spanners13() { DropData dropData; LayoutBreak* brk; MasterScore* score = readScore(DIR + "lyricsline06.mscx"); QVERIFY(score); score->doLayout(); // DROP A BREAK AT FIRST MEASURE AND VERIFY Measure* msr = score->firstMeasure(); QVERIFY(msr); brk = new LayoutBreak(score); brk->setLayoutBreakType(LayoutBreak::Type::LINE); dropData.pos = msr->pagePos(); dropData.element = brk; score->startCmd(); msr->drop(dropData); score->endCmd(); // VERIFY SEGMENTS IN SYSTEMS AND THEN SCORE for (System* sys : score->systems()) QVERIFY(sys->spannerSegments().size() == 1); QVERIFY(saveCompareScore(score, "lyricsline06.mscx", DIR + "lyricsline06-ref.mscx")); // UNDO AND VERIFY score->undoStack()->undo(); score->doLayout(); // systems need to be re-computed QVERIFY(saveCompareScore(score, "lyricsline06.mscx", DIR + "lyricsline06.mscx")); delete score; }
void MuseScore::showLayoutBreakPalette() { if (layoutBreakPalette == 0) { qreal _spatium = gscore->spatium(); Palette* sp = new Palette; layoutBreakPalette = new PaletteScrollArea(sp); layoutBreakPalette->setRestrictHeight(false); layoutBreakPalette->setWindowTitle(tr("MuseScore: Breaks & Spacer")); sp->setGrid(80, 80); sp->resize(240,80); LayoutBreak* lb = new LayoutBreak(gscore); lb->setSubtype(LAYOUT_BREAK_LINE); sp->append(lb, tr("Line break")); lb = new LayoutBreak(gscore); lb->setSubtype(LAYOUT_BREAK_PAGE); sp->append(lb, tr("Page break")); lb = new LayoutBreak(gscore); lb->setSubtype(LAYOUT_BREAK_SECTION); sp->append(lb, tr("Section break")); Spacer* spacer = new Spacer(gscore); spacer->setGap(_spatium * 3); sp->append(spacer, tr("Staff spacer")); } layoutBreakPalette->show(); layoutBreakPalette->raise(); }
bool MeasureBase::readProperties(XmlReader& e) { const QStringRef& tag(e.name()); if (tag == "LayoutBreak") { LayoutBreak* lb = new LayoutBreak(score()); lb->read(e); bool doAdd = true; switch (lb->layoutBreakType()) { case LayoutBreak::LINE: if (lineBreak()) doAdd = false; break; case LayoutBreak::PAGE: if (pageBreak()) doAdd = false; break; case LayoutBreak::SECTION: if (sectionBreak()) doAdd = false; break; case LayoutBreak::NOBREAK: if (noBreak()) doAdd = false; break; } if (doAdd) { add(lb); cleanupLayoutBreaks(false); } else delete lb; } else if (tag == "StaffTypeChange") { StaffTypeChange* stc = new StaffTypeChange(score()); stc->setTrack(e.track()); stc->setParent(this); stc->read(e); add(stc); } else if (Element::readProperties(e)) ; else return false; return true; }
void MeasureBase::undoSetBreak(bool v, LayoutBreak::Type type) { switch (type) { case LayoutBreak::LINE: if (lineBreak() == v) return; setLineBreak(v); break; case LayoutBreak::PAGE: if (pageBreak() == v) return; if (v && lineBreak()) setLineBreak(false); setPageBreak(v); break; case LayoutBreak::SECTION: if (sectionBreak() == v) return; if (v && lineBreak()) setLineBreak(false); setSectionBreak(v); break; case LayoutBreak::NOBREAK: if (noBreak() == v) return; if (v) { setLineBreak(false); setPageBreak(false); setSectionBreak(false); } setNoBreak(v); break; } if (v) { LayoutBreak* lb = new LayoutBreak(score()); lb->setLayoutBreakType(type); lb->setTrack(-1); // this are system elements lb->setParent(this); score()->undoAddElement(lb); } cleanupLayoutBreaks(true); }
void MsScWriter::endMeasure(const Bww::MeasureEndFlags mef) { qDebug() << "MsScWriter::endMeasure()"; if (mef.repeatEnd) currentMeasure->setRepeatFlags(RepeatEnd); if (mef.endingEnd) { if (lastVolta) { qDebug("adding volta\n"); if (ending == 1) lastVolta->setSubtype(VOLTA_CLOSED); else lastVolta->setSubtype(VOLTA_OPEN); lastVolta->setEndElement(currentMeasure); currentMeasure->addSpannerBack(lastVolta); lastVolta = 0; } else { qDebug("lastVolta == 0 on stop\n"); } } if (mef.lastOfSystem) { LayoutBreak* lb = new LayoutBreak(score); lb->setTrack(0); lb->setSubtype(LAYOUT_BREAK_LINE); currentMeasure->add(lb); } if (mef.lastOfPart && !mef.repeatEnd) { currentMeasure->setEndBarLineType(END_BAR, false, true); } else if (mef.doubleBarLine) { currentMeasure->setEndBarLineType(DOUBLE_BAR, false, true); } // BarLine* barLine = new BarLine(score); // bool visible = true; // barLine->setSubtype(NORMAL_BAR); // barLine->setTrack(0); // currentMeasure->setEndBarLineType(barLine->subtype(), false, visible); }
void TestBarline::barline05() { Score* score = readScore(DIR + "barline05.mscx"); QVERIFY(score); score->doLayout(); // 'go' to 4th measure Measure* msr = score->firstMeasure(); for (int i=0; i < 3; i++) msr = msr->nextMeasure(); // create and add a LineBreak element LayoutBreak* lb = new LayoutBreak(score); lb->setLayoutBreakType(LayoutBreak::Type::LINE); lb->setTrack(-1); // system-level element lb->setParent(msr); score->undoAddElement(lb); score->doLayout(); // check an end-repeat bar line has been created at the end of this measure and it is generated Segment* seg = msr->findSegment(SegmentType::EndBarLine, msr->tick()+msr->ticks()); QVERIFY2(seg != nullptr, "No SegEndBarLine segment in measure 4."); BarLine* bar = static_cast<BarLine*>(seg->element(0)); QVERIFY2(bar != nullptr, "No end-repeat barline in measure 4."); QVERIFY2(bar->barLineType() == BarLineType::END_REPEAT, "Barline at measure 4 is not END-REPEAT"); QVERIFY2(bar->generated(), "End-repeat barline in measure 4 is non-generated."); // // check an end-repeat bar line has been created at the beginning of the next measure and it is not generated // check an end-repeat bar line has been created at the beginning of the next measure and it is generated msr = msr->nextMeasure(); seg = msr->findSegment(SegmentType::StartRepeatBarLine, msr->tick()); QVERIFY2(seg != nullptr, "No SegStartRepeatBarLine segment in measure 5."); bar = static_cast<BarLine*>(seg->element(0)); QVERIFY2(bar != nullptr, "No start-repeat barline in measure 5."); QVERIFY2(bar->generated(), "Start-reapeat barline in measure 5 is not generated."); // QVERIFY(saveCompareScore(score, "barline05.mscx", DIR + "barline05-ref.mscx")); delete score; }
Palette* MuseScore::newBreaksPalette() { qreal _spatium = gscore->spatium(); Palette* sp = new Palette; sp->setName(QT_TRANSLATE_NOOP("Palette", "Breaks && Spacers")); sp->setMag(1.0); sp->setGrid(42, 36); sp->setDrawGrid(true); LayoutBreak* lb = new LayoutBreak(gscore); lb->setLayoutBreakType(LayoutBreak::Type::LINE); PaletteCell* cell = sp->append(lb, tr("Line break")); cell->mag = 1.2; lb = new LayoutBreak(gscore); lb->setLayoutBreakType(LayoutBreak::Type::PAGE); cell = sp->append(lb, tr("Page break")); cell->mag = 1.2; lb = new LayoutBreak(gscore); lb->setLayoutBreakType(LayoutBreak::Type::SECTION); cell = sp->append(lb, tr("Section break")); cell->mag = 1.2; Spacer* spacer = new Spacer(gscore); spacer->setSpacerType(SpacerType::DOWN); spacer->setGap(3 * _spatium); cell = sp->append(spacer, tr("Staff spacer down")); cell->mag = .7; spacer = new Spacer(gscore); spacer->setSpacerType(SpacerType::UP); spacer->setGap(3 * _spatium); cell = sp->append(spacer, tr("Staff spacer up")); cell->mag = .7; return sp; }
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; }
bool Box::readProperties(XmlReader& e) { const QStringRef& tag(e.name()); if (tag == "height") _boxHeight = Spatium(e.readDouble()); else if (tag == "width") _boxWidth = Spatium(e.readDouble()); else if (tag == "topGap") { _topGap = e.readDouble(); if (score()->mscVersion() >= 203) _topGap *= score()->spatium(); } else if (tag == "bottomGap") { _bottomGap = e.readDouble(); if (score()->mscVersion() >= 203) _bottomGap *= score()->spatium(); } else if (tag == "leftMargin") _leftMargin = e.readDouble(); else if (tag == "rightMargin") _rightMargin = e.readDouble(); else if (tag == "topMargin") _topMargin = e.readDouble(); else if (tag == "bottomMargin") _bottomMargin = e.readDouble(); else if (tag == "Text") { Text* t; if (type() == Element::Type::TBOX) { t = static_cast<TBox*>(this)->text(); t->read(e); } else { t = new Text(score()); t->read(e); if (t->isEmpty()) { qDebug("read empty text"); } else add(t); } } else if (tag == "Symbol") { Symbol* s = new Symbol(score()); s->read(e); add(s); } else if (tag == "Image") { if (MScore::noImages) e.skipCurrentElement(); else { Image* image = new Image(score()); image->setTrack(e.track()); image->read(e); add(image); } } else if (tag == "FretDiagram") { FretDiagram* f = new FretDiagram(score()); f->read(e); add(f); } else if (tag == "LayoutBreak") { LayoutBreak* lb = new LayoutBreak(score()); lb->read(e); add(lb); } else if (tag == "HBox") { HBox* hb = new HBox(score()); hb->read(e); add(hb); } else if (tag == "VBox") { VBox* vb = new VBox(score()); vb->read(e); add(vb); } else if (Element::readProperties(e)) ; else return false; return true; }
Element* Box::drop(const DropData& data) { Element* e = data.element; if (e->flag(ElementFlag::ON_STAFF)) return 0; switch (e->type()) { case Element::Type::LAYOUT_BREAK: { LayoutBreak* lb = static_cast<LayoutBreak*>(e); if (_pageBreak || _lineBreak) { if ( (lb->layoutBreakType() == LayoutBreak::Type::PAGE && _pageBreak) || (lb->layoutBreakType() == LayoutBreak::Type::LINE && _lineBreak) || (lb->layoutBreakType() == LayoutBreak::Type::SECTION && _sectionBreak) ) { // // if break already set // delete lb; break; } foreach (Element* elem, _el) { if (elem->type() == Element::Type::LAYOUT_BREAK) { score()->undoChangeElement(elem, e); break; } } break; } lb->setTrack(-1); // these are system elements lb->setParent(this); score()->undoAddElement(lb); return lb; } case Element::Type::STAFF_TEXT: { Text* text = new Text(score()); text->setTextStyleType(TextStyleType::FRAME); text->setParent(this); text->setXmlText(static_cast<StaffText*>(e)->xmlText()); score()->undoAddElement(text); delete e; return text; } case Element::Type::ICON: switch(static_cast<Icon*>(e)->iconType()) { case IconType::VFRAME: score()->insertMeasure(Element::Type::VBOX, this); break; case IconType::TFRAME: score()->insertMeasure(Element::Type::TBOX, this); break; case IconType::FFRAME: score()->insertMeasure(Element::Type::FBOX, this); break; case IconType::MEASURE: score()->insertMeasure(Element::Type::MEASURE, this); break; default: break; } break; case Element::Type::TEXT: case Element::Type::IMAGE: case Element::Type::SYMBOL: e->setParent(this); score()->undoAddElement(e); return e; default: return 0; } return 0; }
Element* Box::drop(const DropData& data) { Element* e = data.element; switch(e->type()) { case LAYOUT_BREAK: { LayoutBreak* lb = static_cast<LayoutBreak*>(e); if (_pageBreak || _lineBreak) { if ( (lb->subtype() == LAYOUT_BREAK_PAGE && _pageBreak) || (lb->subtype() == LAYOUT_BREAK_LINE && _lineBreak) || (lb->subtype() == LAYOUT_BREAK_SECTION && _sectionBreak) ) { // // if break already set // delete lb; break; } foreach(Element* elem, _el) { if (elem->type() == LAYOUT_BREAK) { score()->undoChangeElement(elem, e); break; } } break; } lb->setTrack(-1); // this are system elements lb->setParent(this); score()->undoAddElement(lb); return lb; } case STAFF_TEXT: { Text* text = new Text(score()); text->setTextStyle(score()->textStyle(TEXT_STYLE_FRAME)); text->setParent(this); text->setHtml(static_cast<StaffText*>(e)->getHtml()); score()->undoAddElement(text); delete e; return text; } case ICON: switch(static_cast<Icon*>(e)->subtype()) { case ICON_VFRAME: score()->insertMeasure(VBOX, this); break; case ICON_TFRAME: score()->insertMeasure(TBOX, this); break; case ICON_FFRAME: score()->insertMeasure(FBOX, this); break; case ICON_MEASURE: score()->insertMeasure(MEASURE, this); break; } break; default: e->setParent(this); score()->undoAddElement(e); return e; } return 0; }
void Box::read(XmlReader& e) { _leftMargin = _rightMargin = _topMargin = _bottomMargin = 0.0; bool keepMargins = false; // whether original margins have to be kept when reading old file while (e.readNextStartElement()) { const QStringRef& tag(e.name()); if (tag == "height") _boxHeight = Spatium(e.readDouble()); else if (tag == "width") _boxWidth = Spatium(e.readDouble()); else if (tag == "topGap") _topGap = e.readDouble(); else if (tag == "bottomGap") _bottomGap = e.readDouble(); else if (tag == "leftMargin") _leftMargin = e.readDouble(); else if (tag == "rightMargin") _rightMargin = e.readDouble(); else if (tag == "topMargin") _topMargin = e.readDouble(); else if (tag == "bottomMargin") _bottomMargin = e.readDouble(); else if (tag == "Text") { Text* t; if (type() == TBOX) { t = static_cast<TBox*>(this)->getText(); t->read(e); } else { t = new Text(score()); t->read(e); add(t); if (score()->mscVersion() <= 114) t->setLayoutToParentWidth(true); } } else if (tag == "Symbol") { Symbol* s = new Symbol(score()); s->read(e); add(s); } else if (tag == "Image") { Image* image = new Image(score()); image->setTrack(e.track()); image->read(e); add(image); } else if (tag == "FretDiagram") { FretDiagram* f = new FretDiagram(score()); f->read(e); add(f); } else if (tag == "LayoutBreak") { LayoutBreak* lb = new LayoutBreak(score()); lb->read(e); add(lb); } else if (tag == "HBox") { HBox* hb = new HBox(score()); hb->read(e); add(hb); keepMargins = true; // in old file, box nesting used outer box margins } else if (tag == "VBox") { VBox* vb = new VBox(score()); vb->read(e); add(vb); keepMargins = true; // in old file, box nesting used outer box margins } else if (Element::readProperties(e)) ; else e.unknown(); } // with .msc versions prior to 1.17, box margins were only used when nesting another box inside this box: // for backward compatibility set them to 0 in all other cases if (score()->mscVersion() < 117 && (type() == HBOX || type() == VBOX) && !keepMargins) { _leftMargin = _rightMargin = _topMargin = _bottomMargin = 0.0; } }
void MuseScore::populatePalette() { //----------------------------------- // notes //----------------------------------- Palette* notePalette = new Palette; notePalette->setName(tr("Grace Notes")); notePalette->setGrid(32, 40); notePalette->setDrawGrid(true); static const IconAction gna[] = { { ICON_ACCIACCATURA, "acciaccatura" }, { ICON_APPOGGIATURA, "appoggiatura" }, { ICON_GRACE4, "grace4" }, { ICON_GRACE16, "grace16" }, { ICON_GRACE32, "grace32" }, { -1, "" } }; populateIconPalette(notePalette, gna); paletteBox->addPalette(notePalette); //----------------------------------- // clefs //----------------------------------- Palette* sp = new Palette; sp->setName(tr("Clefs")); sp->setMag(0.8); sp->setGrid(33, 60); sp->setYOffset(1.0); static const ClefType clefs[21] = { CLEF_G, CLEF_G1, CLEF_G2, CLEF_G3, CLEF_G4, CLEF_C1, CLEF_C2, CLEF_C3, CLEF_C4, CLEF_C5, CLEF_F, CLEF_F_8VA, CLEF_F_15MA, CLEF_F8, CLEF_F15, CLEF_F_B, CLEF_F_C, CLEF_PERC, CLEF_TAB, CLEF_TAB2, CLEF_PERC2 }; for (int i = 0; i < 20; ++i) { ClefType j = clefs[i]; Clef* k = new ::Clef(gscore); k->setClefType(ClefTypeList(j, j)); sp->append(k, qApp->translate("clefTable", clefTable[j].name)); } paletteBox->addPalette(sp); //----------------------------------- // key signatures //----------------------------------- sp = newKeySigPalette(); paletteBox->addPalette(sp); //----------------------------------- // Time //----------------------------------- sp = new Palette; sp->setName(tr("Time Signatures")); sp->setMag(.8); sp->setGrid(42, 38); TimeSig* ts; ts = new TimeSig(gscore); ts->setSig(2, 2); sp->append(ts, "2/2"); sp->append(new TimeSig(gscore, 2, 4), "2/4"); sp->append(new TimeSig(gscore, 3, 4), "3/4"); sp->append(new TimeSig(gscore, 4, 4), "4/4"); sp->append(new TimeSig(gscore, 5, 4), "5/4"); sp->append(new TimeSig(gscore, 6, 4), "6/4"); sp->append(new TimeSig(gscore, 3, 8), "3/8"); sp->append(new TimeSig(gscore, 6, 8), "6/8"); sp->append(new TimeSig(gscore, 9, 8), "9/8"); sp->append(new TimeSig(gscore, 12, 8), "12/8"); sp->append(new TimeSig(gscore, TSIG_FOUR_FOUR), tr("4/4 common time")); sp->append(new TimeSig(gscore, TSIG_ALLA_BREVE), tr("2/2 alla breve")); paletteBox->addPalette(sp); //----------------------------------- // Bar Lines //----------------------------------- sp = new Palette; sp->setName(tr("Barlines")); sp->setMag(0.8); sp->setGrid(42, 38); struct { BarLineType type; const char* name; } t[] = { { NORMAL_BAR, QT_TR_NOOP("Normal") }, { BROKEN_BAR, QT_TR_NOOP("Dashed") }, { END_BAR, QT_TR_NOOP("End Bar") }, { DOUBLE_BAR, QT_TR_NOOP("Double Bar") }, { START_REPEAT, QT_TR_NOOP("Start Repeat") }, { END_REPEAT, QT_TR_NOOP("End Repeat") }, { END_START_REPEAT, QT_TR_NOOP("End-Start Repeat") }, }; for (unsigned i = 0; i < sizeof(t)/sizeof(*t); ++i) { BarLine* b = new BarLine(gscore); b->setSubtype(t[i].type); sp->append(b, tr(t[i].name)); } paletteBox->addPalette(sp); //----------------------------------- // Lines //----------------------------------- sp = new Palette; sp->setName(tr("Lines")); sp->setMag(.8); sp->setGrid(82, 23); Slur* slur = new Slur(gscore); slur->setId(0); sp->append(slur, tr("Slur")); Hairpin* gabel0 = new Hairpin(gscore); gabel0->setSubtype(0); sp->append(gabel0, tr("Crescendo")); Hairpin* gabel1 = new Hairpin(gscore); gabel1->setSubtype(1); sp->append(gabel1, tr("Diminuendo")); Volta* volta = new Volta(gscore); volta->setSubtype(VOLTA_CLOSED); volta->setText("1."); QList<int> il; il.append(1); volta->setEndings(il); sp->append(volta, tr("Prima volta")); volta = new Volta(gscore); volta->setSubtype(VOLTA_CLOSED); volta->setText("2."); il.clear(); il.append(2); volta->setEndings(il); sp->append(volta, tr("Seconda volta")); volta = new Volta(gscore); volta->setSubtype(VOLTA_CLOSED); volta->setText("3."); il.clear(); il.append(3); volta->setEndings(il); sp->append(volta, tr("Terza volta")); volta = new Volta(gscore); volta->setSubtype(VOLTA_OPEN); volta->setText("2."); il.clear(); il.append(2); volta->setEndings(il); sp->append(volta, tr("Seconda volta 2")); Ottava* ottava = new Ottava(gscore); ottava->setSubtype(0); sp->append(ottava, tr("8va")); ottava = new Ottava(gscore); ottava->setSubtype(1); sp->append(ottava, tr("15ma")); ottava = new Ottava(gscore); ottava->setSubtype(2); sp->append(ottava, tr("8vb")); ottava = new Ottava(gscore); ottava->setSubtype(3); sp->append(ottava, tr("15mb")); Pedal* pedal = new Pedal(gscore); //pedal->setLen(l); sp->append(pedal, tr("Pedal")); pedal = new Pedal(gscore); //pedal->setLen(l); pedal->setEndHookType(HOOK_45); sp->append(pedal, tr("Pedal")); pedal = new Pedal(gscore); //pedal->setLen(l); pedal->setBeginSymbol(-1); pedal->setBeginHook(true); pedal->setBeginHookType(HOOK_45); pedal->setEndHookType(HOOK_45); sp->append(pedal, tr("Pedal")); pedal = new Pedal(gscore); //pedal->setLen(l); pedal->setBeginSymbol(-1); pedal->setBeginHook(true); pedal->setBeginHookType(HOOK_45); sp->append(pedal, tr("Pedal")); Trill* trill = new Trill(gscore); sp->append(trill, tr("Trill line")); trill = new Trill(gscore); trill->setSubtype("upprall"); sp->append(trill, tr("Upprall line")); trill = new Trill(gscore); trill->setSubtype("downprall"); sp->append(trill, tr("Downprall line")); trill = new Trill(gscore); trill->setSubtype("prallprall"); sp->append(trill, tr("Prallprall line")); TextLine* textLine = new TextLine(gscore); textLine->setBeginText("VII"); textLine->setEndHook(true); sp->append(textLine, tr("Text line")); TextLine* line = new TextLine(gscore); line->setDiagonal(true); sp->append(line, tr("Line")); paletteBox->addPalette(sp); //----------------------------------- // Arpeggio && Glissando //----------------------------------- sp = new Palette(); sp->setName(tr("Arpeggio && Glissando")); sp->setGrid(27, 60); for (int i = 0; i < 4; ++i) { Arpeggio* a = new Arpeggio(gscore); a->setSubtype(ArpeggioType(i)); sp->append(a, tr("Arpeggio")); } for (int i = 0; i < 2; ++i) { Glissando* a = new Glissando(gscore); a->setSubtype(i); sp->append(a, tr("Glissando")); } paletteBox->addPalette(sp); //----------------------------------- // Symbols: Breath //----------------------------------- sp = new Palette(); sp->setName(tr("Breath && Pauses")); sp->setGrid(42, 40); for (int i = 0; i < 4; ++i) { Breath* a = new Breath(gscore); a->setSubtype(i); if (i < 2) sp->append(a, tr("Breath")); else sp->append(a, tr("Caesura")); } paletteBox->addPalette(sp); //----------------------------------- // Brackets //----------------------------------- sp = new Palette; sp->setName(tr("Brackets")); sp->setMag(0.7); sp->setGrid(42, 60); Bracket* b1 = new Bracket(gscore); b1->setSubtype(BRACKET_NORMAL); Bracket* b2 = new Bracket(gscore); b2->setSubtype(BRACKET_AKKOLADE); // b1->setHeight(_spatium * 7); // b2->setHeight(_spatium * 7); sp->append(b1, tr("Square bracket")); sp->append(b2, tr("Curly bracket")); paletteBox->addPalette(sp); //----------------------------------- // Attributes, Ornaments //----------------------------------- sp = new Palette; sp->setName(tr("Articulations && Ornaments")); sp->setGrid(42, 25); for (int i = 0; i < ARTICULATIONS; ++i) { Articulation* s = new Articulation(gscore); s->setSubtype(ArticulationType(i)); sp->append(s, qApp->translate("articulation", qPrintable(s->subtypeUserName()))); } Bend* bend = new Bend(gscore); bend->points().append(PitchValue(0, 0, false)); bend->points().append(PitchValue(15, 100, false)); bend->points().append(PitchValue(60, 100, false)); sp->append(bend, qApp->translate("articulation", "Bend")); TremoloBar* tb = new TremoloBar(gscore); tb->points().append(PitchValue(0, 0, false)); // "Dip" tb->points().append(PitchValue(30, -100, false)); tb->points().append(PitchValue(60, 0, false)); sp->append(tb, qApp->translate("articulation", "Tremolo Bar")); paletteBox->addPalette(sp); //----------------------------------- // Accidentals //----------------------------------- sp = newAccidentalsPalette(); paletteBox->addPalette(sp); //----------------------------------- // Dynamics //----------------------------------- sp = new Palette; sp->setName(tr("Dynamics")); sp->setMag(.8); sp->setGrid(42, 28); static const char* dynS[] = { "ppp", "pp", "p", "mp", "mf", "f", "ff", "fff" }; for (unsigned i = 0; i < sizeof(dynS)/sizeof(*dynS); ++i) { Dynamic* dynamic = new Dynamic(gscore); dynamic->setSubtype(dynS[i]); sp->append(dynamic, dynamic->subtypeName()); } paletteBox->addPalette(sp); //----------------------------------- // Fingering //----------------------------------- sp = new Palette; sp->setName(tr("Fingering")); sp->setMag(1.5); sp->setGrid(28, 30); sp->setDrawGrid(true); const char finger[] = "012345pimac"; for (unsigned i = 0; i < strlen(finger); ++i) { Fingering* f = new Fingering(gscore); f->setText(QString(finger[i])); sp->append(f, tr("Fingering %1").arg(finger[i])); } const char stringnumber[] = "0123456"; for (unsigned i = 0; i < strlen(stringnumber); ++i) { Fingering* f = new Fingering(gscore); f->setTextStyle(TEXT_STYLE_STRING_NUMBER); f->setText(QString(stringnumber[i])); sp->append(f, tr("String number %1").arg(stringnumber[i])); } Symbol* symbol = new Symbol(gscore, thumbSym); sp->append(symbol, tr("Thumb")); paletteBox->addPalette(sp); //----------------------------------- // Noteheads //----------------------------------- sp = new Palette; sp->setName(tr("Note Heads")); sp->setMag(1.3); sp->setGrid(33, 36); sp->setDrawGrid(true); for (int i = 0; i < HEAD_GROUPS; ++i) { int sym = noteHeads[0][i][1]; if (i == HEAD_BREVIS_ALT) sym = noteHeads[0][i][3]; NoteHead* nh = new NoteHead(gscore); nh->setSym(sym); sp->append(nh, qApp->translate("symbol", symbols[0][sym].name())); } paletteBox->addPalette(sp); //----------------------------------- // Tremolo //----------------------------------- sp = new Palette; sp->setName(tr("Tremolo")); sp->setGrid(27, 40); sp->setDrawGrid(true); const char* tremoloName[] = { QT_TR_NOOP("1/8 through stem"), QT_TR_NOOP("1/16 through stem"), QT_TR_NOOP("1/32 through stem"), QT_TR_NOOP("1/64 through stem"), QT_TR_NOOP("1/8 between notes"), QT_TR_NOOP("1/16 between notes"), QT_TR_NOOP("1/32 between notes"), QT_TR_NOOP("1/64 between notes") }; for (int i = TREMOLO_R8; i <= TREMOLO_C64; ++i) { Tremolo* tremolo = new Tremolo(gscore); tremolo->setSubtype(TremoloType(i)); sp->append(tremolo, tr(tremoloName[i - TREMOLO_R8])); } paletteBox->addPalette(sp); //----------------------------------- // Fall, Doit //----------------------------------- sp = new Palette; sp->setName(tr("Fall/Doit")); sp->setGrid(27, 40); sp->setDrawGrid(true); const char* scorelineNames[] = { QT_TR_NOOP("fall"), QT_TR_NOOP("doit"), }; ChordLine* cl = new ChordLine(gscore); cl->setSubtype(1); sp->append(cl, tr(scorelineNames[0])); cl = new ChordLine(gscore); cl->setSubtype(2); sp->append(cl, tr(scorelineNames[1])); paletteBox->addPalette(sp); //----------------------------------- // Repeats //----------------------------------- sp = new Palette; sp->setName(tr("Repeats")); sp->setMag(0.65); sp->setGrid(84, 28); sp->setDrawGrid(true); RepeatMeasure* rm = new RepeatMeasure(gscore); sp->append(rm, tr("Repeat measure sign")); Marker* mk = new Marker(gscore); mk->setMarkerType(MARKER_SEGNO); sp->append(mk, tr("Segno")); mk = new Marker(gscore); mk->setMarkerType(MARKER_VARSEGNO); sp->append(mk, tr("Segno Variation")); mk = new Marker(gscore); mk->setMarkerType(MARKER_CODA); sp->append(mk, tr("Coda")); mk = new Marker(gscore); mk->setMarkerType(MARKER_VARCODA); sp->append(mk, tr("Varied coda")); mk = new Marker(gscore); mk->setMarkerType(MARKER_CODETTA); sp->append(mk, tr("Codetta")); mk = new Marker(gscore); mk->setMarkerType(MARKER_FINE); sp->append(mk, tr("Fine")); Jump* jp = new Jump(gscore); jp->setJumpType(JUMP_DC); sp->append(jp, tr("Da Capo")); jp = new Jump(gscore); jp->setJumpType(JUMP_DC_AL_FINE); sp->append(jp, tr("Da Capo al Fine")); jp = new Jump(gscore); jp->setJumpType(JUMP_DC_AL_CODA); sp->append(jp, tr("Da Capo al Coda")); jp = new Jump(gscore); jp->setJumpType(JUMP_DS_AL_CODA); sp->append(jp, tr("D.S al Coda")); jp = new Jump(gscore); jp->setJumpType(JUMP_DS_AL_FINE); sp->append(jp, tr("D.S al Fine")); jp = new Jump(gscore); jp->setJumpType(JUMP_DS); sp->append(jp, tr("D.S")); mk = new Marker(gscore); mk->setMarkerType(MARKER_TOCODA); sp->append(mk, tr("To Coda")); paletteBox->addPalette(sp); //----------------------------------- // Text //----------------------------------- sp = new Palette; sp->setName(tr("Text")); sp->setMag(0.65); sp->setGrid(84, 28); sp->setDrawGrid(true); StaffText* st = new StaffText(gscore); st->setSystemFlag(false); st->setTextStyle(TEXT_STYLE_STAFF); //TODO st->setSubtype(TEXT_STAFF); st->setText(tr("staff-text")); sp->append(st, tr("Staff Text")); st = new StaffText(gscore); st->setSystemFlag(true); st->setTextStyle(TEXT_STYLE_SYSTEM); // st->setSubtype(TEXT_SYSTEM); st->setText(tr("system-text")); sp->append(st, tr("System Text")); RehearsalMark* rhm = new RehearsalMark(gscore); rhm->setTrack(0); rhm->setText("B1"); sp->append(rhm, tr("RRehearsal Mark")); InstrumentChange* is = new InstrumentChange(gscore); is->setText(tr("Instrument")); sp->append(is, tr("Instrument Change")); Text* text = new Text(gscore); text->setTrack(0); text->setTextStyle(TEXT_STYLE_LYRICS_VERSE_NUMBER); text->setText(tr("1.")); text->setSystemFlag(true); sp->append(text, tr("Lyrics Verse Number")); static const TempoPattern tp[] = { TempoPattern(QString("%1%2 = 80"). arg(QChar(0xd834)).arg(QChar(0xdd5f)), 80.0/60.0), // 1/4 TempoPattern(QString("%1%2 = 80"). arg(QChar(0xd834)).arg(QChar(0xdd5e)), 80.0/30.0), // 1/2 TempoPattern(QString("%1%2 = 80"). arg(QChar(0xd834)).arg(QChar(0xdd60)), 80.0/120.0), // 1/8 TempoPattern(QString("%1%2%3%4 = 80").arg(QChar(0xd834)).arg(QChar(0xdd5f)).arg(QChar(0xd834)).arg(QChar(0xdd6d)), 120.0/60.0), // dotted 1/4 TempoPattern(QString("%1%2%3%4 = 80").arg(QChar(0xd834)).arg(QChar(0xdd5e)).arg(QChar(0xd834)).arg(QChar(0xdd6d)), 120/30.0), // dotted 1/2 TempoPattern(QString("%1%2%3%4 = 80").arg(QChar(0xd834)).arg(QChar(0xdd60)).arg(QChar(0xd834)).arg(QChar(0xdd6d)), 120/120.0) // dotted 1/8 }; for (unsigned i = 0; i < sizeof(tp)/sizeof(*tp); ++i) { TempoText* tt = new TempoText(gscore); tt->setFollowText(true); tt->setTrack(0); tt->setTempo(tp[i].f); tt->setText(tp[i].pattern); sp->append(tt, tr("Tempo Text"), QString(), 1.5); } Harmony* harmony = new Harmony(gscore); harmony->setText("c7"); sp->append(harmony, tr("Chord Name")); paletteBox->addPalette(sp); //----------------------------------- // breaks //----------------------------------- qreal _spatium = gscore->spatium(); sp = new Palette; sp->setName(tr("Breaks && Spacer")); sp->setMag(.7); sp->setGrid(42, 36); sp->setDrawGrid(true); LayoutBreak* lb = new LayoutBreak(gscore); lb->setSubtype(LAYOUT_BREAK_LINE); sp->append(lb, tr("Line break")); lb = new LayoutBreak(gscore); lb->setSubtype(LAYOUT_BREAK_PAGE); sp->append(lb, tr("Page break")); lb = new LayoutBreak(gscore); lb->setSubtype(LAYOUT_BREAK_SECTION); sp->append(lb, tr("Section break")); Spacer* spacer = new Spacer(gscore); spacer->setGap(3 * _spatium); spacer->setSubtype(SPACER_DOWN); sp->append(spacer, tr("Staff spacer down")); spacer = new Spacer(gscore); spacer->setGap(3 * _spatium); spacer->setSubtype(SPACER_UP); sp->append(spacer, tr("Staff spacer up")); paletteBox->addPalette(sp); //----------------------------------- // staff state changes //----------------------------------- #if 0 sp = new Palette; sp->setName(tr("Staff Changes")); sp->setMag(.7); sp->setGrid(42, 36); sp->setDrawGrid(true); StaffState* st = new StaffState(gscore); st->setSubtype(STAFF_STATE_VISIBLE); sp->append(st, tr("set visible")); st = new StaffState(gscore); st->setSubtype(STAFF_STATE_INVISIBLE); sp->append(st, tr("set invisible")); st = new StaffState(gscore); st->setSubtype(STAFF_STATE_TYPE); sp->append(st, tr("change staff type")); st = new StaffState(gscore); st->setSubtype(STAFF_STATE_INSTRUMENT); sp->append(st, tr("change instrument")); paletteBox->addPalette(sp); #endif //----------------------------------- // beam properties //----------------------------------- sp = new Palette; sp->setName(tr("Beam Properties")); sp->setGrid(27, 40); sp->setDrawGrid(true); static const IconAction bpa[] = { { ICON_SBEAM, "beam-start" }, { ICON_MBEAM, "beam-mid" }, { ICON_NBEAM, "no-beam" }, { ICON_BEAM32, "beam32" }, { ICON_BEAM64, "beam64" }, { ICON_AUTOBEAM, "auto-beam" }, { ICON_FBEAM1, "fbeam1" }, { ICON_FBEAM2, "fbeam2" }, { -1, ""} }; populateIconPalette(sp, bpa); paletteBox->addPalette(sp); //----------------------------------- // Symbols //----------------------------------- sp = new Palette; sp->setName(tr("Symbols")); sp->setGrid(42, 45); sp->setDrawGrid(true); sp->append(accDiscantSym); sp->append(accDotSym); sp->append(accFreebaseSym); sp->append(accStdbaseSym); sp->append(accBayanbaseSym); sp->append(accOldEESym); sp->append(accpushSym); sp->append(accpullSym); FretDiagram* fret = new FretDiagram(gscore); fret->setDot(5, 1); fret->setDot(2, 2); fret->setDot(1, 3); fret->setMarker(0, 'X'); fret->setMarker(3, 'O'); fret->setMarker(4, 'O'); sp->append(fret, tr("Fret Diagram")); paletteBox->addPalette(sp); }