File indexing completed on 2025-03-16 03:35:11
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