From 94c93cf56b5fc1a462cc9b2da9cd9fe1e85ebe07 Mon Sep 17 00:00:00 2001 From: Mark Liversedge Date: Fri, 21 Feb 2014 10:40:28 +0000 Subject: [PATCH] AllPlot Zooming Cosmetics .. slider removed as it was ugly .. handles are placed on the same side as the axis being manipulated, since its irritating to click on an axis then have to move mouse to the other side of the chart --- qxt/src/qxtspanslider.cpp | 43 +++++++++++++++++++++++++++++---------- qxt/src/qxtspanslider.h | 5 +++++ qxt/src/qxtspanslider_p.h | 1 + src/AllPlot.h | 13 +++++++++++- 4 files changed, 50 insertions(+), 12 deletions(-) diff --git a/qxt/src/qxtspanslider.cpp b/qxt/src/qxtspanslider.cpp index 47d76ab70..39f509c13 100644 --- a/qxt/src/qxtspanslider.cpp +++ b/qxt/src/qxtspanslider.cpp @@ -43,7 +43,8 @@ QxtSpanSliderPrivate::QxtSpanSliderPrivate() : upperPressed(QStyle::SC_None), movement(QxtSpanSlider::FreeMovement), firstMovement(false), - blockTracking(false) + blockTracking(false), + showRail(true) { } @@ -488,6 +489,19 @@ void QxtSpanSlider::setSpan(int lower, int upper) } } +bool QxtSpanSlider::showRail() const +{ + return qxt_d().showRail; +} + +void QxtSpanSlider::setShowRail(bool showrail) +{ + // set and hide + if (qxt_d().showRail != showrail) { + qxt_d().showRail = showrail; + update(); + } +} /*! \property QxtSpanSlider::lowerPosition \brief the lower position of the span @@ -701,17 +715,22 @@ void QxtSpanSlider::paintEvent(QPaintEvent* event) Q_UNUSED(event); QStylePainter painter(this); - // ticks QStyleOptionSlider opt; - qxt_d().initStyleOption(&opt); - opt.subControls = QStyle::SC_SliderTickmarks; - painter.drawComplexControl(QStyle::CC_Slider, opt); - // groove - opt.sliderValue = 0; - opt.sliderPosition = 0; - opt.subControls = QStyle::SC_SliderGroove; - painter.drawComplexControl(QStyle::CC_Slider, opt); + //no rail wanted, just the handles + if (qxt_d().showRail) { + + // ticks + qxt_d().initStyleOption(&opt); + opt.subControls = QStyle::SC_SliderTickmarks; + painter.drawComplexControl(QStyle::CC_Slider, opt); + + // groove + opt.sliderValue = 0; + opt.sliderPosition = 0; + opt.subControls = QStyle::SC_SliderGroove; + painter.drawComplexControl(QStyle::CC_Slider, opt); + } // handle rects opt.sliderPosition = qxt_d().lowerPos; @@ -730,7 +749,9 @@ void QxtSpanSlider::paintEvent(QPaintEvent* event) spanRect = QRect(QPoint(minv, c.y() - 2), QPoint(maxv, c.y() + 1)); else spanRect = QRect(QPoint(c.x() - 2, minv), QPoint(c.x() + 1, maxv)); - qxt_d().drawSpan(&painter, spanRect); + + // we don't want a groove + if (qxt_d().showRail) qxt_d().drawSpan(&painter, spanRect); // handles switch (qxt_d().lastPressed) diff --git a/qxt/src/qxtspanslider.h b/qxt/src/qxtspanslider.h index dc68a0ea0..ce4450ee6 100644 --- a/qxt/src/qxtspanslider.h +++ b/qxt/src/qxtspanslider.h @@ -39,6 +39,7 @@ class QXT_GUI_EXPORT QxtSpanSlider : public QSlider Q_PROPERTY(int upperValue READ upperValue WRITE setUpperValue) Q_PROPERTY(int lowerPosition READ lowerPosition WRITE setLowerPosition) Q_PROPERTY(int upperPosition READ upperPosition WRITE setUpperPosition) + Q_PROPERTY(bool showRail READ showRail WRITE setShowRail) Q_PROPERTY(HandleMovementMode handleMovementMode READ handleMovementMode WRITE setHandleMovementMode) Q_ENUMS(HandleMovementMode) @@ -70,6 +71,8 @@ public: int lowerPosition() const; int upperPosition() const; + bool showRail() const; + public Q_SLOTS: void setLowerValue(int lower); void setUpperValue(int upper); @@ -78,6 +81,8 @@ public Q_SLOTS: void setLowerPosition(int lower); void setUpperPosition(int upper); + void setShowRail(bool); + Q_SIGNALS: void spanChanged(int lower, int upper); void lowerValueChanged(int lower); diff --git a/qxt/src/qxtspanslider_p.h b/qxt/src/qxtspanslider_p.h index 78b7a47d6..df8cc733d 100644 --- a/qxt/src/qxtspanslider_p.h +++ b/qxt/src/qxtspanslider_p.h @@ -66,6 +66,7 @@ public: QxtSpanSlider::HandleMovementMode movement; bool firstMovement; bool blockTracking; + bool showRail; public Q_SLOTS: void updateRange(int min, int max); diff --git a/src/AllPlot.h b/src/AllPlot.h index 6e42a14f3..713154bdb 100644 --- a/src/AllPlot.h +++ b/src/AllPlot.h @@ -70,6 +70,9 @@ class CurveColors : public QObject CurveColors(QwtPlot *plot) : isolated(false), plot(plot) { saveState(); + QPalette matchCanvas; + matchCanvas.setColor(QPalette::Button, GColor(CRIDEPLOTBACKGROUND)); + // span slider appears when curve isolated // to enable zooming in and out slider = new QxtSpanSlider(Qt::Vertical, plot); @@ -77,6 +80,9 @@ class CurveColors : public QObject slider->setHandleMovementMode(QxtSpanSlider::NoOverlapping); slider->setMinimum(0); slider->setMaximum(100); // %age + slider->setShowRail(false); // no rail please + slider->setPalette(matchCanvas); // don't stand out so much + #ifdef Q_OS_MAC // BUG in QMacStyle and painting of spanSlider // so we use a plain style to avoid it, but only @@ -199,7 +205,12 @@ class CurveColors : public QObject if (showslider && c.key()->yAxis() == id) { - slider->move(plot->canvas()->pos().x(), 10); + if (c.key()->yAxis().pos == QwtAxis::yLeft) + slider->move(plot->canvas()->pos().x(), 10); + else + slider->move(plot->canvas()->pos().x() + + plot->canvas()->width() - slider->width(), 10); + slider->setLowerValue(0); slider->setUpperValue(100); slider->setFixedHeight(plot->canvas()->height()-20);