Merge pull request #10506 from RomanPudashkin/crash_after_selecting_brackets
[MU4] Fix #10496: Crash on selecting multiple brackets
This commit is contained in:
commit
b0020ec292
21 changed files with 27 additions and 33 deletions
|
@ -188,7 +188,10 @@ void Layout::doLayoutRange(const LayoutOptions& options, const Fraction& st, con
|
||||||
for (System* s : qAsConst(m_score->_systems)) {
|
for (System* s : qAsConst(m_score->_systems)) {
|
||||||
for (Bracket* b : s->brackets()) {
|
for (Bracket* b : s->brackets()) {
|
||||||
if (b->selected()) {
|
if (b->selected()) {
|
||||||
|
bool selected = b->selected();
|
||||||
m_score->_selection.remove(b);
|
m_score->_selection.remove(b);
|
||||||
|
BracketItem* item = b->bracketItem();
|
||||||
|
item->setSelected(selected);
|
||||||
m_score->setSelectionChanged(true);
|
m_score->setSelectionChanged(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -120,7 +120,7 @@ public:
|
||||||
Pid propertyId(const QStringRef& xmlName) const override;
|
Pid propertyId(const QStringRef& xmlName) const override;
|
||||||
|
|
||||||
// TODO: add a grip for moving the entire arpeggio
|
// TODO: add a grip for moving the entire arpeggio
|
||||||
EditBehavior normalModeEditBehavior() const override { return EditBehavior::Edit; }
|
bool needStartEditingAfterSelecting() const override { return true; }
|
||||||
int gripsCount() const override { return 2; }
|
int gripsCount() const override { return 2; }
|
||||||
Grip initialEditModeGrip() const override { return Grip::END; }
|
Grip initialEditModeGrip() const override { return Grip::END; }
|
||||||
Grip defaultGrip() const override { return Grip::START; }
|
Grip defaultGrip() const override { return Grip::START; }
|
||||||
|
|
|
@ -161,7 +161,7 @@ public:
|
||||||
QString accessibleInfo() const override;
|
QString accessibleInfo() const override;
|
||||||
QString accessibleExtraInfo() const override;
|
QString accessibleExtraInfo() const override;
|
||||||
|
|
||||||
EditBehavior normalModeEditBehavior() const override { return EditBehavior::Edit; }
|
bool needStartEditingAfterSelecting() const override { return true; }
|
||||||
int gripsCount() const override { return 1; }
|
int gripsCount() const override { return 1; }
|
||||||
Grip initialEditModeGrip() const override { return Grip::START; }
|
Grip initialEditModeGrip() const override { return Grip::START; }
|
||||||
Grip defaultGrip() const override { return Grip::START; }
|
Grip defaultGrip() const override { return Grip::START; }
|
||||||
|
|
|
@ -197,7 +197,7 @@ public:
|
||||||
|
|
||||||
void triggerLayout() const override;
|
void triggerLayout() const override;
|
||||||
|
|
||||||
EditBehavior normalModeEditBehavior() const override { return EditBehavior::Edit; }
|
bool needStartEditingAfterSelecting() const override { return true; }
|
||||||
int gripsCount() const override { return 3; }
|
int gripsCount() const override { return 3; }
|
||||||
Grip initialEditModeGrip() const override { return Grip::END; }
|
Grip initialEditModeGrip() const override { return Grip::END; }
|
||||||
Grip defaultGrip() const override { return Grip::MIDDLE; }
|
Grip defaultGrip() const override { return Grip::MIDDLE; }
|
||||||
|
|
|
@ -100,7 +100,7 @@ public:
|
||||||
QString accessibleExtraInfo() const override;
|
QString accessibleExtraInfo() const override;
|
||||||
|
|
||||||
// TODO: add a grip for moving the entire box
|
// TODO: add a grip for moving the entire box
|
||||||
EditBehavior normalModeEditBehavior() const override { return EditBehavior::Edit; }
|
bool needStartEditingAfterSelecting() const override { return true; }
|
||||||
int gripsCount() const override { return 1; }
|
int gripsCount() const override { return 1; }
|
||||||
Grip initialEditModeGrip() const override { return Grip::START; }
|
Grip initialEditModeGrip() const override { return Grip::START; }
|
||||||
Grip defaultGrip() const override { return Grip::START; }
|
Grip defaultGrip() const override { return Grip::START; }
|
||||||
|
|
|
@ -521,7 +521,7 @@ void Bracket::undoChangeProperty(Pid id, const PropertyValue& v, PropertyFlags p
|
||||||
|
|
||||||
void Bracket::setSelected(bool f)
|
void Bracket::setSelected(bool f)
|
||||||
{
|
{
|
||||||
// _bi->setSelected(f);
|
_bi->setSelected(f);
|
||||||
EngravingItem::setSelected(f);
|
EngravingItem::setSelected(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -89,7 +89,7 @@ public:
|
||||||
mu::engraving::PropertyValue propertyDefault(Pid) const override;
|
mu::engraving::PropertyValue propertyDefault(Pid) const override;
|
||||||
Pid propertyId(const QStringRef& xmlName) const override;
|
Pid propertyId(const QStringRef& xmlName) const override;
|
||||||
|
|
||||||
EngravingItem::EditBehavior normalModeEditBehavior() const override { return EngravingItem::EditBehavior::Edit; }
|
bool needStartEditingAfterSelecting() const override { return true; }
|
||||||
int gripsCount() const override { return _straight ? 1 : static_cast<int>(path.elementCount()); }
|
int gripsCount() const override { return _straight ? 1 : static_cast<int>(path.elementCount()); }
|
||||||
Grip initialEditModeGrip() const override { return Grip(gripsCount() - 1); }
|
Grip initialEditModeGrip() const override { return Grip(gripsCount() - 1); }
|
||||||
Grip defaultGrip() const override { return initialEditModeGrip(); }
|
Grip defaultGrip() const override { return initialEditModeGrip(); }
|
||||||
|
|
|
@ -221,11 +221,6 @@ protected:
|
||||||
virtual mu::engraving::AccessibleItem* createAccessible();
|
virtual mu::engraving::AccessibleItem* createAccessible();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
enum class EditBehavior {
|
|
||||||
SelectOnly,
|
|
||||||
Edit,
|
|
||||||
};
|
|
||||||
|
|
||||||
virtual ~EngravingItem();
|
virtual ~EngravingItem();
|
||||||
|
|
||||||
virtual void setupAccessible();
|
virtual void setupAccessible();
|
||||||
|
@ -392,6 +387,7 @@ public:
|
||||||
QVector<mu::LineF> genericDragAnchorLines() const;
|
QVector<mu::LineF> genericDragAnchorLines() const;
|
||||||
|
|
||||||
virtual bool isEditable() const { return !flag(ElementFlag::GENERATED); }
|
virtual bool isEditable() const { return !flag(ElementFlag::GENERATED); }
|
||||||
|
virtual bool needStartEditingAfterSelecting() const { return false; }
|
||||||
|
|
||||||
virtual void startEdit(EditData&);
|
virtual void startEdit(EditData&);
|
||||||
virtual bool edit(EditData&);
|
virtual bool edit(EditData&);
|
||||||
|
@ -409,7 +405,6 @@ public:
|
||||||
/** Returns anchor lines displayed while dragging element's grip in canvas coordinates. */
|
/** Returns anchor lines displayed while dragging element's grip in canvas coordinates. */
|
||||||
virtual QVector<mu::LineF> gripAnchorLines(Grip) const { return QVector<mu::LineF>(); }
|
virtual QVector<mu::LineF> gripAnchorLines(Grip) const { return QVector<mu::LineF>(); }
|
||||||
|
|
||||||
virtual EditBehavior normalModeEditBehavior() const { return EditBehavior::SelectOnly; }
|
|
||||||
virtual int gripsCount() const { return 0; }
|
virtual int gripsCount() const { return 0; }
|
||||||
virtual Grip initialEditModeGrip() const { return Grip::NO_GRIP; }
|
virtual Grip initialEditModeGrip() const { return Grip::NO_GRIP; }
|
||||||
virtual Grip defaultGrip() const { return Grip::NO_GRIP; }
|
virtual Grip defaultGrip() const { return Grip::NO_GRIP; }
|
||||||
|
|
|
@ -88,7 +88,7 @@ public:
|
||||||
ImageType getImageType() const { return imageType; }
|
ImageType getImageType() const { return imageType; }
|
||||||
bool isValid() const { return rasterDoc || svgDoc; }
|
bool isValid() const { return rasterDoc || svgDoc; }
|
||||||
|
|
||||||
EngravingItem::EditBehavior normalModeEditBehavior() const override { return EngravingItem::EditBehavior::Edit; }
|
bool needStartEditingAfterSelecting() const override { return true; }
|
||||||
int gripsCount() const override { return 2; }
|
int gripsCount() const override { return 2; }
|
||||||
Grip initialEditModeGrip() const override { return Grip(1); }
|
Grip initialEditModeGrip() const override { return Grip(1); }
|
||||||
Grip defaultGrip() const override { return Grip(1); }
|
Grip defaultGrip() const override { return Grip(1); }
|
||||||
|
|
|
@ -65,7 +65,7 @@ public:
|
||||||
|
|
||||||
virtual EngravingItem* propertyDelegate(Pid) override;
|
virtual EngravingItem* propertyDelegate(Pid) override;
|
||||||
|
|
||||||
EngravingItem::EditBehavior normalModeEditBehavior() const override { return EngravingItem::EditBehavior::Edit; }
|
bool needStartEditingAfterSelecting() const override { return true; }
|
||||||
int gripsCount() const override { return 3; }
|
int gripsCount() const override { return 3; }
|
||||||
Grip initialEditModeGrip() const override { return Grip::END; }
|
Grip initialEditModeGrip() const override { return Grip::END; }
|
||||||
Grip defaultGrip() const override { return Grip::MIDDLE; }
|
Grip defaultGrip() const override { return Grip::MIDDLE; }
|
||||||
|
|
|
@ -125,7 +125,7 @@ public:
|
||||||
UP& ups(Grip i) { return _ups[int(i)]; }
|
UP& ups(Grip i) { return _ups[int(i)]; }
|
||||||
Shape shape() const override { return _shape; }
|
Shape shape() const override { return _shape; }
|
||||||
|
|
||||||
EngravingItem::EditBehavior normalModeEditBehavior() const override { return EngravingItem::EditBehavior::Edit; }
|
bool needStartEditingAfterSelecting() const override { return true; }
|
||||||
int gripsCount() const override { return int(Grip::GRIPS); }
|
int gripsCount() const override { return int(Grip::GRIPS); }
|
||||||
Grip initialEditModeGrip() const override { return Grip::END; }
|
Grip initialEditModeGrip() const override { return Grip::END; }
|
||||||
Grip defaultGrip() const override { return Grip::DRAG; }
|
Grip defaultGrip() const override { return Grip::DRAG; }
|
||||||
|
|
|
@ -78,7 +78,7 @@ public:
|
||||||
void setGap(Millimetre sp);
|
void setGap(Millimetre sp);
|
||||||
Millimetre gap() const { return _gap; }
|
Millimetre gap() const { return _gap; }
|
||||||
|
|
||||||
EditBehavior normalModeEditBehavior() const override { return EditBehavior::Edit; }
|
bool needStartEditingAfterSelecting() const override { return true; }
|
||||||
int gripsCount() const override { return 1; }
|
int gripsCount() const override { return 1; }
|
||||||
Grip initialEditModeGrip() const override { return Grip::START; }
|
Grip initialEditModeGrip() const override { return Grip::START; }
|
||||||
Grip defaultGrip() const override { return Grip::START; }
|
Grip defaultGrip() const override { return Grip::START; }
|
||||||
|
|
|
@ -76,7 +76,7 @@ public:
|
||||||
mu::PointF flagPosition() const;
|
mu::PointF flagPosition() const;
|
||||||
double length() const { return m_baseLength + m_userLength; }
|
double length() const { return m_baseLength + m_userLength; }
|
||||||
|
|
||||||
EditBehavior normalModeEditBehavior() const override { return EditBehavior::Edit; }
|
bool needStartEditingAfterSelecting() const override { return true; }
|
||||||
int gripsCount() const override { return 1; }
|
int gripsCount() const override { return 1; }
|
||||||
Grip initialEditModeGrip() const override { return Grip::START; }
|
Grip initialEditModeGrip() const override { return Grip::START; }
|
||||||
Grip defaultGrip() const override { return Grip::START; }
|
Grip defaultGrip() const override { return Grip::START; }
|
||||||
|
|
|
@ -681,7 +681,13 @@ Bracket* System::createBracket(const LayoutContext& ctx, Ms::BracketItem* bi, in
|
||||||
b->setMeasure(measure);
|
b->setMeasure(measure);
|
||||||
}
|
}
|
||||||
add(b);
|
add(b);
|
||||||
|
|
||||||
|
if (bi->selected()) {
|
||||||
|
score()->select(b, SelectType::ADD);
|
||||||
|
}
|
||||||
|
|
||||||
b->setStaffSpan(firstStaff, lastStaff);
|
b->setStaffSpan(firstStaff, lastStaff);
|
||||||
|
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,7 @@ public:
|
||||||
Grip initialEditModeGrip() const override;
|
Grip initialEditModeGrip() const override;
|
||||||
Grip defaultGrip() const override;
|
Grip defaultGrip() const override;
|
||||||
|
|
||||||
EditBehavior normalModeEditBehavior() const override { return EditBehavior::SelectOnly; }
|
bool needStartEditingAfterSelecting() const override { return false; }
|
||||||
};
|
};
|
||||||
} // namespace Ms
|
} // namespace Ms
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -155,7 +155,7 @@ public:
|
||||||
|
|
||||||
Shape shape() const override;
|
Shape shape() const override;
|
||||||
|
|
||||||
EngravingItem::EditBehavior normalModeEditBehavior() const override { return EngravingItem::EditBehavior::Edit; }
|
bool needStartEditingAfterSelecting() const override { return true; }
|
||||||
int gripsCount() const override { return 2; }
|
int gripsCount() const override { return 2; }
|
||||||
Grip initialEditModeGrip() const override { return Grip::END; }
|
Grip initialEditModeGrip() const override { return Grip::END; }
|
||||||
Grip defaultGrip() const override { return Grip::START; }
|
Grip defaultGrip() const override { return Grip::START; }
|
||||||
|
|
|
@ -233,8 +233,6 @@ void AbstractInspectorModel::onPropertyValueChanged(const Ms::Pid pid, const QVa
|
||||||
|
|
||||||
updateNotation();
|
updateNotation();
|
||||||
endCommand();
|
endCommand();
|
||||||
|
|
||||||
emit elementsModified();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AbstractInspectorModel::updateProperties()
|
void AbstractInspectorModel::updateProperties()
|
||||||
|
|
|
@ -150,7 +150,6 @@ public slots:
|
||||||
signals:
|
signals:
|
||||||
void titleChanged();
|
void titleChanged();
|
||||||
|
|
||||||
void elementsModified();
|
|
||||||
void modelReseted();
|
void modelReseted();
|
||||||
void isEmptyChanged();
|
void isEmptyChanged();
|
||||||
|
|
||||||
|
|
|
@ -47,9 +47,6 @@ public:
|
||||||
QHash<int, QByteArray> roleNames() const override;
|
QHash<int, QByteArray> roleNames() const override;
|
||||||
int columnCount(const QModelIndex& parent = QModelIndex()) const override;
|
int columnCount(const QModelIndex& parent = QModelIndex()) const override;
|
||||||
|
|
||||||
signals:
|
|
||||||
void elementsModified();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum RoleNames {
|
enum RoleNames {
|
||||||
InspectorSectionModelRole = Qt::UserRole + 1
|
InspectorSectionModelRole = Qt::UserRole + 1
|
||||||
|
|
|
@ -2740,13 +2740,9 @@ void NotationInteraction::startEditElement(EngravingItem* element)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (element->isTextBase()) {
|
if (element->isTextBase()) {
|
||||||
startEditText(element, PointF());
|
startEditText(element);
|
||||||
} else if (m_editData.grips > 1) {
|
} else if (element->hasGrips()) {
|
||||||
startEditGrip(element, Ms::Grip::END);
|
startEditGrip(element, element->defaultGrip());
|
||||||
|
|
||||||
if (m_editData.element->generated()) {
|
|
||||||
m_editData.element = nullptr;
|
|
||||||
}
|
|
||||||
} else if (element->isEditable()) {
|
} else if (element->isEditable()) {
|
||||||
element->startEdit(m_editData);
|
element->startEdit(m_editData);
|
||||||
m_editData.element = element;
|
m_editData.element = element;
|
||||||
|
|
|
@ -505,7 +505,7 @@ void NotationViewInputController::mousePressEvent(QMouseEvent* event)
|
||||||
if (viewInteraction()->isHitGrip(logicPos)) {
|
if (viewInteraction()->isHitGrip(logicPos)) {
|
||||||
viewInteraction()->startEditGrip(logicPos);
|
viewInteraction()->startEditGrip(logicPos);
|
||||||
return;
|
return;
|
||||||
} else if (hitElement->hasGrips()) {
|
} else if (hitElement->hasGrips() && hitElement->needStartEditingAfterSelecting()) {
|
||||||
viewInteraction()->startEditGrip(hitElement, hitElement->defaultGrip());
|
viewInteraction()->startEditGrip(hitElement, hitElement->defaultGrip());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue