COMPASSi/trunk/code/3rd/CCSReport_2/include/items/ccstable.h

163 lines
5.2 KiB
C
Raw Normal View History

2025-06-25 15:06:42 +08:00
#ifndef CCSTABLE_H
#define CCSTABLE_H
#include "ccstableinterface.h"
#include "qglobal.h"
#include <QList>
#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<qreal> 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<CCS_Report::CCSColumnHeader*> columnheaders();
QList<qreal> GetHeaderColumnWidthPercent();
void SetColumnWidths(QList<qreal> listWPercent);
QList<CCS_Report::CCSText*> CalculateText(qreal columnwidth,QList<CCSBaseInterface*> baseitems,QMap<int,int> tempheight,qreal &maxHeight);
qreal GetCellWidth(int ipos,int colspan);
//qreal GetTableWidth(CCSPageInterface* page);
virtual int Parse(QList<QPair<CCSTableInterface*, int>>& tablesinfo, CCSGroup& groupkey) = 0;
void ParseFieldValue(CCSBaseItemInterface* item, CCSGroup& groupkey);
void SetTableFieldValue(CCSBaseItemInterface* item, CCSGroup& value);
QString GetTableFieldName(CCSBaseItemInterface* item,QString tablename="");
void SetTableInfo();
/// <summary>
///
/// </summary>
/// <param name="sizePage">原始页大小</param>
/// <param name="marginContent">页边距</param>
/// <param name="iorient">方向 =-1 用表格自身的方向 = -1 是用户传入的方向</param>
void SetTableMargin(QSize sizePage, QMarginsF marginContent, int iorient = -1);
/// <summary>
/// 设置每列的实际宽度(像素)
/// </summary>
/// <returns></returns>
int CalColumnWidth();
/// <summary>
/// 获取此表格的级别
/// </summary>
/// <returns></returns>
int GetParaGrade();
protected:
Q_DECLARE_PRIVATE(CCSTable)
CCSTable(CCSTablePrivate *dd, QObject * parent);
virtual CCSBaseItemInterface * itemClone() const=0;
protected:
QList<qreal> 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