Add lib/libkdchart
This commit is contained in:
259
lib/libkdchart/src/KDChartAbstractAxis.cpp
Normal file
259
lib/libkdchart/src/KDChartAbstractAxis.cpp
Normal file
@@ -0,0 +1,259 @@
|
||||
/****************************************************************************
|
||||
** 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.
|
||||
**
|
||||
**********************************************************************/
|
||||
|
||||
#include "KDChartAbstractAxis.h"
|
||||
#include "KDChartAbstractAxis_p.h"
|
||||
#include "KDChartAbstractDiagram.h"
|
||||
#include "KDChartAbstractCartesianDiagram.h"
|
||||
#include "KDChartEnums.h"
|
||||
#include "KDChartMeasure.h"
|
||||
|
||||
#include <QDebug>
|
||||
|
||||
#include <KDABLibFakes>
|
||||
|
||||
using namespace KDChart;
|
||||
|
||||
#define d d_func()
|
||||
|
||||
AbstractAxis::Private::Private( AbstractDiagram* diagram, AbstractAxis* axis )
|
||||
: observer( 0 )
|
||||
, mDiagram( diagram )
|
||||
, mAxis( axis )
|
||||
{
|
||||
// Note: We do NOT call setDiagram( diagram, axis );
|
||||
// but it is called in AbstractAxis::delayedInit() instead!
|
||||
}
|
||||
|
||||
AbstractAxis::Private::~Private()
|
||||
{
|
||||
delete observer;
|
||||
observer = 0;
|
||||
}
|
||||
|
||||
bool AbstractAxis::Private::setDiagram(
|
||||
AbstractDiagram* diagram_,
|
||||
bool delayedInit )
|
||||
{
|
||||
AbstractDiagram* diagram = delayedInit ? mDiagram : diagram_;
|
||||
if( delayedInit ){
|
||||
mDiagram = 0;
|
||||
}
|
||||
|
||||
// do not set a diagram again that was already set
|
||||
if ( diagram &&
|
||||
((diagram == mDiagram) || secondaryDiagrams.contains( diagram )) )
|
||||
return false;
|
||||
|
||||
bool bNewDiagramStored = false;
|
||||
if ( ! mDiagram ) {
|
||||
mDiagram = diagram;
|
||||
delete observer;
|
||||
if ( mDiagram ) {
|
||||
//qDebug() << "axis" << (axis != 0);
|
||||
observer = new DiagramObserver( mDiagram, mAxis );
|
||||
bNewDiagramStored = true;
|
||||
}else{
|
||||
observer = 0;
|
||||
}
|
||||
} else {
|
||||
if ( diagram )
|
||||
secondaryDiagrams.enqueue( diagram );
|
||||
}
|
||||
return bNewDiagramStored;
|
||||
}
|
||||
|
||||
void AbstractAxis::Private::unsetDiagram( AbstractDiagram* diagram )
|
||||
{
|
||||
if ( diagram == mDiagram ) {
|
||||
mDiagram = 0;
|
||||
delete observer;
|
||||
observer = 0;
|
||||
} else {
|
||||
secondaryDiagrams.removeAll( diagram );
|
||||
}
|
||||
if( !secondaryDiagrams.isEmpty() ) {
|
||||
AbstractDiagram *nextDiagram = secondaryDiagrams.dequeue();
|
||||
setDiagram( nextDiagram );
|
||||
}
|
||||
}
|
||||
|
||||
bool AbstractAxis::Private::hasDiagram( AbstractDiagram* diagram ) const
|
||||
{
|
||||
return diagram == mDiagram || secondaryDiagrams.contains( diagram );
|
||||
}
|
||||
|
||||
AbstractAxis::AbstractAxis ( AbstractDiagram* diagram )
|
||||
: AbstractArea( new Private( diagram, this ) )
|
||||
{
|
||||
init();
|
||||
QTimer::singleShot(0, this, SLOT(delayedInit()));
|
||||
}
|
||||
|
||||
AbstractAxis::~AbstractAxis()
|
||||
{
|
||||
d->mDiagram = 0;
|
||||
d->secondaryDiagrams.clear();
|
||||
}
|
||||
|
||||
|
||||
void AbstractAxis::init()
|
||||
{
|
||||
Measure m(
|
||||
12.5,
|
||||
KDChartEnums::MeasureCalculationModeAuto,
|
||||
KDChartEnums::MeasureOrientationAuto );
|
||||
d->textAttributes.setFontSize( m );
|
||||
m.setValue( 5 );
|
||||
m.setCalculationMode( KDChartEnums::MeasureCalculationModeAbsolute );
|
||||
d->textAttributes.setMinimalFontSize( m );
|
||||
}
|
||||
|
||||
void AbstractAxis::delayedInit()
|
||||
{
|
||||
// We call setDiagram() here, because the c'tor of Private
|
||||
// only has stored the pointers, but it did not call setDiagram().
|
||||
if( d )
|
||||
d->setDiagram( 0, true /* delayedInit */ );
|
||||
}
|
||||
|
||||
bool AbstractAxis::compare( const AbstractAxis* other )const
|
||||
{
|
||||
if( other == this ) return true;
|
||||
if( ! other ){
|
||||
//qDebug() << "CartesianAxis::compare() cannot compare to Null pointer";
|
||||
return false;
|
||||
}
|
||||
/*
|
||||
qDebug() << (textAttributes() == other->textAttributes());
|
||||
qDebug() << (labels() == other->labels());
|
||||
qDebug() << (shortLabels() == other->shortLabels());
|
||||
*/
|
||||
return ( static_cast<const AbstractAreaBase*>(this)->compare( other ) ) &&
|
||||
(textAttributes() == other->textAttributes()) &&
|
||||
(labels() == other->labels()) &&
|
||||
(shortLabels() == other->shortLabels());
|
||||
}
|
||||
|
||||
|
||||
const QString AbstractAxis::customizedLabel( const QString& label )const
|
||||
{
|
||||
return label;
|
||||
}
|
||||
|
||||
|
||||
void AbstractAxis::createObserver( AbstractDiagram* diagram )
|
||||
{
|
||||
if( d->setDiagram( diagram ) )
|
||||
connectSignals();
|
||||
}
|
||||
|
||||
void AbstractAxis::deleteObserver( AbstractDiagram* diagram )
|
||||
{
|
||||
d->unsetDiagram( diagram );
|
||||
}
|
||||
|
||||
void AbstractAxis::connectSignals()
|
||||
{
|
||||
if( d->observer ){
|
||||
connect( d->observer, SIGNAL( diagramDataChanged( AbstractDiagram *) ),
|
||||
this, SLOT( update() ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void AbstractAxis::setTextAttributes( const TextAttributes &a )
|
||||
{
|
||||
if( d->textAttributes == a )
|
||||
return;
|
||||
|
||||
d->textAttributes = a;
|
||||
update();
|
||||
}
|
||||
|
||||
TextAttributes AbstractAxis::textAttributes() const
|
||||
{
|
||||
return d->textAttributes;
|
||||
}
|
||||
|
||||
|
||||
void AbstractAxis::setRulerAttributes( const RulerAttributes &a )
|
||||
{
|
||||
d->rulerAttributes = a;
|
||||
update();
|
||||
}
|
||||
|
||||
RulerAttributes AbstractAxis::rulerAttributes() const
|
||||
{
|
||||
return d->rulerAttributes;
|
||||
}
|
||||
|
||||
void AbstractAxis::setLabels( const QStringList& list )
|
||||
{
|
||||
if( d->hardLabels == list )
|
||||
return;
|
||||
|
||||
d->hardLabels = list;
|
||||
update();
|
||||
}
|
||||
|
||||
QStringList AbstractAxis::labels() const
|
||||
{
|
||||
return d->hardLabels;
|
||||
}
|
||||
|
||||
void AbstractAxis::setShortLabels( const QStringList& list )
|
||||
{
|
||||
if( d->hardShortLabels == list )
|
||||
return;
|
||||
|
||||
d->hardShortLabels = list;
|
||||
update();
|
||||
}
|
||||
|
||||
QStringList AbstractAxis::shortLabels() const
|
||||
{
|
||||
return d->hardShortLabels;
|
||||
}
|
||||
|
||||
const AbstractCoordinatePlane* AbstractAxis::coordinatePlane() const
|
||||
{
|
||||
if( d->diagram() )
|
||||
return d->diagram()->coordinatePlane();
|
||||
return 0;
|
||||
}
|
||||
|
||||
const AbstractDiagram * KDChart::AbstractAxis::diagram() const
|
||||
{
|
||||
return d->diagram();
|
||||
}
|
||||
|
||||
bool KDChart::AbstractAxis::observedBy( AbstractDiagram * diagram ) const
|
||||
{
|
||||
return d->hasDiagram( diagram );
|
||||
}
|
||||
|
||||
void KDChart::AbstractAxis::update()
|
||||
{
|
||||
if( d->diagram() )
|
||||
d->diagram()->update();
|
||||
}
|
||||
Reference in New Issue
Block a user