Skip to content

Commit

Permalink
Migration of palette elements
Browse files Browse the repository at this point in the history
  • Loading branch information
mike-spa committed May 18, 2023
1 parent e3d5173 commit a0e9295
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 24 deletions.
48 changes: 24 additions & 24 deletions src/engraving/rw/compat/compatutils.cpp
Expand Up @@ -46,6 +46,30 @@
using namespace mu::engraving;
using namespace mu::engraving::compat;

const std::set<SymId> CompatUtils::ornamentIds {
SymId::ornamentTurn,
SymId::ornamentTurnInverted,
SymId::ornamentTurnSlash,
SymId::ornamentTrill,
SymId::brassMuteClosed,
SymId::ornamentMordent,
SymId::ornamentShortTrill,
SymId::ornamentTremblement,
SymId::ornamentPrallMordent,
SymId::ornamentLinePrall,
SymId::ornamentUpPrall,
SymId::ornamentUpMordent,
SymId::ornamentPrecompMordentUpperPrefix,
SymId::ornamentDownMordent,
SymId::ornamentPrallUp,
SymId::ornamentPrallDown,
SymId::ornamentPrecompSlide,
SymId::ornamentShake3,
SymId::ornamentShakeMuffat1,
SymId::ornamentTremblementCouperin,
SymId::ornamentPinceCouperin
};

void CompatUtils::doCompatibilityConversions(MasterScore* masterScore)
{
if (!masterScore) {
Expand Down Expand Up @@ -158,30 +182,6 @@ void CompatUtils::assignInitialPartToExcerpts(const std::vector<Excerpt*>& excer

void CompatUtils::replaceOldWithNewOrnaments(MasterScore* score)
{
static const std::set<SymId> ornamentIds {
SymId::ornamentTurn,
SymId::ornamentTurnInverted,
SymId::ornamentTurnSlash,
SymId::ornamentTrill,
SymId::brassMuteClosed,
SymId::ornamentMordent,
SymId::ornamentShortTrill,
SymId::ornamentTremblement,
SymId::ornamentPrallMordent,
SymId::ornamentLinePrall,
SymId::ornamentUpPrall,
SymId::ornamentUpMordent,
SymId::ornamentPrecompMordentUpperPrefix,
SymId::ornamentDownMordent,
SymId::ornamentPrallUp,
SymId::ornamentPrallDown,
SymId::ornamentPrecompSlide,
SymId::ornamentShake3,
SymId::ornamentShakeMuffat1,
SymId::ornamentTremblementCouperin,
SymId::ornamentPinceCouperin
};

std::vector<Articulation*> oldOrnaments; // ornaments used to be articulations

for (Measure* meas = score->firstMeasure(); meas; meas = meas->nextMeasure()) {
Expand Down
3 changes: 3 additions & 0 deletions src/engraving/rw/compat/compatutils.h
Expand Up @@ -25,6 +25,7 @@
#include <vector>

namespace mu::engraving {
enum class SymId;
class Score;
class MasterScore;
class Excerpt;
Expand All @@ -38,6 +39,8 @@ class CompatUtils
static void replaceStaffTextWithPlayTechniqueAnnotation(Score* score);
static void assignInitialPartToExcerpts(const std::vector<Excerpt*>& excerpts);
static void replaceOldWithNewOrnaments(MasterScore* score);

static const std::set<SymId> ornamentIds;
};
}
#endif // MU_ENGRAVING_COMPATUTILS_H
41 changes: 41 additions & 0 deletions src/palette/internal/palettecell.cpp
Expand Up @@ -23,12 +23,17 @@

#include "mimedatautils.h"

#include "engraving/rw/compat/compatutils.h"
#include "engraving/rw/400/tread.h"
#include "engraving/rw/400/twrite.h"

#include "engraving/libmscore/actionicon.h"
#include "engraving/libmscore/engravingitem.h"
#include "engraving/libmscore/expression.h"
#include "engraving/libmscore/fret.h"
#include "engraving/libmscore/masterscore.h"
#include "engraving/libmscore/ornament.h"
#include "engraving/libmscore/stafftext.h"
#include "engraving/libmscore/textbase.h"
#include "engraving/libmscore/factory.h"

Expand Down Expand Up @@ -204,6 +209,7 @@ bool PaletteCell::read(XmlReader& e)
e.unknown();
} else {
rw400::TRead::readItem(element.get(), e, *e.context());
migrateOldItemIfNeeded();
element->styleChanged();

if (element->type() == ElementType::ACTION_ICON) {
Expand All @@ -224,6 +230,41 @@ bool PaletteCell::read(XmlReader& e)
return add && element;
}

void PaletteCell::migrateOldItemIfNeeded()
{
if (gpaletteScore->mscVersion() >= 410) {
return;
}

EngravingItem* item = element.get();

if (item->isArticulation()) {
const std::set<SymId>& ornamentIds = compat::CompatUtils::ornamentIds;
bool isOldOrnament = ornamentIds.find(toArticulation(item)->symId()) != ornamentIds.end();

if (!isOldOrnament) {
return;
}

Articulation* oldOrnament = toArticulation(item);
Ornament* newOrnament = Factory::createOrnament(gpaletteScore->dummy()->chord());
newOrnament->setSymId(oldOrnament->symId());
element.reset(newOrnament);
return;
}

if (item->isStaffText() && toStaffText(item)->textStyleType() == TextStyleType::EXPRESSION) {
StaffText* oldExpression = toStaffText(item);
Expression* newExpression = Factory::createExpression(gpaletteScore->dummy()->segment());
if (oldExpression->xmlText() == "Expression") {
newExpression->setXmlText("expression");
} else {
newExpression->setXmlText(oldExpression->xmlText());
}
element.reset(newExpression);
}
}

void PaletteCell::write(XmlWriter& xml) const
{
if (!element) {
Expand Down
1 change: 1 addition & 0 deletions src/palette/internal/palettecell.h
Expand Up @@ -85,6 +85,7 @@ class PaletteCell : public QObject

void write(mu::engraving::XmlWriter& xml) const;
bool read(mu::engraving::XmlReader&);
void migrateOldItemIfNeeded();
QByteArray toMimeData() const;

static PaletteCellPtr fromMimeData(const QByteArray& data);
Expand Down

0 comments on commit a0e9295

Please sign in to comment.