From 0b0fb8ae0028a6541507f584a4b799d97c4800ae Mon Sep 17 00:00:00 2001 From: Cubiking Date: Sun, 2 Aug 2026 12:00:57 +0800 Subject: [PATCH] Fix dragging score parentheses to palettes --- src/palette/internal/palettecell.cpp | 34 ++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/src/palette/internal/palettecell.cpp b/src/palette/internal/palettecell.cpp index c3e30a8e48bc6..b5fcc8e8980e7 100644 --- a/src/palette/internal/palettecell.cpp +++ b/src/palette/internal/palettecell.cpp @@ -32,6 +32,7 @@ #include "engraving/dom/textbase.h" #include "engraving/dom/tremolosinglechord.h" #include "engraving/dom/tremolotwochord.h" +#include "engraving/types/typesconv.h" #include "engraving/rw/rwregister.h" #include "engraving/rw/compat/tremolocompat.h" @@ -45,6 +46,30 @@ using namespace muse; using namespace mu::palette; using namespace mu::engraving; +static ElementPtr makeParenthesesActionIcon() +{ + const muse::actions::ActionCode code = "add-parentheses"; + auto icon = std::make_shared(gpaletteScore->dummy()); + icon->setActionType(ActionIconType::PARENTHESES); + icon->setAction(code, 0); + return icon; +} + +static ElementPtr makeElementFromMimeData(const QByteArray& data) +{ + PointF dragOffset; + Fraction duration(1, 4); + muse::ByteArray byteArray = ByteArray::fromQByteArrayNoCopy(data); + XmlReader typeReader(byteArray); + const ElementType type = EngravingItem::readType(typeReader, &dragOffset, &duration); + + if (type == ElementType::PARENTHESIS) { + return makeParenthesesActionIcon(); + } + + return ElementPtr(EngravingItem::readMimeData(gpaletteScore, byteArray, &dragOffset, &duration)); +} + static bool needsStaff(ElementPtr e) { if (!e) { @@ -323,9 +348,7 @@ PaletteCellPtr PaletteCell::fromMimeData(const QByteArray& data, const muse::mod PaletteCellPtr PaletteCell::fromElementMimeData(const QByteArray& data, const muse::modularity::ContextPtr& iocCtx) { - PointF dragOffset; - Fraction duration(1, 4); - ElementPtr element(EngravingItem::readMimeData(gpaletteScore, ByteArray::fromQByteArrayNoCopy(data), &dragOffset, &duration)); + ElementPtr element = makeElementFromMimeData(data); if (!element) { return nullptr; @@ -344,7 +367,10 @@ PaletteCellPtr PaletteCell::fromElementMimeData(const QByteArray& data, const mu } } - const String name = (element->isFretDiagram()) ? toFretDiagram(element.get())->harmonyPlainText() : element->translatedTypeUserName(); + String name = (element->isFretDiagram()) ? toFretDiagram(element.get())->harmonyPlainText() : element->translatedTypeUserName(); + if (element->isActionIcon() && toActionIcon(element.get())->actionType() == ActionIconType::PARENTHESES) { + name = TConv::capitalizedUserName(ElementType::ACCIDENTAL).translated(); + } return std::make_shared(iocCtx, element, name); }