Skip to content

Commit

Permalink
Merge pull request #5494 from mattmcclinch/297425-drag-multiple
Browse files Browse the repository at this point in the history
fix #281957, fix #297425: Display of beam properties and Dragging multiple selected elements
  • Loading branch information
dmitrio95 committed Dec 24, 2019
2 parents 21222fb + 9cf489c commit 08cb101
Show file tree
Hide file tree
Showing 8 changed files with 44 additions and 28 deletions.
2 changes: 2 additions & 0 deletions mscore/editelement.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,8 @@ void ScoreView::updateGrips()

void ScoreView::startEditMode(Element* e)
{
if (score()->selection().elements().size() != 1)
score()->select(e);
if (!e || !e->isEditable()) {
qDebug("The element cannot be edited");
return;
Expand Down
34 changes: 20 additions & 14 deletions mscore/events.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -281,11 +281,14 @@ void ScoreView::mouseReleaseEvent(QMouseEvent* mouseEvent)
if (startTextEditingOnMouseRelease(mouseEvent))
break;

if (editData.startMove == editData.pos && clickOffElement) {
_score->deselectAll();
if (modifySelection) {
_score->select(elementToSelect);
modifySelection = false;
elementToSelect = nullptr;
_score->update();
mscore->endCmd();
}
break;
case ViewState::EDIT:
case ViewState::NOTE_ENTRY:
case ViewState::PLAY:
Expand All @@ -306,6 +309,8 @@ void ScoreView::mouseReleaseEvent(QMouseEvent* mouseEvent)
void ScoreView::mousePressEventNormal(QMouseEvent* ev)
{
_score->masterScore()->cmdState().reset(); // DEBUG: should not be necessary
modifySelection = false;
elementToSelect = nullptr;

Qt::KeyboardModifiers keyState = ev->modifiers();
SelectType st = SelectType::SINGLE;
Expand Down Expand Up @@ -354,8 +359,14 @@ void ScoreView::mousePressEventNormal(QMouseEvent* ev)
}
}
}
if (e)
e->score()->select(e, st, -1);
if (e) {
if (!e->selected())
e->score()->select(e, st, -1);
else if (st != SelectType::ADD) {
modifySelection = true;
elementToSelect = e;
}
}
}
if (e && e->isNote()) {
e->score()->updateCapo();
Expand All @@ -365,7 +376,6 @@ void ScoreView::mousePressEventNormal(QMouseEvent* ev)
_score = e->score();
_score->setUpdateAll();
}
clickOffElement = false;
}
else {
// special case: check if measure is selected
Expand All @@ -381,17 +391,12 @@ void ScoreView::mousePressEventNormal(QMouseEvent* ev)
//TourHandler::startTour("select-tour");
_score->select(m, st, staffIdx);
_score->setUpdateAll();
clickOffElement = false;
}
else if (st == SelectType::ADD)
clickOffElement = false;
else
clickOffElement = true;
else if (st != SelectType::ADD)
modifySelection = true;
}
else if (st == SelectType::ADD)
clickOffElement = false;
else
clickOffElement = true;
else if (st != SelectType::ADD)
modifySelection = true;
}
_score->update();
mscore->endCmd();
Expand Down Expand Up @@ -566,6 +571,7 @@ void ScoreView::adjustCursorForTextEditing(QMouseEvent* mouseEvent)

