File indexing completed on 2024-06-16 03:42:25

0001 // xlsxdrawing.cpp
0002 
0003 #include <QtGlobal>
0004 #include <QXmlStreamWriter>
0005 #include <QXmlStreamReader>
0006 #include <QBuffer>
0007 
0008 #include "xlsxdrawing_p.h"
0009 #include "xlsxdrawinganchor_p.h"
0010 #include "xlsxabstractsheet.h"
0011 
0012 QT_BEGIN_NAMESPACE_XLSX
0013 
0014 Drawing::Drawing(AbstractSheet *sheet, CreateFlag flag)
0015     :AbstractOOXmlFile(flag), sheet(sheet)
0016 {
0017     workbook = sheet->workbook();
0018 }
0019 
0020 Drawing::~Drawing()
0021 {
0022     qDeleteAll(anchors);
0023 }
0024 
0025 void Drawing::saveToXmlFile(QIODevice *device) const
0026 {
0027     relationships()->clear();
0028 
0029     QXmlStreamWriter writer(device);
0030 
0031     writer.writeStartDocument(QStringLiteral("1.0"), true);
0032     writer.writeStartElement(QStringLiteral("xdr:wsDr"));
0033     writer.writeAttribute(QStringLiteral("xmlns:xdr"), QStringLiteral("http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing"));
0034     writer.writeAttribute(QStringLiteral("xmlns:a"), QStringLiteral("http://schemas.openxmlformats.org/drawingml/2006/main"));
0035 
0036     for (DrawingAnchor *anchor : anchors)
0037         anchor->saveToXml(writer);
0038 
0039     writer.writeEndElement();//xdr:wsDr
0040     writer.writeEndDocument();
0041 }
0042 
0043 // check point
0044 bool Drawing::loadFromXmlFile(QIODevice *device)
0045 {
0046     /*
0047     <xsd:group name="EG_Anchor">
0048         <xsd:choice>
0049             <xsd:element name="twoCellAnchor" type="CT_TwoCellAnchor"/>
0050             <xsd:element name="oneCellAnchor" type="CT_OneCellAnchor"/>
0051             <xsd:element name="absoluteAnchor" type="CT_AbsoluteAnchor"/>
0052         </xsd:choice>
0053     </xsd:group>
0054     */
0055 
0056     QXmlStreamReader reader(device);
0057 
0058     while (!reader.atEnd())
0059     {
0060         reader.readNextStartElement();
0061         if (reader.tokenType() == QXmlStreamReader::StartElement)
0062         {
0063             if (reader.name() == QLatin1String("absoluteAnchor")) // CT_AbsoluteAnchor
0064             {
0065                 DrawingAbsoluteAnchor * anchor = new DrawingAbsoluteAnchor(this);
0066                 anchor->loadFromXml(reader);
0067             }
0068             else if (reader.name() == QLatin1String("oneCellAnchor")) // CT_OneCellAnchor
0069             {
0070                 DrawingOneCellAnchor * anchor = new DrawingOneCellAnchor(this);
0071                 anchor->loadFromXml(reader);
0072             }
0073             else if (reader.name() == QLatin1String("twoCellAnchor")) // CT_TwoCellAnchor
0074             {
0075                 DrawingTwoCellAnchor * anchor = new DrawingTwoCellAnchor(this);
0076                 anchor->loadFromXml(reader);
0077             }
0078         }
0079     }
0080 
0081     return true;
0082 }
0083 
0084 QT_END_NAMESPACE_XLSX