void MatrixResizer::ready() { // connect(m_parentView->getCanvasView(), SIGNAL(contentsMoving (int, int)), // this, SLOT(slotMatrixScrolled(int, int))); m_widget->setCanvasCursor(Qt::SizeHorCursor); setBasicContextHelp(); }
MatrixResizer::FollowMode MatrixResizer::handleMouseMove(const MatrixMouseEvent *e) { if (!e) return NoFollow; setBasicContextHelp(); if (!m_currentElement || !m_currentViewSegment) return NoFollow; if (getSnapGrid()->getSnapSetting() != SnapGrid::NoSnap) { setContextHelp(tr("Hold Shift to avoid snapping to beat grid")); } else { clearContextHelp(); } // snap in the closest direction timeT snapTime = e->snappedLeftTime; if (e->snappedRightTime - e->time < e->time - e->snappedLeftTime) { snapTime = e->snappedRightTime; } timeT newDuration = snapTime - m_currentElement->getViewAbsoluteTime(); timeT durationDiff = newDuration - m_currentElement->getViewDuration(); EventSelection* selection = m_scene->getSelection(); if (!selection || selection->getAddedEvents() == 0) return NoFollow; EventSelection::eventcontainer::iterator it = selection->getSegmentEvents().begin(); for (; it != selection->getSegmentEvents().end(); ++it) { MatrixElement *element = 0; ViewElementList::iterator vi = m_currentViewSegment->findEvent(*it); if (vi != m_currentViewSegment->getViewElementList()->end()) { element = static_cast<MatrixElement *>(*vi); } if (!element) continue; timeT t = element->getViewAbsoluteTime(); timeT d = element->getViewDuration(); d = d + durationDiff; if (d < 0) { t = t + d; d = -d; } else if (d == 0) { d = getSnapGrid()->getSnapTime(t); } element->reconfigure(t, d); // m_currentStaff->positionElement(element); // } } // m_mParentView->canvas()->update(); return FollowHorizontal; }
void SegmentMover::ready() { m_canvas->viewport()->setCursor(Qt::SizeAllCursor); setBasicContextHelp(); }
void SegmentMover::mouseReleaseEvent(QMouseEvent *e) { // We only care about the left mouse button. if (e->button() != Qt::LeftButton) return; // No need to propagate. e->accept(); // If we weren't moving anything, bail. if (!getChangingSegment()) return; if (m_changeMade) { QPoint pos = m_canvas->viewportToContents(e->pos()); // Compute how far we've moved vertically. const int startTrackPos = m_canvas->grid().getYBin(m_clickPoint.y()); const int currentTrackPos = m_canvas->grid().getYBin(pos.y()); const int deltaTrack = currentTrackPos - startTrackPos; CompositionModelImpl::ChangingSegmentSet &changingSegments = m_canvas->getModel()->getChangingSegments(); Composition &comp = m_doc->getComposition(); SegmentReconfigureCommand *command = new SegmentReconfigureCommand( changingSegments.size() == 1 ? tr("Move Segment") : tr("Move Segments"), &comp); // For each changing segment for (CompositionModelImpl::ChangingSegmentSet::iterator it = changingSegments.begin(); it != changingSegments.end(); ++it) { ChangingSegmentPtr changingSegment = *it; // The original Segment in the Composition. Segment *segment = changingSegment->getSegment(); // New Track ID TrackId origTrackId = segment->getTrack(); int trackPos = comp.getTrackPositionById(origTrackId) + deltaTrack; if (trackPos < 0) { trackPos = 0; } else if (trackPos >= (int)comp.getNbTracks()) { trackPos = comp.getNbTracks() - 1; } Track *newTrack = comp.getTrackByPosition(trackPos); int newTrackId = origTrackId; if (newTrack) newTrackId = newTrack->getId(); // New start time timeT newStartTime = changingSegment->getStartTime(m_canvas->grid()); // New end time // We absolutely don't want to snap the end time // to the grid. We want it to remain exactly the same // as it was, but relative to the new start time. timeT newEndTime = newStartTime + segment->getEndMarkerTime(false) - segment->getStartTime(); // Add the changed segment to the command command->addSegment(segment, newStartTime, newEndTime, newTrackId); } CommandHistory::getInstance()->addCommand(command); m_changeMade = false; } m_canvas->hideTextFloat(); m_canvas->hideGuides(); m_canvas->getModel()->endChange(); m_canvas->slotUpdateAll(); setChangingSegment(ChangingSegmentPtr()); setBasicContextHelp(); }
int SegmentEraser::handleMouseMove(QMouseEvent*) { setBasicContextHelp(); return RosegardenScrollView::NoFollow; }
void SegmentEraser::ready() { m_canvas->viewport()->setCursor(Qt::PointingHandCursor); setBasicContextHelp(); }
void MatrixEraser::ready() { if (m_widget) m_widget->setCanvasCursor(Qt::PointingHandCursor); setBasicContextHelp(); }
void MatrixResizer::handleMouseRelease(const MatrixMouseEvent *e) { if (!e || !m_currentElement || !m_currentViewSegment) return; // snap in the closest direction timeT snapTime = e->snappedLeftTime; if (e->snappedRightTime - e->time < e->time - e->snappedLeftTime) { snapTime = e->snappedRightTime; } timeT newDuration = snapTime - m_currentElement->getViewAbsoluteTime(); timeT durationDiff = newDuration - m_currentElement->getViewDuration(); EventSelection *selection = m_scene->getSelection(); if (!selection || selection->getAddedEvents() == 0) return; QString commandLabel = tr("Resize Event"); if (selection->getAddedEvents() > 1) commandLabel = tr("Resize Events"); MacroCommand *macro = new MacroCommand(commandLabel); EventSelection::eventcontainer::iterator it = selection->getSegmentEvents().begin(); Segment &segment = m_currentViewSegment->getSegment(); EventSelection *newSelection = new EventSelection(segment); timeT normalizeStart = selection->getStartTime(); timeT normalizeEnd = selection->getEndTime(); for (; it != selection->getSegmentEvents().end(); ++it) { timeT t = (*it)->getAbsoluteTime(); timeT d = (*it)->getDuration(); MATRIX_DEBUG << "MatrixResizer::handleMouseRelease - " << "Time = " << t << ", Duration = " << d << endl; d = d + durationDiff; if (d < 0) { t = t + d; d = -d; } else if (d == 0) { d = getSnapGrid()->getSnapTime(t); } if (t + d > segment.getEndMarkerTime()) { d = segment.getEndMarkerTime() - t; if (d <= 0) { d = segment.getEndMarkerTime(); t = d - getSnapGrid()->getSnapTime(t); } } Event *newEvent = new Event(**it, t, d); macro->addCommand(new MatrixModifyCommand(segment, *it, newEvent, false, false)); newSelection->addEvent(newEvent); } normalizeStart = std::min(normalizeStart, newSelection->getStartTime()); normalizeEnd = std::max(normalizeEnd, newSelection->getEndTime()); macro->addCommand(new NormalizeRestsCommand(segment, normalizeStart, normalizeEnd)); m_scene->setSelection(0, false); CommandHistory::getInstance()->addCommand(macro); m_scene->setSelection(newSelection, false); // m_mParentView->update(); m_currentElement = 0; setBasicContextHelp(); }