COMPASSi/trunk/code/3rd/CCSReport_2/include/ccsreport.h

383 lines
12 KiB
C
Raw Permalink Normal View History

2025-06-25 15:06:42 +08:00
#ifndef CCSREPORT_H
#define CCSREPORT_H
#include <QObject>
#include "ccsbanddetail.h"
#include "common_types.h"
#include "ccsreport_global.h"
namespace CCS_Report {
//class CCSTable;
//class CCS_COMPASSREPORT_EXPORT CCSReport:public QObject
class CCS_COMPASSREPORT_EXPORT CCSReport:public QObject
{
Q_OBJECT
Q_PROPERTY(QString version READ version WRITE setVersion )
Q_PROPERTY(QString description READ description WRITE setDescription)
Q_PROPERTY(QString papersize READ papersize WRITE setPaperSize)
// Q_PROPERTY(QMargins reportmargin READ reportmargin WRITE SetReportMargin)
Q_PROPERTY(int marginleft READ marginleft WRITE setMarginLeft)
Q_PROPERTY(int margintop READ margintop WRITE setMarginTop)
Q_PROPERTY(int marginright READ marginright WRITE setMarginRight)
Q_PROPERTY(int marginbottom READ marginbottom WRITE setMarginBottom)
Q_PROPERTY(int borderleft READ borderleft WRITE setBorderLeft)
Q_PROPERTY(int bordertop READ bordertop WRITE setBorderTop)
Q_PROPERTY(int borderright READ borderright WRITE setBorderRight)
Q_PROPERTY(int borderbottom READ borderbottom WRITE setBorderBottom)
Q_PROPERTY(bool showborder READ showborder WRITE setShowBorder) //边框是否显示
Q_PROPERTY(QPen borderpen READ borderpen WRITE setBorderPen)
Q_PROPERTY(QString waterpath READ waterpath WRITE SetWaterPath)
Q_PROPERTY(QSize watersize READ watersize WRITE SetWaterSize)
Q_PROPERTY(int wateropacity READ wateropacity WRITE SetWaterOpacity)
Q_PROPERTY(int waterangle READ waterangle WRITE SetWaterAngle)
Q_PROPERTY(int watershowtype READ watershowtype WRITE SetWaterShowType)
Q_PROPERTY(QString waterinfo READ waterinfo WRITE SetWaterInfo)
Q_PROPERTY(QFont defaultfont READ defaultfont WRITE SetDefaultFont)
Q_PROPERTY(int waterposition READ waterposition WRITE SetWaterPosition)
Q_PROPERTY(QString dirname READ dirname WRITE setDirName)
Q_PROPERTY(bool hasdirectory READ hasdirectory WRITE setHasDirectory) //是否有目录
Q_PROPERTY(int numberstyle READ numberstyle WRITE setNumberStyle)
Q_PROPERTY(int dirmaxgrade READ dirmaxgrade WRITE setDirMaxGrade)
Q_PROPERTY(int dirorient READ dirorient WRITE setDirOrient) //目录页方向
private:
QString m_strVersion; //报告模板版本
QString m_strDescription; //报告描述
// QMargins m_Border; //页边框 显示用
QMarginsF m_marginHeader; //页眉的边距
QMarginsF m_marginFooter; //页脚边距
QMarginsF m_marginContent; //页边距 //像素计算后的
int m_iBorderLeft = 5;
int m_iBorderTop = 5;
int m_iBorderBottom = 5;
int m_iBorderRight = 5;
bool m_bShowBorder = false; //边框是否显示
QPen m_penBorder = QPen();
int m_iMarginLeft = 5;
int m_iMarginTop = 5;
int m_iMarginBottom = 5;
int m_iMarginRight = 5;
int m_currentorietation;
int m_numberstyle; //页码类型
int m_iDirOrientation = 0; //目录页的方向
bool m_bHasDirectory = false; //是否有目录 =true 有 = false 无
int m_iDirMaxGrade = 5; //在目录中显示的最大级别
QString m_strDirName; //目录名称
QFont m_font;
QSize m_sizePage; //页的正常宽度、高度 ,当遇到页的方向变化时,宽、高互换进行计算
QString m_strPaperSize = "A4";
//水印
QString m_strWaterPath;
QSize m_sizeWater;
int m_iWaterOpacity;
int m_iWaterAngle; //逆时针角度
int m_iWaterShowType; //居中、平铺
QString m_strWaterInfo;
QFont m_defaultfont;
int m_iPosition; //水印叠加位置 =0 图层之下 =1 图层之上 假设只有2层
public:
CCSReport();
~ CCSReport();
void CCSReport::itemClone(CCSReport* report);
int marginleft() const
{
return m_iMarginLeft;
}
int margintop() const
{
return m_iMarginTop;
}
int marginright() const
{
return m_iMarginRight;
}
int marginbottom() const
{
return m_iMarginBottom;
}
void setMarginLeft(int margin)
{
m_iMarginLeft = margin;
}
void setMarginTop(int margin)
{
m_iMarginTop= margin;
}
void setMarginRight(int margin)
{
m_iMarginRight = margin;
}
void setMarginBottom(int margin)
{
m_iMarginBottom = margin;
}
void setMargin(const int &left,const int &top,const int &right,const int &bottom)
{
m_iMarginLeft = left;
m_iMarginRight = right;
m_iMarginBottom = bottom;
m_iMarginTop = top;
}
void setMargin(const QMargins& margin)
{
m_iMarginLeft = margin.left();
m_iMarginRight = margin.right();
m_iMarginBottom = margin.bottom();
m_iMarginTop = margin.top();
}
QMargins margins() const
{
return QMargins(m_iMarginLeft,m_iMarginTop,m_iMarginRight,m_iMarginBottom);
}
QString papersize() const
{
return m_strPaperSize;
}
void setPaperSize(const QString& size)
{
m_strPaperSize = size;
}
QSize pagesize() const
{
return m_sizePage;
}
void SetPageSize(const QSize& size)
{
m_sizePage = size;
#ifdef Report_LOG
QLOG_INFO() <<QString("report size:width %1 height %2 ").arg(m_sizePage.width(), m_sizePage.height());
#endif // Report_LOG
}
QString version() { return m_strVersion; }
void setVersion(QString ver) { m_strVersion = ver; }
int borderleft() const
{
return m_iBorderLeft;
}
int bordertop() const
{
return m_iBorderTop;
}
int borderright() const
{
return m_iBorderRight;
}
int borderbottom() const
{
return m_iBorderBottom;
}
void setBorderLeft(int margin)
{
m_iBorderLeft = margin;
}
void setBorderTop(int margin)
{
m_iBorderTop= margin;
}
void setBorderRight(int margin)
{
m_iBorderRight = margin;
}
void setBorderBottom(int margin)
{
m_iBorderBottom = margin;
}
void setBorder(const int &left,const int &right,const int &top,const int &bottom)
{
m_iBorderLeft = left;
m_iBorderRight = right;
m_iBorderBottom = bottom;
m_iBorderTop = top;
}
void setBorder(const QMargins& margin)
{
m_iBorderLeft = margin.left();
m_iBorderRight = margin.right();
m_iBorderBottom = margin.bottom();
m_iBorderTop = margin.top();
}
QMargins border() const
{
return QMargins(m_iMarginLeft,m_iMarginTop,m_iMarginRight,m_iMarginBottom);
}
QFont GetDirectoryFont()
{
return m_font;
}
void SetDirectoryFont(QFont font)
{
m_font = font;
}
// QMargins reportmargin() const
// {
// return m_marginContent;
// }
// void SetReportMargin(QMargins margin)
// {
// m_marginContent = margin;
// }
QMarginsF headermargin() const
{
return m_marginHeader;
}
void SetHeaderMargin(QMarginsF margin)
{
m_marginHeader = margin;
#ifdef Report_LOG
QLOG_INFO() <<QString("Header margion:left: %1 top: %2 right: %3 bottom: %4 ").arg( m_marginHeader.left(), m_marginHeader.top(), m_marginHeader.right(), m_marginHeader.bottom());
#endif // Report_LOG
}
QMarginsF footermargin() const
{
return m_marginFooter;
}
void SetFooterMargin(QMarginsF margin)
{
m_marginFooter = margin;
#ifdef Report_LOG
QLOG_INFO() << QString("Footer margion:left: %1 top: %2 right: %3 bottom: %4 ").arg(m_marginFooter.left(), m_marginFooter.top(), m_marginFooter.right(), m_marginFooter.bottom());
#endif // Report_LOG
}
void SetContentMargin(QMarginsF margin)
{
m_marginContent = margin;
#ifdef Report_LOG
QLOG_INFO() << QString("Content margion:left: %1 top: %2 right: %3 bottom: %4 ").arg(m_marginContent.left(), m_marginContent.top(), m_marginContent.right(), m_marginContent.bottom());
#endif // Report_LOG
}
QMarginsF contentmargin()const
{
return m_marginContent;
}
int numberstyle() const
{
return m_numberstyle;
}
void setNumberStyle(int style)
{
m_numberstyle = style;
}
int dirmaxgrade() const
{
return m_iDirMaxGrade;
}
void setDirMaxGrade(int index)
{
m_iDirMaxGrade = index;
}
void setBorderPen(QPen pen) { m_penBorder = pen; }
QPen borderpen() const { return m_penBorder; }
bool showborder() { return m_bShowBorder; }
void setShowBorder(bool value) { m_bShowBorder = value; }
bool hasdirectory() { return m_bHasDirectory; }
void setHasDirectory(bool value) { m_bHasDirectory = value; }
int dirorient() { return m_iDirOrientation; }
void setDirOrient(int value) { m_iDirOrientation = value; }
//QString version() { return m_strVersion; }
//void SetVersion(QString ver) { m_strVersion = ver; }
QString description() { return m_strDescription; }
void setDescription(QString ver) { m_strDescription = ver; }
QString dirname() { return m_strDirName; }
void setDirName(QString ver) { m_strDirName = ver; }
QString waterpath(){return m_strWaterPath;}
void SetWaterPath(QString path){m_strWaterPath = path;}
QSize watersize() {return m_sizeWater;}
void SetWaterSize(QSize size){m_sizeWater = size;}
int wateropacity(){return m_iWaterOpacity;}
void SetWaterOpacity(int value){m_iWaterOpacity = value;}
int waterangle(){return m_iWaterAngle;}
void SetWaterAngle(int value){m_iWaterAngle = value;}
int watershowtype(){return m_iWaterShowType;}
void SetWaterShowType(int value){m_iWaterShowType = value;}
QString waterinfo(){return m_strWaterInfo;}
void SetWaterInfo(QString value){m_strWaterInfo = value;}
QFont defaultfont(){return m_defaultfont;}
void SetDefaultFont(QFont value){m_defaultfont = value;}
int waterposition(){return m_iPosition;}
void SetWaterPosition(int value){m_iPosition = value;}
template<typename T>
T* band()
{
return findChild<T*>(QString(), Qt::FindDirectChildrenOnly);
}
CCS_Report::CCSBandHeader* header()
{
return findChild<CCS_Report::CCSBandHeader*>(QString(),Qt::FindDirectChildrenOnly);
}
CCS_Report::CCSBandFooter* footer()
{
return findChild<CCS_Report::CCSBandFooter*>(QString(),Qt::FindDirectChildrenOnly);
}
CCS_Report::CCSBandAppendix* appendix()
{
return findChild<CCS_Report::CCSBandAppendix*>(QString(),Qt::FindDirectChildrenOnly);
}
CCS_Report::CCSBandDirectory* directory()
{
return findChild<CCS_Report::CCSBandDirectory*>(QString(),Qt::FindDirectChildrenOnly);
}
CCS_Report::CCSBandCover* cover()
{
return findChild<CCS_Report::CCSBandCover*>(QString(),Qt::FindDirectChildrenOnly);
}
CCS_Report::CCSBandWater* water()
{
return findChild<CCS_Report::CCSBandWater*>(QString(), Qt::FindDirectChildrenOnly);
}
CCS_Report::CCSBandContent* content()
{
return findChild<CCS_Report::CCSBandContent*>(QString(),Qt::FindDirectChildrenOnly);
}
public:
void BindData();
void PreHandleMargin(int width,int height);
QSize GetPageSize(CCSReportType::OrientationFlag orient);
qreal GetItemWidth(CCSReportType::OrientationFlag orient,qreal& itemleft,qreal itemright);
//根据百分比,得出在页中的实际宽度
// void SetTableMargin(CCSTable* table,CCSReportType::OrientationFlag orient);
QMarginsF GetPixelMargin(const QMargins& margin,QSize sizePixel);
QImage CreateWaterMask();
ReportSelectedTree* getReportTree();
void getReportSubTree(CCSTableInterface* pTable,ReportSelectedTree*& tree, int& currentGrade);
void setReportTree(ReportSelectedTree* tree);
void upgradeTemplate(QString strVer = QString());
void upgradeTemplate(QObject* object,QString strVer = QString());
};
}
#endif // CCSREPORT_H