[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: koffice/filters/kspread/xlsx
From: Sebastian Sauer <mail () dipe ! org>
Date: 2010-03-25 17:37:08
Message-ID: 20100325173708.EC04CAC876 () svn ! kde ! org
[Download RAW message or body]
SVN commit 1107449 by sebsauer:
Let the first Pie-chart show up. Lot of things are still missing.
M +1 -1 Charting.h
M +101 -21 XlsxXmlChartReader.cpp
M +5 -1 XlsxXmlChartReader.h
--- trunk/koffice/filters/kspread/xlsx/Charting.h #1107448:1107449
@@ -129,7 +129,7 @@
/// List of text records attached to the series.
//QHash<QList<Text*> > texts;
- explicit Series() {}
+ explicit Series() : m_dataTypeX(0), m_countXValues(0), m_countYValues(0), \
m_countBubbleSizeValues(0) {}
~Series() { qDeleteAll(m_datasetValue); qDeleteAll(m_datasetFormat); }
};
--- trunk/koffice/filters/kspread/xlsx/XlsxXmlChartReader.cpp #1107448:1107449
@@ -37,6 +37,23 @@
#include <MsooXmlReader_p.h>
#include <MsooXmlUtils.h>
+#include <QFontMetricsF>
+
+// calculates the column width in pixels
+int columnWidth(unsigned long col, unsigned long dx = 0, qreal defaultColumnWidth = \
8.43) { + QFont font("Arial", 10);
+ QFontMetricsF fm(font);
+ const qreal characterWidth = fm.width("h");
+ defaultColumnWidth *= characterWidth;
+ return (defaultColumnWidth * col) + (dx / 1024.0 * defaultColumnWidth);
+}
+
+// calculates the row height in pixels
+int rowHeight(unsigned long row, unsigned long dy = 0, qreal defaultRowHeight = \
12.75) +{
+ return defaultRowHeight * row + dy;
+}
+
// Returns A for 1, B for 2, C for 3, etc.
QString columnName(uint column)
{
@@ -66,6 +83,7 @@
XlsxXmlChartReader::XlsxXmlChartReader(KoOdfWriters *writers)
: MSOOXML::MsooXmlCommonReader(writers)
, m_context(0)
+ , m_currentSeries(0)
{
}
@@ -101,10 +119,7 @@
if(tokenType == QXmlStreamReader::Invalid || tokenType == \
QXmlStreamReader::EndDocument) break; if (isStartElement()) {
TRY_READ_IF(plotArea)
- ELSE_TRY_READ_IF(ser)
ELSE_TRY_READ_IF(legend)
- ELSE_TRY_READ_IF(pieChart)
- ELSE_TRY_READ_IF(firstSliceAng)
}
}
@@ -113,30 +128,28 @@
static int chartNumber = 0;
m_context->m_chartExport->m_href = QString("Chart%1").arg(++chartNumber);
-
+ QMap<XlsxXmlDrawingReaderContext::AnchorType, \
XlsxXmlDrawingReaderContext::Position> positions = \
m_context->drawingReaderContext->m_positions;
const QString sheetName = \
m_context->drawingReaderContext->worksheetReaderContext->worksheetName;
-
- //struct Position {
- // int m_row, m_col, m_rowOff, m_colOff;
- //enum AnchorToken { NoAnchor, FromAnchor, ToAnchor };
- QMap<XlsxXmlDrawingReaderContext::AnchorType, \
XlsxXmlDrawingReaderContext::Position> positions = \
m_context->drawingReaderContext->m_positions;
-
if(! sheetName.isEmpty()) {
m_context->m_chartExport->m_endCellAddress += sheetName + '.';
}
if(positions.contains(XlsxXmlDrawingReaderContext::FromAnchor)) {
- XlsxXmlDrawingReaderContext::Position pos = \
positions[XlsxXmlDrawingReaderContext::FromAnchor];
- m_context->m_chartExport->m_endCellAddress += columnName(pos.m_col) + \
QString::number(pos.m_row);
- m_context->m_chartExport->m_x = "0pt"; \
//QString::number(columnWidth(cell->sheet(),drawobj->m_colL,drawobj->m_dxL)) \
+ "pt";
- m_context->m_chartExport->m_y = "0pt"; \
//QString::number(rowHeight(cell->sheet(),drawobj->m_rwT,drawobj->m_dyT)) \
+ "pt";
- m_context->m_chartExport->m_width = "100pt"; \
//QString::number(columnWidth(cell->sheet(),drawobj->m_colR-drawobj->m_colL,drawobj->m_dxR)) \
+ "pt";
- m_context->m_chartExport->m_height = "100pt"; \
//QString::number(rowHeight(cell->sheet(),drawobj->m_rwB-drawobj->m_rwT,drawobj->m_dyB)) \
+ "pt"; + XlsxXmlDrawingReaderContext::Position f = \
positions[XlsxXmlDrawingReaderContext::FromAnchor]; + \
m_context->m_chartExport->m_endCellAddress += columnName(f.m_col) + \
QString::number(f.m_row); + m_context->m_chartExport->m_x = \
QString::number(columnWidth(f.m_col-1, 0 /*f.m_colOff*/)) + "pt"; + \
m_context->m_chartExport->m_y = QString::number(rowHeight(f.m_row-1, 0 \
/*f.m_rowOff*/)) + "pt"; + \
if(positions.contains(XlsxXmlDrawingReaderContext::ToAnchor)) { + \
XlsxXmlDrawingReaderContext::Position t = \
positions[XlsxXmlDrawingReaderContext::ToAnchor]; + \
m_context->m_chartExport->m_width = QString::number(columnWidth( t.m_col - f.m_col - \
1, 0 /*t.m_colOff*/)) + "pt"; + m_context->m_chartExport->m_height = \
QString::number(rowHeight( t.m_row - f.m_row - 1, 0 /*t.m_rowOff*/)) + "pt"; + \
} }
+ //m_context->m_chartExport->m_notifyOnUpdateOfRanges = m_cellRangeAddress;
+ //m_context->m_chartExport->m_cellRangeAddress = m_cellRangeAddress;
m_context->m_chartExport->m_notifyOnUpdateOfRanges = "Sheet1.D2:Sheet1.F2";
m_context->m_chartExport->m_cellRangeAddress = \
"Sheet1.D2:Sheet1.F2";//string(cell->sheet()->name()) + "." + \
columnName(chart->m_chart->m_cellRangeAddress.left()) + \
QString::number(chart->m_chart->m_cellRangeAddress.top()) + ":" +
- //string(cell->sheet()->name()) + "." + \
columnName(chart->m_chart->m_cellRangeAddress.right()) + \
QString::number(chart->m_chart->m_cellRangeAddress.bottom());
// the index will by written by the XlsxXmlWorksheetReader
//m_context->m_chartExport->saveIndex(body);
@@ -153,19 +166,86 @@
#define CURRENT_EL plotArea
KoFilter::ConversionStatus XlsxXmlChartReader::read_plotArea()
{
- //TODO
- return KoFilter::OK;
+ READ_PROLOGUE
+ while (!atEnd()) {
+ readNext();
+ if (isStartElement()) {
+ TRY_READ_IF(ser)
+ ELSE_TRY_READ_IF(pieChart)
+ ELSE_TRY_READ_IF(firstSliceAng)
+ }
+ BREAK_IF_END_OF(CURRENT_EL);
+ }
+ READ_EPILOGUE
}
#undef CURRENT_EL
#define CURRENT_EL ser
KoFilter::ConversionStatus XlsxXmlChartReader::read_ser()
{
- //TODO
- return KoFilter::OK;
+ READ_PROLOGUE
+
+ m_currentSeries = new Charting::Series;
+ m_context->m_chart->m_series << m_currentSeries;
+ //m_currentSeries->m_dataTypeX = record->dataTypeX();
+ //m_currentSeries->m_countXValues = record->countXValues();
+ //m_currentSeries->m_countYValues = record->countYValues();
+ //m_currentSeries->m_countBubbleSizeValues = record->countBubbleSizeValues();
+
+ while (!atEnd()) {
+ readNext();
+ if (isStartElement()) {
+ TRY_READ_IF(val)
+ //ELSE_TRY_READ_IF(idx)
+ //ELSE_TRY_READ_IF(order)
+ }
+ BREAK_IF_END_OF(CURRENT_EL);
+ }
+
+ READ_EPILOGUE
}
#undef CURRENT_EL
+#define CURRENT_EL val
+KoFilter::ConversionStatus XlsxXmlChartReader::read_val()
+{
+ READ_PROLOGUE
+ while (!atEnd()) {
+ readNext();
+ if (isStartElement()) {
+ TRY_READ_IF(numCache)
+ if (qualifiedName() == QLatin1String(QUALIFIED_NAME(f))) {
+ //m_cellRangeAddress = readElementText();
+ m_currentSeries->m_valuesCellRangeAddress = readElementText();
+ }
+ }
+ BREAK_IF_END_OF(CURRENT_EL);
+ }
+ READ_EPILOGUE
+}
+
+#undef CURRENT_EL
+#define CURRENT_EL numCache
+KoFilter::ConversionStatus XlsxXmlChartReader::read_numCache()
+{
+ READ_PROLOGUE
+ while (!atEnd()) {
+ readNext();
+ if (isStartElement()) {
+ if (qualifiedName() == QLatin1String(QUALIFIED_NAME(ptCount))) {
+ const QXmlStreamAttributes attrs(attributes());
+ TRY_READ_ATTR_WITHOUT_NS(val)
+ m_currentSeries->m_countYValues = val.toInt();
+ }
+ //else if (qualifiedName() == QLatin1String(QUALIFIED_NAME(pt)))
+ //else if (qualifiedName() == QLatin1String(QUALIFIED_NAME(formatCode)))
+ }
+ BREAK_IF_END_OF(CURRENT_EL);
+ }
+ READ_EPILOGUE
+}
+
+#undef CURRENT_EL
#define CURRENT_EL legend
KoFilter::ConversionStatus XlsxXmlChartReader::read_legend()
{
--- trunk/koffice/filters/kspread/xlsx/XlsxXmlChartReader.h #1107448:1107449
@@ -44,6 +44,7 @@
//#include "NumberFormatParser.h"
namespace Charting {
+ class Series;
class Chart;
}
@@ -70,12 +71,15 @@
KoFilter::ConversionStatus read_plotArea();
KoFilter::ConversionStatus read_ser();
KoFilter::ConversionStatus read_legend();
-
KoFilter::ConversionStatus read_pieChart();
+ KoFilter::ConversionStatus read_val();
+ KoFilter::ConversionStatus read_numCache();
KoFilter::ConversionStatus read_firstSliceAng();
private:
XlsxXmlChartReaderContext *m_context;
+ Charting::Series *m_currentSeries;
+ QString m_cellRangeAddress;
};
#endif
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic