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