File indexing completed on 2024-06-23 03:45:57
0001 // xlsxdrawinganchor_p.h 0002 0003 #ifndef QXLSX_XLSXDRAWINGANCHOR_P_H 0004 #define QXLSX_XLSXDRAWINGANCHOR_P_H 0005 0006 #include <QPoint> 0007 #include <QSize> 0008 #include <QString> 0009 #include <QSharedPointer> 0010 #include <QXmlStreamReader> 0011 #include <QXmlStreamWriter> 0012 0013 #include <memory> 0014 0015 #include "xlsxglobal.h" 0016 0017 QT_BEGIN_NAMESPACE_XLSX 0018 0019 class Drawing; 0020 class MediaFile; 0021 class Chart; 0022 0023 //Helper class 0024 struct XlsxMarker 0025 { 0026 XlsxMarker(){} 0027 XlsxMarker(int row, int column, int rowOffset, int colOffset) 0028 :cell(QPoint(row, column)), offset(rowOffset, colOffset) 0029 { 0030 0031 } 0032 0033 int row() const {return cell.x();} 0034 int col() const {return cell.y();} 0035 int rowOff() const {return offset.width();} 0036 int colOff() const {return offset.height();} 0037 0038 QPoint cell; 0039 QSize offset; 0040 }; 0041 0042 class DrawingAnchor 0043 { 0044 public: 0045 enum ObjectType { 0046 GraphicFrame, 0047 Shape, 0048 GroupShape, 0049 ConnectionShape, 0050 Picture, 0051 Unknown 0052 }; 0053 0054 DrawingAnchor(Drawing *drawing, ObjectType objectType); 0055 virtual ~DrawingAnchor(); 0056 0057 void setObjectPicture(const QImage &img); 0058 bool getObjectPicture(QImage &img); 0059 0060 void setObjectGraphicFrame(QSharedPointer<Chart> chart); 0061 0062 virtual bool loadFromXml(QXmlStreamReader &reader) = 0; 0063 virtual void saveToXml(QXmlStreamWriter &writer) const = 0; 0064 0065 virtual int row() const; 0066 virtual int col() const; 0067 0068 protected: 0069 QPoint loadXmlPos(QXmlStreamReader &reader); 0070 QSize loadXmlExt(QXmlStreamReader &reader); 0071 XlsxMarker loadXmlMarker(QXmlStreamReader &reader, const QString &node); 0072 void loadXmlObject(QXmlStreamReader &reader); 0073 void loadXmlObjectShape(QXmlStreamReader &reader); 0074 void loadXmlObjectGroupShape(QXmlStreamReader &reader); 0075 void loadXmlObjectGraphicFrame(QXmlStreamReader &reader); 0076 void loadXmlObjectConnectionShape(QXmlStreamReader &reader); 0077 void loadXmlObjectPicture(QXmlStreamReader &reader); 0078 0079 void saveXmlPos(QXmlStreamWriter &writer, const QPoint &pos) const; 0080 void saveXmlExt(QXmlStreamWriter &writer, const QSize &ext) const; 0081 void saveXmlMarker(QXmlStreamWriter &writer, const XlsxMarker &marker, const QString &node) const; 0082 void saveXmlObject(QXmlStreamWriter &writer) const; 0083 void saveXmlObjectShape(QXmlStreamWriter &writer) const; 0084 void saveXmlObjectGroupShape(QXmlStreamWriter &writer) const; 0085 void saveXmlObjectGraphicFrame(QXmlStreamWriter &writer) const; 0086 void saveXmlObjectConnectionShape(QXmlStreamWriter &writer) const; 0087 void saveXmlObjectPicture(QXmlStreamWriter &writer) const; 0088 0089 Drawing *m_drawing; 0090 ObjectType m_objectType; 0091 std::shared_ptr<MediaFile> m_pictureFile; 0092 QSharedPointer<Chart> m_chartFile; 0093 0094 int m_id; 0095 public: 0096 int getm_id(); 0097 0098 protected: 0099 0100 // liufeij {{ 0101 void setObjectShape(const QImage &img); // liufeij 0102 0103 QString editASName; 0104 // below only for twocellanchor shape 0105 QPoint posTA; // for shape liufeij 20181024 0106 QSize extTA; // for shape liufeij 20181024 0107 int rotWithShapeTA; //// for shape liufeij 20181024 0108 int dpiTA; //// for shape liufeij 20181024 0109 QString sp_textlink,sp_macro,sp_blip_cstate,sp_blip_rembed; 0110 0111 // BELOW only for cxnSp shape 0112 QString cxnSp_filpV,cxnSp_macro; 0113 // belwo for cxnsp and sp 0114 QString xsp_cNvPR_name,xsp_cNvPR_id; //x measns shape and cxnSp together using 0115 QString xbwMode; // same as above 0116 QString xIn_algn,xIn_cmpd,xIn_cap,xIn_w; //cxnSp only need xIn_w 0117 QString xprstGeom_prst; 0118 QString x_headEnd_w,x_headEnd_len,x_headEnd_tyep; 0119 QString x_tailEnd_w,x_tailEnd_len,x_tailEnd_tyep; 0120 QString Style_inref_idx,style_fillref_idx,style_effectref_idx,style_forntref_idx; 0121 QString Style_inref_val,style_fillref_val,style_effectref_val,style_forntref_val; 0122 // liufeij }} 0123 }; 0124 0125 class DrawingAbsoluteAnchor : public DrawingAnchor 0126 { 0127 public: 0128 DrawingAbsoluteAnchor(Drawing *drawing, ObjectType objectType=Unknown); 0129 0130 QPoint pos; 0131 QSize ext; 0132 0133 bool loadFromXml(QXmlStreamReader &reader) override; 0134 void saveToXml(QXmlStreamWriter &writer) const override; 0135 }; 0136 0137 class DrawingOneCellAnchor : public DrawingAnchor 0138 { 0139 public: 0140 DrawingOneCellAnchor(Drawing *drawing, ObjectType objectType=Unknown); 0141 0142 XlsxMarker from; 0143 QSize ext; 0144 0145 int row() const override; 0146 int col() const override; 0147 0148 bool loadFromXml(QXmlStreamReader &reader) override; 0149 void saveToXml(QXmlStreamWriter &writer) const override; 0150 }; 0151 0152 class DrawingTwoCellAnchor : public DrawingAnchor 0153 { 0154 public: 0155 DrawingTwoCellAnchor(Drawing *drawing, ObjectType objectType=Unknown); 0156 0157 XlsxMarker from; 0158 XlsxMarker to; 0159 0160 int row() const override; 0161 int col() const override; 0162 0163 bool loadFromXml(QXmlStreamReader &reader) override; 0164 void saveToXml(QXmlStreamWriter &writer) const override; 0165 }; 0166 0167 QT_END_NAMESPACE_XLSX 0168 0169 #endif // QXLSX_XLSXDRAWINGANCHOR_P_H