KissCount/lib/libkdchart/src/KDChartMeasure.h

192 lines
5.9 KiB
C++

/****************************************************************************
** Copyright (C) 2001-2011 Klaralvdalens Datakonsult AB. All rights reserved.
**
** This file is part of the KD Chart library.
**
** Licensees holding valid commercial KD Chart licenses may use this file in
** accordance with the KD Chart Commercial License Agreement provided with
** the Software.
**
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 and version 3 as published by the
** Free Software Foundation and appearing in the file LICENSE.GPL.txt included.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** Contact info@kdab.com if any conditions of this licensing are not
** clear to you.
**
**********************************************************************/
#ifndef KDCHARTMEASURE_H
#define KDCHARTMEASURE_H
#include <QDebug>
#include <Qt>
#include <QStack>
#include "KDChartGlobal.h"
#include "KDChartEnums.h"
/** \file KDChartMeasure.h
* \brief Declaring the class KDChart::Measure.
*
*
*/
class QObject;
class QPaintDevice;
namespace KDChart {
/**
* \class Measure KDChartMeasure.h KDChartMeasure
* \brief Measure is used to specify all relative and/or absolute measures in KDChart, e.g. font sizes.
*
*/
class KDCHART_EXPORT Measure
{
public:
Measure();
/*implicit*/ Measure( qreal value,
KDChartEnums::MeasureCalculationMode mode = KDChartEnums::MeasureCalculationModeAuto,
KDChartEnums::MeasureOrientation orientation = KDChartEnums::MeasureOrientationAuto );
Measure( const Measure& );
Measure &operator= ( const Measure& );
void setValue( qreal val ){ mValue = val; }
qreal value() const { return mValue; }
void setCalculationMode( KDChartEnums::MeasureCalculationMode mode ){ mMode = mode; }
KDChartEnums::MeasureCalculationMode calculationMode() const { return mMode; }
/**
* The reference area must either be derived from AbstractArea
* or be derived from QWidget, so e.g. it could be derived from
* AbstractAreaWidget too.
*/
void setRelativeMode( const QObject * area,
KDChartEnums::MeasureOrientation orientation )
{
mMode = KDChartEnums::MeasureCalculationModeRelative;
mArea = area;
mOrientation = orientation;
}
/**
* \brief This is a convenience method for specifying a value,
* with implicitely setting the calculation mode to MeasureCalculationModeAbsolute
*
* Calling setAbsoluteValue( value ) is the same as calling
\verbatim
setValue( value );
setCalculationMode( KDChartEnums::MeasureCalculationModeAbsolute );
\endverbatim
*/
void setAbsoluteValue( qreal val )
{
mMode = KDChartEnums::MeasureCalculationModeAbsolute;
mValue = val;
}
/**
* The reference area must either be derived from AbstractArea
* or be derived from QWidget, so e.g. it could be derived from
* AbstractAreaWidget too.
*/
void setReferenceArea( const QObject * area ){ mArea = area; }
/**
* The returned reference area will either be derived from AbstractArea
* or be derived from QWidget.
*/
const QObject * referenceArea() const { return mArea; }
void setReferenceOrientation( KDChartEnums::MeasureOrientation orientation ){ mOrientation = orientation; }
KDChartEnums::MeasureOrientation referenceOrientation() const { return mOrientation; }
/**
* The reference area must either be derived from AbstractArea
* or be derived from QWidget, so e.g. it could be derived from
* AbstractAreaWidget too.
*/
qreal calculatedValue( const QObject * autoArea, KDChartEnums::MeasureOrientation autoOrientation ) const;
qreal calculatedValue( const QSizeF& autoSize, KDChartEnums::MeasureOrientation autoOrientation ) const;
const QSizeF sizeOfArea( const QObject* area ) const;
bool operator==( const Measure& ) const;
bool operator!=( const Measure& other ) const { return !operator==(other); }
private:
qreal mValue;
KDChartEnums::MeasureCalculationMode mMode;
const QObject* mArea;
KDChartEnums::MeasureOrientation mOrientation;
}; // End of class Measure
/**
* Auxiliary class used by the KDChart::Measure and KDChart::Chart class.
*
* Normally there should be no need to call any of these methods yourself.
*
* They are used by KDChart::Chart::paint( QPainter*, const QRect& )
* to adjust all of the relative Measures according to the target
* rectangle's size.
*
* Default factors are (1.0, 1.0)
*/
class GlobalMeasureScaling
{
public:
static GlobalMeasureScaling* instance();
GlobalMeasureScaling();
virtual ~GlobalMeasureScaling();
public:
/**
* Set new factors to be used by all Measure objects from now on.
* Previous values will be stored.
*/
static void setFactors(qreal factorX, qreal factorY);
/**
* Reset factors to the values active before the previous call of
* setFactors.
* This works on a stack, so recursive calls works fine, like:
* setFactors, setFactors, unserFactors, unsetFactors
*/
static void resetFactors();
/**
* Returns the currently active factors.
*/
static const QPair< qreal, qreal > currentFactors();
/**
* Sets the paint device usable for calculating fort metrics.
*/
static void setPaintDevice( QPaintDevice* paintDevice );
/**
* Returns the paint device usable for calculating fort metrics.
*/
static QPaintDevice* paintDevice();
private:
QStack< QPair< qreal, qreal > > mFactors;
QPaintDevice* m_paintDevice;
};
}
#if !defined(QT_NO_DEBUG_STREAM)
KDCHART_EXPORT QDebug operator<<(QDebug, const KDChart::Measure& );
#endif /* QT_NO_DEBUG_STREAM */
#endif // KDCHARTMEASURE_H