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.
164 lines
3.5 KiB
164 lines
3.5 KiB
/* -*- mode: C++ ; c-file-style: "stroustrup" -*- ***************************** |
|
* Qwt Widget Library |
|
* Copyright (C) 1997 Josef Wilgen |
|
* Copyright (C) 2002 Uwe Rathmann |
|
* |
|
* 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) |
|
{ |
|
} |
|
|
|
/*! |
|
Construct QwtScaleDiv instance. |
|
|
|
\param interval Interval |
|
\param ticks List of major, medium and minor ticks |
|
*/ |
|
QwtScaleDiv::QwtScaleDiv( |
|
const QwtDoubleInterval &interval, |
|
QwtValueList ticks[NTickTypes]): |
|
d_lBound(interval.minValue()), |
|
d_hBound(interval.maxValue()), |
|
d_isValid(true) |
|
{ |
|
for ( int i = 0; i < NTickTypes; i++ ) |
|
d_ticks[i] = ticks[i]; |
|
} |
|
|
|
/*! |
|
Construct QwtScaleDiv instance. |
|
|
|
\param lBound First interval limit |
|
\param hBound Second interval limit |
|
\param ticks List of major, medium and minor ticks |
|
*/ |
|
QwtScaleDiv::QwtScaleDiv( |
|
double lBound, double hBound, |
|
QwtValueList ticks[NTickTypes]): |
|
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 || |
|
d_hBound != other.d_hBound || |
|
d_isValid != other.d_isValid ) { |
|
return false; |
|
} |
|
|
|
for ( int i = 0; i < NTickTypes; i++ ) { |
|
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); |
|
|
|
for ( int i = 0; i < NTickTypes; i++ ) { |
|
QwtValueList& ticks = d_ticks[i]; |
|
|
|
const int size = ticks.count(); |
|
const int size2 = size / 2; |
|
|
|
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; |
|
}
|
|
|