#ifndef CCSTABLE_H #define CCSTABLE_H #include "ccstableinterface.h" #include "qglobal.h" #include #include "ccsreport_global.h" namespace CCS_Report { class CCSBaseItemInterface; class CCSTableInterface; class CCSColumnHeader; class CCSTablePrivate; class CCSText; class CCSColumn; class CCSCell; class CCSParagraph; class SCellText; //class CCSPageInterface; class CCS_COMPASSREPORT_EXPORT CCSTable:public CCSTableInterface { Q_OBJECT Q_PROPERTY(int tablewidth READ tablewidth WRITE SetTablewidth) Q_PROPERTY(int height READ height WRITE SetHeight) Q_PROPERTY(int rownum READ rownum WRITE SetRownum) Q_PROPERTY(int colnum READ colnum WRITE SetColnum) Q_PROPERTY(int marginleft READ marginleft WRITE SetMarginLeft) Q_PROPERTY(int marginright READ marginright WRITE SetMarginRight) Q_PROPERTY(bool newpage READ newpage WRITE SetNewPage) Q_PROPERTY(int orientation READ orientation WRITE SetOrientation) Q_PROPERTY(qreal padding READ padding WRITE SetPadding) public: CCSTable(QObject * parent = 0); ~CCSTable(); virtual CCSBaseItemInterface * createInstance(QObject * parent) const=0; virtual CCSBaseItemInterface * clone(bool withChildren = true, bool init = true) const=0; int tablewidth() const; void SetTablewidth(const int &width); int height() const; void SetHeight(const int &height); int rownum() const; void SetRownum(const int &rows); int colnum() const; void SetColnum(const int &cols); void SetRowAndColumn(const int &row,const int &col); int marginleft() const; void SetMarginLeft(const int &left); int marginright() const; void SetMarginRight(const int &right); bool newpage() const; void SetNewPage(const bool & flag); int orientation() const; void SetOrientation(const int& o); qreal pageheight() const; void SetPageHeight(const qreal& h); qreal realwidthinpage() const; void SetWidthInPage(const qreal& w); qreal padding() const; void SetPadding(const qreal& p); QList headerwidths() { return m_headerwidth; } qreal headerwidth(int col) { if (col < m_headerwidth.count()) { return m_headerwidth.at(col); } else return 0; } CCS_Report::CCSColumnHeader* columnheader(); QList columnheaders(); QList GetHeaderColumnWidthPercent(); void SetColumnWidths(QList listWPercent); QList CalculateText(qreal columnwidth,QList baseitems,QMap tempheight,qreal &maxHeight); qreal GetCellWidth(int ipos,int colspan); //qreal GetTableWidth(CCSPageInterface* page); virtual int Parse(QList>& tablesinfo, CCSGroup& groupkey) = 0; void ParseFieldValue(CCSBaseItemInterface* item, CCSGroup& groupkey); void SetTableFieldValue(CCSBaseItemInterface* item, CCSGroup& value); QString GetTableFieldName(CCSBaseItemInterface* item,QString tablename=""); void SetTableInfo(); /// /// /// /// 原始页大小 /// 页边距 /// 方向 =-1 用表格自身的方向 != -1 是用户传入的方向 void SetTableMargin(QSize sizePage, QMarginsF marginContent, int iorient = -1); /// /// 设置每列的实际宽度(像素) /// /// int CalColumnWidth(); /// /// 获取此表格的级别 /// /// int GetParaGrade(); protected: Q_DECLARE_PRIVATE(CCSTable) CCSTable(CCSTablePrivate *dd, QObject * parent); virtual CCSBaseItemInterface * itemClone() const=0; protected: QList m_headerwidth; }; class CCSTablePrivate:public CCSTableInterfacePrivate { public: CCSTablePrivate() :CCSTableInterfacePrivate(), m_iTableWidth(100), m_iRowNum(0), m_iColNum(0), m_iHeight(0), m_iMarginLeft(0), m_iMargingRight(0), m_bNewPage(false), m_iOrientation(0), m_qPadding(0) {} CCSTablePrivate(const CCSTablePrivate& p) :CCSTableInterfacePrivate(p), m_iTableWidth(p.m_iTableWidth), m_iColNum(p.m_iColNum), m_iRowNum(p.m_iRowNum), m_iHeight(p.m_iHeight), m_iMarginLeft(p.m_iMarginLeft), m_iMargingRight(p.m_iMargingRight), m_bNewPage(p.m_bNewPage), m_iOrientation(p.m_iOrientation), m_qPadding(p.m_qPadding) {} virtual ~CCSTablePrivate(){} bool m_bNewPage; //是否起新页 int m_iHeight; //一般不用,但对于插入图片时可能会用到,表格高度 int m_iRowNum; int m_iColNum; int m_iTableWidth; //表格宽度 占左右边距内的百分比 int m_iMarginLeft; //距页左边距的百分比 int m_iMargingRight; //距页右边距的百分比 int m_iOrientation; //新起页的方向 =0 纵向 =1 横向 qreal m_qWidthInPage; //表格在页中的实际宽度 qreal m_qPageHeight; //表格所在页的实际高度;主要用于图片的高度的设置 qreal m_qPadding; //矩边框的距离 }; } #endif // CCSTABLE_H