COMPASSi/trunk/code/3rd/CCSReport_2/include/translation/ccsrendertable.h

118 lines
6.0 KiB
C++
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 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变量  动态表格  对于表头的处理
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