qwt_double_range.h 2.22 KB
Newer Older
pixhawk's avatar
pixhawk committed
1 2 3 4
/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
 * Qwt Widget Library
 * Copyright (C) 1997   Josef Wilgen
 * Copyright (C) 2002   Uwe Rathmann
5
 *
pixhawk's avatar
pixhawk committed
6 7 8 9 10 11 12 13 14 15 16 17 18 19
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the Qwt License, Version 1.0
 *****************************************************************************/

#ifndef QWT_DOUBLE_RANGE_H
#define QWT_DOUBLE_RANGE_H

#include "qwt_global.h"

/*!
  \brief A class which controls a value within an interval

  This class is useful as a base class or a member for sliders.
  It represents an interval of type double within which a value can
20
  be moved. The value can be either an arbitrary point inside
pixhawk's avatar
pixhawk committed
21 22 23 24 25 26
  the interval (see QwtDoubleRange::setValue), or it can be fitted
  into a step raster (see QwtDoubleRange::fitValue and
  QwtDoubleRange::incValue).

  As a special case, a QwtDoubleRange can be periodic, which means that
  a value outside the interval will be mapped to a value inside the
27
  interval when QwtDoubleRange::setValue(), QwtDoubleRange::fitValue(),
pixhawk's avatar
pixhawk committed
28 29 30 31 32 33 34 35 36 37
  QwtDoubleRange::incValue() or QwtDoubleRange::incPages() are called.
*/

class QWT_EXPORT QwtDoubleRange
{
public:
    QwtDoubleRange();
    virtual ~QwtDoubleRange();

    void setRange(double vmin, double vmax, double vstep = 0.0,
38
                  int pagesize = 1);
pixhawk's avatar
pixhawk committed
39 40 41 42 43 44 45 46 47 48 49 50 51 52

    void setValid(bool);
    bool isValid() const;

    virtual void setValue(double);
    double value() const;

    void setPeriodic(bool tf);
    bool periodic() const;

    void setStep(double);
    double step() const;

    double maxValue() const;
53
    double minValue() const;
pixhawk's avatar
pixhawk committed
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88

    int pageSize() const;

    virtual void incValue(int);
    virtual void incPages(int);
    virtual void fitValue(double);

protected:

    double exactValue() const;
    double exactPrevValue() const;
    double prevValue() const;

    virtual void valueChange();
    virtual void stepChange();
    virtual void rangeChange();

private:
    void setNewValue(double x, bool align = false);

    double d_minValue;
    double d_maxValue;
    double d_step;
    int d_pageSize;

    bool d_isValid;
    double d_value;
    double d_exactValue;
    double d_exactPrevValue;
    double d_prevValue;

    bool d_periodic;
};

#endif