123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- // xlsxdrawing.cpp
- #include <QtGlobal>
- #include <QXmlStreamWriter>
- #include <QXmlStreamReader>
- #include <QBuffer>
- #include "xlsxdrawing_p.h"
- #include "xlsxdrawinganchor_p.h"
- #include "xlsxabstractsheet.h"
- QT_BEGIN_NAMESPACE_XLSX
- Drawing::Drawing(AbstractSheet *sheet, CreateFlag flag)
- :AbstractOOXmlFile(flag), sheet(sheet)
- {
- workbook = sheet->workbook();
- }
- Drawing::~Drawing()
- {
- qDeleteAll(anchors);
- }
- void Drawing::saveToXmlFile(QIODevice *device) const
- {
- relationships()->clear();
- QXmlStreamWriter writer(device);
- writer.writeStartDocument(QStringLiteral("1.0"), true);
- writer.writeStartElement(QStringLiteral("xdr:wsDr"));
- writer.writeAttribute(QStringLiteral("xmlns:xdr"), QStringLiteral("http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing"));
- writer.writeAttribute(QStringLiteral("xmlns:a"), QStringLiteral("http://schemas.openxmlformats.org/drawingml/2006/main"));
- for (DrawingAnchor *anchor : anchors)
- anchor->saveToXml(writer);
- writer.writeEndElement();//xdr:wsDr
- writer.writeEndDocument();
- }
- // check point
- bool Drawing::loadFromXmlFile(QIODevice *device)
- {
- /*
- <xsd:group name="EG_Anchor">
- <xsd:choice>
- <xsd:element name="twoCellAnchor" type="CT_TwoCellAnchor"/>
- <xsd:element name="oneCellAnchor" type="CT_OneCellAnchor"/>
- <xsd:element name="absoluteAnchor" type="CT_AbsoluteAnchor"/>
- </xsd:choice>
- </xsd:group>
- */
- QXmlStreamReader reader(device);
- while (!reader.atEnd())
- {
- reader.readNextStartElement();
- if (reader.tokenType() == QXmlStreamReader::StartElement)
- {
- if (reader.name() == QLatin1String("absoluteAnchor")) // CT_AbsoluteAnchor
- {
- DrawingAbsoluteAnchor * anchor = new DrawingAbsoluteAnchor(this);
- anchor->loadFromXml(reader);
- }
- else if (reader.name() == QLatin1String("oneCellAnchor")) // CT_OneCellAnchor
- {
- DrawingOneCellAnchor * anchor = new DrawingOneCellAnchor(this);
- anchor->loadFromXml(reader);
- }
- else if (reader.name() == QLatin1String("twoCellAnchor")) // CT_TwoCellAnchor
- {
- DrawingTwoCellAnchor * anchor = new DrawingTwoCellAnchor(this);
- anchor->loadFromXml(reader);
- }
- }
- }
- return true;
- }
- QT_END_NAMESPACE_XLSX
|