#ifndef __REPRINT_H #define __REPRINT_H #ifndef __REPORT_H #include #endif class TBook : public TObject { size_t _page, _pages; TPointer_array _index; TFilename _file; ofstream* _out; bool _is_temporary; DRAW_CTOOLS _tools; TReport_font _font; TRectangle _rect; char _horizontal_alignment, _vertical_alignment; TReport_image_cache _images; size_t _pagefrom, _pageto, _copies; protected: PRINT_RCD* _rcd; TWindow* _printwin; long _ph, _pw, _pvr, _phr; bool _page_is_open; virtual void define_frame(const TRectangle& rect); virtual bool init(); TPoint log2dev(const TPoint& ptlog) const; public: virtual bool open_page(); virtual bool close_page(); virtual bool main_loop(); virtual void set_pen(COLOR color, int width = 0, PEN_STYLE style = P_SOLID); virtual void set_brush(COLOR color, PAT_STYLE pattern = PAT_SOLID); virtual void set_font(const TReport_font& font); virtual void set_text_color(COLOR fore, COLOR back = COLOR_WHITE, bool opaque = false); virtual void set_text_align(char halign ='L', char valign = 'T'); virtual void draw_rectangle(const TRectangle& rect); virtual void draw_round_rectangle(const TRectangle& rect, int radius); virtual void draw_ellipse(const TRectangle& rect); virtual void draw_line(const TRectangle& rect); virtual void draw_image(const TRectangle& rect, const char* filename); virtual void draw_text(const TRectangle& rect, const char* text); virtual void draw_text(const TRectangle& rect, const TString_array& text); virtual void draw_link(const TRectangle& rect, const char* text, const char* link); virtual void draw_book_pages(const TRectangle& r); virtual void set_clip(long top, long bottom); virtual int compute_text_frame(const TString& txt, const TReport_font& font, TRectangle& rect, TString_array& para) const; TPoint page_size() const; TPoint page_res() const; size_t page() const { return _page; } size_t pages() const { return _pages; } virtual int lpi() const { return 6; } virtual int cpi() const { return 10; } virtual int logical_page_width() const { return page_size().x * cpi() / page_res().x * 100; } virtual int logical_page_height() const { return page_size().y * lpi() / page_res().y * 100; } virtual bool print_page(TWindow& win, size_t page); virtual bool on_link(const TReport_link&) { return false; } virtual bool print(size_t pagefrom = 0, size_t pageto = 0, size_t copies = 0); virtual bool preview(); virtual bool export_text(const TFilename& fname) const; bool print_or_preview(); // Calls one of the above TBook(const char* name); virtual ~TBook(); }; class TReport_book : public TBook { TReport* _report; long _logical_page_height, _logical_page_width; long _logical_foot_pos; bool _is_last_page, _page_break_allowed; TPoint _delta; size_t _rep_page; protected: virtual bool open_page(); virtual bool close_page(); virtual void define_frame(const TRectangle& r); virtual bool on_link(const TReport_link& lnk); bool init(TReport& rep); void reprint_group_headers(const TReport_section& rs); long print_section(TReport_section& rs); long print_section(char type, int level); void print_subsections(int father); public: bool add(TReport& report, bool progind = true); virtual int lpi() const; virtual int cpi() const; virtual int logical_page_width() const { return _logical_page_width; } virtual int logical_page_height() const { return _logical_page_height; } virtual bool print(size_t pagefrom = 0, size_t pageto = 0, size_t copies = 0); TReport_book(const char* name = NULL); }; bool advanced_set_draw_tools(TWindow& win, PAT_STYLE pat, int border, COLOR fore, COLOR back); void advanced_draw_rect(TWindow& win, const RCT& r, PAT_STYLE pat, int border, COLOR fore, COLOR back, int radius, int shade); void advanced_draw_text_line(TWindow& win, const char* text, const RCT& r, char halign, char valign); void advanced_draw_paragraph(TWindow& win, const TString_array& text, const RCT& r, char halign, char valign, int default_row_height); #endif