Make it possible to record elements written to MSCX

This commit is contained in:
Dmitri Ovodok 2018-09-26 12:20:00 +02:00
parent e6f06d225a
commit c95dfd5a40
67 changed files with 113 additions and 76 deletions

View file

@ -187,7 +187,7 @@ void Accidental::read(XmlReader& e)
void Accidental::write(XmlWriter& xml) const void Accidental::write(XmlWriter& xml) const
{ {
xml.stag(name()); xml.stag(this);
writeProperty(xml, Pid::ACCIDENTAL_BRACKET); writeProperty(xml, Pid::ACCIDENTAL_BRACKET);
writeProperty(xml, Pid::ROLE); writeProperty(xml, Pid::ROLE);
writeProperty(xml, Pid::SMALL); writeProperty(xml, Pid::SMALL);

View file

@ -182,7 +182,7 @@ void Ambitus::setBottomTpc(int val)
void Ambitus::write(XmlWriter& xml) const void Ambitus::write(XmlWriter& xml) const
{ {
xml.stag("Ambitus"); xml.stag(this);
xml.tag(Pid::HEAD_GROUP, int(_noteHeadGroup), int(NOTEHEADGROUP_DEFAULT)); xml.tag(Pid::HEAD_GROUP, int(_noteHeadGroup), int(NOTEHEADGROUP_DEFAULT));
xml.tag(Pid::HEAD_TYPE, int(_noteHeadType), int(NOTEHEADTYPE_DEFAULT)); xml.tag(Pid::HEAD_TYPE, int(_noteHeadType), int(NOTEHEADTYPE_DEFAULT));
xml.tag(Pid::MIRROR_HEAD,int(_dir), int(DIR_DEFAULT)); xml.tag(Pid::MIRROR_HEAD,int(_dir), int(DIR_DEFAULT));

View file

@ -56,7 +56,7 @@ void Arpeggio::write(XmlWriter& xml) const
{ {
if (!xml.canWrite(this)) if (!xml.canWrite(this))
return; return;
xml.stag("Arpeggio"); xml.stag(this);
Element::writeProperties(xml); Element::writeProperties(xml);
xml.tag("subtype", int(_arpeggioType)); xml.tag("subtype", int(_arpeggioType));
if (_userLen1 != 0.0) if (_userLen1 != 0.0)

View file

@ -143,7 +143,7 @@ void Articulation::write(XmlWriter& xml) const
{ {
if (!xml.canWrite(this)) if (!xml.canWrite(this))
return; return;
xml.stag("Articulation"); xml.stag(this);
if (!_channelName.isEmpty()) if (!_channelName.isEmpty())
xml.tagE(QString("channel name=\"%1\"").arg(_channelName)); xml.tagE(QString("channel name=\"%1\"").arg(_channelName));
writeProperty(xml, Pid::DIRECTION); writeProperty(xml, Pid::DIRECTION);

View file

@ -357,7 +357,7 @@ noteList BagpipeEmbellishment::getNoteList() const
void BagpipeEmbellishment::write(XmlWriter& xml) const void BagpipeEmbellishment::write(XmlWriter& xml) const
{ {
xml.stag(name()); xml.stag(this);
xml.tag("subtype", _embelType); xml.tag("subtype", _embelType);
xml.etag(); xml.etag();
} }

View file

@ -505,7 +505,7 @@ void BarLine::drawEditMode(QPainter* p, EditData& ed)
void BarLine::write(XmlWriter& xml) const void BarLine::write(XmlWriter& xml) const
{ {
xml.stag("BarLine"); xml.stag(this);
writeProperty(xml, Pid::BARLINE_TYPE); writeProperty(xml, Pid::BARLINE_TYPE);
writeProperty(xml, Pid::BARLINE_SPAN); writeProperty(xml, Pid::BARLINE_SPAN);

View file

@ -1989,7 +1989,7 @@ void Beam::write(XmlWriter& xml) const
{ {
if (_elements.empty()) if (_elements.empty())
return; return;
xml.stag(name()); xml.stag(this);
Element::writeProperties(xml); Element::writeProperties(xml);
writeProperty(xml, Pid::STEM_DIRECTION); writeProperty(xml, Pid::STEM_DIRECTION);

View file

@ -280,7 +280,7 @@ void Bend::draw(QPainter* painter) const
void Bend::write(XmlWriter& xml) const void Bend::write(XmlWriter& xml) const
{ {
xml.stag("Bend"); xml.stag(this);
for (const PitchValue& v : _points) { for (const PitchValue& v : _points) {
xml.tagE(QString("point time=\"%1\" pitch=\"%2\" vibrato=\"%3\"") xml.tagE(QString("point time=\"%1\" pitch=\"%2\" vibrato=\"%3\"")
.arg(v.time).arg(v.pitch).arg(v.vibrato)); .arg(v.time).arg(v.pitch).arg(v.vibrato));

View file

@ -189,7 +189,7 @@ void Box::updateGrips(EditData& ed) const
void Box::write(XmlWriter& xml) const void Box::write(XmlWriter& xml) const
{ {
xml.stag(name()); xml.stag(this);
writeProperties(xml); writeProperties(xml);
xml.etag(); xml.etag();
} }

View file

@ -446,16 +446,16 @@ void Bracket::write(XmlWriter& xml) const
{ {
switch (_bi->bracketType()) { switch (_bi->bracketType()) {
case BracketType::BRACE: case BracketType::BRACE:
xml.stag("Bracket type=\"Brace\""); xml.stag(this, "type=\"Brace\"");
break; break;
case BracketType::NORMAL: case BracketType::NORMAL:
xml.stag("Bracket"); xml.stag(this);
break; break;
case BracketType::SQUARE: case BracketType::SQUARE:
xml.stag("Bracket type=\"Square\""); xml.stag(this, "type=\"Square\"");
break; break;
case BracketType::LINE: case BracketType::LINE:
xml.stag("Bracket type=\"Line\""); xml.stag(this, "type=\"Line\"");
break; break;
case BracketType::NO_BRACKET: case BracketType::NO_BRACKET:
break; break;

View file

@ -76,7 +76,7 @@ void Breath::write(XmlWriter& xml) const
{ {
if (!xml.canWrite(this)) if (!xml.canWrite(this))
return; return;
xml.stag("Breath"); xml.stag(this);
writeProperty(xml, Pid::SYMBOL); writeProperty(xml, Pid::SYMBOL);
writeProperty(xml, Pid::PAUSE); writeProperty(xml, Pid::PAUSE);
Element::writeProperties(xml); Element::writeProperties(xml);

View file

@ -908,7 +908,7 @@ void Chord::write(XmlWriter& xml) const
c->write(xml); c->write(xml);
} }
writeBeam(xml); writeBeam(xml);
xml.stag("Chord"); xml.stag(this);
ChordRest::writeProperties(xml); ChordRest::writeProperties(xml);
for (const Articulation* a : _articulations) for (const Articulation* a : _articulations)
a->write(xml); a->write(xml);

View file

@ -207,7 +207,7 @@ void ChordLine::read(XmlReader& e)
void ChordLine::write(XmlWriter& xml) const void ChordLine::write(XmlWriter& xml) const
{ {
xml.stag(name()); xml.stag(this);
xml.tag("subtype", int(_chordLineType)); xml.tag("subtype", int(_chordLineType));
xml.tag("straight", _straight, false); xml.tag("straight", _straight, false);
xml.tag("lengthX", _lengthX, 0.0); xml.tag("lengthX", _lengthX, 0.0);

View file

@ -310,7 +310,7 @@ void Clef::read(XmlReader& e)
void Clef::write(XmlWriter& xml) const void Clef::write(XmlWriter& xml) const
{ {
xml.stag(name()); xml.stag(this);
if (_clefTypes._concertClef != ClefType::INVALID) if (_clefTypes._concertClef != ClefType::INVALID)
xml.tag("concertClefType", ClefInfo::tag(_clefTypes._concertClef)); xml.tag("concertClefType", ClefInfo::tag(_clefTypes._concertClef));
if (_clefTypes._transposingClef != ClefType::INVALID) if (_clefTypes._transposingClef != ClefType::INVALID)

View file

@ -122,7 +122,7 @@ void Dynamic::write(XmlWriter& xml) const
{ {
if (!xml.canWrite(this)) if (!xml.canWrite(this))
return; return;
xml.stag("Dynamic"); xml.stag(this);
xml.tag("subtype", dynamicTypeName()); xml.tag("subtype", dynamicTypeName());
writeProperty(xml, Pid::VELOCITY); writeProperty(xml, Pid::VELOCITY);
writeProperty(xml, Pid::DYNAMIC_RANGE); writeProperty(xml, Pid::DYNAMIC_RANGE);

View file

@ -668,7 +668,7 @@ bool Element::readProperties(XmlReader& e)
void Element::write(XmlWriter& xml) const void Element::write(XmlWriter& xml) const
{ {
xml.stag(name()); xml.stag(this);
writeProperties(xml); writeProperties(xml);
xml.etag(); xml.etag();
} }

View file

@ -105,7 +105,7 @@ void Fermata::write(XmlWriter& xml) const
qDebug("%s not written", name()); qDebug("%s not written", name());
return; return;
} }
xml.stag("Fermata"); xml.stag(this);
xml.tag("subtype", Sym::id2name(_symId)); xml.tag("subtype", Sym::id2name(_symId));
writeProperty(xml, Pid::TIME_STRETCH); writeProperty(xml, Pid::TIME_STRETCH);
writeProperty(xml, Pid::PLAY); writeProperty(xml, Pid::PLAY);

View file

@ -405,7 +405,7 @@ QString FiguredBassItem::normalizedText() const
void FiguredBassItem::write(XmlWriter& xml) const void FiguredBassItem::write(XmlWriter& xml) const
{ {
xml.stag("FiguredBassItem"); xml.stag("FiguredBassItem", this);
xml.tagE(QString("brackets b0=\"%1\" b1=\"%2\" b2=\"%3\" b3=\"%4\" b4=\"%5\"") xml.tagE(QString("brackets b0=\"%1\" b1=\"%2\" b2=\"%3\" b3=\"%4\" b4=\"%5\"")
.arg(int(parenth[0])) .arg(int(parenth[1])) .arg(int(parenth[2])) .arg(int(parenth[3])) .arg(int(parenth[4])) ); .arg(int(parenth[0])) .arg(int(parenth[1])) .arg(int(parenth[2])) .arg(int(parenth[3])) .arg(int(parenth[4])) );
if (_prefix != Modifier::NONE) if (_prefix != Modifier::NONE)
@ -1016,7 +1016,7 @@ void FiguredBass::write(XmlWriter& xml) const
{ {
if (!xml.canWrite(this)) if (!xml.canWrite(this))
return; return;
xml.stag("FiguredBass"); xml.stag(this);
if(!onNote()) if(!onNote())
xml.tag("onNote", onNote()); xml.tag("onNote", onNote());
if (ticks() > 0) if (ticks() > 0)

View file

@ -394,7 +394,7 @@ void FretDiagram::write(XmlWriter& xml) const
{ {
if (!xml.canWrite(this)) if (!xml.canWrite(this))
return; return;
xml.stag("FretDiagram"); xml.stag(this);
Element::writeProperties(xml); Element::writeProperties(xml);
writeProperty(xml, Pid::FRET_STRINGS); writeProperty(xml, Pid::FRET_STRINGS);

View file

@ -370,7 +370,7 @@ void Glissando::write(XmlWriter& xml) const
{ {
if (!xml.canWrite(this)) if (!xml.canWrite(this))
return; return;
xml.stag(name()); xml.stag(this);
if (_showText && !_text.isEmpty()) if (_showText && !_text.isEmpty())
xml.tag("text", _text); xml.tag("text", _text);

View file

@ -500,7 +500,7 @@ void Hairpin::write(XmlWriter& xml) const
{ {
if (!xml.canWrite(this)) if (!xml.canWrite(this))
return; return;
xml.stag(name()); xml.stag(this);
xml.tag("subtype", int(_hairpinType)); xml.tag("subtype", int(_hairpinType));
writeProperty(xml, Pid::VELO_CHANGE); writeProperty(xml, Pid::VELO_CHANGE);
writeProperty(xml, Pid::HAIRPIN_CIRCLEDTIP); writeProperty(xml, Pid::HAIRPIN_CIRCLEDTIP);

View file

@ -200,7 +200,7 @@ void Harmony::write(XmlWriter& xml) const
{ {
if (!xml.canWrite(this)) if (!xml.canWrite(this))
return; return;
xml.stag("Harmony"); xml.stag(this);
if (_leftParen) if (_leftParen)
xml.tagE("leftParen"); xml.tagE("leftParen");
if (_rootTpc != Tpc::TPC_INVALID || _baseTpc != Tpc::TPC_INVALID) { if (_rootTpc != Tpc::TPC_INVALID || _baseTpc != Tpc::TPC_INVALID) {

View file

@ -21,7 +21,7 @@ namespace Ms {
void Icon::write(XmlWriter& xml) const void Icon::write(XmlWriter& xml) const
{ {
xml.stag(name()); xml.stag(this);
xml.tag("subtype", int(_iconType)); xml.tag("subtype", int(_iconType));
if (!_action.isEmpty()) if (!_action.isEmpty())
xml.tag("action", _action.data()); xml.tag("action", _action.data());

View file

@ -214,7 +214,7 @@ void Image::write(XmlWriter& xml) const
if (relativeFilePath.isEmpty()) if (relativeFilePath.isEmpty())
relativeFilePath = _linkPath; relativeFilePath = _linkPath;
xml.stag("Image"); xml.stag(this);
BSymbol::writeProperties(xml); BSymbol::writeProperties(xml);
// keep old "path" tag, for backward compatibility and because it is used elsewhere // keep old "path" tag, for backward compatibility and because it is used elsewhere
// (for instance by Box:read(), Measure:read(), Note:read(), ...) // (for instance by Box:read(), Measure:read(), Note:read(), ...)

View file

@ -73,7 +73,7 @@ void InstrumentChange::setInstrument(const Instrument& i)
void InstrumentChange::write(XmlWriter& xml) const void InstrumentChange::write(XmlWriter& xml) const
{ {
xml.stag(name()); xml.stag(this);
_instrument->write(xml, part()); _instrument->write(xml, part());
TextBase::writeProperties(xml); TextBase::writeProperties(xml);
xml.etag(); xml.etag();

View file

@ -131,7 +131,7 @@ void Jump::read(XmlReader& e)
void Jump::write(XmlWriter& xml) const void Jump::write(XmlWriter& xml) const
{ {
xml.stag(name()); xml.stag(this);
TextBase::writeProperties(xml); TextBase::writeProperties(xml);
xml.tag("jumpTo", _jumpTo); xml.tag("jumpTo", _jumpTo);
xml.tag("playUntil", _playUntil); xml.tag("playUntil", _playUntil);

View file

@ -329,7 +329,7 @@ void KeySig::setKey(Key key)
void KeySig::write(XmlWriter& xml) const void KeySig::write(XmlWriter& xml) const
{ {
xml.stag(name()); xml.stag(this);
Element::writeProperties(xml); Element::writeProperties(xml);
if (_sig.isAtonal()) { if (_sig.isAtonal()) {
xml.tag("custom", 1); xml.tag("custom", 1);

View file

@ -48,7 +48,7 @@ LayoutBreak::LayoutBreak(const LayoutBreak& lb)
void LayoutBreak::write(XmlWriter& xml) const void LayoutBreak::write(XmlWriter& xml) const
{ {
xml.stag(name()); xml.stag(this);
Element::writeProperties(xml); Element::writeProperties(xml);
writeProperty(xml, Pid::LAYOUT_BREAK); writeProperty(xml, Pid::LAYOUT_BREAK);

View file

@ -87,7 +87,7 @@ void LetRing::write(XmlWriter& xml) const
{ {
if (!xml.canWrite(this)) if (!xml.canWrite(this))
return; return;
xml.stag(name()); xml.stag(this);
for (const StyledProperty& spp : *styledProperties()) { for (const StyledProperty& spp : *styledProperties()) {
if (!isStyled(spp.pid)) if (!isStyled(spp.pid))

View file

@ -1040,7 +1040,7 @@ void SLine::writeProperties(XmlWriter& xml) const
// //
qreal _spatium = spatium(); qreal _spatium = spatium();
for (const SpannerSegment* seg : spannerSegments()) { for (const SpannerSegment* seg : spannerSegments()) {
xml.stag("Segment"); xml.stag("Segment", seg);
xml.tag("subtype", int(seg->spannerSegmentType())); xml.tag("subtype", int(seg->spannerSegmentType()));
xml.tag("offset", seg->offset() / _spatium); xml.tag("offset", seg->offset() / _spatium);
xml.tag("off2", seg->userOff2() / _spatium); xml.tag("off2", seg->userOff2() / _spatium);
@ -1128,7 +1128,7 @@ const QRectF& SLine::bbox() const
void SLine::write(XmlWriter& xml) const void SLine::write(XmlWriter& xml) const
{ {
xml.stag(name()); xml.stag(this);
SLine::writeProperties(xml); SLine::writeProperties(xml);
xml.etag(); xml.etag();
} }

View file

@ -85,7 +85,7 @@ void Lyrics::write(XmlWriter& xml) const
{ {
if (!xml.canWrite(this)) if (!xml.canWrite(this))
return; return;
xml.stag("Lyrics"); xml.stag(this);
writeProperty(xml, Pid::VERSE); writeProperty(xml, Pid::VERSE);
if (_syllabic != Syllabic::SINGLE) { if (_syllabic != Syllabic::SINGLE) {
static const char* sl[] = { static const char* sl[] = {

View file

@ -204,7 +204,7 @@ void Marker::read(XmlReader& e)
void Marker::write(XmlWriter& xml) const void Marker::write(XmlWriter& xml) const
{ {
xml.stag(name()); xml.stag(this);
TextBase::writeProperties(xml); TextBase::writeProperties(xml);
xml.tag("label", _label); xml.tag("label", _label);
xml.etag(); xml.etag();

View file

@ -1760,10 +1760,10 @@ void Measure::write(XmlWriter& xml, int staff, bool writeSystemElements, bool fo
} }
if (_len != _timesig) { if (_len != _timesig) {
// this is an irregular measure // this is an irregular measure
xml.stag(QString("Measure len=\"%1/%2\"").arg(_len.numerator()).arg(_len.denominator())); xml.stag(this, QString("len=\"%1/%2\"").arg(_len.numerator()).arg(_len.denominator()));
} }
else else
xml.stag("Measure"); xml.stag(this);
xml.setCurTick(tick()); xml.setCurTick(tick());
xml.setCurTrack(staff * VOICES); xml.setCurTrack(staff * VOICES);
@ -1784,7 +1784,7 @@ void Measure::write(XmlWriter& xml, int staff, bool writeSystemElements, bool fo
qreal _spatium = spatium(); qreal _spatium = spatium();
MStaff* mstaff = _mstaves[staff]; MStaff* mstaff = _mstaves[staff];
if (mstaff->noText() && !mstaff->noText()->generated()) { if (mstaff->noText() && !mstaff->noText()->generated()) {
xml.stag("MeasureNumber"); xml.stag("MeasureNumber", mstaff->noText());
mstaff->noText()->writeProperties(xml); mstaff->noText()->writeProperties(xml);
xml.etag(); xml.etag();
} }

View file

@ -1177,7 +1177,7 @@ void Note::draw(QPainter* painter) const
void Note::write(XmlWriter& xml) const void Note::write(XmlWriter& xml) const
{ {
xml.stag("Note"); xml.stag(this);
Element::writeProperties(xml); Element::writeProperties(xml);
if (_accidental) if (_accidental)

View file

@ -255,7 +255,7 @@ void Ottava::write(XmlWriter& xml) const
{ {
if (!xml.canWrite(this)) if (!xml.canWrite(this))
return; return;
xml.stag(name()); xml.stag(this);
xml.tag("subtype", ottavaDefault[int(ottavaType())].name); xml.tag("subtype", ottavaDefault[int(ottavaType())].name);
// for (const StyledProperty& spp : *styledProperties()) // for (const StyledProperty& spp : *styledProperties())
// writeProperty(xml, spp.pid); // writeProperty(xml, spp.pid);

View file

@ -418,7 +418,7 @@ bool Page::isOdd() const
void Page::write(XmlWriter& xml) const void Page::write(XmlWriter& xml) const
{ {
xml.stag("Page"); xml.stag(this);
foreach(System* system, _systems) { foreach(System* system, _systems) {
system->write(xml); system->write(xml);
} }

View file

@ -106,7 +106,7 @@ void PalmMute::write(XmlWriter& xml) const
{ {
if (!xml.canWrite(this)) if (!xml.canWrite(this))
return; return;
xml.stag(name()); xml.stag(this);
for (const StyledProperty& spp : *styledProperties()) for (const StyledProperty& spp : *styledProperties())
writeProperty(xml, spp.pid); writeProperty(xml, spp.pid);

View file

@ -109,7 +109,7 @@ void Part::read(XmlReader& e)
void Part::write(XmlWriter& xml) const void Part::write(XmlWriter& xml) const
{ {
xml.stag("Part"); xml.stag(this);
foreach(const Staff* staff, _staves) foreach(const Staff* staff, _staves)
staff->write(xml); staff->write(xml);
if (!_show) if (!_show)

View file

@ -122,7 +122,7 @@ void Pedal::write(XmlWriter& xml) const
{ {
if (!xml.canWrite(this)) if (!xml.canWrite(this))
return; return;
xml.stag(name()); xml.stag(this);
for (auto i : { for (auto i : {
Pid::END_HOOK_TYPE, Pid::END_HOOK_TYPE,

View file

@ -850,7 +850,7 @@ void Rest::write(XmlWriter& xml) const
if (_gap) if (_gap)
return; return;
writeBeam(xml); writeBeam(xml);
xml.stag(name()); xml.stag(this);
ChordRest::writeProperties(xml); ChordRest::writeProperties(xml);
el().write(xml); el().write(xml);
bool write_dots = false; bool write_dots = false;

View file

@ -102,7 +102,7 @@ void Score::writeMovement(XmlWriter& xml, bool selectionOnly)
p->setShow(false); p->setShow(false);
} }
xml.stag("Score"); xml.stag(this);
if (excerpt()) { if (excerpt()) {
Excerpt* e = excerpt(); Excerpt* e = excerpt();
QMultiMap<int, int> trackList = e->tracks(); QMultiMap<int, int> trackList = e->tracks();
@ -208,7 +208,7 @@ void Score::writeMovement(XmlWriter& xml, bool selectionOnly)
xml.setTrackDiff(-staffStart * VOICES); xml.setTrackDiff(-staffStart * VOICES);
if (measureStart) { if (measureStart) {
for (int staffIdx = staffStart; staffIdx < staffEnd; ++staffIdx) { for (int staffIdx = staffStart; staffIdx < staffEnd; ++staffIdx) {
xml.stag(QString("Staff id=\"%1\"").arg(staffIdx + 1 - staffStart)); xml.stag(staff(staffIdx), QString("id=\"%1\"").arg(staffIdx + 1 - staffStart));
xml.setCurTick(measureStart->tick()); xml.setCurTick(measureStart->tick());
xml.setTickDiff(xml.curTick()); xml.setTickDiff(xml.curTick());
xml.setCurTrack(staffIdx * VOICES); xml.setCurTrack(staffIdx * VOICES);

View file

@ -808,7 +808,7 @@ void Segment::write(XmlWriter& xml) const
setWritten(true); setWritten(true);
if (_extraLeadingSpace.isZero()) if (_extraLeadingSpace.isZero())
return; return;
xml.stag(name()); xml.stag(this);
xml.tag("leadingSpace", _extraLeadingSpace.val()); xml.tag("leadingSpace", _extraLeadingSpace.val());
xml.etag(); xml.etag();
} }

View file

@ -1003,7 +1003,7 @@ void Slur::write(XmlWriter& xml) const
} }
if (!xml.canWrite(this)) if (!xml.canWrite(this))
return; return;
xml.stag(name()); xml.stag(this);
SlurTie::writeProperties(xml); SlurTie::writeProperties(xml);
xml.etag(); xml.etag();
} }

View file

@ -283,7 +283,7 @@ void SlurTieSegment::writeSlur(XmlWriter& xml, int no) const
if (autoplace() && visible() && (color() == Qt::black)) if (autoplace() && visible() && (color() == Qt::black))
return; return;
xml.stag(QString("%1 no=\"%2\"").arg(name()).arg(no)); xml.stag(this, QString("no=\"%1\"").arg(no));
qreal _spatium = spatium(); qreal _spatium = spatium();
xml.tag("o1", ups(Grip::START).off / _spatium); xml.tag("o1", ups(Grip::START).off / _spatium);

View file

@ -176,7 +176,7 @@ void Spacer::updateGrips(EditData& ed) const
void Spacer::write(XmlWriter& xml) const void Spacer::write(XmlWriter& xml) const
{ {
xml.stag(name()); xml.stag(this);
xml.tag("subtype", int(_spacerType)); xml.tag("subtype", int(_spacerType));
Element::writeProperties(xml); Element::writeProperties(xml);
xml.tag("space", _gap / spatium()); xml.tag("space", _gap / spatium());

View file

@ -576,7 +576,7 @@ int Staff::currentKeyTick(int tick) const
void Staff::write(XmlWriter& xml) const void Staff::write(XmlWriter& xml) const
{ {
int idx = this->idx(); int idx = this->idx();
xml.stag(QString("Staff id=\"%1\"").arg(idx + 1)); xml.stag(this, QString("id=\"%1\"").arg(idx + 1));
if (links()) { if (links()) {
Score* s = masterScore(); Score* s = masterScore();
for (auto le : *links()) { for (auto le : *links()) {

View file

@ -49,7 +49,7 @@ StaffState::~StaffState()
void StaffState::write(XmlWriter& xml) const void StaffState::write(XmlWriter& xml) const
{ {
xml.stag(name()); xml.stag(this);
xml.tag("subtype", int(_staffStateType)); xml.tag("subtype", int(_staffStateType));
if (staffStateType() == StaffStateType::INSTRUMENT) if (staffStateType() == StaffStateType::INSTRUMENT)
_instrument->write(xml, nullptr); _instrument->write(xml, nullptr);

View file

@ -37,7 +37,7 @@ void StaffTextBase::write(XmlWriter& xml) const
{ {
if (!xml.canWrite(this)) if (!xml.canWrite(this))
return; return;
xml.stag(name()); xml.stag(this);
for (ChannelActions s : _channelActions) { for (ChannelActions s : _channelActions) {
int channel = s.channel; int channel = s.channel;

View file

@ -42,7 +42,7 @@ StaffTypeChange::StaffTypeChange(const StaffTypeChange& lb)
void StaffTypeChange::write(XmlWriter& xml) const void StaffTypeChange::write(XmlWriter& xml) const
{ {
xml.stag(name()); xml.stag(this);
if (_staffType) if (_staffType)
_staffType->write(xml); _staffType->write(xml);
Element::writeProperties(xml); Element::writeProperties(xml);

View file

@ -212,7 +212,7 @@ void Stem::draw(QPainter* painter) const
void Stem::write(XmlWriter& xml) const void Stem::write(XmlWriter& xml) const
{ {
xml.stag("Stem"); xml.stag(this);
Element::writeProperties(xml); Element::writeProperties(xml);
writeProperty(xml, Pid::USER_LEN); writeProperty(xml, Pid::USER_LEN);
writeProperty(xml, Pid::LINE_WIDTH); writeProperty(xml, Pid::LINE_WIDTH);

View file

@ -97,7 +97,7 @@ void Symbol::draw(QPainter* p) const
void Symbol::write(XmlWriter& xml) const void Symbol::write(XmlWriter& xml) const
{ {
xml.stag(name()); xml.stag(this);
xml.tag("name", Sym::id2name(_sym)); xml.tag("name", Sym::id2name(_sym));
if (_scoreFont) if (_scoreFont)
xml.tag("font", _scoreFont->name()); xml.tag("font", _scoreFont->name());
@ -199,7 +199,7 @@ void FSymbol::draw(QPainter* painter) const
void FSymbol::write(XmlWriter& xml) const void FSymbol::write(XmlWriter& xml) const
{ {
xml.stag(name()); xml.stag(this);
xml.tag("font", _font.family()); xml.tag("font", _font.family());
xml.tag("fontsize", _font.pointSizeF()); xml.tag("fontsize", _font.pointSizeF());
xml.tag("code", _code); xml.tag("code", _code);

View file

@ -984,7 +984,7 @@ qreal System::staffCanvasYpage(int staffIdx) const
void System::write(XmlWriter& xml) const void System::write(XmlWriter& xml) const
{ {
xml.stag("System"); xml.stag(this);
if (_systemDividerLeft && _systemDividerLeft->isUserModified()) if (_systemDividerLeft && _systemDividerLeft->isUserModified())
_systemDividerLeft->write(xml); _systemDividerLeft->write(xml);
if (_systemDividerRight && _systemDividerRight->isUserModified()) if (_systemDividerRight && _systemDividerRight->isUserModified())

View file

@ -87,9 +87,9 @@ QRectF SystemDivider::drag(EditData& ed)
void SystemDivider::write(XmlWriter& xml) const void SystemDivider::write(XmlWriter& xml) const
{ {
if (dividerType() == SystemDivider::Type::LEFT) if (dividerType() == SystemDivider::Type::LEFT)
xml.stag(QString("SystemDivider type=\"left\"")); xml.stag(this, "type=\"left\"");
else else
xml.stag(QString("SystemDivider type=\"right\"")); xml.stag(this, "type=\"right\"");
writeProperties(xml); writeProperties(xml);
xml.etag(); xml.etag();
} }

View file

@ -56,7 +56,7 @@ TempoText::TempoText(Score* s)
void TempoText::write(XmlWriter& xml) const void TempoText::write(XmlWriter& xml) const
{ {
xml.stag(name()); xml.stag(this);
xml.tag("tempo", _tempo); xml.tag("tempo", _tempo);
if (_followText) if (_followText)
xml.tag("followText", _followText); xml.tag("followText", _followText);

View file

@ -1649,7 +1649,7 @@ void TextBase::write(XmlWriter& xml) const
{ {
if (!xml.canWrite(this)) if (!xml.canWrite(this))
return; return;
xml.stag(name()); xml.stag(this);
writeProperties(xml, true, true); writeProperties(xml, true, true);
xml.etag(); xml.etag();
} }

View file

@ -91,7 +91,7 @@ void TBox::layout()
void TBox::write(XmlWriter& xml) const void TBox::write(XmlWriter& xml) const
{ {
xml.stag(name()); xml.stag(this);
Box::writeProperties(xml); Box::writeProperties(xml);
_text->write(xml); _text->write(xml);
xml.etag(); xml.etag();

View file

@ -395,7 +395,7 @@ void TextLineBase::write(XmlWriter& xml) const
{ {
if (!xml.canWrite(this)) if (!xml.canWrite(this))
return; return;
xml.stag(name()); xml.stag(this);
writeProperties(xml); writeProperties(xml);
xml.etag(); xml.etag();
} }

View file

@ -519,7 +519,7 @@ Tie::Tie(Score* s)
void Tie::write(XmlWriter& xml) const void Tie::write(XmlWriter& xml) const
{ {
xml.stag(name()); xml.stag(this);
SlurTie::writeProperties(xml); SlurTie::writeProperties(xml);
xml.etag(); xml.etag();
} }

View file

@ -125,7 +125,7 @@ void TimeSig::setDenominatorString(const QString& a)
void TimeSig::write(XmlWriter& xml) const void TimeSig::write(XmlWriter& xml) const
{ {
xml.stag("TimeSig"); xml.stag(this);
writeProperty(xml, Pid::TIMESIG_TYPE); writeProperty(xml, Pid::TIMESIG_TYPE);
Element::writeProperties(xml); Element::writeProperties(xml);

View file

@ -358,7 +358,7 @@ void Tremolo::write(XmlWriter& xml) const
{ {
if (!xml.canWrite(this)) if (!xml.canWrite(this))
return; return;
xml.stag(name()); xml.stag(this);
xml.tag("subtype", tremoloTypeName()); xml.tag("subtype", tremoloTypeName());
Element::writeProperties(xml); Element::writeProperties(xml);
xml.etag(); xml.etag();

View file

@ -86,7 +86,7 @@ void TremoloBar::draw(QPainter* painter) const
void TremoloBar::write(XmlWriter& xml) const void TremoloBar::write(XmlWriter& xml) const
{ {
xml.stag("TremoloBar"); xml.stag(this);
writeProperty(xml, Pid::MAG); writeProperty(xml, Pid::MAG);
writeProperty(xml, Pid::LINE_WIDTH); writeProperty(xml, Pid::LINE_WIDTH);
writeProperty(xml, Pid::PLAY); writeProperty(xml, Pid::PLAY);

View file

@ -307,7 +307,7 @@ void Trill::write(XmlWriter& xml) const
{ {
if (!xml.canWrite(this)) if (!xml.canWrite(this))
return; return;
xml.stag(name()); xml.stag(this);
xml.tag("subtype", trillTypeName()); xml.tag("subtype", trillTypeName());
writeProperty(xml, Pid::PLAY); writeProperty(xml, Pid::PLAY);
writeProperty(xml, Pid::ORNAMENT_STYLE); writeProperty(xml, Pid::ORNAMENT_STYLE);

View file

@ -707,7 +707,7 @@ void Tuplet::scanElements(void* data, void (*func)(void*, Element*), bool all)
void Tuplet::write(XmlWriter& xml) const void Tuplet::write(XmlWriter& xml) const
{ {
xml.stag(name()); xml.stag(this);
Element::writeProperties(xml); Element::writeProperties(xml);
writeProperty(xml, Pid::DIRECTION); writeProperty(xml, Pid::DIRECTION);
@ -722,7 +722,7 @@ void Tuplet::write(XmlWriter& xml) const
xml.tag("baseNote", _baseLen.name()); xml.tag("baseNote", _baseLen.name());
if (_number) { if (_number) {
xml.stag("Number"); xml.stag("Number", _number);
_number->writeProperties(xml); _number->writeProperties(xml);
xml.etag(); xml.etag();
} }

View file

@ -196,7 +196,7 @@ void Vibrato::write(XmlWriter& xml) const
{ {
if (!xml.canWrite(this)) if (!xml.canWrite(this))
return; return;
xml.stag(name()); xml.stag(this);
xml.tag("subtype", vibratoTypeName()); xml.tag("subtype", vibratoTypeName());
writeProperty(xml, Pid::PLAY); writeProperty(xml, Pid::PLAY);
SLine::writeProperties(xml); SLine::writeProperties(xml);

View file

@ -151,7 +151,7 @@ void Volta::read(XmlReader& e)
void Volta::write(XmlWriter& xml) const void Volta::write(XmlWriter& xml) const
{ {
xml.stag(name()); xml.stag(this);
TextLineBase::writeProperties(xml); TextLineBase::writeProperties(xml);
QString s; QString s;
for (int i : _endings) { for (int i : _endings) {

View file

@ -222,6 +222,9 @@ class XmlWriter : public QTextStream {
LinksIndexer _linksIndexer; LinksIndexer _linksIndexer;
QMap<int, int> _lidLocalIndices; QMap<int, int> _lidLocalIndices;
std::vector<std::pair<const ScoreElement*, QString>> _elements;
bool _recordElements = false;
void putLevel(); void putLevel();
public: public:
@ -262,6 +265,9 @@ class XmlWriter : public QTextStream {
void setLidLocalIndex(int lid, int localIndex) { _lidLocalIndices.insert(lid, localIndex); } void setLidLocalIndex(int lid, int localIndex) { _lidLocalIndices.insert(lid, localIndex); }
int lidLocalIndex(int lid) const { return _lidLocalIndices[lid]; } int lidLocalIndex(int lid) const { return _lidLocalIndices[lid]; }
const std::vector<std::pair<const ScoreElement*, QString>>& elements() const { return _elements; }
void setRecordElements(bool record) { _recordElements = record; }
void sTag(const char* name, Spatium sp) { XmlWriter::tag(name, QVariant(sp.val())); } void sTag(const char* name, Spatium sp) { XmlWriter::tag(name, QVariant(sp.val())); }
void pTag(const char* name, PlaceText); void pTag(const char* name, PlaceText);
@ -270,6 +276,9 @@ class XmlWriter : public QTextStream {
void stag(const QString&); void stag(const QString&);
void etag(); void etag();
void stag(const ScoreElement* se, const QString& attributes = QString());
void stag(const QString& name, const ScoreElement* se, const QString& attributes = QString());
void tagE(const QString&); void tagE(const QString&);
void tagE(const char* format, ...); void tagE(const char* format, ...);
void ntag(const char* name); void ntag(const char* name);

View file

@ -93,6 +93,34 @@ void XmlWriter::stag(const QString& s)
stack.append(s.split(' ')[0]); stack.append(s.split(' ')[0]);
} }
//---------------------------------------------------------
// stag
// <mops attribute="value">
//---------------------------------------------------------
void XmlWriter::stag(const ScoreElement* se, const QString& attributes)
{
stag(se->name(), se, attributes);
}
//---------------------------------------------------------
// stag
// <mops attribute="value">
//---------------------------------------------------------
void XmlWriter::stag(const QString& name, const ScoreElement* se, const QString& attributes)
{
putLevel();
*this << '<' << name;
if (!attributes.isEmpty())
*this << ' ' << attributes;
*this << '>' << endl;
stack.append(name);
if (_recordElements)
_elements.emplace_back(se, name);
}
//--------------------------------------------------------- //---------------------------------------------------------
// etag // etag
// </mops> // </mops>