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"
2016-07-08 16:48:04 +02:00
# include "tuplet.h"
2016-08-22 12:08:21 +02:00
# 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 ) } ,
2016-08-18 10:22:07 +02:00
{ 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 ) } ,
2016-08-26 13:42:59 +02:00
{ StyleIdx : : lyricsAlignVerseNumber , " lyricsAlignVerseNumber " , true } ,
2016-10-10 23:05:51 +02:00
{ 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
2016-10-10 23:05:51 +02:00
{ 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-05-25 12:10:52 +02:00
2016-03-02 13:20:19 +01:00
{ StyleIdx : : clefLeftMargin , " clefLeftMargin " , Spatium ( 0.8 ) } , // 0.64 (gould: <= 1)
{ StyleIdx : : keysigLeftMargin , " keysigLeftMargin " , Spatium ( 0.5 ) } ,
2016-05-25 12:10:52 +02:00
{ 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
2016-03-05 19:50:55 +01:00
{ StyleIdx : : keyBarlineDistance , " keyTimesigDistance " , Spatium ( 1.0 ) } ,
2016-04-20 18:56:08 +02:00
{ 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
2016-05-04 10:27:40 +02:00
{ 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
2016-05-03 01:21:42 +02:00
{ 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
2016-05-03 01:21:42 +02:00
{ 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 ) ) } ,
2016-05-03 01:21:42 +02:00
{ 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-07-08 16:48:04 +02:00
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 ) } ,
2016-07-08 16:48:04 +02:00
{ 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 ) } ,
2016-11-18 16:23:28 +01:00
{ StyleIdx : : dynamicsPosAbove , " dynamicsPosAbove " , Spatium ( - 2.0 ) } ,
{ StyleIdx : : dynamicsPosBelow , " dynamicsPosBelow " , Spatium ( 1.0 ) } ,
2016-11-18 14:28:53 +01:00
2016-11-18 16:23:28 +01:00
{ StyleIdx : : dynamicsMinDistance , " dynamicsMinDistance " , Spatium ( 0.5 ) } ,
{ StyleIdx : : autoplaceVerticalAlignRange , " autoplaceVerticalAlignRange " , int ( VerticalAlignRange : : SYSTEM ) } ,
2016-08-30 14:03:26 +02:00
{ 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 ;
}
2014-01-22 16:19:54 +01:00
static const QString ff ( " FreeSerif " ) ;
2012-05-26 14:26:10 +02:00
//---------------------------------------------------------
// setDefaultStyle
// synchronize with TextStyleType
//---------------------------------------------------------
void initStyle ( MStyle * s )
{
2014-08-12 14:16:11 +02:00
# 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
2016-11-18 16:23:28 +01:00
# define LB AlignmentFlags::LEFT | AlignmentFlags::BASELINE
# define HCB AlignmentFlags::HCENTER | AlignmentFlags::BASELINE
2014-08-12 14:16:11 +02:00
2012-05-26 14:26:10 +02:00
// this is an empty style, no offsets are allowed
2013-02-25 00:18:14 +01:00
// never show this style
2016-11-18 16:23:28 +01:00
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 ) ) ;
2016-10-08 19:06:54 +02:00
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
2016-11-18 16:23:28 +01:00
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 ,
2014-04-25 11:50:31 +02:00
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
2014-08-12 14:16:11 +02:00
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
}
2012-09-10 09:57:35 +02:00
//---------------------------------------------------------
2016-03-02 13:20:19 +01:00
// setChordList
2012-09-10 09:57:35 +02:00
//---------------------------------------------------------
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 ;
2016-05-26 11:32:03 +02:00
if ( t = = StyleIdx : : spatium )
precomputeValues ( ) ;
else {
2016-09-28 10:01:20 +02:00
if ( ! strcmp ( styleTypes [ idx ] . valueType ( ) , " Ms::Spatium " ) ) {
qreal _spatium = value ( StyleIdx : : spatium ) . toDouble ( ) ;
2016-05-26 11:32:03 +02:00
_precomputedValues [ idx ] = _values [ idx ] . value < Spatium > ( ) . val ( ) * _spatium ;
2016-09-28 10:01:20 +02:00
}
2016-05-26 11:32:03 +02:00
}
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 ( ) ;
2013-06-11 20:26:16 +02:00
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 " ) {
2013-06-24 11:03:48 +02:00
_chordList . clear ( ) ;
_chordList . read ( e ) ;
2012-05-26 14:26:10 +02:00
_customChordList = true ;
2013-06-11 20:26:16 +02:00
chordListTag = true ;
2012-05-26 14:26:10 +02:00
}
2016-09-28 10:01:20 +02:00
else
convertToUnit ( tag , e . readElementText ( ) ) ;
2012-05-26 14:26:10 +02:00
}
2013-06-10 07:03:57 +02:00
2013-06-11 20:26:16 +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 ( ) ;
2013-06-11 20:26:16 +02:00
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 ) ) ;
2013-06-10 23:36:35 +02:00
}
2014-05-26 15:31:36 +02:00
if ( value ( StyleIdx : : chordStyle ) . toString ( ) = = " custom " )
2013-06-11 20:26:16 +02:00
_customChordList = true ;
else
_customChordList = false ;
2013-06-30 23:34:41 +02:00
_chordList . unload ( ) ;
2013-06-26 17:19:51 +02:00
}
// make sure we have a chordlist
2013-06-30 23:34:41 +02:00
if ( ! _chordList . loaded ( ) & & ! chordListTag ) {
2014-05-26 15:31:36 +02:00
if ( value ( StyleIdx : : chordsXmlFile ) . toBool ( ) )
2013-06-24 11:03:48 +02:00
_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
}
2014-05-30 10:13:29 +02:00
for ( int i = 0 ; i < int ( TextStyleType : : TEXT_STYLES ) ; + + i ) {
2014-07-03 11:22:42 +02:00
if ( ! optimize | | _textStyles [ i ] ! = MScore : : baseStyle ( ) - > textStyle ( TextStyleType ( i ) ) )
2012-05-26 14:26:10 +02:00
_textStyles [ i ] . write ( xml ) ;
}
2014-05-30 10:13:29 +02:00
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 " ) ;
2013-06-24 11:03:48 +02:00
_chordList . write ( xml ) ;
2012-05-26 14:26:10 +02:00
xml . etag ( ) ;
}
2014-12-17 16:38:49 +01:00
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
}