# HG changeset patch # User Chris Cannam # Date 1235667505 0 # Node ID 1341e95eeae93025479a20749ef551ea6afbd4a1 # Parent ed65126e503dfff94356a635ac765f3567d3eb3c * Make drawing segment divisions optional in segmentation plot style of time value layer * Don't follow playback when Alt is held down (complements use of Alt as peek modifier) diff -r ed65126e503d -r 1341e95eeae9 layer/TimeValueLayer.cpp --- a/layer/TimeValueLayer.cpp Thu Feb 26 14:05:13 2009 +0000 +++ b/layer/TimeValueLayer.cpp Thu Feb 26 16:58:25 2009 +0000 @@ -52,6 +52,7 @@ m_colourMap(0), m_plotStyle(PlotConnectedPoints), m_verticalScale(AutoAlignScale), + m_drawSegmentDivisions(true), m_scaleMinimum(0), m_scaleMaximum(0) { @@ -88,6 +89,7 @@ list.push_back("Plot Type"); list.push_back("Vertical Scale"); list.push_back("Scale Units"); + list.push_back("Draw Segment Division Lines"); return list; } @@ -97,6 +99,7 @@ if (name == "Plot Type") return tr("Plot Type"); if (name == "Vertical Scale") return tr("Vertical Scale"); if (name == "Scale Units") return tr("Scale Units"); + if (name == "Draw Segment Division Lines") return tr("Draw Segment Division Lines"); return SingleColourLayer::getPropertyLabel(name); } @@ -107,6 +110,7 @@ if (name == "Vertical Scale") return ValueProperty; if (name == "Scale Units") return UnitsProperty; if (name == "Colour" && m_plotStyle == PlotSegmentation) return ValueProperty; + if (name == "Draw Segment Division Lines") return ToggleProperty; return SingleColourLayer::getPropertyType(name); } @@ -116,6 +120,9 @@ if (name == "Vertical Scale" || name == "Scale Units") { return tr("Scale"); } + if (name == "Plot Type" || name == "Draw Segment Division Lines") { + return tr("Plot Type"); + } return SingleColourLayer::getPropertyGroupName(name); } @@ -157,6 +164,13 @@ (m_model->getScaleUnits()); } + } else if (name == "Draw Segment Division Lines") { + + if (min) *min = 0; + if (max) *max = 0; + if (deflt) *deflt = 1; + val = (m_drawSegmentDivisions ? 1.0 : 0.0); + } else { val = SingleColourLayer::getPropertyRangeAndValue(name, min, max, deflt); @@ -208,6 +222,8 @@ (UnitDatabase::getInstance()->getUnitById(value)); emit modelChanged(); } + } else if (name == "Draw Segment Division Lines") { + setDrawSegmentDivisions(value > 0.5); } else { SingleColourLayer::setProperty(name, value); } @@ -242,6 +258,14 @@ emit layerParametersChanged(); } +void +TimeValueLayer::setDrawSegmentDivisions(bool draw) +{ + if (m_drawSegmentDivisions == draw) return; + m_drawSegmentDivisions = draw; + emit layerParametersChanged(); +} + bool TimeValueLayer::isLayerScrollable(const View *v) const { @@ -886,9 +910,12 @@ if (nx <= x) continue; - if (illuminateFrame != p.frame && - (nx < x + 5 || x >= v->width() - 1)) { - paint.setPen(Qt::NoPen); + if (illuminateFrame != p.frame) { + if (!m_drawSegmentDivisions || + nx < x + 5 || + x >= v->width() - 1) { + paint.setPen(Qt::NoPen); + } } paint.drawRect(x, -1, nx - x, v->height() + 1); @@ -1623,12 +1650,13 @@ { SingleColourLayer::toXml(stream, indent, extraAttributes + - QString(" colourMap=\"%1\" plotStyle=\"%2\" verticalScale=\"%3\" scaleMinimum=\"%4\" scaleMaximum=\"%5\" ") + QString(" colourMap=\"%1\" plotStyle=\"%2\" verticalScale=\"%3\" scaleMinimum=\"%4\" scaleMaximum=\"%5\" drawDivisions=\"%6\" ") .arg(m_colourMap) .arg(m_plotStyle) .arg(m_verticalScale) .arg(m_scaleMinimum) - .arg(m_scaleMaximum)); + .arg(m_scaleMaximum) + .arg(m_drawSegmentDivisions ? "true" : "false")); } void @@ -1649,6 +1677,9 @@ attributes.value("verticalScale").toInt(&ok); if (ok) setVerticalScale(scale); + bool draw = (attributes.value("drawDivisions").trimmed() == "true"); + setDrawSegmentDivisions(draw); + float min = attributes.value("scaleMinimum").toFloat(&ok); float max = attributes.value("scaleMaximum").toFloat(&alsoOk); if (ok && alsoOk) setDisplayExtents(min, max); diff -r ed65126e503d -r 1341e95eeae9 layer/TimeValueLayer.h --- a/layer/TimeValueLayer.h Thu Feb 26 14:05:13 2009 +0000 +++ b/layer/TimeValueLayer.h Thu Feb 26 16:58:25 2009 +0000 @@ -103,6 +103,9 @@ void setVerticalScale(VerticalScale scale); VerticalScale getVerticalScale() const { return m_verticalScale; } + void setDrawSegmentDivisions(bool); + bool getDrawSegmentDivisions() const { return m_drawSegmentDivisions; } + virtual bool isLayerScrollable(const View *v) const; virtual bool isLayerEditable() const { return true; } @@ -156,6 +159,7 @@ int m_colourMap; PlotStyle m_plotStyle; VerticalScale m_verticalScale; + bool m_drawSegmentDivisions; mutable float m_scaleMinimum; mutable float m_scaleMaximum; diff -r ed65126e503d -r 1341e95eeae9 view/View.cpp --- a/view/View.cpp Thu Feb 26 14:05:13 2009 +0000 +++ b/view/View.cpp Thu Feb 26 16:58:25 2009 +0000 @@ -942,10 +942,14 @@ m_playPointerFrame = newFrame; if (!visibleChange) return; + bool somethingGoingOn = + ((QApplication::mouseButtons() != Qt::NoButton) || + (QApplication::keyboardModifiers() & Qt::AltModifier)); + switch (m_followPlay) { case PlaybackScrollContinuous: - if (QApplication::mouseButtons() == Qt::NoButton) { + if (!somethingGoingOn) { setCentreFrame(m_playPointerFrame, false); } break; @@ -986,7 +990,7 @@ #endif if (xnew < width()/8 || xnew > (width()*7)/8) { - if (QApplication::mouseButtons() == Qt::NoButton) { + if (!somethingGoingOn) { long offset = getFrameForX(width()/2) - getStartFrame(); long newCentre = sf + offset; bool changed = setCentreFrame(newCentre, false);