fix #276869: Adding barline with ctrl+doubleclick does not create a split.
This commit is contained in:
parent
4e30c278eb
commit
6708adfeb5
5 changed files with 32 additions and 19 deletions
|
@ -1786,6 +1786,18 @@ void EditData::init()
|
||||||
clearData();
|
clearData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------
|
||||||
|
// control
|
||||||
|
//---------------------------------------------------------
|
||||||
|
|
||||||
|
bool EditData::control(bool textEditing) const
|
||||||
|
{
|
||||||
|
if (textEditing)
|
||||||
|
return modifiers & CONTROL_MODIFIER;
|
||||||
|
else
|
||||||
|
return modifiers & Qt::ControlModifier;
|
||||||
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------
|
//---------------------------------------------------------
|
||||||
// clearData
|
// clearData
|
||||||
//---------------------------------------------------------
|
//---------------------------------------------------------
|
||||||
|
|
|
@ -131,7 +131,7 @@ class EditData {
|
||||||
|
|
||||||
ElementEditData* getData(const Element*) const;
|
ElementEditData* getData(const Element*) const;
|
||||||
void addData(ElementEditData*);
|
void addData(ElementEditData*);
|
||||||
bool control() const { return modifiers & CONTROL_MODIFIER; }
|
bool control(bool textEditing = false) const;
|
||||||
bool shift() const { return modifiers & Qt::ShiftModifier; }
|
bool shift() const { return modifiers & Qt::ShiftModifier; }
|
||||||
bool isStartEndGrip() { return curGrip == Grip::START || curGrip == Grip::END; }
|
bool isStartEndGrip() { return curGrip == Grip::START || curGrip == Grip::END; }
|
||||||
};
|
};
|
||||||
|
|
|
@ -30,9 +30,10 @@ bool ScoreView::editKeyLyrics()
|
||||||
{
|
{
|
||||||
Q_ASSERT(editData.element->isLyrics());
|
Q_ASSERT(editData.element->isLyrics());
|
||||||
|
|
||||||
|
const bool textEditing = true;
|
||||||
switch (editData.key) {
|
switch (editData.key) {
|
||||||
case Qt::Key_Space:
|
case Qt::Key_Space:
|
||||||
if (!editData.control()) {
|
if (!editData.control(textEditing)) {
|
||||||
if (editData.s == "_")
|
if (editData.s == "_")
|
||||||
lyricsUnderscore();
|
lyricsUnderscore();
|
||||||
else // TODO: shift+tab events are filtered by qt
|
else // TODO: shift+tab events are filtered by qt
|
||||||
|
@ -44,7 +45,7 @@ bool ScoreView::editKeyLyrics()
|
||||||
|
|
||||||
case Qt::Key_Left:
|
case Qt::Key_Left:
|
||||||
case Qt::Key_Right:
|
case Qt::Key_Right:
|
||||||
if (!editData.control() && editData.element->edit(editData))
|
if (!editData.control(textEditing) && editData.element->edit(editData))
|
||||||
mscore->textTools()->updateTools(editData);
|
mscore->textTools()->updateTools(editData);
|
||||||
else {
|
else {
|
||||||
bool kl = editData.key == Qt::Key_Left;
|
bool kl = editData.key == Qt::Key_Left;
|
||||||
|
@ -62,7 +63,7 @@ bool ScoreView::editKeyLyrics()
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Qt::Key_Minus:
|
case Qt::Key_Minus:
|
||||||
if (editData.control()) {
|
if (editData.control(textEditing)) {
|
||||||
// change into normal minus
|
// change into normal minus
|
||||||
editData.modifiers &= ~CONTROL_MODIFIER;
|
editData.modifiers &= ~CONTROL_MODIFIER;
|
||||||
return false;
|
return false;
|
||||||
|
@ -72,7 +73,7 @@ bool ScoreView::editKeyLyrics()
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Qt::Key_Underscore:
|
case Qt::Key_Underscore:
|
||||||
if (editData.control()) {
|
if (editData.control(textEditing)) {
|
||||||
// change into normal underscore
|
// change into normal underscore
|
||||||
editData.modifiers = 0; // &= ~CONTROL_MODIFIER;
|
editData.modifiers = 0; // &= ~CONTROL_MODIFIER;
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -400,13 +400,13 @@ void Palette::mouseMoveEvent(QMouseEvent* ev)
|
||||||
// applyDrop
|
// applyDrop
|
||||||
//---------------------------------------------------------
|
//---------------------------------------------------------
|
||||||
|
|
||||||
static void applyDrop(Score* score, ScoreView* viewer, Element* target, Element* e, QPointF pt = QPointF())
|
static void applyDrop(Score* score, ScoreView* viewer, Element* target, Element* e, Qt::KeyboardModifiers modifiers, QPointF pt = QPointF())
|
||||||
{
|
{
|
||||||
EditData dropData = viewer->getEditData();
|
EditData dropData = viewer->getEditData();
|
||||||
// EditData dropData;
|
// EditData dropData;
|
||||||
dropData.pos = pt.isNull() ? target->pagePos() : pt;
|
dropData.pos = pt.isNull() ? target->pagePos() : pt;
|
||||||
dropData.dragOffset = QPointF();
|
dropData.dragOffset = QPointF();
|
||||||
dropData.modifiers = 0;
|
dropData.modifiers = modifiers;
|
||||||
dropData.element = e;
|
dropData.element = e;
|
||||||
|
|
||||||
if (target->acceptDrop(dropData)) {
|
if (target->acceptDrop(dropData)) {
|
||||||
|
@ -434,7 +434,7 @@ static void applyDrop(Score* score, ScoreView* viewer, Element* target, Element*
|
||||||
// applyPaletteElement
|
// applyPaletteElement
|
||||||
//---------------------------------------------------------
|
//---------------------------------------------------------
|
||||||
|
|
||||||
void Palette::applyPaletteElement(PaletteCell* cell)
|
void Palette::applyPaletteElement(PaletteCell* cell, Qt::KeyboardModifiers modifiers)
|
||||||
{
|
{
|
||||||
Score* score = mscore->currentScore();
|
Score* score = mscore->currentScore();
|
||||||
if (score == 0)
|
if (score == 0)
|
||||||
|
@ -480,7 +480,7 @@ void Palette::applyPaletteElement(PaletteCell* cell)
|
||||||
e = toChord(e)->upNote();
|
e = toChord(e)->upNote();
|
||||||
// use voice of element being added to (otherwise we can might corrupt the measure)
|
// use voice of element being added to (otherwise we can might corrupt the measure)
|
||||||
element->setTrack(e->voice());
|
element->setTrack(e->voice());
|
||||||
applyDrop(score, viewer, e, element);
|
applyDrop(score, viewer, e, element, modifiers);
|
||||||
// continue in same track
|
// continue in same track
|
||||||
score->inputState().setTrack(e->track());
|
score->inputState().setTrack(e->track());
|
||||||
}
|
}
|
||||||
|
@ -514,7 +514,7 @@ void Palette::applyPaletteElement(PaletteCell* cell)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for (Element* e : sel.elements())
|
for (Element* e : sel.elements())
|
||||||
applyDrop(score, viewer, e, element);
|
applyDrop(score, viewer, e, element, modifiers);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (sel.isRange()) {
|
else if (sel.isRange()) {
|
||||||
|
@ -538,7 +538,7 @@ void Palette::applyPaletteElement(PaletteCell* cell)
|
||||||
QRectF r = m->staffabbox(sel.staffStart());
|
QRectF r = m->staffabbox(sel.staffStart());
|
||||||
QPointF pt(r.x() + r.width() * .5, r.y() + r.height() * .5);
|
QPointF pt(r.x() + r.width() * .5, r.y() + r.height() * .5);
|
||||||
pt += m->system()->page()->pos();
|
pt += m->system()->page()->pos();
|
||||||
applyDrop(score, viewer, m, element, pt);
|
applyDrop(score, viewer, m, element, modifiers, pt);
|
||||||
if (m == last)
|
if (m == last)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -618,26 +618,26 @@ void Palette::applyPaletteElement(PaletteCell* cell)
|
||||||
}
|
}
|
||||||
if (oelement) {
|
if (oelement) {
|
||||||
if (e2) {
|
if (e2) {
|
||||||
applyDrop(score, viewer, e2, oelement);
|
applyDrop(score, viewer, e2, oelement, modifiers);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
QRectF r = m2->staffabbox(i);
|
QRectF r = m2->staffabbox(i);
|
||||||
QPointF pt(r.x() + r.width() * .5, r.y() + r.height() * .5);
|
QPointF pt(r.x() + r.width() * .5, r.y() + r.height() * .5);
|
||||||
pt += m2->system()->page()->pos();
|
pt += m2->system()->page()->pos();
|
||||||
applyDrop(score, viewer, m2, oelement, pt);
|
applyDrop(score, viewer, m2, oelement, modifiers, pt);
|
||||||
}
|
}
|
||||||
delete oelement;
|
delete oelement;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// apply new clef/keysig/timesig
|
// apply new clef/keysig/timesig
|
||||||
if (e1) {
|
if (e1) {
|
||||||
applyDrop(score, viewer, e1, element);
|
applyDrop(score, viewer, e1, element, modifiers);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
QRectF r = m1->staffabbox(i);
|
QRectF r = m1->staffabbox(i);
|
||||||
QPointF pt(r.x() + r.width() * .5, r.y() + r.height() * .5);
|
QPointF pt(r.x() + r.width() * .5, r.y() + r.height() * .5);
|
||||||
pt += m1->system()->page()->pos();
|
pt += m1->system()->page()->pos();
|
||||||
applyDrop(score, viewer, m1, element, pt);
|
applyDrop(score, viewer, m1, element, modifiers, pt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -667,12 +667,12 @@ void Palette::applyPaletteElement(PaletteCell* cell)
|
||||||
if (e->isChord()) {
|
if (e->isChord()) {
|
||||||
Chord* chord = toChord(e);
|
Chord* chord = toChord(e);
|
||||||
for (Note* n : chord->notes())
|
for (Note* n : chord->notes())
|
||||||
applyDrop(score, viewer, n, element);
|
applyDrop(score, viewer, n, element, modifiers);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// do not apply articulation to barline in a range selection
|
// do not apply articulation to barline in a range selection
|
||||||
if (!e->isBarLine() || !element->isArticulation())
|
if (!e->isBarLine() || !element->isArticulation())
|
||||||
applyDrop(score, viewer, e, element);
|
applyDrop(score, viewer, e, element, modifiers);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -745,7 +745,7 @@ void Palette::mouseDoubleClickEvent(QMouseEvent* ev)
|
||||||
if (sel.isNone())
|
if (sel.isNone())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
applyPaletteElement(cellAt(i));
|
applyPaletteElement(cellAt(i), ev->modifiers());
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------
|
//---------------------------------------------------------
|
||||||
|
|
|
@ -137,7 +137,7 @@ class Palette : public QWidget {
|
||||||
virtual void leaveEvent(QEvent*) override;
|
virtual void leaveEvent(QEvent*) override;
|
||||||
virtual bool event(QEvent*) override;
|
virtual bool event(QEvent*) override;
|
||||||
virtual void resizeEvent(QResizeEvent*) override;
|
virtual void resizeEvent(QResizeEvent*) override;
|
||||||
void applyPaletteElement(PaletteCell* cell);
|
void applyPaletteElement(PaletteCell* cell, Qt::KeyboardModifiers modifiers = 0);
|
||||||
|
|
||||||
virtual void dragEnterEvent(QDragEnterEvent*) override;
|
virtual void dragEnterEvent(QDragEnterEvent*) override;
|
||||||
virtual void dragMoveEvent(QDragMoveEvent*) override;
|
virtual void dragMoveEvent(QDragMoveEvent*) override;
|
||||||
|
|
Loading…
Reference in a new issue