#ifndef CCSRENDERTABLE_H #define CCSRENDERTABLE_H #include "qmap.h" #include #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 m_header; //表头;每个折行对应一个int;如果是普通的动态表,则只有一个表头;m_header.count() = 1 QMap m_content;//表内容 QMap 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 listBreakIndex = QList(),int repeatcol = 0); void AllocContentTableInfo(int rownum,int colnum,QList listBreakIndex=QList(),int repeatcol=0); void AllocBootomTableInfo(int rownum,int colnum); void AllocTableInfo(int rownum,int colnum,QMap& element); void AllocTableInfo(int index,int rownum,int colnum,QMap& element); void AllocTableInfo(int rownum,int colnum,QList& listBreakIndex,int repeatcol,QMap& 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 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); /// /// 动态表分3种类型:1、普通型 2、带有子表 3、折行的(又分为按记录折行还是按表折行),可以转换成类型1 目前不doing /// /// 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); }; /// /// 每页中所存放的表格 /// class CCSPageRenderTable :public QObject { Q_OBJECT public: QString m_strName = ""; //表名 /// /// 是否在一开始输出就在新页输出 /// bool m_bNewPage = false; /// /// 表格所在的纸张方向,缺省是横向 /// CCSReportType::OrientationFlag m_bOrientation = CCSReportType::Portrait; /// /// 表格中所有单元格信息 /// CCSRenderTableInfo* m_cells = nullptr; QMap 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