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