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

163 lines
5.2 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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