地面站终端 App
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

/* -*- 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;
}