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.

149 lines
4.9 KiB

// xlsxchart_p.h
#ifndef QXLSX_CHART_P_H
#define QXLSX_CHART_P_H
#include <QObject>
#include <QString>
#include <QVector>
#include <QMap>
#include <QList>
#include <QXmlStreamReader>
#include <QXmlStreamWriter>
#include <memory>
#include "xlsxabstractooxmlfile_p.h"
#include "xlsxchart.h"
QT_BEGIN_NAMESPACE_XLSX
class XlsxSeries
{
public:
//At present, we care about number cell ranges only!
QString numberDataSource_numRef; // yval, val
QString axDataSource_numRef; // xval, cat
QString headerH_numRef;
QString headerV_numRef;
bool swapHeader = false;
};
class XlsxAxis
{
public:
enum Type { T_None = (-1), T_Cat, T_Val, T_Date, T_Ser };
enum AxisPos { None = (-1), Left, Right, Top, Bottom };
public:
XlsxAxis(){}
XlsxAxis( Type t,
XlsxAxis::AxisPos p,
int id,
int crossId,
QString axisTitle = QString())
{
type = t;
axisPos = p;
axisId = id;
crossAx = crossId;
if ( !axisTitle.isEmpty() )
{
axisNames[ p ] = axisTitle;
}
}
public:
Type type;
XlsxAxis::AxisPos axisPos;
int axisId;
int crossAx;
QMap< XlsxAxis::AxisPos, QString > axisNames;
};
class ChartPrivate : public AbstractOOXmlFilePrivate
{
Q_DECLARE_PUBLIC(Chart)
public:
ChartPrivate(Chart *q, Chart::CreateFlag flag);
~ChartPrivate();
public:
bool loadXmlChart(QXmlStreamReader &reader);
bool loadXmlPlotArea(QXmlStreamReader &reader);
protected:
bool loadXmlPlotAreaElement(QXmlStreamReader &reader);
public:
bool loadXmlXxxChart(QXmlStreamReader &reader);
bool loadXmlSer(QXmlStreamReader &reader);
QString loadXmlNumRef(QXmlStreamReader &reader);
QString loadXmlStrRef(QXmlStreamReader &reader);
bool loadXmlChartTitle(QXmlStreamReader &reader);
bool loadXmlChartLegend(QXmlStreamReader &reader);
protected:
bool loadXmlChartTitleTx(QXmlStreamReader &reader);
bool loadXmlChartTitleTxRich(QXmlStreamReader &reader);
bool loadXmlChartTitleTxRichP(QXmlStreamReader &reader);
bool loadXmlChartTitleTxRichP_R(QXmlStreamReader &reader);
protected:
bool loadXmlAxisCatAx(QXmlStreamReader &reader);
bool loadXmlAxisDateAx(QXmlStreamReader &reader);
bool loadXmlAxisSerAx(QXmlStreamReader &reader);
bool loadXmlAxisValAx(QXmlStreamReader &reader);
bool loadXmlAxisEG_AxShared(QXmlStreamReader &reader, XlsxAxis* axis);
bool loadXmlAxisEG_AxShared_Scaling(QXmlStreamReader &reader, XlsxAxis* axis);
bool loadXmlAxisEG_AxShared_Title(QXmlStreamReader &reader, XlsxAxis* axis);
bool loadXmlAxisEG_AxShared_Title_Overlay(QXmlStreamReader &reader, XlsxAxis* axis);
bool loadXmlAxisEG_AxShared_Title_Tx(QXmlStreamReader &reader, XlsxAxis* axis);
bool loadXmlAxisEG_AxShared_Title_Tx_Rich(QXmlStreamReader &reader, XlsxAxis* axis);
bool loadXmlAxisEG_AxShared_Title_Tx_Rich_P(QXmlStreamReader &reader, XlsxAxis* axis);
bool loadXmlAxisEG_AxShared_Title_Tx_Rich_P_pPr(QXmlStreamReader &reader, XlsxAxis* axis);
bool loadXmlAxisEG_AxShared_Title_Tx_Rich_P_R(QXmlStreamReader &reader, XlsxAxis* axis);
QString readSubTree(QXmlStreamReader &reader);
public:
void saveXmlChart(QXmlStreamWriter &writer) const;
void saveXmlChartTitle(QXmlStreamWriter &writer) const;
void saveXmlPieChart(QXmlStreamWriter &writer) const;
void saveXmlBarChart(QXmlStreamWriter &writer) const;
void saveXmlLineChart(QXmlStreamWriter &writer) const;
void saveXmlScatterChart(QXmlStreamWriter &writer) const;
void saveXmlAreaChart(QXmlStreamWriter &writer) const;
void saveXmlDoughnutChart(QXmlStreamWriter &writer) const;
void saveXmlSer(QXmlStreamWriter &writer, XlsxSeries *ser, int id) const;
void saveXmlAxis(QXmlStreamWriter &writer) const;
void saveXmlChartLegend(QXmlStreamWriter &writer) const;
protected:
void saveXmlAxisCatAx(QXmlStreamWriter &writer, XlsxAxis* axis) const;
void saveXmlAxisDateAx(QXmlStreamWriter &writer, XlsxAxis* axis) const;
void saveXmlAxisSerAx(QXmlStreamWriter &writer, XlsxAxis* axis) const;
void saveXmlAxisValAx(QXmlStreamWriter &writer, XlsxAxis* axis) const;
void saveXmlAxisEG_AxShared(QXmlStreamWriter &writer, XlsxAxis* axis) const;
void saveXmlAxisEG_AxShared_Title(QXmlStreamWriter &writer, XlsxAxis* axis) const;
QString GetAxisPosString( XlsxAxis::AxisPos axisPos ) const;
QString GetAxisName(XlsxAxis* ptrXlsxAxis) const;
public:
Chart::ChartType chartType;
QList< std::shared_ptr<XlsxSeries> > seriesList;
QList< std::shared_ptr<XlsxAxis> > axisList;
QMap< XlsxAxis::AxisPos, QString > axisNames;
QString chartTitle;
AbstractSheet* sheet;
Chart::ChartAxisPos legendPos;
bool legendOverlay;
bool majorGridlinesEnabled;
bool minorGridlinesEnabled;
QString layout; // only for storing a readed file
};
QT_END_NAMESPACE_XLSX
#endif // QXLSX_CHART_P_H