118 lines
6.0 KiB
C++
118 lines
6.0 KiB
C++
#ifndef CCSRENDERTABLE_H
|
||
#define CCSRENDERTABLE_H
|
||
#include "qmap.h"
|
||
#include <QObject>
|
||
#include "common_types.h"
|
||
|
||
namespace CCS_Report {
|
||
|
||
class CCSRenderTableInfo;
|
||
class CCSRenderTableCell;
|
||
class CCSPageInterface;
|
||
class CCSPageRenderTable;
|
||
|
||
class CCSRenderTable:public QObject
|
||
{
|
||
Q_OBJECT
|
||
public:
|
||
QString m_strName = ""; //表名
|
||
bool m_bNewPage = false; //是否在一开始输出就在新页输出
|
||
bool m_bRepeatHeader = true; //标题是否重复输出 true 是
|
||
CCSTableType::TableTypeFlag m_eTableType = CCSTableType::Fixed; // =0 固定表格 只有m_header变量 =1动态表格 对于表头的处理
|
||
CCSTableType::TableBreakFlag m_iStyle = CCSTableType::NoBreak; //表现样式的区别
|
||
CCSReportType::OrientationFlag m_bOrientation = CCSReportType::Portrait; //缺省是横向
|
||
|
||
CCSRenderTable* m_pParent; //指向子表的父表
|
||
QMap<int,CCSRenderTableInfo*> m_header; //表头;每个折行对应一个int;如果是普通的动态表,则只有一个表头;m_header.count() = 1
|
||
QMap<int,CCSRenderTableInfo*> m_content;//表内容
|
||
QMap<int,CCSRenderTable*> m_subtable; //子表
|
||
CCSRenderTableInfo* m_bottom;//表总结
|
||
|
||
// bool m_bNoRecordShow = true; //对于动态表格,如果没有记录是否显示表头 = true 显示 =false 不显示
|
||
|
||
CCSRenderTable(QObject * parent = 0,QString objectname="");
|
||
CCSRenderTable(QString strName);
|
||
CCSRenderTable(QString strName,bool bNewPage,CCSReportType::OrientationFlag Orient,int row,int col);
|
||
CCSRenderTable(QString strName, CCSTableType::TableTypeFlag tabletype, CCSTableType::TableBreakFlag style,bool repeatheader=true,bool newpage=false,CCSReportType::OrientationFlag orient = CCSReportType::Portrait);
|
||
~CCSRenderTable();
|
||
//分配内存
|
||
CCSRenderTable* ShalowCopy();
|
||
void AllocHeaderTableInfo(int rownum,int colnum,QList<int> listBreakIndex = QList<int>(),int repeatcol = 0);
|
||
void AllocContentTableInfo(int rownum,int colnum,QList<int> listBreakIndex=QList<int>(),int repeatcol=0);
|
||
void AllocBootomTableInfo(int rownum,int colnum);
|
||
void AllocTableInfo(int rownum,int colnum,QMap<int,CCSRenderTableInfo*>& element);
|
||
void AllocTableInfo(int index,int rownum,int colnum,QMap<int,CCSRenderTableInfo*>& element);
|
||
void AllocTableInfo(int rownum,int colnum,QList<int>& listBreakIndex,int repeatcol,QMap<int,CCSRenderTableInfo*>& element);
|
||
|
||
CCSRenderTableCell* GetHeaderRenderCell(int row, int col, int index = 0 );
|
||
void FreeHeaderTableInfo();
|
||
//把子表中的表头合并到父表中,并修改父表表头
|
||
void HandleParentTableHeader(CCSRenderTable* parentTable, double dWidth);
|
||
void FillRenderCell(CCSRenderTableInfo* infos,int rowstart,int rowcount,int count,QList<qreal> listColumnWidth);
|
||
void SetTableinfos(CCSRenderTableInfo* sourceinfos, CCSRenderTableInfo* destinfos,
|
||
CCS_Report::MatrixPostion sourceM,CCS_Report::MatrixPostion destM);
|
||
void SetTableBorder(int bordertype);
|
||
|
||
int GetColumnNum();
|
||
qreal GetHeaderWidth();
|
||
qreal GetContentWidth();
|
||
qreal GetTableHeaderHeight();
|
||
void AdjustContentWidth(qreal width);
|
||
|
||
void CalculateArrange();
|
||
void UpdateTableBorderFrame(CCSRenderTableCell* cell,CCSFrame::FrameFlags frame);
|
||
void HandlePageHeader(CCS_Report::CCSPageInterface * page,qreal& currentY);
|
||
void HandlePageFooter(CCS_Report::CCSPageInterface * page,qreal& currentY);
|
||
CCS_Report::CCSPageInterface * HandlePage(CCS_Report::CCSPageInterface * page,qreal& currentY);
|
||
CCS_Report::CCSPageInterface * HandleFixTablePage(CCS_Report::CCSPageInterface * page,qreal& currentY);
|
||
/// <summary>
|
||
/// 动态表分3种类型:1、普通型 2、带有子表 3、折行的(又分为按记录折行还是按表折行),可以转换成类型1 目前不doing
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
CCS_Report::CCSPageInterface * HandleDynamicTablePage(CCS_Report::CCSPageInterface * page,qreal& currentY, CCSPageRenderTable*& pPageTable,CCSRenderTable* pParentTable = nullptr);
|
||
//iNum 要输出的内容的编号;如果不折行,m_content。count只有1个 number=-1 全部输出
|
||
CCS_Report::CCSPageInterface * HandleContentPage(CCS_Report::CCSPageInterface * page,qreal startY,qreal endY,qreal& currentY,int iNum, CCSPageRenderTable*& pPageTable,CCSRenderTable* pParentTable = nullptr);
|
||
|
||
CCS_Report::CCSPageInterface * HandleBottomPage(CCS_Report::CCSPageInterface * page,qreal& currentY, CCSPageRenderTable*& pPageTable);
|
||
|
||
//
|
||
CCS_Report::CCSRenderTableInfo* CreateTableInfos(CCSRenderTableInfo* &infos,int rowNo);
|
||
void MergeSubTable(CCSRenderTableInfo*& pMergeInfo, CCSRenderTable* pRendertable, int& iMergeRowCount, int& iMaxColNum, int& iFlag, int index=0);
|
||
CCSRenderTableInfo* MergeSubTableToParent(int index=0);
|
||
|
||
};
|
||
/// <summary>
|
||
/// 每页中所存放的表格
|
||
/// </summary>
|
||
class CCSPageRenderTable :public QObject
|
||
{
|
||
Q_OBJECT
|
||
public:
|
||
QString m_strName = ""; //表名
|
||
|
||
/// <summary>
|
||
/// 是否在一开始输出就在新页输出
|
||
/// </summary>
|
||
bool m_bNewPage = false;
|
||
/// <summary>
|
||
/// 表格所在的纸张方向,缺省是横向
|
||
/// </summary>
|
||
CCSReportType::OrientationFlag m_bOrientation = CCSReportType::Portrait;
|
||
/// <summary>
|
||
/// 表格中所有单元格信息
|
||
/// </summary>
|
||
CCSRenderTableInfo* m_cells = nullptr;
|
||
QMap<int, CCSPageRenderTable*> m_mapSubtable;
|
||
CCSRenderTableInfo* m_bottomcells = nullptr;
|
||
CCSPageRenderTable* m_pParentTable = nullptr; //指向子表中的父表
|
||
public:
|
||
CCSPageRenderTable(QObject* parent = 0, QString objectname = "",CCSPageRenderTable * pTable = nullptr);
|
||
CCSPageRenderTable(CCS_Report::CCSPageInterface*& page,bool newpage = false, CCSReportType::OrientationFlag orient = CCSReportType::Portrait,CCSPageRenderTable * pTable = nullptr);
|
||
~CCSPageRenderTable();
|
||
CCSPageRenderTable* itemClone();
|
||
|
||
int SetNewRowInfo();
|
||
};
|
||
}
|
||
#endif // CCSRENDERTABLE_H
|