1 // xlsxchart_p.h
2 
3 #ifndef QXLSX_CHART_P_H
4 #define QXLSX_CHART_P_H
5 
6 #include <QtGlobal>
7 #include <QObject>
8 #include <QString>
9 #include <QSharedPointer>
10 #include <QVector>
11 #include <QMap>
12 #include <QList>
13 #include <QXmlStreamReader>
14 #include <QXmlStreamWriter>
15 
16 #include "xlsxabstractooxmlfile_p.h"
17 #include "xlsxchart.h"
18 
19 QT_BEGIN_NAMESPACE_XLSX
20 
21 class XlsxSeries
22 {
23 public:
24     //At present, we care about number cell ranges only!
25     QString numberDataSource_numRef; // yval, val
26     QString axDataSource_numRef; // xval, cat
27     QString headerH_numRef;
28     QString headerV_numRef;
29     bool    swapHeader = false;
30 };
31 
32 class XlsxAxis
33 {
34 public:
35     enum Type { T_None = (-1), T_Cat, T_Val, T_Date, T_Ser };
36     enum AxisPos { None = (-1), Left, Right, Top, Bottom };
37 public:
XlsxAxis()38     XlsxAxis(){}
39 
40     XlsxAxis( Type t,
41               XlsxAxis::AxisPos p,
42               int id,
43               int crossId,
44               QString axisTitle = QString())
45     {
46         type = t;
47         axisPos = p;
48         axisId = id;
49         crossAx = crossId;
50 
51         if ( !axisTitle.isEmpty() )
52         {
53             axisNames[ p ] = axisTitle;
54         }
55     }
56 
57 public:
58     Type type;
59     XlsxAxis::AxisPos axisPos;
60     int axisId;
61     int crossAx;
62     QMap< XlsxAxis::AxisPos, QString > axisNames;
63 };
64 
65 class ChartPrivate : public AbstractOOXmlFilePrivate
66 {
67     Q_DECLARE_PUBLIC(Chart)
68 
69 public:
70     ChartPrivate(Chart *q, Chart::CreateFlag flag);
71     ~ChartPrivate();
72 
73 public:
74     bool loadXmlChart(QXmlStreamReader &reader);
75     bool loadXmlPlotArea(QXmlStreamReader &reader);
76 protected:
77     bool loadXmlPlotAreaElement(QXmlStreamReader &reader);
78 public:
79     bool loadXmlXxxChart(QXmlStreamReader &reader);
80     bool loadXmlSer(QXmlStreamReader &reader);
81     QString loadXmlNumRef(QXmlStreamReader &reader);
82     QString loadXmlStrRef(QXmlStreamReader &reader);
83     bool loadXmlChartTitle(QXmlStreamReader &reader);
84     bool loadXmlChartLegend(QXmlStreamReader &reader);
85 protected:
86     bool loadXmlChartTitleTx(QXmlStreamReader &reader);
87     bool loadXmlChartTitleTxRich(QXmlStreamReader &reader);
88     bool loadXmlChartTitleTxRichP(QXmlStreamReader &reader);
89     bool loadXmlChartTitleTxRichP_R(QXmlStreamReader &reader);
90 protected:
91     bool loadXmlAxisCatAx(QXmlStreamReader &reader);
92     bool loadXmlAxisDateAx(QXmlStreamReader &reader);
93     bool loadXmlAxisSerAx(QXmlStreamReader &reader);
94     bool loadXmlAxisValAx(QXmlStreamReader &reader);
95     bool loadXmlAxisEG_AxShared(QXmlStreamReader &reader, XlsxAxis* axis);
96     bool loadXmlAxisEG_AxShared_Scaling(QXmlStreamReader &reader, XlsxAxis* axis);
97     bool loadXmlAxisEG_AxShared_Title(QXmlStreamReader &reader, XlsxAxis* axis);
98     bool loadXmlAxisEG_AxShared_Title_Overlay(QXmlStreamReader &reader, XlsxAxis* axis);
99     bool loadXmlAxisEG_AxShared_Title_Tx(QXmlStreamReader &reader, XlsxAxis* axis);
100     bool loadXmlAxisEG_AxShared_Title_Tx_Rich(QXmlStreamReader &reader, XlsxAxis* axis);
101     bool loadXmlAxisEG_AxShared_Title_Tx_Rich_P(QXmlStreamReader &reader, XlsxAxis* axis);
102     bool loadXmlAxisEG_AxShared_Title_Tx_Rich_P_pPr(QXmlStreamReader &reader, XlsxAxis* axis);
103     bool loadXmlAxisEG_AxShared_Title_Tx_Rich_P_R(QXmlStreamReader &reader, XlsxAxis* axis);
104 
105     QString readSubTree(QXmlStreamReader &reader);
106 
107 public:
108     void saveXmlChart(QXmlStreamWriter &writer) const;
109     void saveXmlChartTitle(QXmlStreamWriter &writer) const;
110     void saveXmlPieChart(QXmlStreamWriter &writer) const;
111     void saveXmlBarChart(QXmlStreamWriter &writer) const;
112     void saveXmlLineChart(QXmlStreamWriter &writer) const;
113     void saveXmlScatterChart(QXmlStreamWriter &writer) const;
114     void saveXmlAreaChart(QXmlStreamWriter &writer) const;
115     void saveXmlDoughnutChart(QXmlStreamWriter &writer) const;
116     void saveXmlSer(QXmlStreamWriter &writer, XlsxSeries *ser, int id) const;
117     void saveXmlAxis(QXmlStreamWriter &writer) const;
118     void saveXmlChartLegend(QXmlStreamWriter &writer) const;
119 
120 protected:
121     void saveXmlAxisCatAx(QXmlStreamWriter &writer, XlsxAxis* axis) const;
122     void saveXmlAxisDateAx(QXmlStreamWriter &writer, XlsxAxis* axis) const;
123     void saveXmlAxisSerAx(QXmlStreamWriter &writer, XlsxAxis* axis) const;
124     void saveXmlAxisValAx(QXmlStreamWriter &writer, XlsxAxis* axis) const;
125 
126     void saveXmlAxisEG_AxShared(QXmlStreamWriter &writer, XlsxAxis* axis) const;
127     void saveXmlAxisEG_AxShared_Title(QXmlStreamWriter &writer, XlsxAxis* axis) const;
128     QString GetAxisPosString( XlsxAxis::AxisPos axisPos ) const;
129     QString GetAxisName(XlsxAxis* ptrXlsxAxis) const;
130 
131 public:
132     Chart::ChartType chartType;
133     QList< QSharedPointer<XlsxSeries> > seriesList;
134     QList< QSharedPointer<XlsxAxis> > axisList;
135     QMap< XlsxAxis::AxisPos, QString > axisNames;
136     QString chartTitle;
137     AbstractSheet* sheet;
138     Chart::ChartAxisPos legendPos;
139     bool legendOverlay;
140     bool majorGridlinesEnabled;
141     bool minorGridlinesEnabled;
142 
143     QString layout;             // only for storing a readed file
144 };
145 
146 QT_END_NAMESPACE_XLSX
147 
148 #endif // QXLSX_CHART_P_H
149