108
425
return KoFilter::WrongFormat;
111
delete m_context->m_chart;
112
m_context->m_chart = new Charting::Chart;
114
delete m_context->m_chartExport;
115
m_context->m_chartExport = new ChartExport(m_context->m_chart);
117
428
while (!atEnd()) {
118
429
QXmlStreamReader::TokenType tokenType = readNext();
119
430
if(tokenType == QXmlStreamReader::Invalid || tokenType == QXmlStreamReader::EndDocument) break;
120
431
if (isStartElement()) {
432
m_areaContext = ChartArea;
121
433
TRY_READ_IF(plotArea)
434
ELSE_TRY_READ_IF(title)
122
435
ELSE_TRY_READ_IF(legend)
436
ELSE_TRY_READ_IF(spPr)
437
if (qualifiedName() == QLatin1String(QUALIFIED_NAME(autoTitleDeleted))) {
438
const QXmlStreamAttributes attrs(attributes());
439
TRY_READ_ATTR_WITHOUT_NS(val)
440
m_autoTitleDeleted = val.toInt();
442
if (qualifiedName() == QLatin1String(QUALIFIED_NAME(style))) {
443
const QXmlStreamAttributes attrs(attributes());
444
TRY_READ_ATTR_WITHOUT_NS(val)
445
m_context->m_chart->m_style = val.toInt();
126
450
// static is fine here cause we only need to take care that that number is unique in the
127
451
// exported ODS file and do not take if the number is continuous or whatever.
128
452
static int chartNumber = 0;
130
453
m_context->m_chartExport->m_href = QString("Chart%1").arg(++chartNumber);
131
QMap<XlsxXmlDrawingReaderContext::AnchorType, XlsxXmlDrawingReaderContext::Position> positions = m_context->drawingReaderContext->m_positions;
132
const QString sheetName = m_context->drawingReaderContext->worksheetReaderContext->worksheetName;
133
if(! sheetName.isEmpty()) {
134
m_context->m_chartExport->m_endCellAddress += sheetName + '.';
455
Charting::Chart* c = m_context->m_chart;
456
if(!c->m_sheetName.isEmpty()) {
457
m_context->m_chartExport->m_endCellAddress += c->m_sheetName + '.';
137
if(positions.contains(XlsxXmlDrawingReaderContext::FromAnchor)) {
138
XlsxXmlDrawingReaderContext::Position f = positions[XlsxXmlDrawingReaderContext::FromAnchor];
139
m_context->m_chartExport->m_endCellAddress += columnName(f.m_col) + QString::number(f.m_row);
140
m_context->m_chartExport->m_x = columnWidth(f.m_col-1, 0 /*f.m_colOff*/);
141
m_context->m_chartExport->m_y = rowHeight(f.m_row-1, 0 /*f.m_rowOff*/);
142
if(positions.contains(XlsxXmlDrawingReaderContext::ToAnchor)) {
143
XlsxXmlDrawingReaderContext::Position t = positions[XlsxXmlDrawingReaderContext::ToAnchor];
144
m_context->m_chartExport->m_width = columnWidth( t.m_col - f.m_col - 1, 0 /*t.m_colOff*/);
145
m_context->m_chartExport->m_height = rowHeight( t.m_row - f.m_row - 1, 0 /*t.m_rowOff*/);
459
if(c->m_fromColumn > 0 && c->m_fromRow > 0) {
460
m_context->m_chartExport->m_endCellAddress += columnName(c->m_fromColumn) + QString::number(c->m_fromRow);
461
m_context->m_chartExport->m_x = columnWidth(c->m_fromColumn-1, 0 /*f.m_colOff*/);
462
m_context->m_chartExport->m_y = rowHeight(c->m_fromRow-1, 0 /*f.m_rowOff*/);
463
if(c->m_toColumn > 0 && c->m_toRow > 0) {
464
m_context->m_chartExport->m_width = columnWidth( c->m_toColumn - c->m_fromColumn - 1, 0 /*t.m_colOff*/);
465
m_context->m_chartExport->m_height = rowHeight( c->m_toRow - c->m_fromRow - 1, 0 /*t.m_rowOff*/);
150
if (!m_context->m_chart->m_cellRangeAddress.isNull() ) {
469
if (!c->m_cellRangeAddress.isNull() ) {
151
470
m_context->m_chartExport->m_cellRangeAddress.clear();
152
if (!sheetName.isEmpty()) m_context->m_chartExport->m_cellRangeAddress += sheetName + '.';
153
m_context->m_chartExport->m_cellRangeAddress += columnName(m_context->m_chart->m_cellRangeAddress.left()) + QString::number(m_context->m_chart->m_cellRangeAddress.top()) + ":" +
154
columnName(m_context->m_chart->m_cellRangeAddress.right()) + QString::number(m_context->m_chart->m_cellRangeAddress.bottom());
471
if (!c->m_sheetName.isEmpty())
472
m_context->m_chartExport->m_cellRangeAddress += c->m_sheetName + '.';
473
m_context->m_chartExport->m_cellRangeAddress += columnName(c->m_cellRangeAddress.left()) + QString::number(c->m_cellRangeAddress.top()) + ":" +
474
columnName(c->m_cellRangeAddress.right()) + QString::number(c->m_cellRangeAddress.bottom());
157
m_context->m_chartExport->m_notifyOnUpdateOfRanges = m_currentSeries->m_valuesCellRangeAddress; //m_cellRangeAddress
477
if (m_currentSeries) {
478
m_context->m_chartExport->m_notifyOnUpdateOfRanges = m_currentSeries->m_valuesCellRangeAddress; //m_cellRangeAddress
159
481
// the index will by written by the XlsxXmlWorksheetReader
160
482
//m_context->m_chartExport->saveIndex(body);
162
484
// write the embedded object file
163
KoStore* storeout = m_context->drawingReaderContext->worksheetReaderContext->import->outputStore();
164
m_context->m_chartExport->saveContent(storeout, manifest);
485
m_context->m_chartExport->saveContent(m_context->m_storeout, manifest);
167
488
return KoFilter::OK;
170
491
#undef CURRENT_EL
492
#define CURRENT_EL valAx
493
KoFilter::ConversionStatus XlsxXmlChartReader::read_valAx()
496
Charting::Axis* axis = new Charting::Axis( Charting::Axis::VerticalValueAxis );
498
m_context->m_chart->m_axes.push_back( axis );
501
BREAK_IF_END_OF(CURRENT_EL);
502
if (isStartElement()) {
503
if ( qualifiedName() == QLatin1String( QUALIFIED_NAME(axPos) ) ) {
504
const QXmlStreamAttributes attrs(attributes());
505
TRY_READ_ATTR_WITHOUT_NS(val)
506
if ( val == QLatin1String( "b" ) ){
507
axis->m_type = Charting::Axis::HorizontalValueAxis;
509
// else if ( val == QLatin1String( "l" ) ){
513
else if ( qualifiedName() == QLatin1String( QUALIFIED_NAME(majorGridlines) ) ) {
514
axis->m_majorGridlines = Charting::Axis::Gridline( Charting::LineFormat( Charting::LineFormat::Solid ) );
521
#define CURRENT_EL catAx
522
KoFilter::ConversionStatus XlsxXmlChartReader::read_catAx()
525
Charting::Axis* axis = new Charting::Axis( Charting::Axis::VerticalValueAxis );
526
m_context->m_chart->m_axes.push_back( axis );
529
BREAK_IF_END_OF(CURRENT_EL);
530
if (isStartElement()) {
531
if ( qualifiedName() == QLatin1String( QUALIFIED_NAME(axPos) ) ) {
532
const QXmlStreamAttributes attrs(attributes());
533
TRY_READ_ATTR_WITHOUT_NS(val)
534
if ( val == QLatin1String( "b" ) ){
535
axis->m_type = Charting::Axis::HorizontalValueAxis;
537
// else if ( val == QLatin1String( "l" ) ){
540
else if ( qualifiedName() == QLatin1String( QUALIFIED_NAME(majorGridlines) ) ) {
541
axis->m_majorGridlines = Charting::Axis::Gridline( Charting::LineFormat( Charting::LineFormat::Solid ) );
171
549
#define CURRENT_EL plotArea
550
//! plotArea (Plot Area)
551
/*! ECMA-376, 21.2.2.145, p.3828.
557
- [Done]area3DChart (3D Area Charts) §21.2.2.4
558
- [Done]areaChart (Area Charts) §21.2.2.5
559
- [Done]bar3DChart (3D Bar Charts) §21.2.2.15
560
- [Done]barChart (Bar Charts) §21.2.2.16
561
- [Done]bubbleChart (Bubble Charts) §21.2.2.20
562
- [Done]catAx (Category Axis Data) §21.2.2.25
563
- dateAx (Date Axis) §21.2.2.39
564
- [Done]doughnutChart (Doughnut Charts) §21.2.2.50
565
- dTable (Data Table) §21.2.2.54
566
- extLst (Chart Extensibility) §21.2.2.64
567
- layout (Layout) §21.2.2.88
568
- [Done]line3DChart (3D Line Charts) §21.2.2.96
569
- [Done]lineChart (Line Charts) §21.2.2.97
570
- ofPieChart (Pie of Pie or Bar of Pie Charts) §21.2.2.126
571
- [Done]pie3DChart (3D Pie Charts) §21.2.2.140
572
- [Done]pieChart (Pie Charts) §21.2.2.141
573
- [Done]radarChart (Radar Charts) §21.2.2.153
574
- [Done]scatterChart (Scatter Charts) §21.2.2.161
575
- serAx (Series Axis) §21.2.2.175
576
- [Done]spPr (Shape Properties) §21.2.2.197
577
- [Done]stockChart (Stock Charts) §21.2.2.198
578
- [Done]surface3DChart (3D Surface Charts) §21.2.2.203
579
- [Done]surfaceChart (Surface Charts) §21.2.2.204
580
- [Done]valAx (Value Axis) §21.2.2.226
172
582
KoFilter::ConversionStatus XlsxXmlChartReader::read_plotArea()
584
m_areaContext = PlotArea;
175
586
while (!atEnd()) {
588
BREAK_IF_END_OF(CURRENT_EL);
177
589
if (isStartElement()) {
591
ELSE_TRY_READ_IF(valAx)
592
ELSE_TRY_READ_IF(catAx)
179
593
ELSE_TRY_READ_IF(pieChart)
180
ELSE_TRY_READ_IF(firstSliceAng)
594
ELSE_TRY_READ_IF(pie3DChart)
595
ELSE_TRY_READ_IF(doughnutChart)
596
ELSE_TRY_READ_IF(areaChart)
597
ELSE_TRY_READ_IF(area3DChart)
598
ELSE_TRY_READ_IF(barChart)
599
ELSE_TRY_READ_IF(bar3DChart)
600
ELSE_TRY_READ_IF(lineChart)
601
ELSE_TRY_READ_IF(line3DChart)
602
ELSE_TRY_READ_IF(scatterChart)
603
ELSE_TRY_READ_IF(radarChart)
604
ELSE_TRY_READ_IF(surfaceChart)
605
ELSE_TRY_READ_IF(surface3DChart)
606
ELSE_TRY_READ_IF(bubbleChart)
607
ELSE_TRY_READ_IF(stockChart)
182
BREAK_IF_END_OF(CURRENT_EL);
611
m_areaContext = ChartArea;
187
614
#undef CURRENT_EL
188
#define CURRENT_EL ser
189
KoFilter::ConversionStatus XlsxXmlChartReader::read_ser()
615
#define CURRENT_EL title
616
/*! Read the horizontal value. */
617
KoFilter::ConversionStatus XlsxXmlChartReader::read_title()
619
m_readTxContext = Title;
193
m_currentSeries = new Charting::Series;
194
m_context->m_chart->m_series << m_currentSeries;
195
//m_currentSeries->m_dataTypeX = record->dataTypeX();
196
//m_currentSeries->m_countXValues = record->countXValues();
197
//m_currentSeries->m_countYValues = record->countYValues();
198
//m_currentSeries->m_countBubbleSizeValues = record->countBubbleSizeValues();
200
621
while (!atEnd()) {
623
BREAK_IF_END_OF(CURRENT_EL);
202
624
if (isStartElement()) {
204
//ELSE_TRY_READ_IF(idx)
205
//ELSE_TRY_READ_IF(order)
625
if(!m_autoTitleDeleted)
626
if (QUALIFIED_NAME_IS(tx)) {
627
TRY_READ(chartText_Tx)
207
BREAK_IF_END_OF(CURRENT_EL);
631
if ( m_context->m_chart->m_title.isEmpty() )
632
m_context->m_chart->m_title = "Chart Title";
633
m_readTxContext = None;
213
637
#undef CURRENT_EL
214
638
#define CURRENT_EL val
640
/*! ECMA-376, 21.2.2.224, p.3867.
653
- numLit (Number Literal) §21.2.2.122
654
- [Done]numRef (Number Reference) §21.2.2.123
215
656
KoFilter::ConversionStatus XlsxXmlChartReader::read_val()
220
if (isStartElement()) {
221
TRY_READ_IF(numCache)
222
if (qualifiedName() == QLatin1String(QUALIFIED_NAME(f))) {
223
m_currentSeries->m_valuesCellRangeAddress = readElementText();
226
BREAK_IF_END_OF(CURRENT_EL);
659
d->m_currentNumRef = &d->m_currentVal->m_numRef;
662
BREAK_IF_END_OF(CURRENT_EL);
663
if (isStartElement()) {
671
#define CURRENT_EL xVal
673
/*! ECMA-376, 21.2.2.234, p.3872.
680
- multiLvlStrRef (Multi Level String Reference) §21.2.2.115
681
- numLit (Number Literal) §21.2.2.122
682
- [Done]numRef (Number Reference) §21.2.2.123
683
- strLit (String Literal) §21.2.2.200
684
- [Done]strRef (String Reference) §21.2.2.201
686
KoFilter::ConversionStatus XlsxXmlChartReader::read_xVal()
689
d->m_currentNumRef = &d->m_currentXVal->m_numRef;
690
d->m_currentStrRef = &d->m_currentXVal->m_strRef;
693
BREAK_IF_END_OF(CURRENT_EL);
694
if (isStartElement()) {
696
ELSE_TRY_READ_IF(strRef)
703
#define CURRENT_EL yVal
705
/*! ECMA-376, 21.2.2.237, p.3873.
712
- numLit (Number Literal) §21.2.2.122
713
- numRef (Number Reference) §21.2.2.123
715
KoFilter::ConversionStatus XlsxXmlChartReader::read_yVal()
718
d->m_currentNumRef = &d->m_currentYVal->m_numRef;
721
BREAK_IF_END_OF(CURRENT_EL);
722
if (isStartElement()) {
730
#define CURRENT_EL cat
731
//! cat (Category Axis Data)
732
/*! ECMA-376, 21.2.2.24, p.3766.
745
- multiLvlStrRef (Multi Level String Reference) §21.2.2.115
746
- numLit (Number Literal) §21.2.2.122
747
- [Done]numRef (Number Reference) §21.2.2.123
748
- strLit (String Literal) §21.2.2.200
749
- strRef (String Reference) §21.2.2.201
751
KoFilter::ConversionStatus XlsxXmlChartReader::read_cat()
754
d->m_currentStrRef = &d->m_currentCat->m_strRef;
755
d->m_currentNumRef = &d->m_currentCat->m_numRef;
758
BREAK_IF_END_OF(CURRENT_EL);
759
if (isStartElement()) {
761
ELSE_TRY_READ_IF(numRef)
768
#define CURRENT_EL tx
770
/*! ECMA-376, 21.2.2.215, p.3863.
773
- dispUnitsLbl (§21.2.2.46)
775
- title (§21.2.2.210)
776
- trendlineLbl (§21.2.2.212)
779
- rich (Rich Text) §21.2.2.156
780
- strRef (String Reference) §21.2.2.201
783
/*! This element specifies text to use on a chart, including rich text formatting. */
784
KoFilter::ConversionStatus XlsxXmlChartReader::read_chartText_Tx()
786
READ_PROLOGUE2(chartText_Tx)
787
enum { Start, InStrRef, InRichText } state;
791
BREAK_IF_END_OF(CURRENT_EL);
794
if (qualifiedName() == QLatin1String(QUALIFIED_NAME(strRef)))
795
state = isStartElement() ? InStrRef : Start;
796
else if (qualifiedName() == QLatin1String(QUALIFIED_NAME(rich)))
797
state = isStartElement() ? InRichText : Start;
799
case InStrRef: // plaintext within a series
800
// if (isStartElement() && !m_currentSeriesData->m_datasetValue.contains(Charting::Value::SeriesLegendOrTrendlineName)) {
801
// if (qualifiedName() == QLatin1String(QUALIFIED_NAME(f))) {
802
// Charting::Value* v = new Charting::Value(Charting::Value::SeriesLegendOrTrendlineName, Charting::Value::CellRange, readElementText());
803
// m_currentSeriesData->m_datasetValue[v->m_dataId] = v;
804
// } else if (qualifiedName() == QLatin1String(QUALIFIED_NAME(v))) {
805
// Charting::Value* v = new Charting::Value(Charting::Value::SeriesLegendOrTrendlineName, Charting::Value::TextOrValue, readElementText());
806
// m_currentSeriesData->m_datasetValue[v->m_dataId] = v;
810
case InRichText: // richtext means the title text
811
// we extract the text from the richtext cause we cannot handle the richtext formattings anyway
813
enum { Rich, Paragraph, TextRun } s;
819
if (isStartElement() && qualifiedName() == QLatin1String("a:p")) s = Paragraph;
822
if (qualifiedName() == QLatin1String("a:r")) // text run
823
s = isStartElement() ? TextRun : Rich;
826
if (qualifiedName() == QLatin1String("a:t")) {
827
if(isStartElement()) {
828
if(!result.isEmpty()) result += ' '; //concat multiple strings into one result
829
const QString text = readElementText();
831
m_context->m_chart->m_title = text;
837
BREAK_IF_END_OF(rich);
839
if(!result.isEmpty())
840
m_context->m_chart->m_texts << new Charting::Text(result);
849
#define CURRENT_EL tx
851
/*! ECMA-376, 21.2.2.215, p.3863.
864
- [Done]strRef (String Reference) §21.2.2.201
865
- v (Text Value) §21.2.2.223
868
/*! This element specifies text to use on a chart, including rich text formatting. */
869
KoFilter::ConversionStatus XlsxXmlChartReader::read_seriesText_Tx()
871
READ_PROLOGUE2(seriesText_Tx)
873
d->m_currentStrRef = &d->m_currentTx->m_strRef;
876
BREAK_IF_END_OF(CURRENT_EL);
877
if (isStartElement()) {
231
884
#undef CURRENT_EL
232
885
#define CURRENT_EL numCache
886
//! numCache (Number Cache)
887
/*! ECMA-376, 21.2.2.120, p.3813.
890
- numRef (§21.2.2.123)
893
- extLst (Chart Extensibility) §21.2.2.64
894
- formatCode (Format Code) §21.2.2.71
895
- [Done]pt (Numeric Point) §21.2.2.150
896
- [Done]ptCount (Point Count) §21.2.2.152
233
899
KoFilter::ConversionStatus XlsxXmlChartReader::read_numCache()
903
d->m_currentPtCount = &d->m_currentNumCache->m_ptCount;
904
d->m_currentPtCache = &d->m_currentNumCache->m_cache;
236
906
while (!atEnd()) {
908
BREAK_IF_END_OF(CURRENT_EL);
238
909
if (isStartElement()) {
239
if (qualifiedName() == QLatin1String(QUALIFIED_NAME(ptCount))) {
240
const QXmlStreamAttributes attrs(attributes());
241
TRY_READ_ATTR_WITHOUT_NS(val)
242
m_currentSeries->m_countYValues = val.toInt();
244
//else if (qualifiedName() == QLatin1String(QUALIFIED_NAME(pt)))
245
//else if (qualifiedName() == QLatin1String(QUALIFIED_NAME(formatCode)))
247
BREAK_IF_END_OF(CURRENT_EL);
253
918
#define CURRENT_EL legend
254
919
KoFilter::ConversionStatus XlsxXmlChartReader::read_legend()
924
BREAK_IF_END_OF(CURRENT_EL);
931
#define CURRENT_EL dLbl
932
//! dLbl (Data Label)
933
/*! ECMA-376, 21.2.2.47, p.3780.
937
- pivotFmt (§21.2.2.142)
940
- delete (Delete) §21.2.2.40
941
- dLblPos (Data Label Position) §21.2.2.48
942
- extLst (Chart Extensibility) §21.2.2.64
943
- idx (Index) §21.2.2.84
944
- layout (Layout) §21.2.2.88
945
- numFmt (Number Format) §21.2.2.121
946
- separator (Separator) §21.2.2.166
947
- showBubbleSize (Show Bubble Size) §21.2.2.178
948
- showCatName (Show Category Name) §21.2.2.179
949
- showLegendKey (Show Legend Key) §21.2.2.184
950
- showPercent (Show Percent) §21.2.2.187
951
- showSerName (Show Series Name) §21.2.2.188
952
- [Done]showVal (Show Value) §21.2.2.189
953
- spPr (Shape Properties) §21.2.2.197
954
- tx (Chart Text) §21.2.2.214
955
- txPr (Text Properties) §21.2.2.216
958
KoFilter::ConversionStatus XlsxXmlChartReader::read_dLbl()
963
BREAK_IF_END_OF(CURRENT_EL);
964
if (isStartElement()) {
965
if ( qualifiedName() == "c:showVal" ) {
966
m_currentSeries->m_showDataValues = true;
974
#define CURRENT_EL dLbls
975
//! dLbls (Data Labels)
976
/*! ECMA-376, 21.2.2.49, p.3781.
979
- area3DChart (§21.2.2.4)
980
- areaChart (§21.2.2.5)
981
- bar3DChart (§21.2.2.15)
982
- barChart (§21.2.2.16)
983
- bubbleChart (§21.2.2.20)
984
- doughnutChart (§21.2.2.50)
985
- line3DChart (§21.2.2.96)
986
- lineChart (§21.2.2.97)
987
- ofPieChart (§21.2.2.126)
988
- pie3DChart (§21.2.2.140)
989
- pieChart (§21.2.2.141)
990
- radarChart (§21.2.2.153)
991
- scatterChart (§21.2.2.161)
999
- stockChart (§21.2.2.198)
1002
- delete (Delete) §21.2.2.40
1003
- [Done]dLbl (Data Label) §21.2.2.47
1004
- dLblPos (Data Label Position) §21.2.2.48
1005
- extLst (Chart Extensibility) §21.2.2.64
1006
- leaderLines (Leader Lines) §21.2.2.92
1007
- numFmt (Number Format) §21.2.2.121
1008
- separator (Separator) §21.2.2.166
1009
- showBubbleSize (Show Bubble Size) §21.2.2.178
1010
- showCatName (Show Category Name) §21.2.2.179
1011
- showLeaderLines (Show Leader Lines) §21.2.2.183
1012
- showLegendKey (Show Legend Key) §21.2.2.184
1013
- showPercent (Show Percent) §21.2.2.187
1014
- showSerName (Show Series Name) §21.2.2.188
1015
- [Done]showVal (Show Value) §21.2.2.189
1016
- spPr (Shape Properties) §21.2.2.197
1017
- txPr (Text Properties) §21.2.2.216
1020
KoFilter::ConversionStatus XlsxXmlChartReader::read_dLbls()
1025
BREAK_IF_END_OF(CURRENT_EL);
1026
if (isStartElement()) {
1028
if ( qualifiedName() == "c:showVal" ) {
1029
m_currentSeries->m_showDataValues = true;
1039
#define CURRENT_EL spPr
1040
// Visual shape properties that can be applied to a shape.
1041
KoFilter::ConversionStatus XlsxXmlChartReader::read_spPr()
1043
enum State { Start, NoFill, InFill };
1044
State state = Start;
1047
bool readingGradient = false;
1048
bool readingGradientStop = false;
1049
Charting::Gradient* gradient = NULL;
1050
Charting::Gradient::GradientStop currentStop;
1053
BREAK_IF_END_OF(CURRENT_EL);
1054
if(isStartElement()) ++level;
1055
else if(isEndElement()) --level;
1057
if (qualifiedName() == "a:solidFill" || qualifiedName() == "a:pattFill" || qualifiedName() == "a:gradFill") {
1059
state = isStartElement() ? InFill : Start;
1060
} else if (qualifiedName() == "a:noFill") {
1062
state = isStartElement() ? NoFill : Start;
1063
} else if ((state == NoFill || state == InFill) && qualifiedName() == "a:srgbClr") {
1064
const QXmlStreamAttributes attrs(attributes());
1065
TRY_READ_ATTR_WITHOUT_NS(val)
1066
if(!val.isEmpty() && !m_context->m_chart->m_areaFormat) {
1067
if(!val.startsWith('#')) val.prepend('#');
1068
if ( readingGradientStop )
1069
currentStop.knownColorValue = QColor( val );
1071
if ( m_areaContext == ChartArea )
1072
m_context->m_chart->m_areaFormat = new Charting::AreaFormat(QColor(val), QColor(), state == InFill);
1074
m_context->m_chart->m_plotAreaFillColor = QColor( val );
1076
state = Start; // job done
1077
} else if ( qualifiedName() == "a:srgbClr" ) {
1078
if ( isStartElement() ) {
1079
const QXmlStreamAttributes attrs(attributes());
1080
TRY_READ_ATTR_WITHOUT_NS(val)
1081
if(!val.isEmpty() && !m_context->m_chart->m_areaFormat) {
1082
if(!val.startsWith('#')) val.prepend('#');
1083
if ( readingGradientStop )
1084
currentStop.knownColorValue = QColor( val );
1086
if ( m_areaContext == ChartArea )
1087
m_context->m_chart->m_areaFormat = new Charting::AreaFormat(QColor(val), QColor(), state == InFill);
1089
m_context->m_chart->m_plotAreaFillColor = QColor( val );
1092
} else if ( qualifiedName() == "a:alpha" ) {
1093
const QXmlStreamAttributes attrs(attributes());
1094
TRY_READ_ATTR_WITHOUT_NS(val)
1095
if ( !val.isEmpty() )
1097
if ( readingGradientStop )
1099
currentStop.knownColorValue.setAlphaF( val.toDouble() / 100000.0 );
1102
if ( m_areaContext == ChartArea ) {
1103
if (m_context->m_chart->m_areaFormat)
1104
m_context->m_chart->m_areaFormat->m_foreground.setAlphaF( val.toDouble() / 100000.0 );
1106
m_context->m_chart->m_plotAreaFillColor.setAlphaF( val.toDouble() / 100000.0 );
1110
} else if ( qualifiedName() == "a:gsLst" ) {
1111
if ( isStartElement() ) {
1112
readingGradient = true;
1113
gradient = new Charting::Gradient;
1114
} else if ( isEndElement() ) {
1115
readingGradient = false;
1116
switch ( m_areaContext ) {
1118
m_context->m_chart->m_plotAreaFillGradient = gradient;
1121
m_context->m_chart->m_fillGradient = gradient;
1126
} else if ( qualifiedName() == "a:gs" && readingGradient ) {
1127
if ( isStartElement() ) {
1128
readingGradientStop = true;
1129
const QXmlStreamAttributes attrs(attributes());
1130
TRY_READ_ATTR_WITHOUT_NS(pos)
1131
if ( !pos.isEmpty() )
1132
currentStop.position = pos.toDouble() / 1000.0;
1134
} else if ( isEndElement() ) {
1135
// append the current gradient stop
1136
gradient->gradientStops.append( currentStop );
1137
readingGradientStop = false;
1138
currentStop.reset();
1140
} else if ( qualifiedName() == "a:schemeClr" && readingGradientStop ) {
1141
if ( isStartElement() ) {
1142
const QXmlStreamAttributes attrs(attributes());
1143
TRY_READ_ATTR_WITHOUT_NS(val)
1144
if ( !val.isEmpty() )
1145
currentStop.referenceColor = val;
1146
} else if ( isEndElement() ) {
1148
} else if ( qualifiedName() == "a:tint" && readingGradientStop ) {
1149
const QXmlStreamAttributes attrs(attributes());
1150
TRY_READ_ATTR_WITHOUT_NS(val)
1151
if ( !val.isEmpty() )
1152
currentStop.tintVal = val.toDouble() / 1000.0;
1153
} else if ( qualifiedName() == "a:satMod" && readingGradientStop ) {
1154
const QXmlStreamAttributes attrs(attributes());
1155
TRY_READ_ATTR_WITHOUT_NS(val)
1156
if ( !val.isEmpty() )
1157
currentStop.satVal = val.toDouble() / 1000.0;
1159
else if ( qualifiedName() == "a:lin" && readingGradient ) {
1160
const QXmlStreamAttributes attrs(attributes());
1161
TRY_READ_ATTR_WITHOUT_NS(ang)
1162
if ( !ang.isEmpty() )
1163
gradient->angle = ang.toDouble() / 60000.0;
260
1169
#undef CURRENT_EL
261
1170
#define CURRENT_EL pieChart
1171
//! pieChart (Pie Charts)
1172
/*! ECMA-376, 21.2.2.141, p.3826.
1175
- plotArea §21.2.2.145
1178
- dLbls (Data Labels) §21.2.2.49
1179
- extLst (Chart Extensibility) §21.2.2.64
1180
- [Done]firstSliceAng (First Slice Angle) §21.2.2.68
1181
- [Done] ser (Pie Chart Series) §21.2.2.172
1182
- varyColors (Vary Colors by Point) §21.2.2.227
262
1184
KoFilter::ConversionStatus XlsxXmlChartReader::read_pieChart()
264
1186
if(!m_context->m_chart->m_impl) {
265
1187
m_context->m_chart->m_impl = new Charting::PieImpl();
1192
BREAK_IF_END_OF(CURRENT_EL);
1193
if (isStartElement()) {
1194
if (QUALIFIED_NAME_IS(ser)) {
1195
TRY_READ(pieChart_Ser)
1197
ELSE_TRY_READ_IF(firstSliceAng)
1201
qDeleteAll(d->m_seriesData);
1203
return KoFilter::OK;
1207
#define CURRENT_EL pie3DChart
1208
//! pie3DChart (3D Pie Charts)
1209
/*! ECMA-376, 21.2.2.140, p.3826.
1212
- plotArea §21.2.2.145
1215
- dLbls (Data Labels) §21.2.2.49
1216
- extLst (Chart Extensibility) §21.2.2.64
1217
- [Done] ser (Pie Chart Series) §21.2.2.172
1218
- varyColors (Vary Colors by Point) §21.2.2.227
1220
KoFilter::ConversionStatus XlsxXmlChartReader::read_pie3DChart()
1222
if(!m_context->m_chart->m_impl) {
1223
m_context->m_chart->m_impl = new Charting::PieImpl();
1224
m_context->m_chart->m_is3d = true;
1229
BREAK_IF_END_OF(CURRENT_EL);
1230
if (isStartElement()) {
1231
if (QUALIFIED_NAME_IS(ser)) {
1232
TRY_READ(pieChart_Ser)
1237
// // if there is only one c:ser, then c:tx can be chart title
1238
// if ((m_context->m_chart->m_title == "Chart Title") && (d->m_seriesData.size() == 1)) {
1239
// PieSeries * tempPieSeriesData = (PieSeries *)d->m_seriesData[0];
1240
// if (tempPieSeriesData->m_tx.m_strRef.m_strCache.m_cache.size() == 1) {
1241
// m_context->m_chart->m_title = tempPieSeriesData->m_tx.m_strRef.m_strCache.m_cache[0];
1245
qDeleteAll(d->m_seriesData);
1247
return KoFilter::OK;
1251
#define CURRENT_EL doughnutChart
1252
//! doughnutChart (Doughnut Charts)
1253
/*! ECMA-376, 21.2.2.50, p.3782.
1256
- plotArea §21.2.2.145
1259
- dLbls (Data Labels) §21.2.2.49
1260
- extLst (Chart Extensibility) §21.2.2.64
1261
- firstSliceAng (First Slice Angle) §21.2.2.68
1262
- [Done]holeSize (Hole Size) §21.2.2.82
1263
- [Done]ser (Pie Chart Series) §21.2.2.172
1264
- varyColors (Vary Colors by Point) §21.2.2.227
1266
KoFilter::ConversionStatus XlsxXmlChartReader::read_doughnutChart()
1268
if(!m_context->m_chart->m_impl) {
1269
m_context->m_chart->m_impl = new Charting::RingImpl();
1274
BREAK_IF_END_OF(CURRENT_EL);
1275
if (isStartElement()) {
1276
if (QUALIFIED_NAME_IS(ser)) {
1277
TRY_READ(pieChart_Ser)
1279
ELSE_TRY_READ_IF(holeSize)
1283
qDeleteAll(d->m_seriesData);
1285
return KoFilter::OK;
1289
#define CURRENT_EL areaChart
1290
//! areaChart (Area Charts)
1291
/*! ECMA-376, 21.2.2.5, p.3757.
1294
- plotArea §21.2.2.145
1297
- axId (Axis ID) §21.2.2.9
1298
- dLbls (Data Labels) §21.2.2.49
1299
- dropLines (Drop Lines) §21.2.2.53
1300
- extLst (Chart Extensibility) §21.2.2.64
1301
- grouping (Grouping) §21.2.2.76
1302
- [Done]ser (Area Chart Series) §21.2.2.168
1303
- varyColors (Vary Colors by Point) §21.2.2.227
1305
KoFilter::ConversionStatus XlsxXmlChartReader::read_areaChart()
1307
if(!m_context->m_chart->m_impl) {
1308
m_context->m_chart->m_impl = new Charting::AreaImpl();
1313
BREAK_IF_END_OF(CURRENT_EL);
1314
if (isStartElement()) {
1315
if (QUALIFIED_NAME_IS(ser)) {
1316
TRY_READ(areaChart_Ser)
1321
qDeleteAll(d->m_seriesData);
1323
return KoFilter::OK;
1327
#define CURRENT_EL area3DChart
1328
//! area3DChart (3D Area Charts)
1329
/*! ECMA-376, 21.2.2.4, p.3757.
1332
- plotArea §21.2.2.145
1335
- axId (Axis ID) §21.2.2.9
1336
- dLbls (Data Labels) §21.2.2.49
1337
- dropLines (Drop Lines) §21.2.2.53
1338
- extLst (Chart Extensibility) §21.2.2.64
1339
- gapDepth (Gap Depth) §21.2.2.74
1340
- grouping (Grouping) §21.2.2.76
1341
- [Done]ser (Area Chart Series) §21.2.2.168
1342
- varyColors (Vary Colors by Point) §21.2.2.227
1344
KoFilter::ConversionStatus XlsxXmlChartReader::read_area3DChart()
1346
if(!m_context->m_chart->m_impl) {
1347
m_context->m_chart->m_impl = new Charting::AreaImpl();
1348
m_context->m_chart->m_is3d = true;
1353
BREAK_IF_END_OF(CURRENT_EL);
1354
if (isStartElement()) {
1355
if (QUALIFIED_NAME_IS(ser)) {
1356
TRY_READ(areaChart_Ser)
1361
qDeleteAll(d->m_seriesData);
1363
return KoFilter::OK;
1367
#define CURRENT_EL barChart
1368
//! barChart (Bar Charts)
1369
/*! ECMA-376, 21.2.2.16, p.3863.
1372
- plotArea §21.2.2.145
1375
- axId (Axis ID) §21.2.2.9
1376
- [Done]barDir (Bar Direction) §21.2.2.17
1377
- dLbls (Data Labels) §21.2.2.49
1378
- extLst (Chart Extensibility) §21.2.2.64
1379
- gapWidth (Gap Width) §21.2.2.75
1380
- [Done]grouping (Bar Grouping) §21.2.2.77
1381
- overlap (Overlap) §21.2.2.131
1382
- [Done]ser (Bar Chart Series) §21.2.2.170
1383
- serLines (Series Lines) §21.2.2.176
1384
- varyColors (Vary Colors by Point) §21.2.2.227
1386
KoFilter::ConversionStatus XlsxXmlChartReader::read_barChart()
1388
if(!m_context->m_chart->m_impl) {
1389
m_context->m_chart->m_impl = new Charting::BarImpl();
1394
BREAK_IF_END_OF(CURRENT_EL);
1395
if (isStartElement()) {
1396
if (QUALIFIED_NAME_IS(ser)) {
1397
TRY_READ(barChart_Ser)
1399
ELSE_TRY_READ_IF(barDir)
1400
ELSE_TRY_READ_IF(grouping)
1404
qDeleteAll(d->m_seriesData);
1406
return KoFilter::OK;
1410
#define CURRENT_EL bar3DChart
1411
//! bar3DChart (3D Bar Charts)
1412
/*! ECMA-376, 21.2.2.15, p.3862.
1415
- plotArea §21.2.2.145
1418
- axId (Axis ID) §21.2.2.9
1419
- [done]barDir (Bar Direction) §21.2.2.17
1420
- dLbls (Data Labels) §21.2.2.49
1421
- extLst (Chart Extensibility) §21.2.2.64
1422
- gapDepth (Gap Depth) §21.2.2.74
1423
- gapWidth (Gap Width) §21.2.2.75
1424
- [Done]grouping (Bar Grouping) §21.2.2.77
1425
- [Done]ser (Bar Chart Series) §21.2.2.170
1426
- shape (Shape) §21.2.2.177
1427
- varyColors (Vary Colors by Point) §21.2.2.227
1429
KoFilter::ConversionStatus XlsxXmlChartReader::read_bar3DChart()
1431
if(!m_context->m_chart->m_impl) {
1432
m_context->m_chart->m_impl = new Charting::BarImpl();
1433
m_context->m_chart->m_is3d = true;
1438
BREAK_IF_END_OF(CURRENT_EL);
1439
if (isStartElement()) {
1440
if (QUALIFIED_NAME_IS(ser)) {
1441
TRY_READ(barChart_Ser)
1443
ELSE_TRY_READ_IF(barDir)
1444
ELSE_TRY_READ_IF(grouping)
1448
qDeleteAll(d->m_seriesData);
1450
return KoFilter::OK;
1454
#define CURRENT_EL lineChart
1455
//! lineChart (Line Charts)
1456
/*! ECMA-376, 21.2.2.97, p.3804.
1459
- plotArea §21.2.2.145
1462
- axId (Axis ID) §21.2.2.9
1463
- dLbls (Data Labels) §21.2.2.49
1464
- dropLines (Drop Lines) §21.2.2.53
1465
- extLst (Chart Extensibility) §21.2.2.64
1466
- [Done]grouping (Grouping) §21.2.2.76
1467
- hiLowLines (High Low Lines) §21.2.2.80
1468
- marker (Show Marker) §21.2.2.105
1469
- [Done]ser (Line Chart Series) §21.2.2.171
1470
- smooth (Smoothing) §21.2.2.194
1471
- upDownBars (Up/Down Bars) §21.2.2.218
1472
- varyColors (Vary Colors by Point) §21.2.2.227
1474
KoFilter::ConversionStatus XlsxXmlChartReader::read_lineChart()
1476
if(!m_context->m_chart->m_impl) {
1477
m_context->m_chart->m_impl = new Charting::LineImpl();
1482
BREAK_IF_END_OF(CURRENT_EL);
1483
if (isStartElement()) {
1484
if (QUALIFIED_NAME_IS(ser)) {
1485
TRY_READ(lineChart_Ser)
1487
ELSE_TRY_READ_IF(grouping)
1488
// if ( qualifiedName() == "c:marker" )
1490
const QXmlStreamAttributes attrs(attributes());
1491
TRY_READ_ATTR_WITHOUT_NS(val);
1492
if ( val == "1" || val == "true" || val == "on " )
1494
m_context->m_chart->m_showMarker = true;
1500
qDeleteAll(d->m_seriesData);
1502
return KoFilter::OK;
1506
#define CURRENT_EL line3DChart
1507
//! line3DChart (3D Line Charts)
1508
/*! ECMA-376, 21.2.2.96, p.3803.
1511
- plotArea §21.2.2.145
1514
- axId (Axis ID) §21.2.2.9
1515
- dLbls (Data Labels) §21.2.2.49
1516
- dropLines (Drop Lines) §21.2.2.53
1517
- extLst (Chart Extensibility) §21.2.2.64
1518
- gapDepth (Gap Depth) §21.2.2.74
1519
- [Done]grouping (Grouping) §21.2.2.76
1520
- [Done]ser (Line Chart Series) §21.2.2.171
1521
- varyColors (Vary Colors by Point) §21.2.2.227
1523
KoFilter::ConversionStatus XlsxXmlChartReader::read_line3DChart()
1525
if(!m_context->m_chart->m_impl) {
1526
m_context->m_chart->m_impl = new Charting::LineImpl();
1527
m_context->m_chart->m_is3d = true;
1532
BREAK_IF_END_OF(CURRENT_EL);
1533
if (isStartElement()) {
1534
if (QUALIFIED_NAME_IS(ser)) {
1535
TRY_READ(lineChart_Ser)
1537
ELSE_TRY_READ_IF(grouping)
1541
qDeleteAll(d->m_seriesData);
1543
return KoFilter::OK;
1547
#define CURRENT_EL scatterChart
1548
//! scatterChart (Scatter Charts)
1549
/*! ECMA-376, 21.2.2.161, p.3836.
1552
- plotArea §21.2.2.145
1555
- axId (Axis ID) §21.2.2.9
1556
- dLbls (Data Labels) §21.2.2.49
1557
- extLst (Chart Extensibility) §21.2.2.64
1558
- scatterStyle (Scatter Style) §21.2.2.162
1559
- [Done]ser (Scatter Chart Series) §21.2.2.167
1560
- varyColors (Vary Colors by Point) §21.2.2.227
1562
KoFilter::ConversionStatus XlsxXmlChartReader::read_scatterChart()
1564
if(!m_context->m_chart->m_impl) {
1565
m_context->m_chart->m_impl = new Charting::ScatterImpl();
1570
BREAK_IF_END_OF(CURRENT_EL);
1571
if (isStartElement()) {
1572
if (QUALIFIED_NAME_IS(ser)) {
1573
TRY_READ(scatterChart_Ser)
1578
qDeleteAll(d->m_seriesData);
1580
return KoFilter::OK;
1584
#define CURRENT_EL radarChart
1585
//! radarChart (Radar Charts)
1586
/*! ECMA-376, 21.2.2.153, p.3832.
1589
- plotArea §21.2.2.145
1592
- axId (Axis ID) §21.2.2.9
1593
- dLbls (Data Labels) §21.2.2.49
1594
- extLst (Chart Extensibility) §21.2.2.64
1595
- radarStyle (Radar Style) §21.2.2.154
1596
- [Done]ser (Radar Chart Series) §21.2.2.169
1597
- varyColors (Vary Colors by Point) §21.2.2.227
1599
KoFilter::ConversionStatus XlsxXmlChartReader::read_radarChart()
1601
if(!m_context->m_chart->m_impl) {
1602
m_context->m_chart->m_impl = new Charting::RadarImpl();
1607
BREAK_IF_END_OF(CURRENT_EL);
1608
if (isStartElement()) {
1609
if (QUALIFIED_NAME_IS(ser)) {
1610
TRY_READ(radarChart_Ser)
1615
qDeleteAll(d->m_seriesData);
1617
return KoFilter::OK;
1621
#define CURRENT_EL surfaceChart
1622
//! surface3DChart (3D Surface Charts)
1623
/*! ECMA-376, 21.2.2.203, p.3858.
1626
- plotArea §21.2.2.145
1629
- axId (Axis ID) §21.2.2.9
1630
- bandFmts (Band Formats) §21.2.2.14
1631
- extLst (Chart Extensibility) §21.2.2.64
1632
- [Done]ser (Surface Chart Series) §21.2.2.173
1633
- wireframe (Wireframe) §21.2.2.230
1635
KoFilter::ConversionStatus XlsxXmlChartReader::read_surfaceChart()
1637
if(!m_context->m_chart->m_impl) {
1638
m_context->m_chart->m_impl = new Charting::SurfaceImpl();
1643
BREAK_IF_END_OF(CURRENT_EL);
1644
if (isStartElement()) {
1645
if (QUALIFIED_NAME_IS(ser)) {
1646
TRY_READ(surfaceChart_Ser)
1651
qDeleteAll(d->m_seriesData);
1653
return KoFilter::OK;
1657
#define CURRENT_EL surface3DChart
1658
//! surfaceChart (Surface Charts)
1659
/*! ECMA-376, 21.2.2.204, p.3858.
1662
- plotArea §21.2.2.145
1665
- axId (Axis ID) §21.2.2.9
1666
- bandFmts (Band Formats) §21.2.2.14
1667
- extLst (Chart Extensibility) §21.2.2.64
1668
- ser (Surface Chart Series) §21.2.2.173
1669
- wireframe (Wireframe) §21.2.2.230
1671
KoFilter::ConversionStatus XlsxXmlChartReader::read_surface3DChart()
1673
if(!m_context->m_chart->m_impl) {
1674
m_context->m_chart->m_impl = new Charting::SurfaceImpl();
1675
m_context->m_chart->m_is3d = true;
1680
BREAK_IF_END_OF(CURRENT_EL);
1681
if (isStartElement()) {
1682
if (QUALIFIED_NAME_IS(ser)) {
1683
TRY_READ(surfaceChart_Ser)
1688
qDeleteAll(d->m_seriesData);
1690
return KoFilter::OK;
1694
#define CURRENT_EL bubbleChart
1695
//! bubbleChart (Bubble Charts)
1696
/*! ECMA-376, 21.2.2.20, p.3765.
1699
- plotArea §21.2.2.145
1702
- axId (Axis ID) §21.2.2.9
1703
- [Done]bubble3D (3D Bubble) §21.2.2.19
1704
- [Done]bubbleScale (Bubble Scale) §21.2.2.21
1705
- dLbls (Data Labels) §21.2.2.49
1706
- extLst (Chart Extensibility) §21.2.2.64
1707
- [Done]ser (Bubble Chart Series) §21.2.2.174
1708
- showNegBubbles (Show Negative Bubbles) §21.2.2.185
1709
- sizeRepresents (Size Represents) §21.2.2.193
1710
- varyColors (Vary Colors by Point) §21.2.2.227
1712
KoFilter::ConversionStatus XlsxXmlChartReader::read_bubbleChart()
1714
if(!m_context->m_chart->m_impl) {
1715
m_context->m_chart->m_impl = new Charting::BubbleImpl();
1716
m_context->m_chart->m_is3d = true;
1721
BREAK_IF_END_OF(CURRENT_EL);
1722
if (isStartElement()) {
1723
if (QUALIFIED_NAME_IS(ser)) {
1724
TRY_READ(bubbleChart_Ser)
1726
ELSE_TRY_READ_IF(bubbleScale)
1727
ELSE_TRY_READ_IF(bubble3D)
1731
// check if there are some c:strLit or c:numLit data and if yes then write them into internalTable
1732
// for (int i=0; i<d->m_seriesData.size(); i++ ){
1733
// QString range = ((BubbleSeries *)d->m_seriesData[i])->m_bubbleSize.writeLitToInternalTable(this);
1734
// if (!range.isEmpty()) {
1735
// m_context->m_chart->m_series[i]->m_domainValuesCellRangeAddress.push_back(range);
1739
qDeleteAll(d->m_seriesData);
1741
return KoFilter::OK;
1745
#define CURRENT_EL stockChart
1746
//! stockChart (Stock Charts)
1747
/*! ECMA-376, 21.2.2.199, p.3856.
1750
- plotArea §21.2.2.145
1753
- axId (Axis ID) §21.2.2.9
1754
- dLbls (Data Labels) §21.2.2.49
1755
- dropLines (Drop Lines) §21.2.2.53
1756
- extLst (Chart Extensibility) §21.2.2.64
1757
- hiLowLines (High Low Lines) §21.2.2.80
1758
- [done]ser (Line Chart Series) §21.2.2.171
1759
- upDownBars (Up/Down Bars) §21.2.2.218
1761
KoFilter::ConversionStatus XlsxXmlChartReader::read_stockChart()
1763
if(!m_context->m_chart->m_impl) {
1764
m_context->m_chart->m_impl = new Charting::StockImpl();
1769
BREAK_IF_END_OF(CURRENT_EL);
1770
if (isStartElement()) {
1771
if (QUALIFIED_NAME_IS(ser)) {
1772
TRY_READ(lineChart_Ser)
1777
qDeleteAll(d->m_seriesData);
1779
return KoFilter::OK;
1783
#define CURRENT_EL ser
1784
//! ser (Pie Chart Series)
1785
/*! ECMA-376, 21.2.2.172, p.3842.
1788
- doughnutChart §21.2.2.50
1789
- ofPieChart §21.2.2.126
1790
- pie3DChart §21.2.2.140
1791
- pieChart §21.2.2.141
1794
- cat (Category Axis Data) §21.2.2.24
1795
- [Done]dLbls (Data Labels) §21.2.2.49
1796
- dPt (Data Point) §21.2.2.52
1797
- explosion (Explosion) §21.2.2.61
1798
- extLst (Chart Extensibility) §21.2.2.64
1799
- [Done]idx (Index) §21.2.2.84
1800
- [Done] order (Order) §21.2.2.128
1801
- spPr (Shape Properties) §21.2.2.197
1802
- tx (Series Text) §21.2.2.215
1803
- val (Values) §21.2.2.224
1807
KoFilter::ConversionStatus XlsxXmlChartReader::read_pieChart_Ser()
1809
READ_PROLOGUE2(pieChart_Ser)
1811
m_currentSeries = new Charting::Series();
1812
m_context->m_chart->m_series << m_currentSeries;
1814
PieSeries * tempPieSeriesData = new PieSeries();
1815
d->m_seriesData << tempPieSeriesData;
1817
d->m_currentIdx = &tempPieSeriesData->m_idx;
1818
d->m_currentOrder = &tempPieSeriesData->m_order;
1819
d->m_currentTx = &tempPieSeriesData->m_tx;
1820
d->m_currentCat = &tempPieSeriesData->m_cat;
1821
d->m_currentVal = &tempPieSeriesData->m_val;
1822
d->m_currentExplosion = &tempPieSeriesData->m_explosion;
1826
BREAK_IF_END_OF(CURRENT_EL);
1827
if (isStartElement()) {
1829
ELSE_TRY_READ_IF(idx)
1830
if (QUALIFIED_NAME_IS(tx)) {
1831
TRY_READ(seriesText_Tx)
1833
ELSE_TRY_READ_IF(cat)
1834
ELSE_TRY_READ_IF(val)
1835
ELSE_TRY_READ_IF(explosion)
1836
ELSE_TRY_READ_IF(dLbls)
1840
// set data ranges and write data to internal table
1841
m_currentSeries->m_countYValues = tempPieSeriesData->m_val.m_numRef.m_numCache.m_ptCount;
1843
m_currentSeries->m_labelCell = tempPieSeriesData->m_tx.writeRefToInternalTable(this);
1845
m_currentSeries->m_valuesCellRangeAddress = tempPieSeriesData->m_val.writeRefToInternalTable(this);
1847
m_context->m_chart->m_verticalCellRangeAddress = tempPieSeriesData->m_cat.writeRefToInternalTable(this);
1850
if (tempPieSeriesData->m_explosion != 0) {
1851
if(Charting::PieImpl* pie = dynamic_cast<Charting::PieImpl*>(m_context->m_chart->m_impl)) {
1853
m_currentSeries->m_datasetFormat << new Charting::PieFormat(tempPieSeriesData->m_explosion);
1861
#define CURRENT_EL ser
1862
//! ser (Bubble Chart Series)
1863
/*! ECMA-376, 21.2.2.174, p.3843.
1866
- ser (Bubble Chart Series)
1869
- [Done]bubble3D (3D Bubble) §21.2.2.19
1870
- [Done]bubbleSize (Bubble Size) §21.2.2.22
1871
- [Done]dLbls (Data Labels) §21.2.2.49
1872
- dPt (Data Point) §21.2.2.52
1873
- errBars (Error Bars) §21.2.2.55
1874
- extLst (Chart Extensibility) §21.2.2.64
1875
- [Done]idx (Index) §21.2.2.84
1876
- invertIfNegative (Invert if Negative) §21.2.2.86
1877
- [Done]order (Order) §21.2.2.128
1878
- spPr (Shape Properties) §21.2.2.197
1879
- trendline (Trendlines) §21.2.2.211
1880
- [Done]tx (Series Text) §21.2.2.215
1881
- [Done]xVal (X Values) §21.2.2.234
1882
- [Done]yVal (Y Values) §21.2.2.237
1886
KoFilter::ConversionStatus XlsxXmlChartReader::read_bubbleChart_Ser()
1888
READ_PROLOGUE2(bubbleChart_Ser)
1890
m_currentSeries = new Charting::Series();
1891
m_context->m_chart->m_series << m_currentSeries;
1893
BubbleSeries * tempBubbleSeriesData = new BubbleSeries();
1894
d->m_seriesData << tempBubbleSeriesData;
1896
d->m_currentIdx = &tempBubbleSeriesData->m_idx;
1897
d->m_currentOrder = &tempBubbleSeriesData->m_order;
1898
d->m_currentTx = &tempBubbleSeriesData->m_tx;
1899
d->m_currentXVal = &tempBubbleSeriesData->m_xVal;
1900
d->m_currentYVal = &tempBubbleSeriesData->m_yVal;
1901
d->m_currentBubbleSize = &tempBubbleSeriesData->m_bubbleSize;
1905
BREAK_IF_END_OF(CURRENT_EL);
1906
if (isStartElement()) {
1908
ELSE_TRY_READ_IF(idx)
1909
if (QUALIFIED_NAME_IS(tx)) {
1910
TRY_READ(seriesText_Tx)
1912
ELSE_TRY_READ_IF(xVal)
1913
ELSE_TRY_READ_IF(yVal)
1914
ELSE_TRY_READ_IF(bubbleSize)
1915
ELSE_TRY_READ_IF(dLbls)
1916
ELSE_TRY_READ_IF(bubble3D)
1920
// set data ranges and write data to internal table
1921
m_currentSeries->m_labelCell = tempBubbleSeriesData->m_tx.writeRefToInternalTable(this);
1923
m_currentSeries->m_countYValues = tempBubbleSeriesData->m_yVal.m_numRef.m_numCache.m_ptCount;
1925
m_currentSeries->m_domainValuesCellRangeAddress << tempBubbleSeriesData->m_yVal.writeRefToInternalTable(this);
1927
if ( tempBubbleSeriesData->m_bubbleSize.m_numRef.m_f.isEmpty() )
1928
m_currentSeries->m_valuesCellRangeAddress = tempBubbleSeriesData->m_bubbleSize.writeLitToInternalTable(this);
1930
m_currentSeries->m_valuesCellRangeAddress = tempBubbleSeriesData->m_bubbleSize.writeRefToInternalTable(this);
1933
// m_currentSeries->m_domainValuesCellRangeAddress.push_back(tempBubbleSeriesData->m_xVal.writeRefToInternalTable(this));
1935
// QString bubbleSizeRange = tempBubbleSeriesData->m_bubbleSize.writeRefToInternalTable(this);
1936
// if (!bubbleSizeRange.isEmpty()) {
1937
// m_currentSeries->m_domainValuesCellRangeAddress.push_back(tempBubbleSeriesData->m_bubbleSize.writeRefToInternalTable(this));
1944
#define CURRENT_EL ser
1945
//! ser (Scatter Chart Series)
1946
/*! ECMA-376, 21.2.2.167, p.3838.
1949
- scatterChart (§21.2.2.161)
1952
- [Done]dLbls (Data Labels) §21.2.2.49
1953
- dPt (Data Point) §21.2.2.52
1954
- errBars (Error Bars) §21.2.2.55
1955
- extLst (Chart Extensibility) §21.2.2.64
1956
- [done]idx (Index) §21.2.2.84
1957
- marker (Marker) §21.2.2.106
1958
- [Done]order (Order) §21.2.2.128
1959
- smooth (Smoothing) §21.2.2.194
1960
- spPr (Shape Properties) §21.2.2.197
1961
- trendline (Trendlines) §21.2.2.211
1962
- [Done]tx (Series Text) §21.2.2.215
1963
- [Done]xVal (X Values) §21.2.2.234
1964
- [Done]yVal (Y Values) §21.2.2.237
1967
KoFilter::ConversionStatus XlsxXmlChartReader::read_scatterChart_Ser()
1969
READ_PROLOGUE2(scatterChart_Ser)
1971
m_currentSeries = new Charting::Series();
1972
m_context->m_chart->m_series << m_currentSeries;
1974
ScatterSeries * tempScatterSeriesData = new ScatterSeries();
1975
d->m_seriesData << tempScatterSeriesData;
1977
d->m_currentIdx = &tempScatterSeriesData->m_idx;
1978
d->m_currentOrder = &tempScatterSeriesData->m_order;
1979
d->m_currentTx = &tempScatterSeriesData->m_tx;
1980
d->m_currentXVal = &tempScatterSeriesData->m_xVal;
1981
d->m_currentYVal = &tempScatterSeriesData->m_yVal;
1985
BREAK_IF_END_OF(CURRENT_EL);
1986
if (isStartElement()) {
1988
ELSE_TRY_READ_IF(idx)
1989
if (QUALIFIED_NAME_IS(tx)) {
1990
TRY_READ(seriesText_Tx)
1992
ELSE_TRY_READ_IF(xVal)
1993
ELSE_TRY_READ_IF(yVal)
1994
ELSE_TRY_READ_IF(dLbls)
1995
// ELSE_TRY_READ_IF(spPr)
1999
// set data ranges and write data to internal table
2000
m_currentSeries->m_labelCell = tempScatterSeriesData->m_tx.writeRefToInternalTable(this);
2002
m_currentSeries->m_countYValues = tempScatterSeriesData->m_yVal.m_numRef.m_numCache.m_ptCount;
2004
m_currentSeries->m_valuesCellRangeAddress = tempScatterSeriesData->m_yVal.writeRefToInternalTable(this);
2006
//m_currentSeries->m_domainValuesCellRangeAddress.push_back(tempScatterSeriesData->m_xVal.writeRefToInternalTable(this));
2012
#define CURRENT_EL ser
2013
//! ser (Bar Chart Series)
2014
/*! ECMA-376, 21.2.2.167, p.3840.
2017
- bar3DChart (§21.2.2.15)
2018
- barChart (§21.2.2.16)
2021
- [Done]cat (Category Axis Data) §21.2.2.24
2022
- [Done]dLbls (Data Labels) §21.2.2.49
2023
- dPt (Data Point) §21.2.2.52
2024
- errBars (Error Bars) §21.2.2.55
2025
- extLst (Chart Extensibility) §21.2.2.64
2026
- idx (Index) §21.2.2.84
2027
- invertIfNegative (Invert if Negative) §21.2.2.86
2028
- order (Order) §21.2.2.128
2029
- pictureOptions (Picture Options) §21.2.2.138
2030
- shape (Shape) §21.2.2.177
2031
- spPr (Shape Properties) §21.2.2.197
2032
- trendline (Trendlines) §21.2.2.211
2033
- [Done]tx (Series Text) §21.2.2.215
2034
- [Done]val (Values) §21.2.2.224
2037
KoFilter::ConversionStatus XlsxXmlChartReader::read_barChart_Ser()
2039
READ_PROLOGUE2(barChart_Ser)
2041
m_currentSeries = new Charting::Series();
2042
m_context->m_chart->m_series << m_currentSeries;
2044
BarSeries * tempBarSeriesData = new BarSeries();
2045
d->m_seriesData << tempBarSeriesData;
2047
d->m_currentIdx = &tempBarSeriesData->m_idx;
2048
d->m_currentOrder = &tempBarSeriesData->m_order;
2049
d->m_currentTx = &tempBarSeriesData->m_tx;
2050
d->m_currentCat = &tempBarSeriesData->m_cat;
2051
d->m_currentVal = &tempBarSeriesData->m_val;
2055
BREAK_IF_END_OF(CURRENT_EL);
2056
if (isStartElement()) {
2058
ELSE_TRY_READ_IF(idx)
2059
if (QUALIFIED_NAME_IS(tx)) {
2060
TRY_READ(seriesText_Tx)
2062
ELSE_TRY_READ_IF(cat)
2063
ELSE_TRY_READ_IF(val)
2064
ELSE_TRY_READ_IF(dLbls)
2068
// set data ranges and write data to internal table
2069
m_currentSeries->m_countYValues = tempBarSeriesData->m_val.m_numRef.m_numCache.m_ptCount;
2071
m_currentSeries->m_labelCell = tempBarSeriesData->m_tx.writeRefToInternalTable(this);
2073
m_currentSeries->m_valuesCellRangeAddress = tempBarSeriesData->m_val.writeRefToInternalTable(this);
2075
m_context->m_chart->m_verticalCellRangeAddress = tempBarSeriesData->m_cat.writeRefToInternalTable(this);
2081
#define CURRENT_EL ser
2082
//! ser (Area Chart Series)
2083
/*! ECMA-376, 21.2.2.168, p.3839.
2086
- area3DChart (§21.2.2.4)
2087
- areaChart (§21.2.2.5)
2090
- cat (Category Axis Data) §21.2.2.24
2091
- [Done]dLbls (Data Labels) §21.2.2.49
2092
- dPt (Data Point) §21.2.2.52
2093
- errBars (Error Bars) §21.2.2.55
2094
- extLst (Chart Extensibility) §21.2.2.64
2095
- idx (Index) §21.2.2.84
2096
- order (Order) §21.2.2.128
2097
- pictureOptions (Picture Options) §21.2.2.138
2098
- spPr (Shape Properties) §21.2.2.197
2099
- trendline (Trendlines) §21.2.2.211
2100
- tx (Series Text) §21.2.2.215
2101
- val (Values) §21.2.2.224
2104
KoFilter::ConversionStatus XlsxXmlChartReader::read_areaChart_Ser()
2106
READ_PROLOGUE2(areaChart_Ser)
2108
m_currentSeries = new Charting::Series();
2109
m_context->m_chart->m_series << m_currentSeries;
2111
AreaSeries * tempAreaSeriesData = new AreaSeries();
2112
d->m_seriesData << tempAreaSeriesData;
2114
d->m_currentIdx = &tempAreaSeriesData->m_idx;
2115
d->m_currentOrder = &tempAreaSeriesData->m_order;
2116
d->m_currentTx = &tempAreaSeriesData->m_tx;
2117
d->m_currentCat = &tempAreaSeriesData->m_cat;
2118
d->m_currentVal = &tempAreaSeriesData->m_val;
2122
BREAK_IF_END_OF(CURRENT_EL);
2123
if (isStartElement()) {
2125
ELSE_TRY_READ_IF(idx)
2126
if (QUALIFIED_NAME_IS(tx)) {
2127
TRY_READ(seriesText_Tx)
2129
ELSE_TRY_READ_IF(cat)
2130
ELSE_TRY_READ_IF(val)
2131
ELSE_TRY_READ_IF(dLbls)
2135
// set data ranges and write data to internal table
2136
m_currentSeries->m_countYValues = tempAreaSeriesData->m_val.m_numRef.m_numCache.m_ptCount;
2138
m_currentSeries->m_labelCell = tempAreaSeriesData->m_tx.writeRefToInternalTable(this);
2140
m_currentSeries->m_valuesCellRangeAddress = tempAreaSeriesData->m_val.writeRefToInternalTable(this);
2142
m_context->m_chart->m_verticalCellRangeAddress = tempAreaSeriesData->m_cat.writeRefToInternalTable(this);
2148
#define CURRENT_EL ser
2149
//! ser (Radar Chart Series)
2150
/*! ECMA-376, 21.2.2.169, p.3840.
2153
- radarChart (§21.2.2.153)
2156
- [Done]cat (Category Axis Data) §21.2.2.24
2157
- [Done]dLbls (Data Labels) §21.2.2.49
2158
- dPt (Data Point) §21.2.2.52
2159
- extLst (Chart Extensibility) §21.2.2.64
2160
- [Done]idx (Index) §21.2.2.84
2161
- marker (Marker) §21.2.2.106
2162
- [Done]order (Order) §21.2.2.128
2163
- spPr (Shape Properties) §21.2.2.197
2164
- [Done]tx (Series Text) §21.2.2.215
2165
- [Done]val (Values) §21.2.2.224
2168
KoFilter::ConversionStatus XlsxXmlChartReader::read_radarChart_Ser()
2170
READ_PROLOGUE2(radarChart_Ser)
2172
m_currentSeries = new Charting::Series();
2173
m_context->m_chart->m_series << m_currentSeries;
2175
RadarSeries * tempRadarSeriesData = new RadarSeries();
2176
d->m_seriesData << tempRadarSeriesData;
2178
d->m_currentIdx = &tempRadarSeriesData->m_idx;
2179
d->m_currentOrder = &tempRadarSeriesData->m_order;
2180
d->m_currentTx = &tempRadarSeriesData->m_tx;
2181
d->m_currentCat = &tempRadarSeriesData->m_cat;
2182
d->m_currentVal = &tempRadarSeriesData->m_val;
2186
BREAK_IF_END_OF(CURRENT_EL);
2187
if (isStartElement()) {
2189
ELSE_TRY_READ_IF(idx)
2190
if (QUALIFIED_NAME_IS(tx)) {
2191
TRY_READ(seriesText_Tx)
2193
ELSE_TRY_READ_IF(cat)
2194
ELSE_TRY_READ_IF(val)
2195
ELSE_TRY_READ_IF(dLbls)
2199
// set data ranges and write data to internal table
2200
m_currentSeries->m_countYValues = tempRadarSeriesData->m_val.m_numRef.m_numCache.m_ptCount;
2202
m_currentSeries->m_labelCell = tempRadarSeriesData->m_tx.writeRefToInternalTable(this);
2204
m_currentSeries->m_valuesCellRangeAddress = tempRadarSeriesData->m_val.writeRefToInternalTable(this);
2206
m_context->m_chart->m_verticalCellRangeAddress = tempRadarSeriesData->m_cat.writeRefToInternalTable(this);
2212
#define CURRENT_EL ser
2213
//! ser (Line Chart Series)
2214
/*! ECMA-376, 21.2.2.168, p.3839.
2217
- line3DChart (§21.2.2.96)
2218
- lineChart (§21.2.2.97)
2219
- stockChart (§21.2.2.198)
2222
- [Done]cat (Category Axis Data) §21.2.2.24
2223
- [Done]dLbls (Data Labels) §21.2.2.49
2224
- dPt (Data Point) §21.2.2.52
2225
- errBars (Error Bars) §21.2.2.55
2226
- extLst (Chart Extensibility) §21.2.2.64
2227
- [Done]idx (Index) §21.2.2.84
2228
- marker (Marker) §21.2.2.106
2229
- [Done]order (Order) §21.2.2.128
2230
- smooth (Smoothing) §21.2.2.194
2231
- spPr (Shape Properties) §21.2.2.197
2232
- trendline (Trendlines) §21.2.2.211
2233
- [Done]tx (Series Text) §21.2.2.215
2234
- [Done]val (Values) §21.2.2.224
2237
KoFilter::ConversionStatus XlsxXmlChartReader::read_lineChart_Ser()
2239
READ_PROLOGUE2(lineChart_Ser)
2241
m_currentSeries = new Charting::Series();
2242
m_context->m_chart->m_series << m_currentSeries;
2244
LineSeries * tempLineSeriesData = new LineSeries();
2245
d->m_seriesData << tempLineSeriesData;
2247
d->m_currentIdx = &tempLineSeriesData->m_idx;
2248
d->m_currentOrder = &tempLineSeriesData->m_order;
2249
d->m_currentTx = &tempLineSeriesData->m_tx;
2250
d->m_currentCat = &tempLineSeriesData->m_cat;
2251
d->m_currentVal = &tempLineSeriesData->m_val;
2255
BREAK_IF_END_OF(CURRENT_EL);
2256
if (isStartElement()) {
2258
ELSE_TRY_READ_IF(idx)
2259
if (QUALIFIED_NAME_IS(tx)) {
2260
TRY_READ(seriesText_Tx)
2262
ELSE_TRY_READ_IF(cat)
2263
ELSE_TRY_READ_IF(val)
2264
ELSE_TRY_READ_IF(dLbls)
2265
ELSE_TRY_READ_IF(serMarker)
2266
// if ( qualifiedName() == "c:marker" )
2268
// const QXmlStreamAttributes attrs(attributes());
2269
// TRY_READ_ATTR_WITHOUT_NS(val);
2270
// if ( val == "1" || val == "true" || val == "on " )
2272
// if ( m_currentSeries->markerType == Charting::Series::None )
2273
// switch ( d->m_numReadSeries )
2276
// m_currentSeries->markerType = Charting::Series::Square;
2279
// m_currentSeries->markerType = Charting::Series::Diamond;
2284
// ++d->m_numReadSeries;
2291
// set data ranges and write data to internal table
2292
m_currentSeries->m_countYValues = tempLineSeriesData->m_val.m_numRef.m_numCache.m_ptCount;
2294
m_currentSeries->m_labelCell = tempLineSeriesData->m_tx.writeRefToInternalTable(this);
2296
m_currentSeries->m_valuesCellRangeAddress = tempLineSeriesData->m_val.writeRefToInternalTable(this);
2298
m_context->m_chart->m_verticalCellRangeAddress = tempLineSeriesData->m_cat.writeRefToInternalTable(this);
2304
#define CURRENT_EL marker
2305
KoFilter::ConversionStatus XlsxXmlChartReader::read_serMarker()
2307
using namespace Charting;
2308
READ_PROLOGUE2( serMarker )
2311
BREAK_IF_END_OF(CURRENT_EL);
2312
if (isStartElement()) {
2313
if ( qualifiedName() == "c:symbol" )
2315
const QXmlStreamAttributes attrs(attributes());
2316
TRY_READ_ATTR_WITHOUT_NS(val);
2317
if ( val.toLower() == "star" )
2318
m_currentSeries->markerType = Series::Star;
2319
else if ( val.toLower() == "dash" )
2320
m_currentSeries->markerType = Series::Dash;
2321
else if ( val.toLower() == "dot" )
2322
m_currentSeries->markerType = Series::Dot;
2323
else if ( val.toLower() == "plus" )
2324
m_currentSeries->markerType = Series::Plus;
2325
else if ( val.toLower() == "circle" )
2326
m_currentSeries->markerType = Series::Circle;
2327
else if ( val.toLower() == "x" )
2328
m_currentSeries->markerType = Series::SymbolX;
2329
else if ( val.toLower() == "triangle" )
2330
m_currentSeries->markerType = Series::Triangle;
2331
else if ( val.toLower() == "squre" )
2332
m_currentSeries->markerType = Series::Square;
2333
else if ( val.toLower() == "diamond" )
2334
m_currentSeries->markerType = Series::Diamond;
2342
#define CURRENT_EL ser
2343
//! ser (Surface Chart Series)
2344
/*! ECMA-376, 21.2.2.169, p.3840.
2347
- surface3DChart (§21.2.2.203)
2348
- surfaceChart (§21.2.2.204)
2351
- [Done]cat (Category Axis Data) §21.2.2.24
2352
- extLst (Chart Extensibility) §21.2.2.64
2353
- [Done]idx (Index) §21.2.2.84
2354
- marker (Marker) §21.2.2.106
2355
- [Done]order (Order) §21.2.2.128
2356
- spPr (Shape Properties) §21.2.2.197
2357
- [Done]tx (Series Text) §21.2.2.215
2358
- [Done]val (Values) §21.2.2.224
2361
KoFilter::ConversionStatus XlsxXmlChartReader::read_surfaceChart_Ser()
2363
READ_PROLOGUE2(surfaceChart_Ser)
2365
m_currentSeries = new Charting::Series();
2366
m_context->m_chart->m_series << m_currentSeries;
2368
SurfaceSeries * tempSurfaceSeriesData = new SurfaceSeries();
2369
d->m_seriesData << tempSurfaceSeriesData;
2371
d->m_currentIdx = &tempSurfaceSeriesData->m_idx;
2372
d->m_currentOrder = &tempSurfaceSeriesData->m_order;
2373
d->m_currentTx = &tempSurfaceSeriesData->m_tx;
2374
d->m_currentCat = &tempSurfaceSeriesData->m_cat;
2375
d->m_currentVal = &tempSurfaceSeriesData->m_val;
2379
BREAK_IF_END_OF(CURRENT_EL);
2380
if (isStartElement()) {
2382
ELSE_TRY_READ_IF(idx)
2383
if (QUALIFIED_NAME_IS(tx)) {
2384
TRY_READ(seriesText_Tx)
2386
ELSE_TRY_READ_IF(cat)
2387
ELSE_TRY_READ_IF(val)
2391
// set data ranges and write data to internal table
2392
m_currentSeries->m_countYValues = tempSurfaceSeriesData->m_val.m_numRef.m_numCache.m_ptCount;
2394
m_currentSeries->m_labelCell = tempSurfaceSeriesData->m_tx.writeRefToInternalTable(this);
2396
m_currentSeries->m_valuesCellRangeAddress = tempSurfaceSeriesData->m_val.writeRefToInternalTable(this);
2398
m_context->m_chart->m_verticalCellRangeAddress = tempSurfaceSeriesData->m_cat.writeRefToInternalTable(this);
2404
#define CURRENT_EL barDir
2405
//! barDir (Bar Direction)
2406
/*! ECMA-376, 21.2.2.17, p.3763.
2409
- bar3DChart (§21.2.2.15)
2410
- barChart (§21.2.2.16)
2413
- [Done] val (Bar Direction Value)
2415
KoFilter::ConversionStatus XlsxXmlChartReader::read_barDir()
2417
const QXmlStreamAttributes attrs(attributes());
2418
TRY_READ_ATTR_WITHOUT_NS(val)
2419
m_context->m_chart->m_transpose = (val == "bar"); // "bar" or "col"
2421
BREAK_IF_END_OF(CURRENT_EL);
2424
return KoFilter::OK;
2428
#define CURRENT_EL grouping
2429
//! grouping (Bar Grouping)
2430
/*! ECMA-376, 21.2.2.77, p.3794.
2433
- bar3DChart (§21.2.2.15)
2434
- barChart (§21.2.2.16)
2437
- [Done] val (Bar Grouping Value)
2439
KoFilter::ConversionStatus XlsxXmlChartReader::read_grouping()
2441
const QXmlStreamAttributes attrs(attributes());
2442
TRY_READ_ATTR_WITHOUT_NS(val)
2443
if(val == "stacked") {
2444
m_context->m_chart->m_stacked = true;
2445
} else if(val == "percentStacked") {
2446
m_context->m_chart->m_stacked = true;
2447
m_context->m_chart->m_f100 = true;
2448
} else if(val == "clustered") {
2450
} // else if(val == "standard") is not needed cause that's the default anyway
2452
BREAK_IF_END_OF(CURRENT_EL);
2455
return KoFilter::OK;
2459
#define CURRENT_EL firstSliceAng
2460
//! firstSliceAng (First Slice Angle)
2461
/*! ECMA-376, 21.2.2.68, p.3790.
2464
- doughnutChart (§21.2.2.50)
2465
- pieChart (§21.2.2.141)
2468
- val (First Slice Angle Value)
270
2470
KoFilter::ConversionStatus XlsxXmlChartReader::read_firstSliceAng()
272
2472
if(Charting::PieImpl* pie = dynamic_cast<Charting::PieImpl*>(m_context->m_chart->m_impl)) {
273
2473
const QXmlStreamAttributes attrs(attributes());
2474
QString val(attrs.value("val").toString());
275
2475
pie->m_anStart = val.toInt(); // default value is zero
2478
BREAK_IF_END_OF(CURRENT_EL);
2481
return KoFilter::OK;
2485
#define CURRENT_EL holeSize
2486
//! holeSize (Hole Size)
2487
/*! ECMA-376, 21.2.2.82, p.3797.
2490
- doughnutChart (§21.2.2.50)
2493
- val (Hole Size Value)
2495
KoFilter::ConversionStatus XlsxXmlChartReader::read_holeSize()
2497
if(Charting::RingImpl* ring = dynamic_cast<Charting::RingImpl*>(m_context->m_chart->m_impl)) {
2498
const QXmlStreamAttributes attrs(attributes());
2499
QString val(attrs.value("val").toString());
2500
ring->m_pcDonut = val.toInt(); // default value is zero
2503
BREAK_IF_END_OF(CURRENT_EL);
2506
return KoFilter::OK;
2510
#define CURRENT_EL bubbleSize
2511
//! bubbleSize (Bubble Size)
2512
/*! ECMA-376, 21.2.2.22, p.3876.
2518
- numLit (Number Literal) §21.2.2.122
2519
- [done]numRef (Number Reference) §21.2.2.123
2521
KoFilter::ConversionStatus XlsxXmlChartReader::read_bubbleSize()
2524
d->m_currentNumRef = &d->m_currentBubbleSize->m_numRef;
2525
d->m_currentNumLit = &d->m_currentBubbleSize->m_numLit;
2528
BREAK_IF_END_OF(CURRENT_EL);
2529
if (isStartElement()) {
2531
ELSE_TRY_READ_IF(numLit)
2539
#define CURRENT_EL bubbleScale
2540
//! bubbleScale (Bubble Scale)
2541
/*! ECMA-376, 21.2.2.21, p.3765.
2544
- bubbleChart (§21.2.2.20)
2547
- [Done] val (Bubble Scale Value)
2549
KoFilter::ConversionStatus XlsxXmlChartReader::read_bubbleScale()
2553
const QXmlStreamAttributes attrs(attributes());
2554
QString val(attrs.value("val").toString());
2556
if(Charting::BubbleImpl* bubble = dynamic_cast<Charting::BubbleImpl*>(m_context->m_chart->m_impl)) {
2558
const int i = val.toInt(&ok);
2560
bubble->m_sizeRatio = i;
2567
#define CURRENT_EL bubble3D
2568
//! bubble3D (3D Bubble)
2569
/*! ECMA-376, 21.2.2.21, p.3765.
2572
- bubbleChart (§21.2.2.20)
2577
- [Done] val (Boolean Value)
2579
KoFilter::ConversionStatus XlsxXmlChartReader::read_bubble3D()
2583
const QXmlStreamAttributes attrs(attributes());
2584
QString val(attrs.value("val").toString());
2586
m_context->m_chart->m_is3d = val.toInt();
2592
#define CURRENT_EL numLit
2593
//! numLit (Number Literal)
2594
/*! ECMA-376, 21.2.2.122, p.3815.
2597
- bubbleSize (§21.2.2.22)
2599
- minus (§21.2.2.113)
2600
- plus (§21.2.2.147)
2603
- yVal (§21.2.2.237)
2606
- extLst (Chart Extensibility) §21.2.2.64
2607
- formatCode (Format Code) §21.2.2.71
2608
- [Done]pt (Numeric Point) §21.2.2.150
2609
- [Done]ptCount (Point Count) §21.2.2.152
2611
KoFilter::ConversionStatus XlsxXmlChartReader::read_numLit()
2614
d->m_currentPtCount = &d->m_currentNumLit->m_ptCount;
2615
d->m_currentPtCache = &d->m_currentNumLit->m_cache;
2616
while ( !atEnd() ) {
2618
BREAK_IF_END_OF( CURRENT_EL );
2619
if ( isStartElement() ) {
2620
TRY_READ_IF(ptCount)
2621
ELSE_TRY_READ_IF(pt)
2628
#define CURRENT_EL pt
2629
//! pt (String Point)
2630
/*! ECMA-376, 21.2.2.151, p.3831.
2634
- strCache (§21.2.2.199)
2635
- strLit (§21.2.2.200)
2638
- [Done]v (Text Value)
2643
KoFilter::ConversionStatus XlsxXmlChartReader::read_pt()
2646
while ( !atEnd() ) {
2648
BREAK_IF_END_OF( CURRENT_EL );
2649
if ( isStartElement() ) {
2650
if ( qualifiedName() == QLatin1String( QUALIFIED_NAME( v ) ) ) {
2651
d->m_currentPtCache->append(readElementText());
2659
#define CURRENT_EL order
2661
/*! ECMA-376, 21.2.2.128, p.3817.
2674
- [Done] val (Integer Value)
2676
KoFilter::ConversionStatus XlsxXmlChartReader::read_order()
2680
const QXmlStreamAttributes attrs(attributes());
2681
QString val(attrs.value("val").toString());
2682
*d->m_currentOrder = val.toInt();
2689
#define CURRENT_EL idx
2691
/*! ECMA-376, 21.2.2.84, p.3798.
2694
- bandFmt (§21.2.2.13)
2697
- legendEntry (§21.2.2.94)
2698
- pivotFmt (§21.2.2.142)
2709
- [Done] val (Integer Value)
2711
KoFilter::ConversionStatus XlsxXmlChartReader::read_idx()
2715
const QXmlStreamAttributes attrs(attributes());
2716
QString val(attrs.value("val").toString());
2717
*d->m_currentIdx = val.toInt();
2724
#define CURRENT_EL explosion
2725
//! explosion (Explosion)
2726
/*! ECMA-376, 21.2.2.61, p.3787.
2733
- [Done] val (Integer Value)
2735
KoFilter::ConversionStatus XlsxXmlChartReader::read_explosion()
2739
const QXmlStreamAttributes attrs(attributes());
2740
QString val(attrs.value("val").toString());
2741
*d->m_currentExplosion = val.toInt();
2748
#define CURRENT_EL strRef
2749
//! strRef (String Reference)
2750
/*! ECMA-376, 21.2.2.201, p.3857.
2756
- xVal (§21.2.2.234)
2759
- extLst (Chart Extensibility) §21.2.2.64
2760
- [Done]f (Formula) §21.2.2.65
2761
- [Done]strCache (String Cache) §21.2.2.199
2763
KoFilter::ConversionStatus XlsxXmlChartReader::read_strRef()
2767
d->m_currentF = &d->m_currentStrRef->m_f;
2768
d->m_currentStrCache = &d->m_currentStrRef->m_strCache;
2772
BREAK_IF_END_OF(CURRENT_EL);
2773
if (isStartElement()) {
2775
ELSE_TRY_READ_IF(strCache)
2782
#define CURRENT_EL numRef
2783
//! numRef (String Reference)
2784
/*! ECMA-376, 21.2.2.123, p.3815.
2787
- bubbleSize (§21.2.2.22)
2789
- minus (§21.2.2.113)
2790
- plus (§21.2.2.147)
2792
- xVal (§21.2.2.234)
2793
- yVal (§21.2.2.237)
2796
- extLst (Chart Extensibility) §21.2.2.64
2797
- [Done]f (Formula) §21.2.2.65
2798
- [Done]numCache (Number Cache) §21.2.2.120
2800
KoFilter::ConversionStatus XlsxXmlChartReader::read_numRef()
2804
d->m_currentF = &d->m_currentNumRef->m_f;
2805
d->m_currentNumCache = &d->m_currentNumRef->m_numCache;
2809
BREAK_IF_END_OF(CURRENT_EL);
2810
if (isStartElement()) {
2812
ELSE_TRY_READ_IF(numCache)
2819
#define CURRENT_EL f
2821
/*! ECMA-376, 21.2.2.65, p.3789.
2824
- multiLvlStrRef (§21.2.2.115)
2825
- numRef (§21.2.2.123)
2826
- strRef (§21.2.2.201)
2828
KoFilter::ConversionStatus XlsxXmlChartReader::read_f()
2832
const QXmlStreamAttributes attrs(attributes());
2833
*d->m_currentF = readElementText();
2835
BREAK_IF_END_OF(CURRENT_EL);
2839
if (d->m_currentF->size() != 0) {
2840
QPair<QString,QRect> result = splitCellRange( *d->m_currentF );
2841
m_context->m_chart->addRange( result.second );
2848
#define CURRENT_EL ptCount
2849
//! ptCount (Point Count)
2850
/*! ECMA-376, 21.2.2.152, p.3832.
2853
- multiLvlStrCache (§21.2.2.114)
2854
- numCache (§21.2.2.120)
2855
- numLit (§21.2.2.122)
2856
- strCache (§21.2.2.199)
2857
- strLit (§21.2.2.200)
2860
- [Done] val (Integer Value)
2862
KoFilter::ConversionStatus XlsxXmlChartReader::read_ptCount()
2866
const QXmlStreamAttributes attrs(attributes());
2867
QString val(attrs.value("val").toString());
2868
*d->m_currentPtCount = val.toInt();
2875
#define CURRENT_EL strCache
2876
//! strCache (String Cache)
2877
/*! ECMA-376, 21.2.2.199, p.3856.
2880
- strRef (§21.2.2.201)
2883
- extLst (Chart Extensibility) §21.2.2.64
2884
- [Done]pt (String Point) §21.2.2.151
2885
- [Done]ptCount (Point Count) §21.2.2.152
2888
KoFilter::ConversionStatus XlsxXmlChartReader::read_strCache()
2892
d->m_currentPtCount = &d->m_currentStrCache->m_ptCount;
2893
d->m_currentPtCache = &d->m_currentStrCache->m_cache;
2897
BREAK_IF_END_OF(CURRENT_EL);
2898
if (isStartElement()) {
2899
TRY_READ_IF(ptCount)
2900
ELSE_TRY_READ_IF(pt)
2906
int charToInt( const QString& string )
2908
if (string.isEmpty()) {
2914
for(int i=string.size()-1; i>-1; i--,multiplier = multiplier*26) {
2915
char val = string[i].toAscii();
2916
if ( val >= 65 && val <= 90 ) {
2917
ret = ret + (val - 64)*multiplier;
2926
QString XlsxXmlChartReader::AlocateAndWriteIntoInternalTable(QVector< QString > &buffer, QString format)
2928
if (buffer.size() == 0)
2931
//create range where to place the data
2932
QString range("local");
2933
Charting::InternalTable *internalTable = &m_context->m_chart->m_internalTable;
2935
range += "!$" + columnName(internalTable->maxColumn()+1) +"$" + "1" + ":$" + columnName(internalTable->maxColumn()+1) +
2936
"$" + QString::number(buffer.size());
2938
WriteIntoInternalTable(range, buffer, format);
2942
void XlsxXmlChartReader::WriteIntoInternalTable(QString &range, QVector< QString > &buffer, QString format)
2944
if(range.isEmpty()) {
2947
const QString sheet = range.section( '!', 0, 0 );
2948
const QString cellRange = range.section( '!', 1, -1 );
2949
const QStringList& res = cellRange.split( QRegExp( "[$:]" ), QString::SkipEmptyParts );
2951
if (res.isEmpty()) {
2955
int startColumn = charToInt( res[ 0 ] );
2956
int startRow = res[ 1 ].toInt();
2959
if (res.size() >= 4) {
2960
endColumn = charToInt( res[ 2 ] );
2961
endRow = res[ 3 ].toInt();
2963
endColumn = startColumn ;
2967
// kDebug()<<"range " << range;
2968
// kDebug()<<"sheet " << sheet;
2969
// kDebug()<<"cellRange " << cellRange;
2970
// kDebug()<<"startColumn " << startColumn;
2971
// kDebug()<<"startRow " << startRow;
2972
// kDebug()<<"endColumn " << endColumn;
2973
// kDebug()<<"endRow " << endRow;
2975
// kDebug()<<"buffer.size() " << buffer.size();
2977
Charting::InternalTable *internalTable = &m_context->m_chart->m_internalTable;
2978
if (startColumn < endColumn) {
2979
if ((endColumn - startColumn +1) == buffer.size()) {
2981
int bufferIndex = 0;
2982
for(int i = startColumn; i <=endColumn; i++,bufferIndex++) {
2983
Charting::Cell *cell = internalTable->cell(i,startRow,true);
2984
cell->m_valueType = format;
2985
cell->m_value = buffer[bufferIndex];
2986
// kDebug()<<"m_value " << format;
2987
// kDebug()<<"buffer[bufferIndex] " << buffer[bufferIndex];
2988
// kDebug()<<"cell row" << startRow;
2989
// kDebug()<<"cell column " << i;
2992
} else if (startRow < endRow){
2993
if ((endRow - startRow +1) == buffer.size()) {
2995
int bufferIndex = 0;
2996
for(int i = startRow; i <=endRow; i++,bufferIndex++) {
2997
Charting::Cell *cell = internalTable->cell(startColumn,i,true);
2998
cell->m_valueType = format;
2999
cell->m_value = buffer[bufferIndex];
3000
// kDebug()<<"m_value " << format;
3001
// kDebug()<<"buffer[bufferIndex] " << buffer[bufferIndex];
3002
// kDebug()<<"cell row" << i;
3003
// kDebug()<<"cell column " << startColumn;
3007
if (buffer.size() != 0) {
3008
Charting::Cell *cell = internalTable->cell(startColumn,startRow,true);
3009
cell->m_valueType = format;
3010
cell->m_value = buffer[0];
3011
// kDebug()<<"m_value " << format;
3012
// kDebug()<<"buffer[bufferIndex] " << buffer[0];
3013
// kDebug()<<"cell row" << startRow;
3014
// kDebug()<<"cell column " << startColumn;