Merge pull request #20128 from Eism/palette_more_items_repeats_fix
Fixed palette items
This commit is contained in:
commit
5384a156e7
|
@ -683,6 +683,7 @@ void SingleLayout::layout(Bracket* item, const Context& ctx)
|
|||
Bracket::LayoutData* ldata = item->mutldata();
|
||||
|
||||
ldata->setBracketHeight(3.5 * item->spatium() * 2);
|
||||
ldata->braceSymbol = item->braceSymbol();
|
||||
|
||||
Shape shape;
|
||||
|
||||
|
|
|
@ -274,7 +274,7 @@ void TWrite::writeStyledProperties(const EngravingItem* item, XmlWriter& xml)
|
|||
|
||||
void TWrite::writeItemProperties(const EngravingItem* item, XmlWriter& xml, WriteContext& ctx)
|
||||
{
|
||||
if (!MScore::testMode) {
|
||||
if (!MScore::testMode && !item->score()->isPaletteScore()) {
|
||||
xml.tag("eid", item->eid().toUint64());
|
||||
}
|
||||
|
||||
|
|
|
@ -125,6 +125,17 @@ PaletteCellPtr Palette::insertElement(size_t idx, ElementPtr element, const Tran
|
|||
return insertElement(idx, element, name.str, mag, offset, tag);
|
||||
}
|
||||
|
||||
PaletteCellPtr Palette::insertActionIcon(size_t idx, ActionIconType type, actions::ActionCode code, double mag)
|
||||
{
|
||||
const ui::UiAction& action = actionsRegister()->action(code);
|
||||
QString name = !action.description.isEmpty() ? action.description.qTranslated() : action.title.qTranslatedWithoutMnemonic();
|
||||
auto icon = std::make_shared<ActionIcon>(gpaletteScore->dummy());
|
||||
icon->setActionType(type);
|
||||
icon->setAction(code, static_cast<char16_t>(action.iconCode));
|
||||
|
||||
return insertElement(idx, icon, name, mag);
|
||||
}
|
||||
|
||||
PaletteCellPtr Palette::appendElement(ElementPtr element, const QString& name, qreal mag, const QPointF& offset, const QString& tag)
|
||||
{
|
||||
if (element) {
|
||||
|
@ -181,6 +192,21 @@ bool Palette::insertCells(size_t idx, std::vector<PaletteCellPtr> cells)
|
|||
return true;
|
||||
}
|
||||
|
||||
bool Palette::removeCell(PaletteCellPtr cell)
|
||||
{
|
||||
return removeCells({ cell });
|
||||
}
|
||||
|
||||
bool Palette::removeCells(std::vector<PaletteCellPtr> cells)
|
||||
{
|
||||
for (PaletteCellPtr& c : cells) {
|
||||
c->setParent(nullptr);
|
||||
m_cells.erase(std::remove(m_cells.begin(), m_cells.end(), c), m_cells.end());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
PaletteCellPtr Palette::takeCell(size_t idx)
|
||||
{
|
||||
std::vector<PaletteCellPtr> cells = takeCells(idx, 1);
|
||||
|
@ -316,6 +342,7 @@ bool Palette::read(XmlReader& e, bool pasteMode)
|
|||
m_type = guessType();
|
||||
}
|
||||
|
||||
PaletteCompat::removeOldItemsIfNeeded(*this);
|
||||
PaletteCompat::addNewItemsIfNeeded(*this, gpaletteScore);
|
||||
|
||||
return true;
|
||||
|
|
|
@ -112,6 +112,7 @@ public:
|
|||
const QPointF& offset = QPointF(), const QString& tag = "");
|
||||
PaletteCellPtr insertElement(size_t idx, engraving::ElementPtr element, const TranslatableString& name, qreal mag = 1.0,
|
||||
const QPointF& offset = QPointF(), const QString& tag = "");
|
||||
PaletteCellPtr insertActionIcon(size_t idx, engraving::ActionIconType type, actions::ActionCode code, double mag = 1.0);
|
||||
// TODO: Remove QString overload
|
||||
PaletteCellPtr appendElement(engraving::ElementPtr element, const QString& name, qreal mag = 1.0,
|
||||
const QPointF& offset = QPointF(), const QString& tag = "");
|
||||
|
@ -121,6 +122,8 @@ public:
|
|||
|
||||
bool insertCell(size_t idx, PaletteCellPtr cell);
|
||||
bool insertCells(size_t idx, std::vector<PaletteCellPtr> cells);
|
||||
bool removeCell(PaletteCellPtr cell);
|
||||
bool removeCells(std::vector<PaletteCellPtr> cells);
|
||||
|
||||
const std::vector<PaletteCellPtr>& cells() const { return m_cells; }
|
||||
int cellsCount() const { return int(m_cells.size()); }
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
|
||||
#include "engraving/rw/compat/compatutils.h"
|
||||
|
||||
#include "engraving/dom/actionicon.h"
|
||||
#include "engraving/dom/articulation.h"
|
||||
#include "engraving/dom/chordrest.h"
|
||||
#include "engraving/dom/engravingitem.h"
|
||||
|
@ -44,6 +45,13 @@
|
|||
using namespace mu::palette;
|
||||
using namespace mu::engraving;
|
||||
|
||||
static const std::unordered_set<ActionIconType> BENDS_ACTION_TYPES = {
|
||||
ActionIconType::STANDARD_BEND,
|
||||
ActionIconType::PRE_BEND,
|
||||
ActionIconType::GRACE_NOTE_BEND,
|
||||
ActionIconType::SLIGHT_BEND
|
||||
};
|
||||
|
||||
void PaletteCompat::migrateOldPaletteItemIfNeeded(ElementPtr& element, Score* paletteScore)
|
||||
{
|
||||
EngravingItem* item = element.get();
|
||||
|
@ -82,17 +90,35 @@ void PaletteCompat::addNewItemsIfNeeded(Palette& palette, Score* paletteScore)
|
|||
}
|
||||
}
|
||||
|
||||
void PaletteCompat::removeOldItemsIfNeeded(Palette& palette)
|
||||
{
|
||||
if (palette.type() == Palette::Type::Articulation
|
||||
|| palette.type() == Palette::Type::Guitar) {
|
||||
removeOldItems(palette);
|
||||
}
|
||||
}
|
||||
|
||||
void PaletteCompat::addNewGuitarItems(Palette& guitarPalette, Score* paletteScore)
|
||||
{
|
||||
bool containsCapo = false;
|
||||
bool containsStringTunings = false;
|
||||
bool containsGuitarBends = false;
|
||||
|
||||
for (const PaletteCellPtr& cell : guitarPalette.cells()) {
|
||||
if (cell->element && cell->element->isCapo()) {
|
||||
containsCapo = true;
|
||||
const ElementPtr element = cell->element;
|
||||
if (!element) {
|
||||
continue;
|
||||
}
|
||||
if (cell->element && cell->element->isStringTunings()) {
|
||||
|
||||
if (element->isCapo()) {
|
||||
containsCapo = true;
|
||||
} else if (element->isStringTunings()) {
|
||||
containsStringTunings = true;
|
||||
} else if (element->isActionIcon()) {
|
||||
const ActionIcon* icon = toActionIcon(element.get());
|
||||
if (contains(BENDS_ACTION_TYPES, icon->actionType())) {
|
||||
containsGuitarBends = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -111,4 +137,30 @@ void PaletteCompat::addNewGuitarItems(Palette& guitarPalette, Score* paletteScor
|
|||
guitarPalette.insertElement(defaultPosition, stringTunings, QT_TRANSLATE_NOOP("palette", "String tunings"))->setElementTranslated(
|
||||
true);
|
||||
}
|
||||
|
||||
if (!containsGuitarBends) {
|
||||
int defaultPosition = std::min(9, guitarPalette.cellsCount());
|
||||
guitarPalette.insertActionIcon(defaultPosition, ActionIconType::STANDARD_BEND, "standard-bend", 1.25);
|
||||
guitarPalette.insertActionIcon(defaultPosition, ActionIconType::PRE_BEND, "pre-bend", 1.25);
|
||||
guitarPalette.insertActionIcon(defaultPosition, ActionIconType::GRACE_NOTE_BEND, "grace-note-bend", 1.25);
|
||||
guitarPalette.insertActionIcon(defaultPosition, ActionIconType::SLIGHT_BEND, "slight-bend", 1.25);
|
||||
}
|
||||
}
|
||||
|
||||
void PaletteCompat::removeOldItems(Palette& palette)
|
||||
{
|
||||
std::vector<PaletteCellPtr> cellsToRemove;
|
||||
|
||||
for (const PaletteCellPtr& cell : palette.cells()) {
|
||||
const ElementPtr element = cell->element;
|
||||
if (!element) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (element->isBend()) {
|
||||
cellsToRemove.emplace_back(cell);
|
||||
}
|
||||
}
|
||||
|
||||
palette.removeCells(cellsToRemove);
|
||||
}
|
||||
|
|
|
@ -32,9 +32,11 @@ class PaletteCompat
|
|||
public:
|
||||
static void migrateOldPaletteItemIfNeeded(engraving::ElementPtr& element, engraving::Score* paletteScore);
|
||||
static void addNewItemsIfNeeded(Palette& palette, engraving::Score* paletteScore);
|
||||
static void removeOldItemsIfNeeded(Palette& palette);
|
||||
|
||||
private:
|
||||
static void addNewGuitarItems(Palette& guitarPalette, engraving::Score* paletteScore);
|
||||
static void removeOldItems(Palette& palette);
|
||||
};
|
||||
} // namespace mu::palette
|
||||
#endif // MU_PALETTE_PALETTECOMPAT_H
|
||||
|
|
|
@ -764,9 +764,6 @@ PalettePtr PaletteCreator::newArticulationsPalette(bool defaultPalette)
|
|||
}
|
||||
|
||||
if (!defaultPalette) {
|
||||
auto bend = Factory::makeGuitarBend(gpaletteScore->dummy()->note());
|
||||
sp->appendElement(bend, QT_TRANSLATE_NOOP("palette", "Bend"));
|
||||
|
||||
auto tb = Factory::makeTremoloBar(gpaletteScore->dummy());
|
||||
tb->points().push_back(PitchValue(0, 0, false)); // "Dip"
|
||||
tb->points().push_back(PitchValue(30, -100, false));
|
||||
|
|
Loading…
Reference in a new issue