void ScoreView::mouseMoveEvent(QMouseEvent* me)
{
modifySelection = false;
adjustCursorForTextEditing(me);

if (state != ViewState::NOTE_ENTRY && editData.buttons == Qt::NoButton)
Expand Down
7 changes: 3 additions & 4 deletions mscore/musescore.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2318,10 +2318,10 @@ void MuseScore::selectionChanged(SelState selectionState)
// chord rest
//---------------------------------------------------------

void MuseScore::updatePaletteBeamMode(bool unselect)
void MuseScore::updatePaletteBeamMode()
{
if (paletteWorkspace)
paletteWorkspace->updateCellsState(cs->selection(), unselect);
paletteWorkspace->updateCellsState(cs->selection());
}

//---------------------------------------------------------
Expand Down Expand Up @@ -5857,8 +5857,7 @@ void MuseScore::endCmd()
selectionChanged(SelState::NONE);
}
updateInspector();
if (cv)
updatePaletteBeamMode(cv->clickOffElement);
updatePaletteBeamMode();
#ifdef SCRIPT_INTERFACE
getPluginEngine()->endEndCmd(this);
#endif
Expand Down
2 changes: 1 addition & 1 deletion mscore/musescore.h
Original file line number Diff line number Diff line change
Expand Up @@ -595,7 +595,7 @@ class MuseScore : public QMainWindow, public MuseScoreCore {
void showPluginManager();

// void updateTabNames();
void updatePaletteBeamMode(bool unselect = false);
void updatePaletteBeamMode();
QProgressBar* showProgressBar();
void hideProgressBar();
void addRecentScore(Score*);
Expand Down
20 changes: 14 additions & 6 deletions mscore/palette/palettemodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -792,13 +792,21 @@ bool PaletteTreeModel::insertPalettePanel(std::unique_ptr<PalettePanel> pp, int
// PaletteTreeModel::updateCellsState
//---------------------------------------------------------

void PaletteTreeModel::updateCellsState(const Selection& sel, bool deactivateAll)
void PaletteTreeModel::updateCellsState(const Selection& sel)
{
const ChordRest* cr = sel.cr();
const IconType beamIconType = cr ? Beam::iconType(cr->beamMode()) : IconType::NONE;

if (!sel.isSingle() || !cr)
deactivateAll = true;
const ChordRest* cr = sel.firstChordRest();
const Beam::Mode bm = cr ? cr->beamMode() : Beam::Mode::NONE;
const IconType beamIconType = Beam::iconType(bm);
bool deactivateAll = !cr;

for (Element* e : sel.elements()) {
if (e->isNote())
e = e->parent();
if (e->isChordRest()) {
if (toChordRest(e)->beamMode() != bm)
deactivateAll = true;
}
}

const size_t npalettes = palettes().size();
for (size_t row = 0; row < npalettes; ++row) {
Expand Down
2 changes: 1 addition & 1 deletion mscore/palette/palettemodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ class PaletteTreeModel : public QAbstractItemModel {
PaletteCellPtr findCell(const QModelIndex& index);
bool insertPalettePanel(std::unique_ptr<PalettePanel> pp, int row, const QModelIndex& parent = QModelIndex());

void updateCellsState(const Selection&, bool deactivateAll);
void updateCellsState(const Selection&);
void retranslate();
};

Expand Down
2 changes: 1 addition & 1 deletion mscore/palette/paletteworkspace.h
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,7 @@ class PaletteWorkspace : public QObject {
void write(XmlWriter&) const;
bool read(XmlReader&);

void updateCellsState(const Selection& sel, bool deactivateAll) { userPalette->updateCellsState(sel, deactivateAll); }
void updateCellsState(const Selection& sel) { userPalette->updateCellsState(sel); }
void retranslate() { userPalette->retranslate(); masterPalette->retranslate(); defaultPalette->retranslate(); }
};

Expand Down
3 changes: 2 additions & 1 deletion mscore/scoreview.h
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,8 @@ class ScoreView : public QWidget, public MuseScoreView {

bool tripleClickPending = false;
bool popupActive = false;
bool modifySelection = false;
Element* elementToSelect = nullptr;

// Loop In/Out marks in the score
PositionCursor* _curLoopIn;
Expand Down Expand Up @@ -422,7 +424,6 @@ class ScoreView : public QWidget, public MuseScoreView {

virtual const QRect geometry() const override { return QWidget::geometry(); }

bool clickOffElement;
void updateGrips();
bool moveWhenInactive() const { return _moveWhenInactive; }
bool moveWhenInactive(bool move) { bool m = _moveWhenInactive; _moveWhenInactive = move; return m; }
Expand Down

0 comments on commit 08cb101

Please sign in to comment.