diff --git a/libmscore/score.cpp b/libmscore/score.cpp index fb131a4..d34da4f 100644 --- a/libmscore/score.cpp +++ b/libmscore/score.cpp @@ -3049,7 +3049,7 @@ void Score::lassoSelect(const QRectF& bbox) // lassoSelectEnd //--------------------------------------------------------- -void Score::lassoSelectEnd() +void Score::lassoSelectEnd(bool range) { int noteRestCount = 0; Segment* startSegment = 0; @@ -3065,6 +3065,11 @@ void Score::lassoSelectEnd() } _selection.setState(SelState::LIST); + if (!range) { + _updateAll = true; + return; + } + foreach(const Element* e, _selection.elements()) { if (e->type() != Element::Type::NOTE && e->type() != Element::Type::REST) continue; diff --git a/libmscore/score.h b/libmscore/score.h index 489da22..220b91c 100644 --- a/libmscore/score.h +++ b/libmscore/score.h @@ -777,7 +777,7 @@ class Score : public QObject { Text* getText(TextStyleType subtype); void lassoSelect(const QRectF&); - void lassoSelectEnd(); + void lassoSelectEnd(bool range); Page* searchPage(const QPointF&) const; QList searchSystem(const QPointF& p) const; diff --git a/mscore/scoreview.cpp b/mscore/scoreview.cpp index 4a8e6a9..7e074f0 100644 --- a/mscore/scoreview.cpp +++ b/mscore/scoreview.cpp @@ -808,12 +808,17 @@ ScoreView::ScoreView(QWidget* parent) // setup lasso state s = states[LASSO]; - s->assignProperty(this, "cursor", QCursor(Qt::ArrowCursor)); - cl = new QEventTransition(this, QEvent::MouseButtonRelease); // ->normal + s->assignProperty(this, "cursor", QCursor(Qt::CrossCursor)); + s->addTransition(new class DragLassoTransition(this)); // drag + QMouseEventTransition* mt = new QMouseEventTransition(this, QEvent::MouseButtonRelease, Qt::LeftButton); + mt->setModifierMask(Qt::ControlModifier); + mt->setTargetState(states[NORMAL]); + connect(mt, SIGNAL(triggered()), SLOT(endLassoList())); + s->addTransition(mt); + cl = new QMouseEventTransition(this, QEvent::MouseButtonRelease, Qt::LeftButton); cl->setTargetState(states[NORMAL]); + connect(cl, SIGNAL(triggered()), SLOT(endLassoRange())); s->addTransition(cl); - s->addTransition(new class DragLassoTransition(this)); // drag - connect(s, SIGNAL(exited()), SLOT(endLasso())); //----------------------setup note entry state s = states[NOTE_ENTRY]; @@ -3477,15 +3482,25 @@ void ScoreView::doDragLasso(QMouseEvent* ev) // endLasso //--------------------------------------------------------- -void ScoreView::endLasso() +void ScoreView::endLasso(bool range) { _score->addRefresh(lasso->canvasBoundingRect()); lasso->setRect(QRectF()); - _score->lassoSelectEnd(); + _score->lassoSelectEnd(range); _score->end(); mscore->endCmd(); } +void ScoreView::endLassoList() + { + endLasso(false); + } + +void ScoreView::endLassoRange() + { + endLasso(true); + } + //--------------------------------------------------------- // deselectAll //--------------------------------------------------------- diff --git a/mscore/scoreview.h b/mscore/scoreview.h index e402753..a737641 100644 --- a/mscore/scoreview.h +++ b/mscore/scoreview.h @@ -287,7 +287,9 @@ class ScoreView : public QWidget, public MuseScoreView { void startNoteEntry(); void endNoteEntry(); - void endLasso(); + void endLasso(bool range); + void endLassoList(); + void endLassoRange(); void deselectAll(); void editCopy();