149 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			149 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | // xlsxchart_p.h
 | ||
|  | 
 | ||
|  | #ifndef QXLSX_CHART_P_H
 | ||
|  | #define QXLSX_CHART_P_H
 | ||
|  | 
 | ||
|  | #include "xlsxabstractooxmlfile_p.h"
 | ||
|  | #include "xlsxchart.h"
 | ||
|  | 
 | ||
|  | #include <memory>
 | ||
|  | 
 | ||
|  | #include <QList>
 | ||
|  | #include <QMap>
 | ||
|  | #include <QObject>
 | ||
|  | #include <QString>
 | ||
|  | #include <QVector>
 | ||
|  | #include <QXmlStreamReader>
 | ||
|  | #include <QXmlStreamWriter>
 | ||
|  | 
 | ||
|  | 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 read file
 | ||
|  | }; | ||
|  | 
 | ||
|  | QT_END_NAMESPACE_XLSX | ||
|  | 
 | ||
|  | #endif // QXLSX_CHART_P_H
 |