You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
169 lines
4.7 KiB
169 lines
4.7 KiB
// xlsxdrawinganchor_p.h
|
|
|
|
#ifndef QXLSX_XLSXDRAWINGANCHOR_P_H
|
|
#define QXLSX_XLSXDRAWINGANCHOR_P_H
|
|
|
|
#include <QPoint>
|
|
#include <QSize>
|
|
#include <QString>
|
|
#include <QSharedPointer>
|
|
#include <QXmlStreamReader>
|
|
#include <QXmlStreamWriter>
|
|
|
|
#include <memory>
|
|
|
|
#include "xlsxglobal.h"
|
|
|
|
QT_BEGIN_NAMESPACE_XLSX
|
|
|
|
class Drawing;
|
|
class MediaFile;
|
|
class Chart;
|
|
|
|
//Helper class
|
|
struct XlsxMarker
|
|
{
|
|
XlsxMarker(){}
|
|
XlsxMarker(int row, int column, int rowOffset, int colOffset)
|
|
:cell(QPoint(row, column)), offset(rowOffset, colOffset)
|
|
{
|
|
|
|
}
|
|
|
|
int row() const {return cell.x();}
|
|
int col() const {return cell.y();}
|
|
int rowOff() const {return offset.width();}
|
|
int colOff() const {return offset.height();}
|
|
|
|
QPoint cell;
|
|
QSize offset;
|
|
};
|
|
|
|
class DrawingAnchor
|
|
{
|
|
public:
|
|
enum ObjectType {
|
|
GraphicFrame,
|
|
Shape,
|
|
GroupShape,
|
|
ConnectionShape,
|
|
Picture,
|
|
Unknown
|
|
};
|
|
|
|
DrawingAnchor(Drawing *drawing, ObjectType objectType);
|
|
virtual ~DrawingAnchor();
|
|
|
|
void setObjectPicture(const QImage &img);
|
|
bool getObjectPicture(QImage &img);
|
|
|
|
void setObjectGraphicFrame(QSharedPointer<Chart> chart);
|
|
|
|
virtual bool loadFromXml(QXmlStreamReader &reader) = 0;
|
|
virtual void saveToXml(QXmlStreamWriter &writer) const = 0;
|
|
|
|
virtual int row() const;
|
|
virtual int col() const;
|
|
|
|
protected:
|
|
QPoint loadXmlPos(QXmlStreamReader &reader);
|
|
QSize loadXmlExt(QXmlStreamReader &reader);
|
|
XlsxMarker loadXmlMarker(QXmlStreamReader &reader, const QString &node);
|
|
void loadXmlObject(QXmlStreamReader &reader);
|
|
void loadXmlObjectShape(QXmlStreamReader &reader);
|
|
void loadXmlObjectGroupShape(QXmlStreamReader &reader);
|
|
void loadXmlObjectGraphicFrame(QXmlStreamReader &reader);
|
|
void loadXmlObjectConnectionShape(QXmlStreamReader &reader);
|
|
void loadXmlObjectPicture(QXmlStreamReader &reader);
|
|
|
|
void saveXmlPos(QXmlStreamWriter &writer, const QPoint &pos) const;
|
|
void saveXmlExt(QXmlStreamWriter &writer, const QSize &ext) const;
|
|
void saveXmlMarker(QXmlStreamWriter &writer, const XlsxMarker &marker, const QString &node) const;
|
|
void saveXmlObject(QXmlStreamWriter &writer) const;
|
|
void saveXmlObjectShape(QXmlStreamWriter &writer) const;
|
|
void saveXmlObjectGroupShape(QXmlStreamWriter &writer) const;
|
|
void saveXmlObjectGraphicFrame(QXmlStreamWriter &writer) const;
|
|
void saveXmlObjectConnectionShape(QXmlStreamWriter &writer) const;
|
|
void saveXmlObjectPicture(QXmlStreamWriter &writer) const;
|
|
|
|
Drawing *m_drawing;
|
|
ObjectType m_objectType;
|
|
std::shared_ptr<MediaFile> m_pictureFile;
|
|
QSharedPointer<Chart> m_chartFile;
|
|
|
|
int m_id;
|
|
public:
|
|
int getm_id();
|
|
|
|
protected:
|
|
|
|
// liufeij {{
|
|
void setObjectShape(const QImage &img); // liufeij
|
|
|
|
QString editASName;
|
|
// below only for twocellanchor shape
|
|
QPoint posTA; // for shape liufeij 20181024
|
|
QSize extTA; // for shape liufeij 20181024
|
|
int rotWithShapeTA; //// for shape liufeij 20181024
|
|
int dpiTA; //// for shape liufeij 20181024
|
|
QString sp_textlink,sp_macro,sp_blip_cstate,sp_blip_rembed;
|
|
|
|
// BELOW only for cxnSp shape
|
|
QString cxnSp_filpV,cxnSp_macro;
|
|
// belwo for cxnsp and sp
|
|
QString xsp_cNvPR_name,xsp_cNvPR_id; //x measns shape and cxnSp together using
|
|
QString xbwMode; // same as above
|
|
QString xIn_algn,xIn_cmpd,xIn_cap,xIn_w; //cxnSp only need xIn_w
|
|
QString xprstGeom_prst;
|
|
QString x_headEnd_w,x_headEnd_len,x_headEnd_tyep;
|
|
QString x_tailEnd_w,x_tailEnd_len,x_tailEnd_tyep;
|
|
QString Style_inref_idx,style_fillref_idx,style_effectref_idx,style_forntref_idx;
|
|
QString Style_inref_val,style_fillref_val,style_effectref_val,style_forntref_val;
|
|
// liufeij }}
|
|
};
|
|
|
|
class DrawingAbsoluteAnchor : public DrawingAnchor
|
|
{
|
|
public:
|
|
DrawingAbsoluteAnchor(Drawing *drawing, ObjectType objectType=Unknown);
|
|
|
|
QPoint pos;
|
|
QSize ext;
|
|
|
|
bool loadFromXml(QXmlStreamReader &reader) override;
|
|
void saveToXml(QXmlStreamWriter &writer) const override;
|
|
};
|
|
|
|
class DrawingOneCellAnchor : public DrawingAnchor
|
|
{
|
|
public:
|
|
DrawingOneCellAnchor(Drawing *drawing, ObjectType objectType=Unknown);
|
|
|
|
XlsxMarker from;
|
|
QSize ext;
|
|
|
|
int row() const override;
|
|
int col() const override;
|
|
|
|
bool loadFromXml(QXmlStreamReader &reader) override;
|
|
void saveToXml(QXmlStreamWriter &writer) const override;
|
|
};
|
|
|
|
class DrawingTwoCellAnchor : public DrawingAnchor
|
|
{
|
|
public:
|
|
DrawingTwoCellAnchor(Drawing *drawing, ObjectType objectType=Unknown);
|
|
|
|
XlsxMarker from;
|
|
XlsxMarker to;
|
|
|
|
int row() const override;
|
|
int col() const override;
|
|
|
|
bool loadFromXml(QXmlStreamReader &reader) override;
|
|
void saveToXml(QXmlStreamWriter &writer) const override;
|
|
};
|
|
|
|
QT_END_NAMESPACE_XLSX
|
|
|
|
#endif // QXLSX_XLSXDRAWINGANCHOR_P_H
|
|
|