Skip to content

Commit

Permalink
fix #48561 Crash when toggling visibility of a line break over a mult…
Browse files Browse the repository at this point in the history
…imeasure rest
  • Loading branch information
wschweer committed Feb 25, 2015
1 parent 781c5b7 commit 94ad084
Show file tree
Hide file tree
Showing 7 changed files with 157 additions and 4 deletions.
22 changes: 18 additions & 4 deletions libmscore/layout.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1920,15 +1920,29 @@ void Score::createMMRests()
t = lm->endBarLineType();
mmr->setEndBarLineType(t, false, lm->endBarLineVisible(), lm->endBarLineColor());
mmr->setRepeatFlags(m->repeatFlags() | lm->repeatFlags());
mmr->clearElements();

ElementList oldList = mmr->takeElements();
ElementList newList = lm->el();

for (Element* e : m->el()) {
if (e->type() == Element::Type::MARKER)
newList.append(e);
}
for (Element* e : newList) {
bool found = false;
for (Element* ee : oldList) {
if (ee->type() == e->type()) {
mmr->add(ee);
oldList.removeOne(ee);
found = true;
break;
}
}
if (!found)
mmr->add(e->clone());
}

for (Element* e : lm->el())
mmr->add(e->clone());
for (Element* e : oldList)
delete e;

Segment* s = mmr->undoGetSegment(Segment::Type::ChordRest, m->tick());
for (int staffIdx = 0; staffIdx < _staves.size(); ++staffIdx) {
Expand Down
11 changes: 11 additions & 0 deletions libmscore/measurebase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,17 @@ void MeasureBase::clearElements()
_el.clear();
}

//---------------------------------------------------------
// takeElements
//---------------------------------------------------------

ElementList MeasureBase::takeElements()
{
ElementList l = _el;
_el.clear();
return l;
}

//---------------------------------------------------------
// setScore
//---------------------------------------------------------
Expand Down
1 change: 1 addition & 0 deletions libmscore/measurebase.h
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@ class MeasureBase : public Element {
virtual bool setProperty(P_ID propertyId, const QVariant&) override;

void clearElements();
ElementList takeElements();
};


Expand Down
1 change: 1 addition & 0 deletions mscore/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ QT5_WRAP_UI (ui_headers
inspector/inspector_ambitus.ui
inspector/inspector_empty.ui
inspector/inspector_fret.ui
inspector/inspector_break.ui
${SCRIPT_UI}
)

Expand Down
18 changes: 18 additions & 0 deletions mscore/inspector/inspector.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,9 @@ void Inspector::setElements(const QList<Element*>& l)
case Element::Type::FRET_DIAGRAM:
ie = new InspectorFret(this);
break;
case Element::Type::LAYOUT_BREAK:
ie = new InspectorBreak(this);
break;
default:
if (_element->isText())
ie = new InspectorText(this);
Expand Down Expand Up @@ -318,6 +321,21 @@ InspectorElement::InspectorElement(QWidget* parent)
mapSignals();
}

//---------------------------------------------------------
// InspectorBreak
//---------------------------------------------------------

InspectorBreak::InspectorBreak(QWidget* parent)
: InspectorBase(parent)
{
b.setupUi(addWidget());

iList = { // currently empty
};

mapSignals();
}

//---------------------------------------------------------
// InspectorVBox
//---------------------------------------------------------
Expand Down
13 changes: 13 additions & 0 deletions mscore/inspector/inspector.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

#include "inspectorBase.h"
#include "ui_inspector_element.h"
#include "ui_inspector_break.h"
#include "ui_inspector_vbox.h"
#include "ui_inspector_hbox.h"
#include "ui_inspector_articulation.h"
Expand Down Expand Up @@ -63,6 +64,18 @@ class InspectorElement : public InspectorBase {
InspectorElement(QWidget* parent);
};

//---------------------------------------------------------
// InspectorBreak
//---------------------------------------------------------

class InspectorBreak : public InspectorBase {
Q_OBJECT
Ui::InspectorBreak b;

public:
InspectorBreak(QWidget* parent);
};

//---------------------------------------------------------
// InspectorVBox
//---------------------------------------------------------
Expand Down
95 changes: 95 additions & 0 deletions mscore/inspector/inspector_break.ui
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>InspectorBreak</class>
<widget class="QWidget" name="InspectorBreak">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>310</width>
<height>95</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string/>
</property>
<property name="accessibleName">
<string>Element Inspector</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="sizeConstraint">
<enum>QLayout::SetNoConstraint</enum>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="elementName">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Layout Break</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::HLine</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
<property name="lineWidth">
<number>1</number>
</property>
</widget>
</item>
<item>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>3</number>
</property>
<property name="rightMargin">
<number>3</number>
</property>
<property name="horizontalSpacing">
<number>3</number>
</property>
<property name="verticalSpacing">
<number>0</number>
</property>
</layout>
</item>
</layout>
</widget>
<resources>
<include location="../musescore.qrc"/>
</resources>
<connections/>
</ui>

0 comments on commit 94ad084

Please sign in to comment.