1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
//=============================================================================
// MuseScore
// Music Composition & Notation
//
// Copyright (C) 2011 Werner Schweer
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2
// as published by the Free Software Foundation and appearing in
// the file LICENCE.GPL
//=============================================================================
#include "scoreview.h"
#include "libmscore/score.h"
#include "musescore.h"
#include "libmscore/staff.h"
#include "libmscore/utils.h"
#include "libmscore/undo.h"
#include "libmscore/part.h"
#include "tourhandler.h"
namespace Ms {
//---------------------------------------------------------
// startDrag
//---------------------------------------------------------
void ScoreView::startDrag()
{
editData.grips = 0;
editData.clearData();
editData.startMove -= editData.element->offset();
_score->startCmd();
for (Element* e : _score->selection().elements())
e->startDrag(editData);
}
//---------------------------------------------------------
// doDragElement
//---------------------------------------------------------
void ScoreView::doDragElement(QMouseEvent* ev)
{
QPointF delta = toLogical(ev->pos()) - editData.startMove;
TourHandler::startTour("autoplace-tour");
QPointF pt(delta);
if (qApp->keyboardModifiers() == Qt::ShiftModifier)
pt.setX(editData.element->offset().x());
else if (qApp->keyboardModifiers() == Qt::ControlModifier)
pt.setY(editData.element->offset().y());
editData.hRaster = mscore->hRaster();
editData.vRaster = mscore->vRaster();
editData.delta = pt;
editData.pos = toLogical(ev->pos());
for (Element* e : _score->selection().elements())
_score->addRefresh(e->drag(editData));
Element* e = _score->getSelectedElement();
if (e) {
if (_score->playNote()) {
mscore->play(e);
_score->setPlayNote(false);
}
QLineF anchor = e->dragAnchor();
if (!anchor.isNull())
setDropAnchor(anchor);
else
setDropTarget(0); // this also resets dropAnchor
}
updateGrips();
_score->update();
}
//---------------------------------------------------------
// endDrag
//---------------------------------------------------------
void ScoreView::endDrag()
{
for (Element* e : _score->selection().elements()) {
e->endDrag(editData);
e->triggerLayout();
}
setDropTarget(0); // this also resets dropAnchor
_score->endCmd();
}
}
|