void ModifyMarkerCommand::unexecute() { Composition::markercontainer markers = m_composition->getMarkers(); Composition::markerconstiterator it = markers.begin(); for (; it != markers.end(); ++it) { if ((*it)->getID() == m_id) { (*it)->setName(m_oldName); (*it)->setDescription(m_oldDescription); (*it)->setTime(m_time); } } }
void RemoveMarkerCommand::execute() { Composition::markercontainer markers = m_composition->getMarkers(); Composition::markerconstiterator it = markers.begin(); for (; it != markers.end(); ++it) { if ((*it)->getID() == m_id) { m_marker = (*it); m_composition->detachMarker(m_marker); m_detached = true; return ; } } }
void ModifyMarkerCommand::execute() { Composition::markercontainer markers = m_composition->getMarkers(); Composition::markerconstiterator it = markers.begin(); for (; it != markers.end(); ++it) { if ((*it)->getID() == m_id) { if (m_oldName.empty()) m_oldName = (*it)->getName(); if (m_oldDescription.empty()) m_oldDescription = (*it)->getDescription(); (*it)->setName(m_name); (*it)->setDescription(m_description); (*it)->setTime(m_newTime); return ; } } }
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()); } }
void MarkerRuler::paintEvent(QPaintEvent*) { QPainter painter(this); painter.setFont(*m_barFont); if (getHScaleFactor() != 1.0) painter.scale(getHScaleFactor(), 1.0); // See note elsewhere... QRect clipRect = visibleRegion().boundingRect(); // In a stylesheet world, we have to paint our our own background to rescue // it from the muddle of QWidget background style hacks QBrush bg = QBrush(GUIPalette::getColour(GUIPalette::RulerBackground)); painter.fillRect(clipRect, bg); // Now we set the pen dungle flungy to the newly defined foreground color in // GUIPalette to make the text all pretty like again. (Whew.) painter.setPen(GUIPalette::getColour(GUIPalette::RulerForeground)); int firstBar = m_rulerScale->getBarForX(clipRect.x() - m_currentXOffset - m_xorigin); int lastBar = m_rulerScale->getLastVisibleBar(); if (firstBar < m_rulerScale->getFirstVisibleBar()) { firstBar = m_rulerScale->getFirstVisibleBar(); } painter.drawLine(m_currentXOffset, 0, static_cast<int>(clipRect.width() / getHScaleFactor()), 0); float minimumWidth = 25.0; float testSize = ((float)(m_rulerScale->getBarPosition(firstBar + 1) - m_rulerScale->getBarPosition(firstBar))) / minimumWidth; int every = 0; int count = 0; if (testSize < 1.0) { every = (int(1.0 / testSize)); if (every % 2 == 0) every++; } for (int i = firstBar; i <= lastBar; ++i) { double x = m_rulerScale->getBarPosition(i) + m_xorigin + m_currentXOffset; if ((x * getHScaleFactor()) > clipRect.x() + clipRect.width()) break; // always the first bar number if (every && i != firstBar) { if (count < every) { count++; continue; } // reset count if we passed count = 0; } // adjust count for first bar line if (every == firstBar) count++; if (i != lastBar) { painter.drawLine(static_cast<int>(x), 0, static_cast<int>(x), m_barHeight); // disable worldXForm for text //QPoint textDrawPoint = painter.xForm(QPoint(static_cast<int>(x + 4), 12)); QPoint textDrawPoint = QPoint(static_cast<int>(x + 4), 12) * painter.combinedTransform(); bool enableXForm = painter.worldMatrixEnabled(); painter.setWorldMatrixEnabled(false); if (i >= 0) painter.drawText(textDrawPoint, QString("%1").arg(i + 1)); painter.setWorldMatrixEnabled(enableXForm); } else { const QPen normalPen = painter.pen(); ; QPen endPen(Qt::black, 2); painter.setPen(endPen); painter.drawLine(static_cast<int>(x), 0, static_cast<int>(x), m_barHeight); painter.setPen(normalPen); } } if (m_doc) { Composition &comp = m_doc->getComposition(); Composition::markercontainer markers = comp.getMarkers(); Composition::markerconstiterator it; timeT start = comp.getBarStart(firstBar); timeT end = comp.getBarEnd(lastBar); QFontMetrics metrics = painter.fontMetrics(); for (it = markers.begin(); it != markers.end(); ++it) { if ((*it)->getTime() >= start && (*it)->getTime() < end) { QString name(strtoqstr((*it)->getName())); double x = m_rulerScale->getXForTime((*it)->getTime()) + m_xorigin + m_currentXOffset; painter.fillRect(static_cast<int>(x), 1, static_cast<int>(metrics.width(name) + 5), m_barHeight - 2, QBrush(GUIPalette::getColour(GUIPalette::MarkerBackground))); painter.drawLine(int(x), 1, int(x), m_barHeight - 2); painter.drawLine(int(x) + 1, 1, int(x) + 1, m_barHeight - 2); // NO_QT3 NOTE: This next bit is a complete shot in the dark, // and is likely to be wrong. // was: // //QPoint textDrawPoint = painter.xForm // (QPoint(static_cast<int>(x + 3), m_barHeight - 4)); // QPoint textDrawPoint = QPoint(static_cast<int>(x + 3), m_barHeight - 4) * painter.combinedTransform(); // disable worldXForm for text bool enableXForm = painter.worldMatrixEnabled(); painter.setWorldMatrixEnabled(false); painter.drawText(textDrawPoint, name); painter.setWorldMatrixEnabled(enableXForm); } } } }
Rosegarden::Marker* MarkerRuler::getMarkerAtClickPosition() { // NO_QT3 NOTE: // // Let's try this. We used to use QRect visibleRect() to get a rect for // further calculations. Now the equivalent method returns a region instead // of a rect. A region could be a complex shape, but our old code was // written with a rectangle in mind. Let's try getting the boundingRect for // the entire region, and using that for our subsequent calculations, // instead of refactoring everything to take a region into account (which // requires deeper understanding of what the old code did than I have at a // glance). This is a shot in the dark, and it's hard to predict how this // is going to behave until the code is running and testable. QRect clipRect = visibleRegion().boundingRect(); int firstBar = m_rulerScale->getBarForX(clipRect.x() - m_currentXOffset - m_xorigin); int lastBar = m_rulerScale->getLastVisibleBar(); if (firstBar < m_rulerScale->getFirstVisibleBar()) { firstBar = m_rulerScale->getFirstVisibleBar(); } Composition &comp = m_doc->getComposition(); Composition::markercontainer markers = comp.getMarkers(); timeT start = comp.getBarStart(firstBar); timeT end = comp.getBarEnd(lastBar); // need these to calculate the visible extents of a marker tag QFontMetrics metrics(*m_barFont); for (Composition::markerconstiterator i = markers.begin(); i != markers.end(); ++i) { if ((*i)->getTime() >= start && (*i)->getTime() < end) { QString name(strtoqstr((*i)->getName())); int x = m_rulerScale->getXForTime((*i)->getTime()) + m_xorigin + m_currentXOffset; int width = metrics.width(name) + 5; int nextX = -1; Composition::markerconstiterator j = i; ++j; if (j != markers.end()) { nextX = m_rulerScale->getXForTime((*j)->getTime()) + m_xorigin + m_currentXOffset; } if (m_clickX >= x && m_clickX <= x + width) { if (nextX < x || m_clickX <= nextX) { return *i; } } } } return 0L; }