void LoopRuler::mouseReleaseEvent(QMouseEvent *mE) { if (mE->button() == Qt::LeftButton) { if (m_loopingMode) { // Cancel the loop if there was no drag // if (m_endLoop == m_startLoop) { m_endLoop = m_startLoop = 0; // to clear any other loop rulers emit setLoop(m_startLoop, m_endLoop); update(); } // emit with the args around the right way // if (m_endLoop < m_startLoop) emit setLoop(m_endLoop, m_startLoop); else emit setLoop(m_startLoop, m_endLoop); } else { // we need to re-emit this signal so that when the user releases the button // after dragging the pointer, the pointer's position is updated again in the // other views (typically, in the seg. canvas while the user has dragged the pointer // in an edit view) // emit setPointerPosition(m_grid->snapX(m_lastMouseXPos)); } emit stopMouseMove(); m_activeMousePress = false; } }
void StandardRuler::connectRulerToDocPointer(RosegardenDocument *doc) { RG_DEBUG << "StandardRuler::connectRulerToDocPointer"; Q_ASSERT(m_loopRuler); Q_ASSERT(m_markerRuler); // use the document as a hub for pointer and loop set related signals // pointer and loop drag signals are specific to the current view, // so they are re-emitted from the loop ruler by this widget // QObject::connect (m_loopRuler, SIGNAL(setPointerPosition(timeT)), doc, SLOT(slotSetPointerPosition(timeT))); QObject::connect (m_markerRuler, SIGNAL(setPointerPosition(timeT)), doc, SLOT(slotSetPointerPosition(timeT))); QObject::connect (m_loopRuler, SIGNAL(dragPointerToPosition(timeT)), this, SIGNAL(dragPointerToPosition(timeT))); QObject::connect (m_loopRuler, SIGNAL(dragLoopToPosition(timeT)), this, SIGNAL(dragLoopToPosition(timeT))); QObject::connect (m_markerRuler, SIGNAL(setLoop(timeT, timeT)), doc, SLOT(slotSetLoop(timeT, timeT))); QObject::connect (m_loopRuler, SIGNAL(setLoop(timeT, timeT)), doc, SLOT(slotSetLoop(timeT, timeT))); QObject::connect (doc, SIGNAL(loopChanged(timeT, timeT)), m_loopRuler, SLOT(slotSetLoopMarker(timeT, timeT))); // m_loopRuler->setBackgroundColor(GUIPalette::getColour(GUIPalette::PointerRuler)); }
void MarkerRuler::mousePressEvent(QMouseEvent *e) { RG_DEBUG << "MarkerRuler::mousePressEvent: x = " << e->x() << endl; if (!m_doc || !e) return; m_clickX = e->x(); Rosegarden::Marker* clickedMarker = getMarkerAtClickPosition(); // if right-click, show popup menu // if (e->button() == Qt::RightButton) { if (!m_menu) createMenu(); if (m_menu) { // actionCollection()->action("delete_marker")->setEnabled(clickedMarker != 0); // actionCollection()->action("edit_marker")->setEnabled(clickedMarker != 0); findAction("delete_marker")->setEnabled(clickedMarker != 0); findAction("edit_marker")->setEnabled(clickedMarker != 0); m_menu->exec(QCursor::pos()); } return; } bool shiftPressed = ((e->modifiers() & Qt::ShiftModifier) != 0); Composition &comp = m_doc->getComposition(); Composition::markercontainer markers = comp.getMarkers(); if (shiftPressed) { // set loop timeT t = m_rulerScale->getTimeForX (e->x() - m_xorigin - m_currentXOffset); timeT prev = 0; for (Composition::markerconstiterator i = markers.begin(); i != markers.end(); ++i) { timeT cur = (*i)->getTime(); if (cur >= t) { emit setLoop(prev, cur); return ; } prev = cur; } if (prev > 0) emit setLoop(prev, comp.getEndMarker()); } else { // set pointer to clicked marker if (clickedMarker) emit setPointerPosition(clickedMarker->getTime()); } }