Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/engraving/dom/cmd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1809,7 +1809,7 @@ void Score::changeCRlen(ChordRest* cr, const Fraction& dstF, bool fillWithRest)
connectTies();

if (elementToSelect) {
if (containsElement(elementToSelect)) {
if (canReselectItem(elementToSelect)) {
select(elementToSelect, SelectType::SINGLE, 0);
}
}
Expand Down
20 changes: 10 additions & 10 deletions src/engraving/dom/score.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1816,21 +1816,20 @@ void Score::doUndoRemoveElement(EngravingItem* element)
}
}

bool Score::containsElement(const EngravingItem* element) const
bool Score::canReselectItem(const EngravingItem* item) const
{
if (!element) {
if (!item || item->selected()) {
return false;
}

EngravingItem* parent = element->parentItem();
if (!parent) {
return false;
EngravingItem* seg = const_cast<EngravingItem*>(item->findAncestor(ElementType::SEGMENT));
if (seg) {
std::vector<EngravingItem*> elements;
seg->scanElements(&elements, collectElements, false /*all*/);
return muse::contains(elements, const_cast<EngravingItem*>(item));
}

std::vector<EngravingItem*> elements;
parent->scanElements(&elements, collectElements, false /*all*/);

return std::find(elements.cbegin(), elements.cend(), element) != elements.cend();
return true;
}

//---------------------------------------------------------
Expand Down Expand Up @@ -3331,10 +3330,11 @@ void Score::padToggle(Pad p, bool toggleForSelectionOnly)
if (!elementsToSelect.empty()) {
std::vector<EngravingItem*> selectList;
for (EngravingItem* e : elementsToSelect) {
if (e && !e->selected()) {
if (canReselectItem(e)) {
selectList.push_back(e);
}
}

select(selectList, SelectType::ADD, 0);
selection().updateSelectedElements();
}
Expand Down
3 changes: 2 additions & 1 deletion src/engraving/dom/score.h
Original file line number Diff line number Diff line change
Expand Up @@ -514,7 +514,6 @@ class Score : public EngravingObject, public muse::Injectable
void doUndoAddElement(EngravingItem*);
void removeElement(EngravingItem*);
void doUndoRemoveElement(EngravingItem*);
bool containsElement(const EngravingItem*) const;

Note* addPitch(NoteVal&, bool addFlag, InputState* externalInputState = nullptr);
Note* addMidiPitch(int pitch, bool addFlag, bool allowTransposition);
Expand Down Expand Up @@ -1083,6 +1082,8 @@ class Score : public EngravingObject, public muse::Injectable
void selectAdd(EngravingItem* e);
void selectRange(EngravingItem* e, staff_idx_t staffIdx);

bool canReselectItem(const EngravingItem* item) const;

bool trySelectSimilarInRange(EngravingItem* e);
bool tryExtendSingleSelectionToRange(EngravingItem* e, staff_idx_t staffIdx);

Expand Down
Loading