# HG changeset patch # User Chris Cannam # Date 1181742259 0 # Node ID 2d891e02c5ce7a9d8908ebeff5c487c793600389 # Parent 6732a5b8a2c4bdc10ed15f2ac15a23fae1e66aca * some beginnings of what will be measurement tool functionality diff -r 6732a5b8a2c4 -r 2d891e02c5ce view/Pane.cpp --- a/view/Pane.cpp Wed Jun 13 12:41:19 2007 +0000 +++ b/view/Pane.cpp Wed Jun 13 13:44:19 2007 +0000 @@ -386,9 +386,11 @@ int fontHeight = paint.fontMetrics().height(); int fontAscent = paint.fontMetrics().ascent(); + ViewManager::ToolMode toolMode = m_manager->getToolMode(); + if (m_manager && !m_manager->isPlaying() && - m_manager->getToolMode() == ViewManager::SelectMode) { + toolMode == ViewManager::MeasureMode) { for (LayerList::iterator vi = m_layers.end(); vi != m_layers.begin(); ) { --vi; @@ -732,11 +734,14 @@ } } - if (m_clickedInRange && m_shiftPressed) { - if (m_manager && (m_manager->getToolMode() == ViewManager::NavigateMode)) { + if (m_clickedInRange && m_manager) { + if ((m_shiftPressed && toolMode == ViewManager::NavigateMode) || + toolMode == ViewManager::MeasureMode) { //!!! be nice if this looked a bit more in keeping with the //selection block - paint.setPen(Qt::blue); + paint.setPen(toolMode == ViewManager::MeasureMode ? Qt::green : + Qt::blue); + //!!! shouldn't use clickPos -- needs to use a clicked frame paint.drawRect(m_clickPos.x(), m_clickPos.y(), m_mousePos.x() - m_clickPos.x(), m_mousePos.y() - m_clickPos.y()); @@ -1208,6 +1213,12 @@ layer->editDrag(this, e); } } + + } else if (mode == ViewManager::MeasureMode) { + + m_mousePos = e->pos(); + edgeScrollMaybe(e->x()); + update(); } } @@ -1435,6 +1446,16 @@ !m_resizing && !m_ctrlPressed); } + edgeScrollMaybe(e->x()); + + update(); +} + +void +Pane::edgeScrollMaybe(int x) +{ + int mouseFrame = getFrameForX(x); + bool doScroll = false; if (!m_manager) doScroll = true; if (!m_manager->isPlaying()) doScroll = true; @@ -1443,22 +1464,18 @@ if (doScroll) { int offset = mouseFrame - getStartFrame(); int available = getEndFrame() - getStartFrame(); + int move = 0; if (offset >= available * 0.95) { - int move = int(offset - available * 0.95) + 1; + move = int(offset - available * 0.95) + 1; + } else if (offset <= available * 0.10) { + move = int(available * 0.10 - offset) + 1; + move = -move; + } + if (move != 0) { setCentreFrame(m_centreFrame + move); - } else if (offset <= available * 0.10) { - int move = int(available * 0.10 - offset) + 1; - if (move < 0) { - setCentreFrame(m_centreFrame + (-move)); - } else if (m_centreFrame > size_t(move)) { - setCentreFrame(m_centreFrame - move); - } else { - setCentreFrame(0); - } + update(); } } - - update(); } void diff -r 6732a5b8a2c4 -r 2d891e02c5ce view/Pane.h --- a/view/Pane.h Wed Jun 13 12:41:19 2007 +0000 +++ b/view/Pane.h Wed Jun 13 13:44:19 2007 +0000 @@ -110,6 +110,7 @@ void dragExtendSelection(QMouseEvent *e); void zoomToRegion(int x0, int y0, int x1, int y1); void updateContextHelp(const QPoint *pos); + void edgeScrollMaybe(int x); bool m_identifyFeatures; QPoint m_identifyPoint;