MuseScore/libmscore/style.cpp

762 lines
42 KiB
C++
Raw Normal View History

2012-05-26 14:26:10 +02:00
//=============================================================================
// MuseScore
// Music Composition & Notation
//
// Copyright (C) 2002-2011 Werner Schweer
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2
// as published by the Free Software Foundation and appearing in
// the file LICENCE.GPL
//=============================================================================
#include "mscore.h"
#include "style.h"
#include "xml.h"
#include "score.h"
#include "articulation.h"
#include "harmony.h"
#include "chordlist.h"
#include "page.h"
#include "mscore.h"
2013-09-05 16:37:49 +02:00
#include "clef.h"
#include "tuplet.h"
#include "layout.h"
2012-05-26 14:26:10 +02:00
2013-05-13 18:49:17 +02:00
namespace Ms {
2012-05-26 14:26:10 +02:00
// 20 points font design size
// 72 points/inch point size
// 120 dpi screen resolution
// spatium = 20/4 points
2016-11-18 14:28:53 +01:00
//---------------------------------------------------------
// styleTypes
//---------------------------------------------------------
2016-03-02 13:20:19 +01:00
static const StyleType styleTypes[] {
{ StyleIdx::staffUpperBorder, "staffUpperBorder", Spatium(7.0) },
{ StyleIdx::staffLowerBorder, "staffLowerBorder", Spatium(7.0) },
{ StyleIdx::staffDistance, "staffDistance", Spatium(6.5) },
{ StyleIdx::akkoladeDistance, "akkoladeDistance", Spatium(6.5) },
{ StyleIdx::minSystemDistance, "minSystemDistance", Spatium(8.5) },
{ StyleIdx::maxSystemDistance, "maxSystemDistance", Spatium(15.0) },
2016-08-26 12:43:43 +02:00
{ StyleIdx::lyricsPlacement, "lyricsPlacement", int(Element::Placement::BELOW) },
{ StyleIdx::lyricsPosAbove, "lyricsPosAbove", Spatium(-2.0) },
{ StyleIdx::lyricsPosBelow, "lyricsPosBelow", Spatium(2.0) },
{ StyleIdx::lyricsMinTopDistance, "lyricsMinTopDistance", Spatium(1.0) },
{ StyleIdx::lyricsMinBottomDistance, "lyricsMinBottomDistance", Spatium(3.0) },
2016-03-02 13:20:19 +01:00
{ StyleIdx::lyricsLineHeight, "lyricsLineHeight", 1.0 },
2016-08-26 12:43:43 +02:00
{ StyleIdx::lyricsDashMinLength, "lyricsDashMinLength", Spatium(0.4) },
{ StyleIdx::lyricsDashMaxLength, "lyricsDashMaxLegth", Spatium(0.8) },
{ StyleIdx::lyricsDashMaxDistance, "lyricsDashMaxDistance", Spatium(16.0) },
{ StyleIdx::lyricsDashForce, "lyricsDashForce", QVariant(true) },
{ StyleIdx::lyricsAlignVerseNumber, "lyricsAlignVerseNumber", true },
{ StyleIdx::lyricsLineThickness, "lyricsLineThickness", Spatium(0.1) },
2016-08-26 12:43:43 +02:00
2016-03-02 13:20:19 +01:00
{ StyleIdx::figuredBassFontFamily, "figuredBassFontFamily", QString("MScoreBC") },
{ StyleIdx::figuredBassFontSize, "figuredBassFontSize", QVariant(8.0) },
{ StyleIdx::figuredBassYOffset, "figuredBassYOffset", QVariant(6.0) },
{ StyleIdx::figuredBassLineHeight, "figuredBassLineHeight", QVariant(1.0) },
{ StyleIdx::figuredBassAlignment, "figuredBassAlignment", QVariant(0) },
{ StyleIdx::figuredBassStyle, "figuredBassStyle" , QVariant(0) },
{ StyleIdx::systemFrameDistance, "systemFrameDistance", Spatium(7.0) },
{ StyleIdx::frameSystemDistance, "frameSystemDistance", Spatium(7.0) },
{ StyleIdx::minMeasureWidth, "minMeasureWidth", Spatium(5.0) },
{ StyleIdx::barWidth, "barWidth", Spatium(0.16) }, // 0.1875
{ StyleIdx::doubleBarWidth, "doubleBarWidth", Spatium(0.16) },
{ StyleIdx::endBarWidth, "endBarWidth", Spatium(0.5) }, // 0.5
{ StyleIdx::doubleBarDistance, "doubleBarDistance", Spatium(0.30) },
{ StyleIdx::endBarDistance, "endBarDistance", Spatium(0.40) }, // 0.3
{ StyleIdx::repeatBarlineDotSeparation, "repeatBarlineDotSeparation", Spatium(0.40) },
2016-03-02 13:20:19 +01:00
{ StyleIdx::repeatBarTips, "repeatBarTips", QVariant(false) },
{ StyleIdx::startBarlineSingle, "startBarlineSingle", QVariant(false) },
{ StyleIdx::startBarlineMultiple, "startBarlineMultiple", QVariant(true) },
{ StyleIdx::bracketWidth, "bracketWidth", Spatium(0.45) },
{ StyleIdx::bracketDistance, "bracketDistance", Spatium(0.1) },
{ StyleIdx::akkoladeWidth, "akkoladeWidth", Spatium(1.6) },
{ StyleIdx::akkoladeBarDistance, "akkoladeBarDistance", Spatium(.4) },
{ StyleIdx::dividerLeft, "dividerLeft", QVariant(false) },
{ StyleIdx::dividerLeftSym, "dividerLeftSym", QVariant(QString("systemDivider")) },
{ StyleIdx::dividerLeftX, "dividerLeftX", QVariant(0.0) },
{ StyleIdx::dividerLeftY, "dividerLeftY", QVariant(0.0) },
{ StyleIdx::dividerRight, "dividerRight", QVariant(false) },
{ StyleIdx::dividerRightSym, "dividerRightSym", QVariant(QString("systemDivider")) },
{ StyleIdx::dividerRightX, "dividerRightX", QVariant(0.0) },
{ StyleIdx::dividerRightY, "dividerRightY", QVariant(0.0) },
2016-03-02 13:20:19 +01:00
{ StyleIdx::clefLeftMargin, "clefLeftMargin", Spatium(0.8) }, // 0.64 (gould: <= 1)
{ StyleIdx::keysigLeftMargin, "keysigLeftMargin", Spatium(0.5) },
{ StyleIdx::ambitusMargin, "ambitusMargin", Spatium(0.5) },
2016-03-02 13:20:19 +01:00
{ StyleIdx::timesigLeftMargin, "timesigLeftMargin", Spatium(0.5) },
{ StyleIdx::clefKeyRightMargin, "clefKeyRightMargin", Spatium(0.8) },
{ StyleIdx::clefKeyDistance, "clefKeyDistance", Spatium(1.0) }, // gould: 1 - 1.25
{ StyleIdx::clefTimesigDistance, "clefTimesigDistance", Spatium(1.0) },
{ StyleIdx::keyTimesigDistance, "keyTimesigDistance", Spatium(1.0) }, // gould: 1 - 1.5
{ StyleIdx::keyBarlineDistance, "keyTimesigDistance", Spatium(1.0) },
{ StyleIdx::systemHeaderDistance, "systemHeaderDistance", Spatium(2.5) }, // gould: 2.5
{ StyleIdx::systemHeaderTimeSigDistance, "systemHeaderTimeSigDistance", Spatium(2.0) }, // gould: 2.0
2016-03-02 13:20:19 +01:00
{ StyleIdx::clefBarlineDistance, "clefBarlineDistance", Spatium(0.18) }, // was 0.5
{ StyleIdx::timesigBarlineDistance, "timesigBarlineDistance", Spatium(0.5) },
2016-03-02 13:20:19 +01:00
{ StyleIdx::stemWidth, "stemWidth", Spatium(0.13) }, // 0.09375
{ StyleIdx::shortenStem, "shortenStem", QVariant(true) },
{ StyleIdx::shortStemProgression, "shortStemProgression", Spatium(0.25) },
{ StyleIdx::shortestStem, "shortestStem", Spatium(2.25) },
{ StyleIdx::beginRepeatLeftMargin, "beginRepeatLeftMargin", Spatium(1.0) },
{ StyleIdx::minNoteDistance, "minNoteDistance", Spatium(0.25) }, // 0.4
{ StyleIdx::barNoteDistance, "barNoteDistance", Spatium(1.2) },
{ StyleIdx::barAccidentalDistance, "barAccidentalDistance", Spatium(.3) },
{ StyleIdx::multiMeasureRestMargin, "multiMeasureRestMargin", Spatium(1.2) },
{ StyleIdx::noteBarDistance, "noteBarDistance", Spatium(1.0) },
{ StyleIdx::measureSpacing, "measureSpacing", QVariant(1.2) },
{ StyleIdx::staffLineWidth, "staffLineWidth", Spatium(0.08) }, // 0.09375
{ StyleIdx::ledgerLineWidth, "ledgerLineWidth", Spatium(0.16) }, // 0.1875
{ StyleIdx::ledgerLineLength, "ledgerLineLength", Spatium(.6) }, // notehead width + this value
2016-03-02 13:20:19 +01:00
{ StyleIdx::accidentalDistance, "accidentalDistance", Spatium(0.22) },
{ StyleIdx::accidentalNoteDistance, "accidentalNoteDistance", Spatium(0.22) },
{ StyleIdx::beamWidth, "beamWidth", Spatium(0.5) }, // was 0.48
{ StyleIdx::beamDistance, "beamDistance", QVariant(0.5) }, // 0.25sp units
{ StyleIdx::beamMinLen, "beamMinLen", Spatium(1.32) }, // 1.316178 exactly notehead widthen beams
2016-03-02 13:20:19 +01:00
{ StyleIdx::beamNoSlope, "beamNoSlope", QVariant(false) },
{ StyleIdx::dotMag, "dotMag", QVariant(1.0) },
{ StyleIdx::dotNoteDistance, "dotNoteDistance", Spatium(0.35) },
{ StyleIdx::dotRestDistance, "dotRestDistance", Spatium(0.25) },
{ StyleIdx::dotDotDistance, "dotDotDistance", Spatium(0.5) },
{ StyleIdx::propertyDistanceHead, "propertyDistanceHead", Spatium(1.0) },
{ StyleIdx::propertyDistanceStem, "propertyDistanceStem", Spatium(1.8) },
{ StyleIdx::propertyDistance, "propertyDistance", Spatium(1.0) },
{ StyleIdx::articulationMag, "articulationMag", QVariant(1.0) },
{ StyleIdx::lastSystemFillLimit, "lastSystemFillLimit", QVariant(0.3) },
2016-11-18 14:28:53 +01:00
{ StyleIdx::hairpinPlacement, "hairpinPlacement", int(Element::Placement::BELOW) },
{ StyleIdx::hairpinPosAbove, "hairpinPosAbove", Spatium(-3.5) },
{ StyleIdx::hairpinPosBelow, "hairpinPosBelow", Spatium(3.5) },
2016-03-02 13:20:19 +01:00
{ StyleIdx::hairpinHeight, "hairpinHeight", Spatium(1.2) },
{ StyleIdx::hairpinContHeight, "hairpinContHeight", Spatium(0.5) },
{ StyleIdx::hairpinLineWidth, "hairpinWidth", Spatium(0.13) },
2016-11-18 14:28:53 +01:00
{ StyleIdx::pedalPlacement, "pedalPlacement", int(Element::Placement::BELOW) },
{ StyleIdx::pedalPosAbove, "pedalPosAbove", Spatium(-4) },
{ StyleIdx::pedalPosBelow, "pedalPosBelow", Spatium(4) },
2016-03-02 13:20:19 +01:00
{ StyleIdx::pedalLineWidth, "pedalLineWidth", Spatium(.15) },
{ StyleIdx::pedalLineStyle, "pedalListStyle", QVariant(int(Qt::SolidLine)) },
2016-11-18 14:28:53 +01:00
{ StyleIdx::trillPlacement, "trillPlacement", int(Element::Placement::ABOVE) },
{ StyleIdx::trillPosAbove, "trillPosAbove", Spatium(-1) },
{ StyleIdx::trillPosBelow, "trillPosBelow", Spatium(1) },
2016-03-02 13:20:19 +01:00
{ StyleIdx::harmonyY, "harmonyY", Spatium(2.5) },
{ StyleIdx::harmonyFretDist, "harmonyFretDist", Spatium(0.5) },
{ StyleIdx::minHarmonyDistance, "minHarmonyDistance", Spatium(0.5) },
{ StyleIdx::maxHarmonyBarDistance, "maxHarmonyBarDistance", Spatium(3.0) },
{ StyleIdx::capoPosition, "capoPosition", QVariant(0) },
{ StyleIdx::fretNumMag, "fretNumMag", QVariant(2.0) },
{ StyleIdx::fretNumPos, "fretNumPos", QVariant(0) },
{ StyleIdx::fretY, "fretY", Spatium(2.0) },
{ StyleIdx::showPageNumber, "showPageNumber", QVariant(true) },
{ StyleIdx::showPageNumberOne, "showPageNumberOne", QVariant(false) },
{ StyleIdx::pageNumberOddEven, "pageNumberOddEven", QVariant(true) },
{ StyleIdx::showMeasureNumber, "showMeasureNumber", QVariant(true) },
{ StyleIdx::showMeasureNumberOne, "showMeasureNumberOne", QVariant(false) },
{ StyleIdx::measureNumberInterval, "measureNumberInterval", QVariant(5) },
{ StyleIdx::measureNumberSystem, "measureNumberSystem", QVariant(true) },
{ StyleIdx::measureNumberAllStaffs, "measureNumberAllStaffs", QVariant(false) },
{ StyleIdx::smallNoteMag, "smallNoteMag", QVariant(.7) },
{ StyleIdx::graceNoteMag, "graceNoteMag", QVariant(0.7) },
{ StyleIdx::smallStaffMag, "smallStaffMag", QVariant(0.7) },
{ StyleIdx::smallClefMag, "smallClefMag", QVariant(0.8) },
{ StyleIdx::genClef, "genClef", QVariant(true) },
{ StyleIdx::genKeysig, "genKeysig", QVariant(true) },
{ StyleIdx::genCourtesyTimesig, "genCourtesyTimesig", QVariant(true) },
{ StyleIdx::genCourtesyKeysig, "genCourtesyKeysig", QVariant(true) },
{ StyleIdx::genCourtesyClef, "genCourtesyClef", QVariant(true) },
{ StyleIdx::swingRatio, "swingRatio", QVariant(60) },
{ StyleIdx::swingUnit, "swingUnit", QVariant(QString("")) },
{ StyleIdx::useStandardNoteNames, "useStandardNoteNames", QVariant(true) },
{ StyleIdx::useGermanNoteNames, "useGermanNoteNames", QVariant(false) },
{ StyleIdx::useFullGermanNoteNames, "useFullGermanNoteNames", QVariant(false) },
{ StyleIdx::useSolfeggioNoteNames, "useSolfeggioNoteNames", QVariant(false) },
{ StyleIdx::useFrenchNoteNames, "useFrenchNoteNames", QVariant(false) },
{ StyleIdx::automaticCapitalization, "automaticCapitalization", QVariant(true) },
{ StyleIdx::lowerCaseMinorChords, "lowerCaseMinorChords", QVariant(false) },
{ StyleIdx::lowerCaseBassNotes, "lowerCaseBassNotes", QVariant(false) },
{ StyleIdx::allCapsNoteNames, "allCapsNoteNames", QVariant(false) },
{ StyleIdx::chordStyle, "chordStyle", QVariant(QString("std")) },
{ StyleIdx::chordsXmlFile, "chordsXmlFile", QVariant(false) },
{ StyleIdx::chordDescriptionFile, "chordDescriptionFile", QVariant(QString("chords_std.xml")) },
{ StyleIdx::concertPitch, "concertPitch", QVariant(false) },
{ StyleIdx::createMultiMeasureRests, "createMultiMeasureRests", QVariant(false) },
{ StyleIdx::minEmptyMeasures, "minEmptyMeasures", QVariant(2) },
{ StyleIdx::minMMRestWidth, "minMMRestWidth", Spatium(4) },
{ StyleIdx::hideEmptyStaves, "hideEmptyStaves", QVariant(false) },
{ StyleIdx::dontHideStavesInFirstSystem,
"dontHidStavesInFirstSystm", QVariant(true) },
{ StyleIdx::hideInstrumentNameIfOneInstrument,
"hideInstrumentNameIfOneInstrument", QVariant(true) },
{ StyleIdx::gateTime, "gateTime", QVariant(100) },
{ StyleIdx::tenutoGateTime, "tenutoGateTime", QVariant(100) },
{ StyleIdx::staccatoGateTime, "staccatoGateTime", QVariant(50) },
{ StyleIdx::slurGateTime, "slurGateTime", QVariant(100) },
{ StyleIdx::ArpeggioNoteDistance, "ArpeggioNoteDistance", Spatium(.5) },
{ StyleIdx::ArpeggioLineWidth, "ArpeggioLineWidth", Spatium(.18) },
{ StyleIdx::ArpeggioHookLen, "ArpeggioHookLen", Spatium(.8) },
{ StyleIdx::SlurEndWidth, "slurEndWidth", Spatium(.07) },
{ StyleIdx::SlurMidWidth, "slurMidWidth", Spatium(.15) },
{ StyleIdx::SlurDottedWidth, "slurDottedWidth", Spatium(.1) },
{ StyleIdx::MinTieLength, "minTieLength", Spatium(1.0) },
{ StyleIdx::SectionPause, "sectionPause", QVariant(qreal(3.0)) },
{ StyleIdx::MusicalSymbolFont, "musicalSymbolFont", QVariant(QString("Emmentaler")) },
{ StyleIdx::MusicalTextFont, "musicalTextFont", QVariant(QString("MScore Text")) },
{ StyleIdx::showHeader, "showHeader", QVariant(false) },
{ StyleIdx::headerFirstPage, "headerFirstPage", QVariant(false) },
{ StyleIdx::headerOddEven, "headerOddEven", QVariant(true) },
{ StyleIdx::evenHeaderL, "evenHeaderL", QVariant(QString()) },
{ StyleIdx::evenHeaderC, "evenHeaderC", QVariant(QString()) },
{ StyleIdx::evenHeaderR, "evenHeaderR", QVariant(QString()) },
{ StyleIdx::oddHeaderL, "oddHeaderL", QVariant(QString()) },
{ StyleIdx::oddHeaderC, "oddHeaderC", QVariant(QString()) },
{ StyleIdx::oddHeaderR, "oddHeaderR", QVariant(QString()) },
{ StyleIdx::showFooter, "showFooter", QVariant(true) },
{ StyleIdx::footerFirstPage, "footerFirstPage", QVariant(true) },
{ StyleIdx::footerOddEven, "footerOddEven", QVariant(true) },
{ StyleIdx::evenFooterL, "evenFooterL", QVariant(QString("$p")) },
{ StyleIdx::evenFooterC, "evenFooterC", QVariant(QString("$:copyright:")) },
{ StyleIdx::evenFooterR, "evenFooterR", QVariant(QString()) },
{ StyleIdx::oddFooterL, "oddFooterL", QVariant(QString()) },
{ StyleIdx::oddFooterC, "oddFooterC", QVariant(QString("$:copyright:")) },
{ StyleIdx::oddFooterR, "oddFooterR", QVariant(QString("$p")) },
{ StyleIdx::voltaY, "voltaY", Spatium(-3.0) },
{ StyleIdx::voltaHook, "voltaHook", Spatium(1.9) },
{ StyleIdx::voltaLineWidth, "voltaLineWidth", Spatium(.1) },
{ StyleIdx::voltaLineStyle, "voltaLineStyle", QVariant(int(Qt::SolidLine)) },
2016-11-18 14:28:53 +01:00
{ StyleIdx::ottavaPlacement, "ottavaPlacement", int(Element::Placement::ABOVE) },
{ StyleIdx::ottavaPosAbove, "ottavaPosAbove", Spatium(-3.0) },
{ StyleIdx::ottavaPosBelow, "ottavaPosBelow", Spatium(3.0) },
2016-03-02 13:20:19 +01:00
{ StyleIdx::ottavaHook, "ottavaHook", Spatium(1.9) },
{ StyleIdx::ottavaLineWidth, "ottavaLineWidth", Spatium(.1) },
{ StyleIdx::ottavaLineStyle, "ottavaLineStyle", QVariant(int(Qt::DashLine)) },
{ StyleIdx::ottavaNumbersOnly, "ottavaNumbersOnly", true },
2016-11-18 14:28:53 +01:00
2016-03-02 13:20:19 +01:00
{ StyleIdx::tabClef, "tabClef", QVariant(int(ClefType::TAB)) },
{ StyleIdx::tremoloWidth, "tremoloWidth", Spatium(1.2) }, // tremolo stroke width: notehead width
2016-03-02 13:20:19 +01:00
{ StyleIdx::tremoloBoxHeight, "tremoloBoxHeight", Spatium(0.65) },
{ StyleIdx::tremoloStrokeWidth, "tremoloLineWidth", Spatium(0.5) }, // was 0.35
{ StyleIdx::tremoloDistance, "tremoloDistance", Spatium(0.8) },
{ StyleIdx::linearStretch, "linearStretch", QVariant(qreal(1.5)) },
{ StyleIdx::crossMeasureValues, "crossMeasureValues", QVariant(false) },
{ StyleIdx::keySigNaturals, "keySigNaturals", QVariant(int(KeySigNatural::NONE)) },
2016-03-02 13:20:19 +01:00
{ StyleIdx::tupletMaxSlope, "tupletMaxSlope", QVariant(qreal(0.5)) },
{ StyleIdx::tupletOufOfStaff, "tupletOufOfStaff", QVariant(true) },
{ StyleIdx::tupletVHeadDistance, "tupletVHeadDistance", Spatium(.5) },
{ StyleIdx::tupletVStemDistance, "tupletVStemDistance", Spatium(.25) },
{ StyleIdx::tupletStemLeftDistance, "tupletStemLeftDistance", Spatium(.5) },
{ StyleIdx::tupletStemRightDistance, "tupletStemRightDistance", Spatium(.5) },
{ StyleIdx::tupletNoteLeftDistance, "tupletNoteLeftDistance", Spatium(0.0) },
{ StyleIdx::tupletNoteRightDistance, "tupletNoteRightDistance", Spatium(0.0) },
{ StyleIdx::tupletBracketWidth, "tupletBracketWidth", Spatium(0.1) },
{ StyleIdx::tupletDirection, "tupletDirection", Direction(Direction::AUTO) },
{ StyleIdx::tupletNumberType, "tupletNumberType", int(Tuplet::NumberType::SHOW_NUMBER) },
{ StyleIdx::tupletBracketType, "tupletBracketType", int(Tuplet::BracketType::AUTO_BRACKET) },
2016-03-02 13:20:19 +01:00
{ StyleIdx::barreLineWidth, "barreLineWidth", QVariant(1.0) },
{ StyleIdx::fretMag, "fretMag", QVariant(1.0) },
{ StyleIdx::scaleBarlines, "scaleBarlines", QVariant(true) },
{ StyleIdx::barGraceDistance, "barGraceDistance", Spatium(.6) },
{ StyleIdx::minVerticalDistance, "minVerticalDistance", Spatium(0.5) },
{ StyleIdx::ornamentStyle, "ornamentStyle", int(MScore::OrnamentStyle::DEFAULT) },
2016-03-08 09:46:33 +01:00
{ StyleIdx::spatium, "Spatium", SPATIUM20 },
2016-03-03 17:10:50 +01:00
2016-08-02 17:00:49 +02:00
{ StyleIdx::autoplaceHairpinDynamicsDistance, "autoplaceHairpinDynamicsDistance", Spatium(0.5) },
2016-11-18 14:28:53 +01:00
{ StyleIdx::dynamicsPlacement, "dynamicsPlacement", int(Element::Placement::BELOW) },
{ StyleIdx::dynamicsPosAbove, "dynamicsPosAbove", Spatium(-2.0) },
{ StyleIdx::dynamicsPosBelow, "dynamicsPosBelow", Spatium(1.0) },
2016-11-18 14:28:53 +01:00
{ StyleIdx::dynamicsMinDistance, "dynamicsMinDistance", Spatium(0.5) },
{ StyleIdx::autoplaceVerticalAlignRange, "autoplaceVerticalAlignRange", int(VerticalAlignRange::SYSTEM) },
{ StyleIdx::textLinePlacement, "textLinePlacement", int(Element::Placement::ABOVE) },
{ StyleIdx::textLinePosAbove, "textLinePosAbove", Spatium(-3.5) },
{ StyleIdx::textLinePosBelow, "textLinePosBelow", Spatium(3.5) },
2016-09-20 17:13:54 +02:00
2016-10-06 12:21:28 +02:00
{ StyleIdx::tremoloBarLineWidth, "tremoloBarLineWidth", Spatium(0.1) },
2016-03-02 13:20:19 +01:00
};
2013-07-23 16:43:56 +02:00
2015-01-22 16:27:16 +01:00
//---------------------------------------------------------
// valueType
//---------------------------------------------------------
2016-03-02 13:20:19 +01:00
const char* MStyle::valueType(const StyleIdx i)
{
return styleTypes[int(i)].valueType();
}
//---------------------------------------------------------
// valueName
//---------------------------------------------------------
const char* MStyle::valueName(const StyleIdx i)
2015-01-22 16:27:16 +01:00
{
2016-03-02 13:20:19 +01:00
return styleTypes[int(i)].name();
2015-01-22 16:27:16 +01:00
}
2016-09-19 22:57:36 +02:00
//---------------------------------------------------------
// styleIdx
//---------------------------------------------------------
StyleIdx MStyle::styleIdx(const QString &name)
{
for (StyleType st : styleTypes) {
if (st.name() == name)
return st.styleIdx();
}
return StyleIdx::NOSTYLE;
}
static const QString ff("FreeSerif");
2012-05-26 14:26:10 +02:00
//---------------------------------------------------------
// setDefaultStyle
// synchronize with TextStyleType
//---------------------------------------------------------
void initStyle(MStyle* s)
{
#define MM(x) ((x)/INCH)
2016-10-08 17:47:52 +02:00
#define N(x) QT_TRANSLATE_NOOP ("TextStyle", x)
#define LT AlignmentFlags::LEFT | AlignmentFlags::TOP
#define LB AlignmentFlags::LEFT | AlignmentFlags::BASELINE
#define HCB AlignmentFlags::HCENTER | AlignmentFlags::BASELINE
2012-05-26 14:26:10 +02:00
// this is an empty style, no offsets are allowed
// never show this style
s->addTextStyle(TextStyle(N(""), ff, 10, false, false, false, LB, QPointF(), OffsetType::SPATIUM, false, false, false, Spatium(.2), Spatium(.5), 25, QColor(Qt::black), false, false, QColor(Qt::black), QColor(255, 255, 255, 0), TextStyleHidden::ALWAYS));
2016-10-08 17:47:52 +02:00
s->addTextStyle(TextStyle(N("Title"), ff, 24, false, false, false, AlignmentFlags::HCENTER | AlignmentFlags::TOP, QPointF(), OffsetType::ABS));
s->addTextStyle(TextStyle(N("Subtitle"), ff, 14, false, false, false, AlignmentFlags::HCENTER | AlignmentFlags::TOP, QPointF(0, MM(10)), OffsetType::ABS));
s->addTextStyle(TextStyle(N("Composer"), ff, 12, false, false, false, AlignmentFlags::RIGHT | AlignmentFlags::BOTTOM, QPointF(), OffsetType::ABS));
s->addTextStyle(TextStyle(N("Lyricist"), ff, 12, false, false, false, AlignmentFlags::LEFT | AlignmentFlags::BOTTOM, QPointF(), OffsetType::ABS));
s->addTextStyle(TextStyle(N("Lyrics Odd Lines"), ff, 11, false, false, false, AlignmentFlags::HCENTER | AlignmentFlags::BASELINE, QPointF(0, 6), OffsetType::SPATIUM, true));
s->addTextStyle(TextStyle(N("Lyrics Even Lines"), ff, 11, false, false, false, AlignmentFlags::HCENTER | AlignmentFlags::BASELINE, QPointF(0, 6), OffsetType::SPATIUM, true));
s->addTextStyle(TextStyle(N("Fingering"), ff, 8, false, false, false, AlignmentFlags::CENTER, QPointF(), OffsetType::SPATIUM, true));
s->addTextStyle(TextStyle(N("LH Guitar Fingering"), ff, 8, false, false, false, AlignmentFlags::RIGHT | AlignmentFlags::VCENTER, QPointF(-0.5, 0), OffsetType::SPATIUM, true));
2016-10-08 17:47:52 +02:00
s->addTextStyle(TextStyle(N("RH Guitar Fingering"), ff, 8, false, false, false, AlignmentFlags::CENTER, QPointF(), OffsetType::SPATIUM, true));
s->addTextStyle(TextStyle(N("String Number"), ff, 8, false, false, false, AlignmentFlags::CENTER, QPointF(0, -2.0), OffsetType::SPATIUM, true, true, true, Spatium(.1), Spatium(.2), 0, Qt::black, true, false));
s->addTextStyle(TextStyle(N("Instrument Name (Long)"), ff, 12, false, false, false, AlignmentFlags::RIGHT | AlignmentFlags::VCENTER, QPointF(), OffsetType::ABS, true));
s->addTextStyle(TextStyle(N("Instrument Name (Short)"), ff, 12, false, false, false, AlignmentFlags::RIGHT | AlignmentFlags::VCENTER, QPointF(), OffsetType::ABS, true));
s->addTextStyle(TextStyle(N("Instrument Name (Part)"), ff, 18, false, false, false, LT, QPointF(), OffsetType::ABS));
2014-07-23 12:35:56 +02:00
// dynamics size is 12pt for bravura-text
s->addTextStyle(TextStyle(N("Dynamics"), ff, 12, false, true, false, HCB, QPointF(0.0, 0.0), OffsetType::SPATIUM, true));
s->addTextStyle(TextStyle(N("Expression"), ff, 11, false, true, false, LB, QPointF(0, -6.0), OffsetType::SPATIUM, true));
s->addTextStyle(TextStyle(N("Tempo"), ff, 12, true, false, false, LB, QPointF(0, -4.0), OffsetType::SPATIUM, true, false, false, Spatium(.2), Spatium(.5), 0, Qt::black, false, true));
s->addTextStyle(TextStyle(N("Metronome"), ff, 12, true, false, false, AlignmentFlags::LEFT));
s->addTextStyle(TextStyle(N("Measure Number"), ff, 8, false, false, false, AlignmentFlags::HCENTER | AlignmentFlags::BOTTOM, QPointF(.0, -2.0), OffsetType::SPATIUM, true));
s->addTextStyle(TextStyle(N("Translator"), ff, 11, false, false, false, AlignmentFlags::HCENTER | AlignmentFlags::TOP, QPointF(0, 6)));
s->addTextStyle(TextStyle(N("Tuplet"), ff, 10, false, true, false, AlignmentFlags::CENTER, QPointF(), OffsetType::ABS, true));
s->addTextStyle(TextStyle(N("System"), ff, 10, false, false, false, AlignmentFlags::LEFT, QPointF(0, -4.0), OffsetType::SPATIUM, true, false, false, Spatium(.2), Spatium(.5), 25, Qt::black, false, true));
s->addTextStyle(TextStyle(N("Staff"), ff, 10, false, false, false, AlignmentFlags::LEFT, QPointF(0, -4.0), OffsetType::SPATIUM, true));
s->addTextStyle(TextStyle(N("Chord Symbol"), ff, 12, false, false, false, LB, QPointF(), OffsetType::SPATIUM, true));
s->addTextStyle(TextStyle(N("Rehearsal Mark"), ff, 14, true, false, false, AlignmentFlags::HCENTER | AlignmentFlags::BASELINE, QPointF(0, -3.0), OffsetType::SPATIUM, true, true, true, Spatium(.2), Spatium(.5), 0, Qt::black, false, true));
s->addTextStyle(TextStyle(N("Repeat Text Left"), ff, 20, false, false, false, LB, QPointF(0, -2.0), OffsetType::SPATIUM, true, false, false, Spatium(.2), Spatium(.5), 25, Qt::black, false, true));
s->addTextStyle(TextStyle(N("Repeat Text Right"), ff, 12, false, false, false, AlignmentFlags::RIGHT | AlignmentFlags::BASELINE, QPointF(0, -2.0), OffsetType::SPATIUM, true, false, false, Spatium(0.2), Spatium(0.5), 25, Qt::black, false, true));
s->addTextStyle(TextStyle(N("Volta"), ff, 11, true, false, false, LB, QPointF(0.5, 1.9), OffsetType::SPATIUM, true));
s->addTextStyle(TextStyle(N("Frame"), ff, 12, false, false, false, AlignmentFlags::LEFT | AlignmentFlags::TOP));
s->addTextStyle(TextStyle(N("Text Line"), ff, 12, false, false, false, AlignmentFlags::LEFT | AlignmentFlags::VCENTER, QPointF(), OffsetType::SPATIUM, true));
s->addTextStyle(TextStyle(N("Glissando"), ff, 8, false, true, false, AlignmentFlags::HCENTER | AlignmentFlags::BASELINE, QPointF(), OffsetType::SPATIUM, true));
s->addTextStyle(TextStyle(N("Ottava"), ff, 12, false, true, false, AlignmentFlags::LEFT | AlignmentFlags::VCENTER, QPointF(), OffsetType::SPATIUM, true));
s->addTextStyle(TextStyle(N("Pedal"), ff, 12, false, false, false, LB, QPointF(0.0, 0.15), OffsetType::SPATIUM, true));
s->addTextStyle(TextStyle(N("Hairpin"), ff, 12, false, true, false, LB, QPointF(), OffsetType::SPATIUM, true));
s->addTextStyle(TextStyle(N("Bend"), ff, 8, false, false, false, AlignmentFlags::CENTER | AlignmentFlags::BOTTOM, QPointF(), OffsetType::SPATIUM, true));
s->addTextStyle(TextStyle(N("Header"), ff, 8, false, false, false, AlignmentFlags::HCENTER | AlignmentFlags::TOP));
s->addTextStyle(TextStyle(N("Footer"), ff, 8, false, false, false, AlignmentFlags::HCENTER | AlignmentFlags::BOTTOM, QPointF(0.0, MM(5)), OffsetType::ABS));
s->addTextStyle(TextStyle(N("Instrument Change"), ff, 12, true, false, false, AlignmentFlags::LEFT | AlignmentFlags::BOTTOM, QPointF(0, -3.0), OffsetType::SPATIUM, true));
s->addTextStyle(TextStyle(QT_TRANSLATE_NOOP ("TextStyle", "Figured Bass"), "MScoreBC", 8, false, false, false, AlignmentFlags::LEFT | AlignmentFlags::TOP, QPointF(0, 6), OffsetType::SPATIUM, true, false,
false, Spatium(0.0), Spatium(0.0), 25, QColor(Qt::black), false, // default params
false, QColor(Qt::black), QColor(255, 255, 255, 0), // default params
TextStyleHidden::IN_EDITOR)); // don't show in Style Editor
2012-05-26 14:26:10 +02:00
#undef MM
2016-10-08 17:47:52 +02:00
#undef N
2016-03-02 13:20:19 +01:00
#ifndef NDEBUG
int i = 0;
for (const StyleType& t : styleTypes) {
Q_ASSERT(t.idx() == i);
++i;
}
#endif
2012-05-26 14:26:10 +02:00
}
//---------------------------------------------------------
// Style
//---------------------------------------------------------
2016-03-02 13:20:19 +01:00
MStyle::MStyle()
: _values(int(StyleIdx::STYLES)), _precomputedValues(int(StyleIdx::STYLES))
2012-05-26 14:26:10 +02:00
{
_customChordList = false;
2016-03-02 13:20:19 +01:00
for (const StyleType& t : styleTypes)
_values[t.idx()] = t.defaultValue();
precomputeValues();
2012-05-26 14:26:10 +02:00
};
//---------------------------------------------------------
2016-03-02 13:20:19 +01:00
// precomputeValues
2012-05-26 14:26:10 +02:00
//---------------------------------------------------------
2016-03-02 13:20:19 +01:00
void MStyle::precomputeValues()
2012-05-26 14:26:10 +02:00
{
2016-03-02 13:20:19 +01:00
qreal _spatium = value(StyleIdx::spatium).toDouble();
for (const StyleType& t : styleTypes) {
if (!strcmp(t.valueType(), "Ms::Spatium"))
_precomputedValues[t.idx()] = _values[t.idx()].value<Spatium>().val() * _spatium;
}
2012-05-26 14:26:10 +02:00
}
//---------------------------------------------------------
2016-03-02 13:20:19 +01:00
// isDefault
// caution: custom types need to register comparison operator
// to make this work
2012-05-26 14:26:10 +02:00
//---------------------------------------------------------
2016-03-02 13:20:19 +01:00
bool MStyle::isDefault(StyleIdx idx) const
2012-05-26 14:26:10 +02:00
{
2016-03-02 13:20:19 +01:00
return _values[int(idx)] == MScore::baseStyle()->value(idx);
2012-05-26 14:26:10 +02:00
}
2016-03-02 13:20:19 +01:00
//---------------------------------------------------------
// chordDescription
//---------------------------------------------------------
2012-05-26 14:26:10 +02:00
2016-03-02 13:20:19 +01:00
const ChordDescription* MStyle::chordDescription(int id) const
2012-05-26 14:26:10 +02:00
{
2016-03-02 13:20:19 +01:00
if (!_chordList.contains(id))
return 0;
return &*_chordList.find(id);
2012-05-26 14:26:10 +02:00
}
//---------------------------------------------------------
2016-03-02 13:20:19 +01:00
// setChordList
//---------------------------------------------------------
2016-03-02 13:20:19 +01:00
void MStyle::setChordList(ChordList* cl, bool custom)
2012-05-26 14:26:10 +02:00
{
2016-03-02 13:20:19 +01:00
_chordList = *cl;
_customChordList = custom;
2012-05-26 14:26:10 +02:00
}
//---------------------------------------------------------
2016-03-02 13:20:19 +01:00
// MStyle
2012-05-26 14:26:10 +02:00
//---------------------------------------------------------
2016-03-02 13:20:19 +01:00
MStyle::MStyle(const MStyle& s)
2012-05-26 14:26:10 +02:00
{
2016-08-04 17:36:39 +02:00
_values = s._values;
_precomputedValues = s._precomputedValues;
_chordList = s._chordList;
_textStyles = s._textStyles;
2016-03-02 13:20:19 +01:00
_pageFormat.copy(s._pageFormat);
2016-08-04 17:36:39 +02:00
_customChordList = s._customChordList;
2012-05-26 14:26:10 +02:00
}
2016-03-02 13:20:19 +01:00
MStyle& MStyle::operator=(const MStyle& s)
2012-05-26 14:26:10 +02:00
{
2016-08-04 17:36:39 +02:00
_values = s._values;
_precomputedValues = s._precomputedValues;
_chordList = s._chordList;
_textStyles = s._textStyles;
2016-03-02 13:20:19 +01:00
_pageFormat.copy(s._pageFormat);
2016-08-04 17:36:39 +02:00
_customChordList = s._customChordList;
2016-03-02 13:20:19 +01:00
return *this;
2012-05-26 14:26:10 +02:00
}
//---------------------------------------------------------
2016-03-02 13:20:19 +01:00
// TextStyle
2012-05-26 14:26:10 +02:00
//---------------------------------------------------------
2016-03-02 13:20:19 +01:00
const TextStyle& MStyle::textStyle(TextStyleType idx) const
2012-05-26 14:26:10 +02:00
{
2016-03-02 13:20:19 +01:00
Q_ASSERT(int(idx) >= 0 && int(idx) < _textStyles.count());
return _textStyles[int(idx)];
2012-05-26 14:26:10 +02:00
}
2016-09-19 22:57:36 +02:00
TextStyle& MStyle::textStyle(TextStyleType idx)
{
Q_ASSERT(int(idx) >= 0 && int(idx) < _textStyles.count());
return _textStyles[int(idx)];
}
2016-03-02 13:20:19 +01:00
const TextStyle& MStyle::textStyle(const QString& name) const
2012-05-26 14:26:10 +02:00
{
2016-03-02 13:20:19 +01:00
for (const TextStyle& s : _textStyles) {
if (s.name() == name)
return s;
}
qFatal("TextStyle <%s> not found", qPrintable(name));
return _textStyles[0];
2012-05-26 14:26:10 +02:00
}
//---------------------------------------------------------
2016-03-02 13:20:19 +01:00
// textStyleType
2012-05-26 14:26:10 +02:00
//---------------------------------------------------------
2016-03-02 13:20:19 +01:00
TextStyleType MStyle::textStyleType(const QString& name) const
2012-05-26 14:26:10 +02:00
{
2016-03-02 13:20:19 +01:00
for (int i = 0; i < _textStyles.size(); ++i) {
if (_textStyles[i].name() == name)
return TextStyleType(i);
}
qDebug("TextStyleType <%s> not found", qPrintable(name));
return TextStyleType::DEFAULT;
2012-05-26 14:26:10 +02:00
}
//---------------------------------------------------------
2016-03-02 13:20:19 +01:00
// setTextStyle
2012-05-26 14:26:10 +02:00
//---------------------------------------------------------
2016-03-02 13:20:19 +01:00
void MStyle::setTextStyle(const TextStyle& ts)
2012-05-26 14:26:10 +02:00
{
2016-03-02 13:20:19 +01:00
for (int i = 0; i < _textStyles.size(); ++i) {
if (_textStyles[i].name() == ts.name()) {
_textStyles[i] = ts;
return;
}
}
_textStyles.append(ts);
2012-05-26 14:26:10 +02:00
}
//---------------------------------------------------------
2016-03-02 13:20:19 +01:00
// addTextStyle
2012-05-26 14:26:10 +02:00
//---------------------------------------------------------
2016-03-02 13:20:19 +01:00
void MStyle::addTextStyle(const TextStyle& ts)
2012-05-26 14:26:10 +02:00
{
2016-03-02 13:20:19 +01:00
_textStyles.append(ts);
2012-05-26 14:26:10 +02:00
}
2014-03-14 11:30:19 +01:00
//---------------------------------------------------------
2016-03-02 13:20:19 +01:00
// removeTextStyle
2014-03-14 11:30:19 +01:00
//---------------------------------------------------------
2016-03-02 13:20:19 +01:00
void MStyle::removeTextStyle(const TextStyle& /*ts*/)
2014-03-14 11:30:19 +01:00
{
2016-03-02 13:20:19 +01:00
// TODO
2014-03-14 11:30:19 +01:00
}
2014-03-14 16:16:43 +01:00
//---------------------------------------------------------
2016-03-02 13:20:19 +01:00
// textStyles
2014-03-14 16:16:43 +01:00
//---------------------------------------------------------
2016-03-02 13:20:19 +01:00
const QList<TextStyle>& MStyle::textStyles() const
2014-03-14 16:16:43 +01:00
{
2016-03-02 13:20:19 +01:00
return _textStyles;
2014-03-14 16:16:43 +01:00
}
2012-05-26 14:26:10 +02:00
//---------------------------------------------------------
2016-03-02 13:20:19 +01:00
// set
2012-05-26 14:26:10 +02:00
//---------------------------------------------------------
2016-03-02 13:20:19 +01:00
void MStyle::set(const StyleIdx t, const QVariant& val)
2012-05-26 14:26:10 +02:00
{
2016-03-02 13:20:19 +01:00
const int idx = int(t);
_values[idx] = val;
if (t == StyleIdx::spatium)
precomputeValues();
else {
if (!strcmp(styleTypes[idx].valueType(), "Ms::Spatium")) {
qreal _spatium = value(StyleIdx::spatium).toDouble();
_precomputedValues[idx] = _values[idx].value<Spatium>().val() * _spatium;
}
}
2012-05-26 14:26:10 +02:00
}
2016-09-19 22:57:36 +02:00
//---------------------------------------------------------
// convertToUnit
//---------------------------------------------------------
void MStyle::convertToUnit(const QString& tag, const QString& val)
{
for (const StyleType& t : styleTypes) {
StyleIdx idx = t.styleIdx();
if (t.name() == tag) {
const char* type = t.valueType();
if (!strcmp("Ms::Spatium", type))
set(idx, Spatium(val.toDouble()));
else if (!strcmp("double", type))
set(idx, QVariant(val.toDouble()));
else if (!strcmp("bool", type))
set(idx, QVariant(bool(val.toInt())));
else if (!strcmp("int", type))
set(idx, QVariant(val.toInt()));
else if (!strcmp("Ms::Direction", type))
set(idx, QVariant::fromValue(Direction(val.toInt())));
else if (!strcmp("QString", type))
set(idx, QVariant(val));
else
qFatal("MStyle::load: unhandled type %s", type);
2016-10-06 12:21:28 +02:00
return;
2016-09-19 22:57:36 +02:00
}
}
2016-10-06 12:21:28 +02:00
qDebug("MStyle::load: unhandled style value %s", qPrintable(tag));
2016-09-19 22:57:36 +02:00
}
2012-05-26 14:26:10 +02:00
//---------------------------------------------------------
2016-03-02 13:20:19 +01:00
// load
2012-05-26 14:26:10 +02:00
//---------------------------------------------------------
2016-03-02 13:20:19 +01:00
bool MStyle::load(QFile* qf)
2012-05-26 14:26:10 +02:00
{
2016-11-19 10:31:14 +01:00
XmlReader e(0, qf);
2016-03-02 13:20:19 +01:00
while (e.readNextStartElement()) {
if (e.name() == "museScore") {
QString version = e.attribute("version");
QStringList sl = version.split('.');
int mscVersion = sl[0].toInt() * 100 + sl[1].toInt();
if (mscVersion != MSCVERSION)
return false;
while (e.readNextStartElement()) {
if (e.name() == "Style")
load(e);
else
e.unknown();
}
}
2012-05-26 14:26:10 +02:00
}
return true;
}
2016-03-02 13:20:19 +01:00
void MStyle::load(XmlReader& e)
2012-05-26 14:26:10 +02:00
{
2014-05-26 15:31:36 +02:00
QString oldChordDescriptionFile = value(StyleIdx::chordDescriptionFile).toString();
bool chordListTag = false;
2013-01-11 18:10:18 +01:00
while (e.readNextStartElement()) {
QString tag = e.name().toString();
2012-05-26 14:26:10 +02:00
if (tag == "TextStyle") {
TextStyle s;
s.read(e);
setTextStyle(s);
}
else if (tag == "Spatium")
2016-03-02 13:20:19 +01:00
set(StyleIdx::spatium, e.readDouble() * DPMM);
2012-05-26 14:26:10 +02:00
else if (tag == "page-layout")
_pageFormat.read(e);
else if (tag == "displayInConcertPitch")
2014-05-26 15:31:36 +02:00
set(StyleIdx::concertPitch, QVariant(bool(e.readInt())));
2012-05-26 14:26:10 +02:00
else if (tag == "ChordList") {
_chordList.clear();
_chordList.read(e);
2012-05-26 14:26:10 +02:00
_customChordList = true;
chordListTag = true;
2012-05-26 14:26:10 +02:00
}
else
convertToUnit(tag, e.readElementText());
2012-05-26 14:26:10 +02:00
}
2013-06-10 07:03:57 +02:00
// if we just specified a new chord description file
// and didn't encounter a ChordList tag
// then load the chord description file
2016-03-02 13:20:19 +01:00
2014-05-26 15:31:36 +02:00
QString newChordDescriptionFile = value(StyleIdx::chordDescriptionFile).toString();
if (newChordDescriptionFile != oldChordDescriptionFile && !chordListTag) {
2014-05-26 15:31:36 +02:00
if (!newChordDescriptionFile.startsWith("chords_") && value(StyleIdx::chordStyle).toString() == "std") {
2013-06-29 01:13:33 +02:00
// should not normally happen,
// but treat as "old" (114) score just in case
2014-05-26 15:31:36 +02:00
set(StyleIdx::chordStyle, QVariant(QString("custom")));
set(StyleIdx::chordsXmlFile, QVariant(true));
2013-06-29 01:13:33 +02:00
qDebug("StyleData::load: custom chord description file %s with chordStyle == std", qPrintable(newChordDescriptionFile));
}
2014-05-26 15:31:36 +02:00
if (value(StyleIdx::chordStyle).toString() == "custom")
_customChordList = true;
else
_customChordList = false;
_chordList.unload();
}
// make sure we have a chordlist
if (!_chordList.loaded() && !chordListTag) {
2014-05-26 15:31:36 +02:00
if (value(StyleIdx::chordsXmlFile).toBool())
_chordList.read("chords.xml");
_chordList.read(newChordDescriptionFile);
2013-06-10 07:03:57 +02:00
}
2012-05-26 14:26:10 +02:00
}
//---------------------------------------------------------
// save
//---------------------------------------------------------
2016-11-19 11:51:21 +01:00
void MStyle::save(XmlWriter& xml, bool optimize)
2012-05-26 14:26:10 +02:00
{
xml.stag("Style");
2016-03-02 13:20:19 +01:00
for (const StyleType& st : styleTypes) {
StyleIdx idx = st.styleIdx();
2016-03-08 09:46:33 +01:00
if (idx == StyleIdx::spatium) // special handling for spatium
continue;
2012-05-26 14:26:10 +02:00
if (optimize && isDefault(idx))
continue;
2016-03-02 13:20:19 +01:00
const char* type = st.valueType();
if (!strcmp("Ms::Spatium", type))
xml.tag(st.name(), value(idx).value<Spatium>().val());
else if (!strcmp("double", type))
xml.tag(st.name(), value(idx).toDouble());
else if (!strcmp("bool", type))
xml.tag(st.name(), value(idx).toInt());
else if (!strcmp("int", type))
xml.tag(st.name(), value(idx).toInt());
else if (!strcmp("Ms::Direction", type))
xml.tag(st.name(), value(idx).toInt());
else if (!strcmp("QString", type))
xml.tag(st.name(), value(idx).toString());
else
2016-03-03 17:10:50 +01:00
qFatal("bad style type");
2012-05-26 14:26:10 +02:00
}
for (int i = 0; i < int(TextStyleType::TEXT_STYLES); ++i) {
if (!optimize || _textStyles[i] != MScore::baseStyle()->textStyle(TextStyleType(i)))
2012-05-26 14:26:10 +02:00
_textStyles[i].write(xml);
}
for (int i = int(TextStyleType::TEXT_STYLES); i < _textStyles.size(); ++i)
2012-05-26 14:26:10 +02:00
_textStyles[i].write(xml);
2016-02-06 22:03:43 +01:00
if (_customChordList && !_chordList.empty()) {
2012-05-26 14:26:10 +02:00
xml.stag("ChordList");
_chordList.write(xml);
2012-05-26 14:26:10 +02:00
xml.etag();
}
if (!MScore::saveTemplateMode || (_pageFormat.name() != "A4" && _pageFormat.name() != "Letter"))
_pageFormat.write(xml);
2016-03-02 13:20:19 +01:00
xml.tag("Spatium", value(StyleIdx::spatium).toDouble() / DPMM);
2012-05-26 14:26:10 +02:00
xml.etag();
}
//---------------------------------------------------------
// setPageFormat
//---------------------------------------------------------
void MStyle::setPageFormat(const PageFormat& pf)
{
2012-07-06 14:21:05 +02:00
_pageFormat.copy(pf);
2012-05-26 14:26:10 +02:00
}
2013-05-13 18:49:17 +02:00
}