163 lines
4.8 KiB
C
163 lines
4.8 KiB
C
![]() |
// xlsxdrawinganchor_p.h
|
||
|
|
||
|
#ifndef QXLSX_XLSXDRAWINGANCHOR_P_H
|
||
|
#define QXLSX_XLSXDRAWINGANCHOR_P_H
|
||
|
|
||
|
#include "xlsxglobal.h"
|
||
|
|
||
|
#include <memory>
|
||
|
|
||
|
#include <QPoint>
|
||
|
#include <QSize>
|
||
|
#include <QString>
|
||
|
#include <QXmlStreamReader>
|
||
|
#include <QXmlStreamWriter>
|
||
|
|
||
|
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(std::shared_ptr<QXlsx::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;
|
||
|
std::shared_ptr<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;
|
||
|
// below 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
|