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 (Bracket* b : s->brackets()) {
|
||||
if (b->selected()) {
|
||||
bool selected = b->selected();
|
||||
m_score->_selection.remove(b);
|
||||
BracketItem* item = b->bracketItem();
|
||||
item->setSelected(selected);
|
||||
m_score->setSelectionChanged(true);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -120,7 +120,7 @@ public:
|
|||
Pid propertyId(const QStringRef& xmlName) const override;
|
||||
|
||||
// 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; }
|
||||
Grip initialEditModeGrip() const override { return Grip::END; }
|
||||
Grip defaultGrip() const override { return Grip::START; }
|
||||
|
|
|
@ -161,7 +161,7 @@ public:
|
|||
QString accessibleInfo() 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; }
|
||||
Grip initialEditModeGrip() const override { return Grip::START; }
|
||||
Grip defaultGrip() const override { return Grip::START; }
|
||||
|
|
|
@ -197,7 +197,7 @@ public:
|
|||
|
||||
void triggerLayout() const override;
|
||||
|
||||
EditBehavior normalModeEditBehavior() const override { return EditBehavior::Edit; }
|
||||
bool needStartEditingAfterSelecting() const override { return true; }
|
||||
int gripsCount() const override { return 3; }
|
||||
Grip initialEditModeGrip() const override { return Grip::END; }
|
||||
Grip defaultGrip() const override { return Grip::MIDDLE; }
|
||||
|
|
|
@ -100,7 +100,7 @@ public:
|
|||
QString accessibleExtraInfo() const override;
|
||||
|
||||
// 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; }
|
||||
Grip initialEditModeGrip() 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)
|
||||
{
|
||||
// _bi->setSelected(f);
|
||||
_bi->setSelected(f);
|
||||
EngravingItem::setSelected(f);
|
||||
}
|
||||
|
||||
|
|
|
@ -89,7 +89,7 @@ public:
|
|||
mu::engraving::PropertyValue propertyDefault(Pid) 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()); }
|
||||
Grip initialEditModeGrip() const override { return Grip(gripsCount() - 1); }
|
||||
Grip defaultGrip() const override { return initialEditModeGrip(); }
|
||||
|
|
|
@ -221,11 +221,6 @@ protected:
|
|||
virtual mu::engraving::AccessibleItem* createAccessible();
|
||||
|
||||
public:
|
||||
enum class EditBehavior {
|
||||
SelectOnly,
|
||||
Edit,
|
||||
};
|
||||
|
||||
virtual ~EngravingItem();
|
||||
|
||||
virtual void setupAccessible();
|
||||
|
@ -392,6 +387,7 @@ public:
|
|||
QVector<mu::LineF> genericDragAnchorLines() const;
|
||||
|
||||
virtual bool isEditable() const { return !flag(ElementFlag::GENERATED); }
|
||||
virtual bool needStartEditingAfterSelecting() const { return false; }
|
||||
|
||||
virtual void startEdit(EditData&);
|
||||
virtual bool edit(EditData&);
|
||||
|
@ -409,7 +405,6 @@ public:
|
|||
/** Returns anchor lines displayed while dragging element's grip in canvas coordinates. */
|
||||
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 Grip initialEditModeGrip() const { return Grip::NO_GRIP; }
|
||||
virtual Grip defaultGrip() const { return Grip::NO_GRIP; }
|
||||
|
|
|
@ -88,7 +88,7 @@ public:
|
|||
ImageType getImageType() const { return imageType; }
|
||||
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; }
|
||||
Grip initialEditModeGrip() const override { return Grip(1); }
|
||||
Grip defaultGrip() const override { return Grip(1); }
|
||||
|
|
|
@ -65,7 +65,7 @@ public:
|
|||
|
||||
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; }
|
||||
Grip initialEditModeGrip() const override { return Grip::END; }
|
||||
Grip defaultGrip() const override { return Grip::MIDDLE; }
|
||||
|
|
|
@ -125,7 +125,7 @@ public:
|
|||
UP& ups(Grip i) { return _ups[int(i)]; }
|
||||
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); }
|
||||
Grip initialEditModeGrip() const override { return Grip::END; }
|
||||
Grip defaultGrip() const override { return Grip::DRAG; }
|
||||
|
|
|
@ -78,7 +78,7 @@ public:
|
|||
void setGap(Millimetre sp);
|
||||
Millimetre gap() const { return _gap; }
|
||||
|
||||
EditBehavior normalModeEditBehavior() const override { return EditBehavior::Edit; }
|
||||
bool needStartEditingAfterSelecting() const override { return true; }
|
||||
int gripsCount() const override { return 1; }
|
||||
Grip initialEditModeGrip() const override { return Grip::START; }
|
||||
Grip defaultGrip() const override { return Grip::START; }
|
||||
|
|
|
@ -76,7 +76,7 @@ public:
|
|||
mu::PointF flagPosition() const;
|
||||
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; }
|
||||
Grip initialEditModeGrip() 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);
|
||||
}
|
||||
add(b);
|
||||
|
||||
if (bi->selected()) {
|
||||
score()->select(b, SelectType::ADD);
|
||||
}
|
||||
|
||||
b->setStaffSpan(firstStaff, lastStaff);
|
||||
|
||||
return b;
|
||||
}
|
||||
|
||||
|
|
|
@ -65,7 +65,7 @@ public:
|
|||
Grip initialEditModeGrip() const override;
|
||||
Grip defaultGrip() const override;
|
||||
|
||||
EditBehavior normalModeEditBehavior() const override { return EditBehavior::SelectOnly; }
|
||||
bool needStartEditingAfterSelecting() const override { return false; }
|
||||
};
|
||||
} // namespace Ms
|
||||
#endif
|
||||
|
|
|
@ -155,7 +155,7 @@ public:
|
|||
|
||||
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; }
|
||||
Grip initialEditModeGrip() const override { return Grip::END; }
|
||||
Grip defaultGrip() const override { return Grip::START; }
|
||||
|
|
|
@ -233,8 +233,6 @@ void AbstractInspectorModel::onPropertyValueChanged(const Ms::Pid pid, const QVa
|
|||
|
||||
updateNotation();
|
||||
endCommand();
|
||||
|
||||
emit elementsModified();
|
||||
}
|
||||
|
||||
void AbstractInspectorModel::updateProperties()
|
||||
|
|
|
@ -150,7 +150,6 @@ public slots:
|
|||
signals:
|
||||
void titleChanged();
|
||||
|
||||
void elementsModified();
|
||||
void modelReseted();
|
||||
void isEmptyChanged();
|
||||
|
||||
|
|
|
@ -47,9 +47,6 @@ public:
|
|||
QHash<int, QByteArray> roleNames() const override;
|
||||
int columnCount(const QModelIndex& parent = QModelIndex()) const override;
|
||||
|
||||
signals:
|
||||
void elementsModified();
|
||||
|
||||
private:
|
||||
enum RoleNames {
|
||||
InspectorSectionModelRole = Qt::UserRole + 1
|
||||
|
|
|
@ -2740,13 +2740,9 @@ void NotationInteraction::startEditElement(EngravingItem* element)
|
|||
}
|
||||
|
||||
if (element->isTextBase()) {
|
||||
startEditText(element, PointF());
|
||||
} else if (m_editData.grips > 1) {
|
||||
startEditGrip(element, Ms::Grip::END);
|
||||
|
||||
if (m_editData.element->generated()) {
|
||||
m_editData.element = nullptr;
|
||||
}
|
||||
startEditText(element);
|
||||
} else if (element->hasGrips()) {
|
||||
startEditGrip(element, element->defaultGrip());
|
||||
} else if (element->isEditable()) {
|
||||
element->startEdit(m_editData);
|
||||
m_editData.element = element;
|
||||
|
|
|
@ -505,7 +505,7 @@ void NotationViewInputController::mousePressEvent(QMouseEvent* event)
|
|||
if (viewInteraction()->isHitGrip(logicPos)) {
|
||||
viewInteraction()->startEditGrip(logicPos);
|
||||
return;
|
||||
} else if (hitElement->hasGrips()) {
|
||||
} else if (hitElement->hasGrips() && hitElement->needStartEditingAfterSelecting()) {
|
||||
viewInteraction()->startEditGrip(hitElement, hitElement->defaultGrip());
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue