You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
165 lines
3.5 KiB
165 lines
3.5 KiB
15 years ago
|
/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
|
||
|
* Qwt Widget Library
|
||
|
* Copyright (C) 1997 Josef Wilgen
|
||
|
* Copyright (C) 2002 Uwe Rathmann
|
||
14 years ago
|
*
|
||
15 years ago
|
* This library is free software; you can redistribute it and/or
|
||
|
* modify it under the terms of the Qwt License, Version 1.0
|
||
|
*****************************************************************************/
|
||
|
|
||
|
#include "qwt_scale_div.h"
|
||
|
#include "qwt_math.h"
|
||
|
#include "qwt_double_interval.h"
|
||
|
|
||
|
//! Construct an invalid QwtScaleDiv instance.
|
||
|
QwtScaleDiv::QwtScaleDiv():
|
||
|
d_lBound(0.0),
|
||
|
d_hBound(0.0),
|
||
|
d_isValid(false)
|
||
|
{
|
||
|
}
|
||
|
|
||
14 years ago
|
/*!
|
||
15 years ago
|
Construct QwtScaleDiv instance.
|
||
|
|
||
|
\param interval Interval
|
||
|
\param ticks List of major, medium and minor ticks
|
||
|
*/
|
||
|
QwtScaleDiv::QwtScaleDiv(
|
||
14 years ago
|
const QwtDoubleInterval &interval,
|
||
|
QwtValueList ticks[NTickTypes]):
|
||
15 years ago
|
d_lBound(interval.minValue()),
|
||
|
d_hBound(interval.maxValue()),
|
||
|
d_isValid(true)
|
||
|
{
|
||
|
for ( int i = 0; i < NTickTypes; i++ )
|
||
|
d_ticks[i] = ticks[i];
|
||
|
}
|
||
|
|
||
14 years ago
|
/*!
|
||
15 years ago
|
Construct QwtScaleDiv instance.
|
||
|
|
||
|
\param lBound First interval limit
|
||
|
\param hBound Second interval limit
|
||
|
\param ticks List of major, medium and minor ticks
|
||
|
*/
|
||
|
QwtScaleDiv::QwtScaleDiv(
|
||
14 years ago
|
double lBound, double hBound,
|
||
|
QwtValueList ticks[NTickTypes]):
|
||
15 years ago
|
d_lBound(lBound),
|
||
|
d_hBound(hBound),
|
||
|
d_isValid(true)
|
||
|
{
|
||
|
for ( int i = 0; i < NTickTypes; i++ )
|
||
|
d_ticks[i] = ticks[i];
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
Change the interval
|
||
|
\interval Interval
|
||
|
*/
|
||
|
void QwtScaleDiv::setInterval(const QwtDoubleInterval &interval)
|
||
|
{
|
||
|
setInterval(interval.minValue(), interval.maxValue());
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
\brief Equality operator
|
||
|
\return true if this instance is equal to other
|
||
|
*/
|
||
|
int QwtScaleDiv::operator==(const QwtScaleDiv &other) const
|
||
|
{
|
||
|
if ( d_lBound != other.d_lBound ||
|
||
14 years ago
|
d_hBound != other.d_hBound ||
|
||
|
d_isValid != other.d_isValid ) {
|
||
15 years ago
|
return false;
|
||
|
}
|
||
|
|
||
14 years ago
|
for ( int i = 0; i < NTickTypes; i++ ) {
|
||
15 years ago
|
if ( d_ticks[i] != other.d_ticks[i] )
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
\brief Inequality
|
||
|
\return true if this instance is not equal to s
|
||
|
*/
|
||
|
int QwtScaleDiv::operator!=(const QwtScaleDiv &s) const
|
||
|
{
|
||
|
return (!(*this == s));
|
||
|
}
|
||
|
|
||
|
//! Invalidate the scale division
|
||
|
void QwtScaleDiv::invalidate()
|
||
|
{
|
||
|
d_isValid = false;
|
||
|
|
||
|
// detach arrays
|
||
|
for ( int i = 0; i < NTickTypes; i++ )
|
||
|
d_ticks[i].clear();
|
||
|
|
||
|
d_lBound = d_hBound = 0;
|
||
|
}
|
||
|
|
||
|
//! Check if the scale division is valid
|
||
|
bool QwtScaleDiv::isValid() const
|
||
|
{
|
||
|
return d_isValid;
|
||
|
}
|
||
|
|
||
|
bool QwtScaleDiv::contains(double v) const
|
||
|
{
|
||
|
if ( !d_isValid )
|
||
|
return false;
|
||
|
|
||
|
const double min = qwtMin(d_lBound, d_hBound);
|
||
|
const double max = qwtMax(d_lBound, d_hBound);
|
||
|
|
||
|
return v >= min && v <= max;
|
||
|
}
|
||
|
|
||
|
//! Invert the scale divison
|
||
|
void QwtScaleDiv::invert()
|
||
|
{
|
||
|
qSwap(d_lBound, d_hBound);
|
||
|
|
||
14 years ago
|
for ( int i = 0; i < NTickTypes; i++ ) {
|
||
15 years ago
|
QwtValueList& ticks = d_ticks[i];
|
||
|
|
||
|
const int size = ticks.count();
|
||
|
const int size2 = size / 2;
|
||
14 years ago
|
|
||
15 years ago
|
for (int i=0; i < size2; i++)
|
||
|
qSwap(ticks[i], ticks[size - 1 - i]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
Assign ticks
|
||
|
|
||
|
\param type MinorTick, MediumTick or MajorTick
|
||
|
\param ticks Values of the tick positions
|
||
|
*/
|
||
|
void QwtScaleDiv::setTicks(int type, const QwtValueList &ticks)
|
||
|
{
|
||
|
if ( type >= 0 || type < NTickTypes )
|
||
|
d_ticks[type] = ticks;
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
Return a list of ticks
|
||
|
|
||
|
\param type MinorTick, MediumTick or MajorTick
|
||
|
*/
|
||
|
const QwtValueList &QwtScaleDiv::ticks(int type) const
|
||
|
{
|
||
|
if ( type >= 0 || type < NTickTypes )
|
||
|
return d_ticks[type];
|
||
|
|
||
|
static QwtValueList noTicks;
|
||
|
return noTicks;
|
||
|
}
|