KissCount/lib/libkdchart/src/KDChartChart_p.h

169 lines
5.2 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 KDCHARTCHART_P_H
#define KDCHARTCHART_P_H
//
// W A R N I N G
// -------------
//
// This file is not part of the KD Chart API. It exists purely as an
// implementation detail. This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.
//
#include <QObject>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include "KDChartChart.h"
#include "KDChartAbstractArea.h"
#include "KDChartTextArea.h"
#include "KDChartFrameAttributes.h"
#include "KDChartBackgroundAttributes.h"
#include "KDChartLayoutItems.h"
#include <KDABLibFakes>
namespace KDChart {
/*
struct PlaneInfo can't be declared inside Chart::Private, otherwise MSVC.net says:
qhash.h(195) : error C2248: 'KDChart::Chart::Private' : cannot access protected class declared in class 'KDChart::Chart'
KDChartChart_p.h(58) : see declaration of 'KDChart::Chart::Private'
KDChartChart.h(61) : see declaration of 'KDChart::Chart'
KDChartChart.cpp(262) : see reference to class template instantiation 'QHash<Key,T>' being compiled, with
Key=KDChart::AbstractCoordinatePlane *,
T=KDChart::Chart::Private::PlaneInfo
*/
/**
* \internal
*/
struct PlaneInfo {
PlaneInfo()
: referencePlane( 0 ),
horizontalOffset( 1 ),
verticalOffset( 1 ),
gridLayout( 0 ),
topAxesLayout( 0 ),
bottomAxesLayout( 0 ),
leftAxesLayout( 0 ),
rightAxesLayout( 0 )
{}
AbstractCoordinatePlane *referencePlane;
int horizontalOffset;
int verticalOffset;
QGridLayout* gridLayout;
QVBoxLayout* topAxesLayout;
QVBoxLayout* bottomAxesLayout;
QHBoxLayout* leftAxesLayout;
QHBoxLayout* rightAxesLayout;
};
/**
* \internal
*/
class Chart::Private : public QObject
{
Q_OBJECT
public:
CoordinatePlaneList coordinatePlanes;
HeaderFooterList headerFooters;
LegendList legends;
Chart* chart;
QHBoxLayout* layout;
QVBoxLayout* vLayout;
QBoxLayout* planesLayout;
QGridLayout* headerLayout;
QGridLayout* footerLayout;
QGridLayout* dataAndLegendLayout;
QVBoxLayout* innerHdFtLayouts[2][3][3]; // auxiliary pointers
QMap< int, QMap< int, HorizontalLineLayoutItem > > dummyHeaders;
QMap< int, QMap< int, HorizontalLineLayoutItem > > dummyFooters;
QVector<KDChart::TextArea*> textLayoutItems;
QVector<KDChart::AbstractArea*> layoutItems;
QVector<KDChart::AbstractLayoutItem*> planeLayoutItems;
QVector<KDChart::Legend*> legendLayoutItems;
QSize currentLayoutSize;
// since we do not want to derive Chart from AbstractAreaBase,
// we store the attributes here, and then we call two static painting
// methods to drawn the background (or frame, resp.).
KDChart::FrameAttributes frameAttributes;
KDChart::BackgroundAttributes backgroundAttributes;
int globalLeadingLeft, globalLeadingRight, globalLeadingTop, globalLeadingBottom;
QList< AbstractCoordinatePlane* > mouseClickedPlanes;
Private ( Chart* );
virtual ~Private();
void removeDummyHeaderFooters();
void createLayouts( QWidget * parent );
void layoutLegends();
void layoutHeadersAndFooters();
void resizeLayout( const QSize& sz );
void paintAll( QPainter* painter );
struct AxisInfo {
AxisInfo()
:plane(0)
{}
AbstractCoordinatePlane *plane;
};
QHash<AbstractCoordinatePlane*, PlaneInfo> buildPlaneLayoutInfos();
public Q_SLOTS:
void slotLayoutPlanes();
void slotRelayout();
void slotUnregisterDestroyedLegend( Legend * legend );
void slotUnregisterDestroyedHeaderFooter( HeaderFooter* headerFooter );
void slotUnregisterDestroyedPlane( AbstractCoordinatePlane* plane );
/*
// Unused code trying to use a push-model: This did not work
// since we can not re-layout the planes each time when
// Qt layouting is calling sizeHint()
void slotAdjustLeftRightColumnsForOverlappingLabels(
CartesianAxis* axis, int left, int right);
void slotAdjustTopBottomRowsForOverlappingLabels(
CartesianAxis* axis, int top, int bottom);
*/
};
}
#endif