bool ScoreView::editElementDragTransition(QMouseEvent* ev) { data.startMove = toLogical(ev->pos()); data.lastPos = data.startMove; data.pos = data.startMove; data.view = this; Element* e = elementNear(data.startMove); if (e && (e == editObject) && (editObject->isText())) { if (editObject->mousePress(data.startMove, ev)) { _score->addRefresh(editObject->canvasBoundingRect()); _score->end(); } return true; } int i; qreal a = grip[0].width() * 1.0; for (i = 0; i < grips; ++i) { if (grip[i].adjusted(-a, -a, a, a).contains(data.startMove)) { curGrip = i; data.curGrip = i; updateGrips(); score()->end(); break; } } return i != grips; }
void ScoreView::doDragEdit(QMouseEvent* ev) { data.lastPos = data.pos; data.pos = toLogical(ev->pos()); data.modifiers = qApp->keyboardModifiers(); if (!editObject->isBarLine()) { // on other elements, BOTH Ctrl (vert. constrain) and Shift (horiz. constrain) modifiers = NO constrain if (qApp->keyboardModifiers() == Qt::ShiftModifier) data.pos.setX(data.lastPos.x()); if (qApp->keyboardModifiers() == Qt::ControlModifier) data.pos.setY(data.lastPos.y()); } data.delta = data.pos - data.lastPos; score()->addRefresh(editObject->canvasBoundingRect()); if (editObject->isText()) { Text* text = static_cast<Text*>(editObject); text->dragTo(data.pos); } else { data.hRaster = false; data.vRaster = false; editObject->editDrag(data); updateGrips(); } QRectF r(editObject->canvasBoundingRect()); _score->addRefresh(r); _score->update(); }
void ScoreView::endDragEdit() { _score->addRefresh(editObject->canvasBoundingRect()); editObject->endEditDrag(); updateGrips(); // setDropTarget(0); // this also resets dropRectangle and dropAnchor _score->rebuildBspTree(); _score->addRefresh(editObject->canvasBoundingRect()); _score->end(); }
void ScoreView::endDragEdit() { _score->addRefresh(editObject->canvasBoundingRect()); editObject->endEditDrag(); setDropTarget(0); updateGrips(); _score->rebuildBspTree(); _score->addRefresh(editObject->canvasBoundingRect()); _score->end(); }
void ScoreView::startEdit() { _score->setLayoutAll(false); curElement = 0; setFocus(); if (!_score->undo()->active()) _score->startCmd(); editObject->startEdit(this, startMove); curGrip = -1; updateGrips(); _score->end(); }
void ScoreView::startEdit() { if (editObject->isTBox()) editObject = toTBox(editObject)->text(); curElement = 0; setFocus(); if (!_score->undoStack()->active()) _score->startCmd(); editObject->startEdit(this, data.startMove); curGrip = Grip::NO_GRIP; updateGrips(); _score->update(); }
void ScoreView::startEdit() { if (editObject->type() == Element::Type::TBOX) editObject = static_cast<TBox*>(editObject)->text(); _score->setLayoutAll(false); curElement = 0; setFocus(); if (!_score->undo()->active()) _score->startCmd(); editObject->startEdit(this, data.startMove); curGrip = Grip::NO_GRIP; updateGrips(); _score->end(); }
void ScoreView::doDragEdit(QMouseEvent* ev) { QPointF p = toLogical(ev->pos()); QPointF delta = p - startMove; if (qApp->keyboardModifiers() == Qt::ShiftModifier) { p.setX(0.0); delta.setX(0.0); } else if (qApp->keyboardModifiers() == Qt::ControlModifier) { if(editObject->type() == Element::BAR_LINE) BarLine::setCtrlDrag(true); else { p.setY(0.0); delta.setY(0.0); } } _score->setLayoutAll(false); score()->addRefresh(editObject->canvasBoundingRect()); if (editObject->isText()) { Text* text = static_cast<Text*>(editObject); text->dragTo(p); } else { EditData ed; ed.view = this; ed.curGrip = curGrip; ed.delta = delta; ed.pos = p; ed.hRaster = false; ed.vRaster = false; editObject->editDrag(ed); updateGrips(); startMove = p; } QRectF r(editObject->canvasBoundingRect()); _score->addRefresh(r); _score->update(); }
void ScoreView::doDragEdit(QMouseEvent* ev) { data.lastPos = data.pos; data.pos = toLogical(ev->pos()); // on bar lines, Ctrl (single bar line) and Shift (precision drag) modifiers can be active independently if (editObject->type() == Element::Type::BAR_LINE) { if (qApp->keyboardModifiers() & Qt::ShiftModifier) BarLine::setShiftDrag(true); if (qApp->keyboardModifiers() & Qt::ControlModifier) BarLine::setCtrlDrag(true); } // on other elements, BOTH Ctrl (vert. constrain) and Shift (horiz. constrain) modifiers = NO constrain else { if (qApp->keyboardModifiers() == Qt::ShiftModifier) data.pos.setX(data.lastPos.x()); if (qApp->keyboardModifiers() == Qt::ControlModifier) data.pos.setY(data.lastPos.y()); } data.delta = data.pos - data.lastPos; _score->setLayoutAll(false); score()->addRefresh(editObject->canvasBoundingRect()); if (editObject->isText()) { Text* text = static_cast<Text*>(editObject); text->dragTo(data.pos); } else { data.hRaster = false; data.vRaster = false; editObject->editDrag(data); updateGrips(); } QRectF r(editObject->canvasBoundingRect()); _score->addRefresh(r); _score->update(); }
void ScoreView::doDragEdit(QMouseEvent* ev) { data.lastPos = data.pos; data.pos = toLogical(ev->pos()); if (qApp->keyboardModifiers() == Qt::ShiftModifier) { if (editObject->type() == ElementType::BAR_LINE) BarLine::setShiftDrag(true); else data.pos.setX(data.lastPos.x()); } if (qApp->keyboardModifiers() == Qt::ControlModifier) { if (editObject->type() == ElementType::BAR_LINE) BarLine::setCtrlDrag(true); else data.pos.setY(data.lastPos.y()); } data.delta = data.pos - data.lastPos; _score->setLayoutAll(false); score()->addRefresh(editObject->canvasBoundingRect()); if (editObject->isText()) { Text* text = static_cast<Text*>(editObject); text->dragTo(data.pos); } else { data.hRaster = false; data.vRaster = false; editObject->editDrag(data); updateGrips(); } QRectF r(editObject->canvasBoundingRect()); _score->addRefresh(r); _score->update(); }
void ScoreView::editKey(QKeyEvent* ev) { int key = ev->key(); Qt::KeyboardModifiers modifiers = ev->modifiers(); QString s = ev->text(); if (MScore::debugMode) qDebug("keyPressEvent key 0x%02x(%c) mod 0x%04x <%s>\n", key, key, int(modifiers), qPrintable(s)); if (!editObject) return; if (editObject->type() == Element::LYRICS) { if (editKeyLyrics(ev)) { ev->accept(); return; } } else if (editObject->type() == Element::HARMONY) { /* if (key == Qt::Key_Tab || key == Qt::Key_Backtab) { harmonyTab(key == Qt::Key_Backtab ? true : (modifiers & Qt::ShiftModifier)); ev->accept(); return; } */ if (key == Qt::Key_Space && !(modifiers & CONTROL_MODIFIER)) { harmonyBeatsTab(true, modifiers & Qt::ShiftModifier); ev->accept(); return; } /* if (key == Qt::Key_Semicolon || key == Qt::Key_Colon) { harmonyBeatsTab(false, key == Qt::Key_Colon); ev->accept(); return; } if (key >= Qt::Key_1 && key <= Qt::Key_9 && (modifiers & CONTROL_MODIFIER)) { int ticks = (MScore::division >> 4) << (key - Qt::Key_1); harmonyTicksTab(ticks); ev->accept(); return; } */ } else if (editObject->type() == Element::FIGURED_BASS) { int found = false; if (key == Qt::Key_Space && !(modifiers & CONTROL_MODIFIER)) { figuredBassTab(false, modifiers & Qt::ShiftModifier); found = true; } /* if (key == Qt::Key_Tab || key == Qt::Key_Backtab) { figuredBassTab(true, key == Qt::Key_Backtab ? true : (modifiers & Qt::ShiftModifier) ); found = true; } if (key >= Qt::Key_1 && key <= Qt::Key_9 && (modifiers & CONTROL_MODIFIER)) { int ticks = (MScore::division >> 4) << (key - Qt::Key_1); figuredBassTicksTab(ticks); found = true; } */ if (found) { ev->accept(); return; } } if (!((modifiers & Qt::ShiftModifier) && (key == Qt::Key_Backtab))) { if (editObject->edit(this, curGrip, key, modifiers, s)) { if (editObject->isText()) mscore->textTools()->updateTools(); updateGrips(); ev->accept(); _score->update(); mscore->endCmd(); return; } if (editObject->isText() && (key == Qt::Key_Left || key == Qt::Key_Right)) { ev->accept(); _score->end(); mscore->endCmd(); //return; } } QPointF delta; qreal _spatium = editObject->spatium(); qreal xval, yval; if (editObject->type() == Element::BEAM) { xval = 0.25 * _spatium; if (modifiers & Qt::ControlModifier) xval = _spatium; else if (modifiers & Qt::AltModifier) xval = 4 * _spatium; } else { xval = MScore::nudgeStep * _spatium; if (modifiers & Qt::ControlModifier) xval = MScore::nudgeStep10 * _spatium; else if (modifiers & Qt::AltModifier) xval = MScore::nudgeStep50 * _spatium; } yval = xval; if (mscore->vRaster()) { qreal vRaster = _spatium / MScore::vRaster(); if (yval < vRaster) yval = vRaster; } if (mscore->hRaster()) { qreal hRaster = _spatium / MScore::hRaster(); if (xval < hRaster) xval = hRaster; } // TODO: if raster, then xval/yval should be multiple of raster switch (key) { case Qt::Key_Left: delta = QPointF(-xval, 0); break; case Qt::Key_Right: delta = QPointF(xval, 0); break; case Qt::Key_Up: delta = QPointF(0, -yval); break; case Qt::Key_Down: delta = QPointF(0, yval); break; default: ev->ignore(); return; } EditData ed; ed.curGrip = curGrip; ed.delta = delta; ed.view = this; ed.hRaster = mscore->hRaster(); ed.vRaster = mscore->vRaster(); if (curGrip >= 0) ed.pos = grip[curGrip].center() + delta; editObject->editDrag(ed); updateGrips(); _score->update(); mscore->endCmd(); ev->accept(); }
void ScoreView::editKey(QKeyEvent* ev) { int key = ev->key(); Qt::KeyboardModifiers modifiers = ev->modifiers(); QString s = ev->text(); bool ctrl = modifiers == Qt::ControlModifier; if (debugMode) printf("keyPressEvent key 0x%02x(%c) mod 0x%04x <%s>\n", key, key, int(modifiers), qPrintable(s)); if (!editObject) return; if (editObject->type() == LYRICS) { int found = false; if (key == Qt::Key_Space && !(modifiers & CONTROL_MODIFIER)) { // TODO: shift+tab events are filtered by qt lyricsTab(modifiers & Qt::ShiftModifier, true, false); found = true; } else if (key == Qt::Key_Left) { if (!ctrl && editObject->edit(this, curGrip, key, modifiers, s)) { _score->end(); mscore->endCmd(); } else lyricsTab(true, true, true); // go to previous lyrics found = true; } else if (key == Qt::Key_Right) { if (!ctrl && editObject->edit(this, curGrip, key, modifiers, s)) { _score->end(); mscore->endCmd(); } else lyricsTab(false, false, true); // go to next lyrics found = true; } else if (key == Qt::Key_Up) { lyricsUpDown(true, true); found = true; } else if (key == Qt::Key_Down) { lyricsUpDown(false, true); found = true; } else if (key == Qt::Key_Return) { lyricsReturn(); found = true; } else if (key == Qt::Key_Minus && !(modifiers & CONTROL_MODIFIER)) { lyricsMinus(); found = true; } else if (key == Qt::Key_Underscore) { if (modifiers & CONTROL_MODIFIER) { modifiers &= ~CONTROL_MODIFIER; s = "_"; } else { lyricsUnderscore(); found = true; } } if (found) { ev->accept(); return; } } if (editObject->type() == HARMONY) { if (key == Qt::Key_Space && !(modifiers & CONTROL_MODIFIER)) { chordTab(modifiers & Qt::ShiftModifier); ev->accept(); return; } } if (!((modifiers & Qt::ShiftModifier) && (key == Qt::Key_Backtab))) { if (editObject->edit(this, curGrip, key, modifiers, s)) { updateGrips(); ev->accept(); _score->end(); mscore->endCmd(); return; } if (editObject->isText() && (key == Qt::Key_Left || key == Qt::Key_Right)) { ev->accept(); _score->end(); mscore->endCmd(); //return; } } QPointF delta; qreal _spatium = editObject->spatium(); qreal xval = MScore::nudgeStep * _spatium; if (modifiers & Qt::ControlModifier) xval = preferences.nudgeStep10 * _spatium; else if (modifiers & Qt::AltModifier) xval = preferences.nudgeStep50 * _spatium; qreal yval = xval; if (mscore->vRaster()) { qreal vRaster = _spatium / MScore::vRaster(); if (yval < vRaster) yval = vRaster; } if (mscore->hRaster()) { qreal hRaster = _spatium / MScore::hRaster(); if (xval < hRaster) xval = hRaster; } // TODO: if raster, then xval/yval should be multiple of raster switch (key) { case Qt::Key_Left: delta = QPointF(-xval, 0); break; case Qt::Key_Right: delta = QPointF(xval, 0); break; case Qt::Key_Up: delta = QPointF(0, -yval); break; case Qt::Key_Down: delta = QPointF(0, yval); break; default: ev->ignore(); return; } EditData ed; ed.curGrip = curGrip; ed.delta = delta; ed.view = this; if (curGrip >= 0) ed.pos = grip[curGrip].center() + delta; editObject->editDrag(ed); updateGrips(); _score->end(); mscore->endCmd(); ev->accept(); }