fix #276869: Adding barline with ctrl+doubleclick does not create a split.

This commit is contained in:
Matt McClinch 2018-10-10 12:55:23 -04:00
parent 4e30c278eb
commit 6708adfeb5
5 changed files with 32 additions and 19 deletions

View file

@ -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
//--------------------------------------------------------- //---------------------------------------------------------

View file

@ -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; }
}; };

View file

@ -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;

View file

@ -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());
} }
//--------------------------------------------------------- //---------------------------------------------------------

View file

@ -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;