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
This commit is contained in:
Mark Liversedge
2014-02-21 10:40:28 +00:00
parent aeb7404b05
commit 94c93cf56b
4 changed files with 50 additions and 12 deletions

View File

@@ -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)

View File

@@ -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);

View File

@@ -66,6 +66,7 @@ public:
QxtSpanSlider::HandleMovementMode movement;
bool firstMovement;
bool blockTracking;
bool showRail;
public Q_SLOTS:
void updateRange(int min, int max);

View File

@@ -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);