#ifndef CCSREPORTTEMPLATE_H #define CCSREPORTTEMPLATE_H #include #include "ccstemplatebase.h" #include "ccstemplateband.h" #include "ccstemplateitem.h" namespace CCS_Report { class CoverWrapper; class Report; class Table; class TableDynamic; class CoverFormat; class ParagraphFormat; class Paragraph; class Text; class TableGroup; class BandFormat:public BaseFormat { public: BandFormat():BaseFormat() { } BandFormat(int left,int top,int bottom,int right ):BaseFormat(left,top,bottom,right) { } BandFormat(BandFormat& band):BaseFormat(band) { } private: }; /// /// 封面属性定义 /// class CoverFormat:public BandFormat { public: CoverFormat():BandFormat() { } CoverFormat(int left,int top,int bottom,int right):BandFormat(left,top,bottom,right){} CoverFormat(CoverFormat& format):BandFormat(format) { } private: }; /// /// 封面类定义 /// class CoverWrapper:public BaseBand { public: CoverWrapper(CoverFormat& format,QObject* parent=0):BaseBand(format,parent) { m_Format = new CoverFormat(format); m_Type = bandtype::Cover; } CoverWrapper(QObject* parent=0):BaseBand(parent) { m_Format = new CoverFormat(); m_Type = bandtype::Cover; } ~CoverWrapper() { } private: }; /// /// 页眉属性定义 /// class HeaderFormat:public BandFormat { public: HeaderFormat():BandFormat() { m_penLine = QPen(); m_penLine.setStyle(Qt::NoPen); } HeaderFormat(int left,int top,int bottom,int right):BandFormat(left,top,bottom,right) { m_penLine = QPen(); m_penLine.setStyle(Qt::NoPen); } HeaderFormat(HeaderFormat & format):BandFormat(format) { m_penLine = format.m_penLine; } /// /// 页眉横线 /// /// inline QPen showline() const {return m_penLine;} inline void SetShowLine(const QPen& flag){m_penLine = flag;} private: QPen m_penLine; //横线 }; /// /// Band页眉属性定义 /// class HeaderWrapper:public BaseBand { public: HeaderWrapper(HeaderFormat& format,QObject* parent=0):BaseBand(format,parent) { m_Format = new HeaderFormat(format); m_Type = bandtype::Header; } HeaderWrapper(QObject* parent=0):BaseBand(parent) { m_Format = new HeaderFormat(); m_Type = bandtype::Header; } HeaderWrapper(const HeaderWrapper& header):BaseBand(header) { m_Type = bandtype::Header; m_Format = new HeaderFormat(*(static_cast(header.m_Format))); foreach (BaseItem* item, header.m_listItem) { if (item->elementType() == CCS_Report::BaseItem::classtype::Table) { m_listItem.append(new Table(*(static_cast(item)))); }else if (item->elementType() == CCS_Report::BaseItem::classtype::TableDynamic) { m_listItem.append(new TableDynamic(*(static_cast(item)))); }else if (item->elementType() == CCS_Report::BaseItem::classtype::TableGroup) { m_listItem.append(new TableGroup(*(static_cast(item)))); } } } ~HeaderWrapper() { } HeaderFormat* headerFormat() { return dynamic_cast(m_Format); } void SetMargin(const int left,const int top,const int right,const int bottom) { dynamic_cast(m_Format)->SetMargin(left,top,right,bottom); } private: }; /// /// Band页脚属性定义 /// class FooterFormat:public BandFormat { public: FooterFormat():BandFormat() { m_penLine = QPen(); m_penLine.setStyle(Qt::NoPen); } FooterFormat(int left,int top,int right,int bottom):BandFormat(left,top,right,bottom) { m_penLine = QPen();; } FooterFormat(FooterFormat& format):BandFormat(format) { m_penLine = format.m_penLine; } /// /// 页脚横线 /// /// inline QPen showline() const {return m_penLine;} inline void SetShowLine(const QPen& flag){m_penLine = flag;} private: QPen m_penLine; //横线 }; /// /// Band 页脚类 /// /// class FooterWrapper:public BaseBand { public: FooterWrapper(FooterFormat& format,QObject* parent=0):BaseBand(format,parent) { m_Format = new FooterFormat(format); m_Type = bandtype::Footer; } FooterWrapper(QObject* parent=0):BaseBand(parent) { m_Format = new FooterFormat(); m_Type = bandtype::Footer; } FooterWrapper(const FooterWrapper& foot):BaseBand(foot) { m_Type = bandtype::Footer; m_Format = new FooterFormat(*(static_cast(foot.m_Format))); foreach (BaseItem* item, foot.m_listItem) { if (item->elementType() == CCS_Report::BaseItem::classtype::Table) { m_listItem.append(new Table(*(static_cast(item)))); }else if (item->elementType() == CCS_Report::BaseItem::classtype::TableDynamic) { m_listItem.append(new TableDynamic(*(static_cast(item)))); }else if (item->elementType() == CCS_Report::BaseItem::classtype::TableGroup) { m_listItem.append(new TableGroup(*(static_cast(item)))); } } } ~FooterWrapper() {} FooterFormat* footerFormat() { return dynamic_cast(m_Format); } void SetMargin(const int left,const int top,const int right,const int bottom) { dynamic_cast(m_Format)->SetMargin(left,top,right,bottom); } private: }; class DirectoryFormat:public BandFormat { public: DirectoryFormat():BandFormat() { } DirectoryFormat(int left,int top,int right,int bottom):BandFormat(left,top,right,bottom) {} DirectoryFormat(DirectoryFormat& format):BandFormat(format) {} private: int m_iCreateType; //目录生成方式 =0 自动 =1 手动 }; class DirectoryWrapper:public BaseBand { public: DirectoryWrapper(DirectoryFormat& format,QObject* parent=0):BaseBand(format,parent) { m_Format = new DirectoryFormat(format); m_Header = nullptr; m_Header = nullptr; m_Type = bandtype::Directory; } DirectoryWrapper(QObject* parent=0):BaseBand(parent) { m_Type = bandtype::Directory; m_Format = new DirectoryFormat(); m_Header = nullptr; m_Header = nullptr; } ~DirectoryWrapper() { if (!m_Header) { delete m_Header; } if (!m_Footer) { delete m_Footer; } } /// /// 添加页眉【暂未用】 /// /// void AddHeader(HeaderWrapper& header) { m_Header = new HeaderWrapper(header); } /// /// 添加页脚【暂未用】 /// /// void AddFooter(FooterWrapper& footer) { m_Footer = new FooterWrapper(footer); } HeaderWrapper* header() const { return m_Header; } FooterWrapper* footer() const { return m_Footer; } // void SetHeader(HeaderWrapper* header){m_header = header;} // void SetFooter(FooterWrapper* footer){m_footer = footer;} private: HeaderWrapper* m_Header; FooterWrapper* m_Footer; }; /// /// 【暂时未用】 /// class AppendixFormat:public BandFormat { public: AppendixFormat():BandFormat() { } AppendixFormat(int left,int top,int right,int bottom):BandFormat(left,top,right,bottom) {} private: bool m_bContent; //是否和正文在同一页还是另起新页输出;缺省是另起新页输出 }; class AppendixWrapper:public BaseBand { public: AppendixWrapper(AppendixFormat& format,QObject* parent=0):BaseBand(format,parent) { m_Type = bandtype::Appendix; m_Header = nullptr; m_Header = nullptr; m_Format = new AppendixFormat(format); } AppendixWrapper(QObject* parent=0):BaseBand(parent) { m_Type = bandtype::Appendix; m_Header = nullptr; m_Header = nullptr; m_Format = new AppendixFormat(); } ~AppendixWrapper() { if (!m_Header) { delete m_Header; } if (!m_Footer) { delete m_Footer; } } void AddHeader(HeaderWrapper& header) { m_Header = new HeaderWrapper(header); } void AddFooter(FooterWrapper& footer) { m_Footer = new FooterWrapper(footer); } private: HeaderWrapper* m_Header; FooterWrapper* m_Footer; }; class ContentFormat:public BandFormat { public: ContentFormat():BandFormat() { } ContentFormat(int left,int top,int right,int bottom):BandFormat(left,top,right,bottom) {} private: }; class ContentWrapper:public BaseBand { public: ContentWrapper(ContentFormat& format,QObject* parent=0):BaseBand(format,parent) { m_Type = bandtype::Content; m_Format = new ContentFormat(format); m_Header = nullptr; m_Footer = nullptr; } ContentWrapper(QObject* parent=0):BaseBand(parent) { m_Type = bandtype::Content; m_Format = new ContentFormat(); m_Header = nullptr; m_Footer = nullptr; } ~ContentWrapper() { if (!m_Header) { delete m_Header; } if (!m_Footer) { delete m_Footer; } } void AddHeader(HeaderWrapper& header) { m_Header = new HeaderWrapper(header); } void AddFooter(FooterWrapper& footer) { m_Footer= new FooterWrapper(footer); } HeaderWrapper* header() const { return m_Header; } FooterWrapper* footer() const { return m_Footer; } void SetMargin(const int left,const int top,const int right,const int bottom) { dynamic_cast(m_Format)->SetMargin(left,top,right,bottom); } /* void SetHeader(HeaderWrapper* header){m_header = header;} void SetFooter(FooterWrapper* footer){m_footer = footer;}*/ private: HeaderWrapper* m_Header; FooterWrapper* m_Footer; }; /// /// 水印属性 /// class WaterFormat :public BandFormat { public: WaterFormat() :BandFormat() { } WaterFormat(int left, int top, int bottom, int right) :BandFormat(left, top, bottom, right) {} WaterFormat(CoverFormat& format) :BandFormat(format) { } private: }; /// /// 水印 /// class WaterWrapper :public BaseBand { public: WaterWrapper(WaterFormat& format, QObject* parent = 0) :BaseBand(format, parent) { m_Format = new WaterFormat(format); m_Type = bandtype::Water; } WaterWrapper(QObject* parent = 0) :BaseBand(parent) { m_Format = new WaterFormat(); m_Type = bandtype::Water; } ~WaterWrapper() { } private: }; /// /// 报告类,包含若干个Band,每个类型的Band仅出现0次或者1次; /// Band包括:封面(cover)、目录(directory)、内容(content)、页眉(header)、页脚(footer)、水印(water)、【附录()未用】 /// class Report:public QObject { Q_FLAGS(Elements) Q_ENUMS(Element) Q_FLAGS(Frames) Q_ENUMS(Frame) public: Report(QFont font = QFont("宋体")) { // ccsReport = new CCS_Report::CCSReport(); // m_mapBand.insert("header",new HeaderWrapper(this)); m_mapBand.insert("cover",new CoverWrapper(this)); //m_mapBand.insert("footer",new FooterWrapper(this)); m_mapBand.insert("dir",new DirectoryWrapper(this)); m_mapBand.insert("content",new ContentWrapper(this)); m_mapBand.insert("appendix",new AppendixWrapper(this)); m_mapBand.insert("water", new WaterWrapper(this)); // m_Headers.append(new HeaderWrapper(this)); // m_Footers.append(new FooterWrapper(this)); // dynamic_cast(m_mapBand.value("content"))->SetHeader(m_Headers[0]); // dynamic_cast(m_mapBand.value("content"))->SetFooter(m_Footers[0]); m_defaultFont = font; m_eFrame = 0; //无边框 m_qFrameTop = 0; m_qFrameBottom = 0; m_qFrameLeft = 0; m_qFrameRight = 0; m_margin = QMargins(); m_bShowBorder = false; m_bHasDirectory = true; m_iDirOrient = CCSReportType::Portrait; m_numberstyle = CCSReportType::NoteNumberStyleArabic; m_strWaterPath=""; m_sizeWater=QSize(); m_iWaterOpacity = 100; m_iWaterAngle = 0; m_iWaterShowType = 0; //=0居中、=1平铺 m_strWaterInfo = ""; m_iPosition = 0; } ~Report() { for(auto& item:m_mapBand) { delete item; } // for(auto&item:m_Headers) // { // delete item; // } // for (auto&item:m_Footers) // { // delete item; // } } void SetDefaultFont(QFont font); QFont defaultfont(){return m_defaultFont;} CoverWrapper* Cover() {return dynamic_cast(m_mapBand.value("cover"));} //HeaderWrapper* Header() {return dynamic_cast(m_mapBand.value("header"));} //FooterWrapper* Footer() {return dynamic_cast(m_mapBand.value("footer"));} DirectoryWrapper* Directory() {return dynamic_cast(m_mapBand.value("dir"));} ContentWrapper* Content() {return dynamic_cast(m_mapBand.value("content"));} WaterWrapper* Water() {return dynamic_cast(m_mapBand.value("water"));} void SetContent(ContentWrapper* wrapper) { if (m_mapBand.contains("content")) { delete m_mapBand["content"]; m_mapBand.remove("content"); m_mapBand.insert("content",wrapper); wrapper->setParent(this); } } AppendixWrapper* Appendix(){return dynamic_cast(m_mapBand.value("appendix"));} // QList Headers() {return m_Headers;} // QList Footers() {return m_Footers;} // HeaderWrapper* Header(int index=0) // { // if (m_Headers.count()> index) // return m_Headers[index]; // else // return 0; // } // FooterWrapper* Footer(int index=0) // { // if (m_Footers.count()> index) // return m_Footers[index]; // else // return 0; // } enum Frame {DrawLeft = 0, DrawRight = 1, DrawTop = 2, DrawBottom = 4 }; Q_ENUM(Frame) Q_DECLARE_FLAGS(Frames, Frame) Q_FLAG(Frames) QHash& bandItem(){ return m_mapBand; } /// /// 设置报告页面边框的属性 /// /// int frame() const {return m_eFrame;} qreal framewidth() const {return m_qFrameWidth;} QColor framecolor() const {return m_FrameColor;} qreal frametop() const {return m_qFrameTop;} qreal framebottom() const {return m_qFrameBottom;} qreal frameleft() const {return m_qFrameLeft;} qreal frameright() const {return m_qFrameRight;} void SetIsFrame(const int & frame) {m_eFrame = frame;} void SetFrameWidth(const qreal & width){m_qFrameWidth = width;} void SetFrameColor(const QColor& color){m_FrameColor = color;} void SetFrameTop(const qreal &top){m_qFrameTop = top;} void SetFrameBottom(const qreal &bottom){m_qFrameBottom = bottom;} void SetFrameLeft(const qreal &left){m_qFrameLeft = left;} void SetFrameRight(const qreal &right){m_qFrameRight = right;} void SetFrame(const qreal &top,const qreal &bottom,const qreal &left,const qreal &right) { m_qFrameTop = top; m_qFrameBottom = bottom; m_qFrameLeft = left; m_qFrameRight = right; } void SetFrame(const qreal &top,const qreal &bottom,const qreal &left,const qreal &right,const qreal &width,const QColor &color ) { m_qFrameTop = top; m_qFrameBottom = bottom; m_qFrameLeft = left; m_qFrameRight = right; m_qFrameWidth = width; m_FrameColor = color; } /// /// 设置报告的页边距 /// /// QMargins reportmargin() {return m_margin;} void SetReportMargin(QMargins margin){ m_margin = margin; } bool showborder() { return m_bShowBorder; } void SetShowBorder(bool value) { m_bShowBorder = value; } bool hasdirctory() { return m_bHasDirectory; } void SetHasDirectory(bool value) { m_bHasDirectory = value; } int dirOrient() { return m_iDirOrient; } void SetDirOrient(int value) { m_iDirOrient = value; } /// /// 【未用】 /// /// CCSReportType::NoteNumberStyle numberstyle(){return m_numberstyle;} void SetNumberStyle(CCSReportType::NoteNumberStyle style) {m_numberstyle = style;} /// /// 后续关于水印的方法函数【未用】 /// /// 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;} int waterposition(){return m_iPosition;} void SetWaterPosition(int value){m_iPosition = value;} void SetWaterInfos(QString path,QString info="",int position =0,int opacity=100,int angle=0,int showtype=0,QSize size=QSize()) { m_strWaterPath = path; m_iWaterOpacity = opacity; m_iWaterAngle = angle; m_iWaterShowType = showtype; m_sizeWater = size; m_strWaterInfo = info; m_iPosition = position; } // void SetContentHeader(const int& index=0) // { // dynamic_cast(m_mapBand.value("content"))->SetHeader(m_Headers[index]); // } // void SetContentFooter(const int& index) // { // dynamic_cast(m_mapBand.value("content"))->SetFooter(m_Footers[index]); // } // void SetDirectoryHeader(const int& index=0) // { // dynamic_cast(m_mapBand.value("dir"))->SetHeader(m_Headers[index]); // } // void SetDirectoryFooter(const int& index) // { // dynamic_cast(m_mapBand.value("dir"))->SetFooter(m_Footers[index]); // } private: QHash m_mapBand; // QList m_Headers; // QList m_Footers; //边框的设定 int m_eFrame; //边框的显示 int m_eUnit; qreal m_qFrameWidth; //边框宽度 qreal m_qFrameTop;//边框位置 距上、距下、距左、距右 qreal m_qFrameBottom; qreal m_qFrameLeft; qreal m_qFrameRight; QMargins m_margin; QColor m_FrameColor; //边框颜色 QFont m_defaultFont; CCSReportType::NoteNumberStyle m_numberstyle; bool m_bShowBorder; bool m_bHasDirectory; int m_iDirOrient; //目录的方向 =0 横向 =1 纵向 2022/8/24 添加 //水印 以下属性【作废】 QString m_strWaterPath; QSize m_sizeWater; int m_iWaterOpacity; int m_iWaterAngle; //逆时针角度 int m_iWaterShowType; //居中、平铺 QString m_strWaterInfo; //水印附加信息, int m_iPosition; //水印叠加位置 =0 图层之下 =1 图层之上 假设只有2层 }; Q_DECLARE_OPERATORS_FOR_FLAGS(Report::Frames) } #endif // CCSREPORTTEMPLATE_H