Skip to content

Commit

Permalink
fix #126546: strange selection behaviour for parts
Browse files Browse the repository at this point in the history
  • Loading branch information
wschweer committed Sep 29, 2016
1 parent e45f5a6 commit 4df2571
Show file tree
Hide file tree
Showing 6 changed files with 39 additions and 43 deletions.
12 changes: 8 additions & 4 deletions libmscore/scorefile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -915,11 +915,15 @@ Score::FileError MasterScore::read1(XmlReader& e, bool ignoreVersionError)
if (mscVersion() < 114)
return FileError::FILE_TOO_OLD;
}
Score::FileError error;
if (mscVersion() == 114)
return read114(e);
if (mscVersion() <= 206)
return read206(e);
return read300(e);
error = read114(e);
else if (mscVersion() <= 206)
error = read206(e);
else
error = read300(e);
setExcerptsChanged(false);
return error;
}
else
e.unknown();
Expand Down
2 changes: 1 addition & 1 deletion mscore/file.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -760,8 +760,8 @@ void MuseScore::newFile()
xs->setExcerpt(x);
score->excerpts().append(x);
createExcerpt(x);
score->setExcerptsChanged(true);
}
score->setExcerptsChanged(true);
}

//---------------------------------------------------------
Expand Down
42 changes: 17 additions & 25 deletions mscore/musescore.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1917,6 +1917,7 @@ void MuseScore::dropEvent(QDropEvent* event)
//---------------------------------------------------------
// changeEvent
//---------------------------------------------------------

void MuseScore::changeEvent(QEvent *e)
{
QMainWindow::changeEvent(e);
Expand Down Expand Up @@ -4027,30 +4028,6 @@ const char* stateName(ScoreState s)
}
}

//---------------------------------------------------------
// excerptsChanged
//---------------------------------------------------------

void MuseScore::excerptsChanged(MasterScore* s)
{
if (tab2) {
// ScoreView* v = tab2->view();
// if (v && v->score() == s) {
tab2->updateExcerpts();
// }
}
if (tab1) {
ScoreView* v = tab1->view();
if (v && v->score()->masterScore() == s) {
tab1->updateExcerpts();
}
else if (v == 0) {
tab1->setExcerpt(0);
tab1->updateExcerpts();
}
}
}

//---------------------------------------------------------
// scorePageLayoutChanged
//---------------------------------------------------------
Expand Down Expand Up @@ -4573,7 +4550,22 @@ void MuseScore::endCmd()
}
MasterScore* ms = cs->masterScore();
if (ms->excerptsChanged()) {
excerptsChanged(ms);
if (tab2) {
// ScoreView* v = tab2->view();
// if (v && v->score() == ms) {
tab2->updateExcerpts();
// }
}
if (tab1) {
ScoreView* v = tab1->view();
if (v && v->score()->masterScore() == ms) {
tab1->updateExcerpts();
}
else if (v == 0) {
tab1->setExcerpt(0);
tab1->updateExcerpts();
}
}
ms->setExcerptsChanged(false);
}
if (ms->instrumentsChanged()) {
Expand Down
1 change: 0 additions & 1 deletion mscore/musescore.h
Original file line number Diff line number Diff line change
Expand Up @@ -605,7 +605,6 @@ class MuseScore : public QMainWindow, public MuseScoreCore {
int midiRecordId() const { return _midiRecordId; }
void setAdvancedPalette();
void setBasicPalette();
void excerptsChanged(MasterScore*);
void scorePageLayoutChanged();
bool processMidiRemote(MidiRemoteType type, int data, int value);
ScoreTab* getTab1() const { return tab1; }
Expand Down
12 changes: 7 additions & 5 deletions mscore/scoretab.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//=============================================================================

#include "shortcut.h"
#include "musescore.h"
#include "config.h"
Expand Down Expand Up @@ -240,6 +241,7 @@ void ScoreTab::updateExcerpts()
ScoreView* v = view(idx);
if (!v)
return;

Score* score = v->score()->masterScore();
clearTab2();
//delete all scoreviews for parts, especially for the deleted ones
Expand All @@ -258,17 +260,17 @@ void ScoreTab::updateExcerpts()
if (!excerpts.isEmpty()) {
tab2->blockSignals(true);
tab2->addTab(score->fileInfo()->completeBaseName().replace("&","&&"));
foreach(const Excerpt* excerpt, excerpts)
for (const Excerpt* excerpt : excerpts)
tab2->addTab(excerpt->partScore()->fileInfo()->completeBaseName().replace("&","&&"));
tab2->blockSignals(false);
tab2->setVisible(true);

setExcerpt(0);
}
else {
tab2->setVisible(false);
setExcerpt(0);
}
blockSignals(true);
setExcerpt(0);
blockSignals(false);
}

//---------------------------------------------------------
Expand All @@ -295,7 +297,7 @@ void ScoreTab::setExcerpt(int n)
}
if (!vs) {
vs = new QSplitter;
v = new ScoreView;
v = new ScoreView;
vs->addWidget(v);
v->setScore(score);
stack->addWidget(vs);
Expand Down
13 changes: 6 additions & 7 deletions mscore/scoreview.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3713,11 +3713,10 @@ void ScoreView::select(QMouseEvent* ev)
cloneElement(curElement);
return;
}
Element::Type type = curElement->type();
int dragStaffIdx = 0;
if (type == Element::Type::MEASURE) {
if (curElement->isMeasure()) {
System* dragSystem = (System*)(curElement->parent());
dragStaffIdx = getStaff(dragSystem, data.startMove);
dragStaffIdx = getStaff(dragSystem, data.startMove);
}
if ((ev->type() == QEvent::MouseButtonRelease) && ((!curElement->selected() || addSelect)))
return;
Expand All @@ -3734,7 +3733,7 @@ void ScoreView::select(QMouseEvent* ev)
else if (keyState & Qt::ShiftModifier)
st = SelectType::RANGE;
else if (keyState & Qt::ControlModifier) {
if (type == Element::Type::MEASURE)
if (curElement->isMeasure())
return;
if (curElement->selected()) {
if (ev->type() == QEvent::MouseButtonPress) {
Expand All @@ -3750,9 +3749,9 @@ void ScoreView::select(QMouseEvent* ev)
addSelect = true;
st = SelectType::ADD;
}
if (curElement && curElement->isKeySig() && (keyState != Qt::ControlModifier) && st == SelectType::SINGLE) {
if (curElement->isKeySig() && (keyState != Qt::ControlModifier) && st == SelectType::SINGLE) {
// special case: select for all staves
Segment* s = static_cast<Segment*>(curElement->parent());
Segment* s = toKeySig(curElement)->segment();
bool first = true;
for (int staffIdx = 0; staffIdx < _score->nstaves(); ++staffIdx) {
Element* e = s->element(staffIdx * VOICES);
Expand Down Expand Up @@ -3789,7 +3788,7 @@ bool ScoreView::mousePress(QMouseEvent* ev)
data.startMove = imatrix.map(QPointF(startMoveI));
curElement = elementNear(data.startMove);

if (curElement && curElement->type() == Element::Type::MEASURE) {
if (curElement && curElement->isMeasure()) {
System* dragSystem = (System*)(curElement->parent());
int dragStaffIdx = getStaff(dragSystem, data.startMove);
if (dragStaffIdx < 0)
Expand Down

0 comments on commit 4df2571

Please sign in to comment.