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
149 lines
4.9 KiB
2 years ago
|
// 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
|