Merge pull request #4697 from jthistle/282404-line-color-save

fix #282404: line colour not saved
This commit is contained in:
anatoly-os 2019-02-18 15:35:39 +02:00 committed by GitHub
commit efdf43d96f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 338 additions and 9 deletions

View file

@ -405,7 +405,7 @@ void LineSegment::localSpatiumChanged(qreal ov, qreal nv)
Element* LineSegment::propertyDelegate(Pid pid)
{
if (pid == Pid::DIAGONAL
|| pid == Pid::LINE_COLOR
|| pid == Pid::COLOR
|| pid == Pid::LINE_WIDTH
|| pid == Pid::LINE_STYLE
|| pid == Pid::DASH_LINE_LEN
@ -959,7 +959,7 @@ void SLine::writeProperties(XmlWriter& xml) const
xml.tag("diagonal", _diagonal);
writeProperty(xml, Pid::LINE_WIDTH);
writeProperty(xml, Pid::LINE_STYLE);
writeProperty(xml, Pid::LINE_COLOR);
writeProperty(xml, Pid::COLOR);
writeProperty(xml, Pid::ANCHOR);
writeProperty(xml, Pid::DASH_LINE_LEN);
writeProperty(xml, Pid::DASH_GAP_LEN);
@ -1040,6 +1040,8 @@ bool SLine::readProperties(XmlReader& e)
_dashGapLen = e.readDouble();
else if (tag == "lineColor")
_lineColor = e.readColor();
else if (tag == "color")
_lineColor = e.readColor();
else if (!Element::readProperties(e))
return false;
return true;
@ -1110,7 +1112,7 @@ QVariant SLine::getProperty(Pid id) const
switch (id) {
case Pid::DIAGONAL:
return _diagonal;
case Pid::LINE_COLOR:
case Pid::COLOR:
return _lineColor;
case Pid::LINE_WIDTH:
return _lineWidth;
@ -1135,7 +1137,7 @@ bool SLine::setProperty(Pid id, const QVariant& v)
case Pid::DIAGONAL:
_diagonal = v.toBool();
break;
case Pid::LINE_COLOR:
case Pid::COLOR:
_lineColor = v.value<QColor>();
break;
case Pid::LINE_WIDTH:
@ -1166,7 +1168,7 @@ QVariant SLine::propertyDefault(Pid pid) const
switch (pid) {
case Pid::DIAGONAL:
return false;
case Pid::LINE_COLOR:
case Pid::COLOR:
return MScore::defaultColor;
case Pid::LINE_WIDTH:
if (propertyFlags(pid) != PropertyFlags::NOSTYLE)

View file

@ -167,7 +167,6 @@ static constexpr PropertyMetaData propertyList[] = {
{ Pid::DIAGONAL, false, 0, P_TYPE::BOOL, DUMMY_QT_TRANSLATE_NOOP("propertyName", "diagonal") },
{ Pid::GROUPS, false, 0, P_TYPE::GROUPS, DUMMY_QT_TRANSLATE_NOOP("propertyName", "groups") },
{ Pid::LINE_STYLE, false, "lineStyle", P_TYPE::INT, DUMMY_QT_TRANSLATE_NOOP("propertyName", "line style") },
{ Pid::LINE_COLOR, false, 0, P_TYPE::COLOR, DUMMY_QT_TRANSLATE_NOOP("propertyName", "line color") },
{ Pid::LINE_WIDTH, false, "lineWidth", P_TYPE::SP_REAL, DUMMY_QT_TRANSLATE_NOOP("propertyName", "line width") },
{ Pid::LASSO_POS, false, 0, P_TYPE::POINT_MM, DUMMY_QT_TRANSLATE_NOOP("propertyName", "lasso position") },
{ Pid::LASSO_SIZE, false, 0, P_TYPE::SIZE_MM, DUMMY_QT_TRANSLATE_NOOP("propertyName", "lasso size") },

View file

@ -185,7 +185,6 @@ enum class Pid {
DIAGONAL,
GROUPS,
LINE_STYLE,
LINE_COLOR,
LINE_WIDTH,
LASSO_POS,
LASSO_SIZE,

View file

@ -57,7 +57,7 @@ InspectorTextLineBase::InspectorTextLineBase(QWidget* parent)
const std::vector<InspectorItem> iiList = {
{ Pid::DIAGONAL, 0, l.diagonal, l.resetDiagonal },
{ Pid::LINE_VISIBLE, 0, l.lineVisible, l.resetLineVisible },
{ Pid::LINE_COLOR, 0, l.lineColor, l.resetLineColor },
{ Pid::COLOR, 0, l.lineColor, l.resetLineColor },
{ Pid::LINE_WIDTH, 0, l.lineWidth, l.resetLineWidth },
{ Pid::LINE_STYLE, 0, l.lineStyle, l.resetLineStyle },
{ Pid::DASH_LINE_LEN, 0, l.dashLineLength, l.resetDashLineLength },
@ -196,6 +196,8 @@ void InspectorTextLineBase::valueChanged(int idx)
updateBeginHookType();
else if (iList[idx].t == Pid::END_HOOK_TYPE)
updateEndHookType();
else if (iList[idx].t == Pid::COLOR)
inspector->update();
}

View file

@ -159,7 +159,7 @@ class Element : public Ms::PluginAPI::ScoreElement {
API_PROPERTY( diagonal, DIAGONAL )
API_PROPERTY( groups, GROUPS )
API_PROPERTY( lineStyle, LINE_STYLE )
API_PROPERTY( lineColor, LINE_COLOR )
API_PROPERTY( lineColor, COLOR )
API_PROPERTY( lineWidth, LINE_WIDTH )
API_PROPERTY( lassoPos, LASSO_POS )
API_PROPERTY( lassoSize, LASSO_SIZE )

View file

@ -0,0 +1,148 @@
<?xml version="1.0" encoding="UTF-8"?>
<museScore version="3.01">
<Score>
<LayerTag id="0" tag="default"></LayerTag>
<currentLayer>0</currentLayer>
<Division>480</Division>
<Style>
<pageWidth>8.27</pageWidth>
<pageHeight>11.69</pageHeight>
<pagePrintableWidth>7.4826</pagePrintableWidth>
<Spatium>1.76389</Spatium>
</Style>
<showInvisible>1</showInvisible>
<showUnprintable>1</showUnprintable>
<showFrames>1</showFrames>
<showMargins>0</showMargins>
<metaTag name="arranger"></metaTag>
<metaTag name="composer"></metaTag>
<metaTag name="copyright"></metaTag>
<metaTag name="lyricist"></metaTag>
<metaTag name="movementNumber"></metaTag>
<metaTag name="movementTitle"></metaTag>
<metaTag name="poet"></metaTag>
<metaTag name="source"></metaTag>
<metaTag name="translator"></metaTag>
<metaTag name="workNumber"></metaTag>
<metaTag name="workTitle"></metaTag>
<Part>
<Staff id="1">
<StaffType group="pitched">
<name>stdNormal</name>
</StaffType>
</Staff>
<trackName>Piano</trackName>
<Instrument>
<longName>Piano</longName>
<shortName>Pno.</shortName>
<trackName>Piano</trackName>
<minPitchP>21</minPitchP>
<maxPitchP>108</maxPitchP>
<minPitchA>21</minPitchA>
<maxPitchA>108</maxPitchA>
<instrumentId>keyboard.piano</instrumentId>
<Articulation>
<velocity>100</velocity>
<gateTime>95</gateTime>
</Articulation>
<Articulation name="staccatissimo">
<velocity>100</velocity>
<gateTime>33</gateTime>
</Articulation>
<Articulation name="staccato">
<velocity>100</velocity>
<gateTime>50</gateTime>
</Articulation>
<Articulation name="portato">
<velocity>100</velocity>
<gateTime>67</gateTime>
</Articulation>
<Articulation name="tenuto">
<velocity>100</velocity>
<gateTime>100</gateTime>
</Articulation>
<Articulation name="marcato">
<velocity>120</velocity>
<gateTime>67</gateTime>
</Articulation>
<Articulation name="sforzato">
<velocity>150</velocity>
<gateTime>100</gateTime>
</Articulation>
<Articulation name="sforzatoStaccato">
<velocity>150</velocity>
<gateTime>50</gateTime>
</Articulation>
<Articulation name="marcatoStaccato">
<velocity>120</velocity>
<gateTime>50</gateTime>
</Articulation>
<Articulation name="marcatoTenuto">
<velocity>120</velocity>
<gateTime>100</gateTime>
</Articulation>
<Channel>
<program value="0"/>
</Channel>
</Instrument>
</Part>
<Staff id="1">
<Measure>
<voice>
<TimeSig>
<sigN>4</sigN>
<sigD>4</sigD>
</TimeSig>
<Spanner type="Pedal">
<Pedal>
<endHookType>1</endHookType>
<beginHookType>1</beginHookType>
<color r="255" g="0" b="0" a="255"/>
<color r="255" g="0" b="0" a="255"/>
</Pedal>
<next>
<location>
<measures>1</measures>
</location>
</next>
</Spanner>
<Rest>
<durationType>measure</durationType>
<duration>4/4</duration>
</Rest>
</voice>
</Measure>
<Measure>
<voice>
<Spanner type="Pedal">
<prev>
<location>
<measures>-1</measures>
</location>
</prev>
</Spanner>
<Rest>
<durationType>measure</durationType>
<duration>4/4</duration>
</Rest>
</voice>
</Measure>
<Measure>
<voice>
<Rest>
<durationType>measure</durationType>
<duration>4/4</duration>
</Rest>
</voice>
</Measure>
<Measure>
<voice>
<Rest>
<durationType>measure</durationType>
<duration>4/4</duration>
</Rest>
</voice>
</Measure>
</Staff>
</Score>
</museScore>

View file

@ -0,0 +1,157 @@
<?xml version="1.0" encoding="UTF-8"?>
<museScore version="3.01">
<programVersion>3.1.0</programVersion>
<programRevision>3543170</programRevision>
<Score>
<LayerTag id="0" tag="default"></LayerTag>
<currentLayer>0</currentLayer>
<Synthesizer>
</Synthesizer>
<Division>480</Division>
<Style>
<pageWidth>8.27</pageWidth>
<pageHeight>11.69</pageHeight>
<pagePrintableWidth>7.4826</pagePrintableWidth>
<Spatium>1.76389</Spatium>
</Style>
<showInvisible>1</showInvisible>
<showUnprintable>1</showUnprintable>
<showFrames>1</showFrames>
<showMargins>0</showMargins>
<metaTag name="arranger"></metaTag>
<metaTag name="composer"></metaTag>
<metaTag name="copyright"></metaTag>
<metaTag name="creationDate">2019-02-18</metaTag>
<metaTag name="lyricist"></metaTag>
<metaTag name="movementNumber"></metaTag>
<metaTag name="movementTitle"></metaTag>
<metaTag name="platform">Linux</metaTag>
<metaTag name="poet"></metaTag>
<metaTag name="source"></metaTag>
<metaTag name="translator"></metaTag>
<metaTag name="workNumber"></metaTag>
<metaTag name="workTitle"></metaTag>
<Part>
<Staff id="1">
<StaffType group="pitched">
<name>stdNormal</name>
</StaffType>
</Staff>
<trackName>Piano</trackName>
<Instrument>
<longName>Piano</longName>
<shortName>Pno.</shortName>
<trackName>Piano</trackName>
<minPitchP>21</minPitchP>
<maxPitchP>108</maxPitchP>
<minPitchA>21</minPitchA>
<maxPitchA>108</maxPitchA>
<instrumentId>keyboard.piano</instrumentId>
<Articulation>
<velocity>100</velocity>
<gateTime>95</gateTime>
</Articulation>
<Articulation name="staccatissimo">
<velocity>100</velocity>
<gateTime>33</gateTime>
</Articulation>
<Articulation name="staccato">
<velocity>100</velocity>
<gateTime>50</gateTime>
</Articulation>
<Articulation name="portato">
<velocity>100</velocity>
<gateTime>67</gateTime>
</Articulation>
<Articulation name="tenuto">
<velocity>100</velocity>
<gateTime>100</gateTime>
</Articulation>
<Articulation name="marcato">
<velocity>120</velocity>
<gateTime>67</gateTime>
</Articulation>
<Articulation name="sforzato">
<velocity>150</velocity>
<gateTime>100</gateTime>
</Articulation>
<Articulation name="sforzatoStaccato">
<velocity>150</velocity>
<gateTime>50</gateTime>
</Articulation>
<Articulation name="marcatoStaccato">
<velocity>120</velocity>
<gateTime>50</gateTime>
</Articulation>
<Articulation name="marcatoTenuto">
<velocity>120</velocity>
<gateTime>100</gateTime>
</Articulation>
<Channel>
<program value="0"/>
<synti>Fluid</synti>
</Channel>
</Instrument>
</Part>
<Staff id="1">
<!-- Measure 1 -->
<Measure>
<voice>
<TimeSig>
<sigN>4</sigN>
<sigD>4</sigD>
</TimeSig>
<Spanner type="Pedal">
<Pedal>
<endHookType>1</endHookType>
<beginHookType>1</beginHookType>
</Pedal>
<next>
<location>
<measures>1</measures>
</location>
</next>
</Spanner>
<Rest>
<durationType>measure</durationType>
<duration>4/4</duration>
</Rest>
</voice>
</Measure>
<!-- Measure 2 -->
<Measure>
<voice>
<Spanner type="Pedal">
<prev>
<location>
<measures>-1</measures>
</location>
</prev>
</Spanner>
<Rest>
<durationType>measure</durationType>
<duration>4/4</duration>
</Rest>
</voice>
</Measure>
<!-- Measure 3 -->
<Measure>
<voice>
<Rest>
<durationType>measure</durationType>
<duration>4/4</duration>
</Rest>
</voice>
</Measure>
<!-- Measure 4 -->
<Measure>
<voice>
<Rest>
<durationType>measure</durationType>
<duration>4/4</duration>
</Rest>
</voice>
</Measure>
</Staff>
</Score>
</museScore>

View file

@ -23,6 +23,7 @@
#include "libmscore/score.h"
#include "libmscore/system.h"
#include "libmscore/undo.h"
#include "libmscore/line.h"
#define DIR QString("libmscore/spanners/")
@ -52,6 +53,7 @@ class TestSpanners : public QObject, public MTest
void spanners12(); // remove a measure containing the middle portion of a LyricsLine and undo
// void spanners13(); // drop a line break at the middle of a LyricsLine and check LyricsLineSegments
void spanners14(); // creating part from an existing grand staff containing a cross staff glissando
void spanners15(); // change the color of a line and save it
};
//---------------------------------------------------------
@ -621,6 +623,26 @@ void TestSpanners::spanners14()
delete score;
}
//---------------------------------------------------------
/// spanners15
/// set the color of a spanner and save
//---------------------------------------------------------
void TestSpanners::spanners15()
{
MasterScore* score = readScore(DIR + "linecolor01.mscx");
QVERIFY(score);
for (auto it = score->spanner().cbegin(); it != score->spanner().cend(); ++it) {
Spanner* spanner = (*it).second;
SLine* sl = static_cast<SLine*>(spanner);
sl->setProperty(Pid::COLOR, QVariant::fromValue(QColor(255, 0, 0, 255)));
}
QVERIFY(saveCompareScore(score, "linecolor01.mscx", DIR + "linecolor01-ref.mscx"));
delete score;
}
QTEST_MAIN(TestSpanners)