This keyword is not expanded by Git which means it's not replaced with the correct revision value in the releases made using git-based scripts and it's confusing to have lines with unexpanded "$Id$" in the released files. As expanding them with Git is not that simple (it could be done with git archive and export-subst attribute) and there are not many benefits in having them in the first place, just remove all these lines. If nothing else, this will make an eventual transition to Git simpler. Closes #14487. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74602 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
252 lines
9.4 KiB
C++
252 lines
9.4 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: wx/richtext/richtextprint.h
|
|
// Purpose: Rich text printing classes
|
|
// Author: Julian Smart
|
|
// Created: 2006-10-23
|
|
// Copyright: (c) Julian Smart
|
|
// Licence: wxWindows licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _WX_RICHTEXTPRINT_H_
|
|
#define _WX_RICHTEXTPRINT_H_
|
|
|
|
#include "wx/defs.h"
|
|
|
|
#if wxUSE_RICHTEXT & wxUSE_PRINTING_ARCHITECTURE
|
|
|
|
#include "wx/richtext/richtextbuffer.h"
|
|
|
|
#include "wx/print.h"
|
|
#include "wx/printdlg.h"
|
|
|
|
#define wxRICHTEXT_PRINT_MAX_PAGES 99999
|
|
|
|
// Header/footer page identifiers
|
|
enum wxRichTextOddEvenPage {
|
|
wxRICHTEXT_PAGE_ODD,
|
|
wxRICHTEXT_PAGE_EVEN,
|
|
wxRICHTEXT_PAGE_ALL
|
|
};
|
|
|
|
// Header/footer text locations
|
|
enum wxRichTextPageLocation {
|
|
wxRICHTEXT_PAGE_LEFT,
|
|
wxRICHTEXT_PAGE_CENTRE,
|
|
wxRICHTEXT_PAGE_RIGHT
|
|
};
|
|
|
|
/*!
|
|
* Header/footer data
|
|
*/
|
|
|
|
class WXDLLIMPEXP_RICHTEXT wxRichTextHeaderFooterData: public wxObject
|
|
{
|
|
public:
|
|
wxRichTextHeaderFooterData() { Init(); }
|
|
wxRichTextHeaderFooterData(const wxRichTextHeaderFooterData& data): wxObject() { Copy(data); }
|
|
|
|
/// Initialise
|
|
void Init() { m_headerMargin = 20; m_footerMargin = 20; m_showOnFirstPage = true; }
|
|
|
|
/// Copy
|
|
void Copy(const wxRichTextHeaderFooterData& data);
|
|
|
|
/// Assignment
|
|
void operator= (const wxRichTextHeaderFooterData& data) { Copy(data); }
|
|
|
|
/// Set/get header text, e.g. wxRICHTEXT_PAGE_ODD, wxRICHTEXT_PAGE_LEFT
|
|
void SetHeaderText(const wxString& text, wxRichTextOddEvenPage page = wxRICHTEXT_PAGE_ALL, wxRichTextPageLocation location = wxRICHTEXT_PAGE_CENTRE);
|
|
wxString GetHeaderText(wxRichTextOddEvenPage page = wxRICHTEXT_PAGE_EVEN, wxRichTextPageLocation location = wxRICHTEXT_PAGE_CENTRE) const;
|
|
|
|
/// Set/get footer text, e.g. wxRICHTEXT_PAGE_ODD, wxRICHTEXT_PAGE_LEFT
|
|
void SetFooterText(const wxString& text, wxRichTextOddEvenPage page = wxRICHTEXT_PAGE_ALL, wxRichTextPageLocation location = wxRICHTEXT_PAGE_CENTRE);
|
|
wxString GetFooterText(wxRichTextOddEvenPage page = wxRICHTEXT_PAGE_EVEN, wxRichTextPageLocation location = wxRICHTEXT_PAGE_CENTRE) const;
|
|
|
|
/// Set/get text
|
|
void SetText(const wxString& text, int headerFooter, wxRichTextOddEvenPage page, wxRichTextPageLocation location);
|
|
wxString GetText(int headerFooter, wxRichTextOddEvenPage page, wxRichTextPageLocation location) const;
|
|
|
|
/// Set/get margins between text and header or footer, in tenths of a millimeter
|
|
void SetMargins(int headerMargin, int footerMargin) { m_headerMargin = headerMargin; m_footerMargin = footerMargin; }
|
|
int GetHeaderMargin() const { return m_headerMargin; }
|
|
int GetFooterMargin() const { return m_footerMargin; }
|
|
|
|
/// Set/get whether to show header or footer on first page
|
|
void SetShowOnFirstPage(bool showOnFirstPage) { m_showOnFirstPage = showOnFirstPage; }
|
|
bool GetShowOnFirstPage() const { return m_showOnFirstPage; }
|
|
|
|
/// Clear all text
|
|
void Clear();
|
|
|
|
/// Set/get font
|
|
void SetFont(const wxFont& font) { m_font = font; }
|
|
const wxFont& GetFont() const { return m_font; }
|
|
|
|
/// Set/get colour
|
|
void SetTextColour(const wxColour& col) { m_colour = col; }
|
|
const wxColour& GetTextColour() const { return m_colour; }
|
|
|
|
DECLARE_CLASS(wxRichTextHeaderFooterData)
|
|
|
|
private:
|
|
|
|
// Strings for left, centre, right, top, bottom, odd, even
|
|
wxString m_text[12];
|
|
wxFont m_font;
|
|
wxColour m_colour;
|
|
int m_headerMargin;
|
|
int m_footerMargin;
|
|
bool m_showOnFirstPage;
|
|
};
|
|
|
|
/*!
|
|
* wxRichTextPrintout
|
|
*/
|
|
|
|
class WXDLLIMPEXP_RICHTEXT wxRichTextPrintout : public wxPrintout
|
|
{
|
|
public:
|
|
wxRichTextPrintout(const wxString& title = _("Printout"));
|
|
virtual ~wxRichTextPrintout();
|
|
|
|
/// The buffer to print
|
|
void SetRichTextBuffer(wxRichTextBuffer* buffer) { m_richTextBuffer = buffer; }
|
|
wxRichTextBuffer* GetRichTextBuffer() const { return m_richTextBuffer; }
|
|
|
|
/// Set/get header/footer data
|
|
void SetHeaderFooterData(const wxRichTextHeaderFooterData& data) { m_headerFooterData = data; }
|
|
const wxRichTextHeaderFooterData& GetHeaderFooterData() const { return m_headerFooterData; }
|
|
|
|
/// Sets margins in 10ths of millimetre. Defaults to 1 inch for margins.
|
|
void SetMargins(int top = 254, int bottom = 254, int left = 254, int right = 254);
|
|
|
|
/// Calculate scaling and rectangles, setting the device context scaling
|
|
void CalculateScaling(wxDC* dc, wxRect& textRect, wxRect& headerRect, wxRect& footerRect);
|
|
|
|
// wxPrintout virtual functions
|
|
virtual bool OnPrintPage(int page);
|
|
virtual bool HasPage(int page);
|
|
virtual void GetPageInfo(int *minPage, int *maxPage, int *selPageFrom, int *selPageTo);
|
|
virtual bool OnBeginDocument(int startPage, int endPage);
|
|
virtual void OnPreparePrinting();
|
|
|
|
private:
|
|
|
|
/// Renders one page into dc
|
|
void RenderPage(wxDC *dc, int page);
|
|
|
|
/// Substitute keywords
|
|
static bool SubstituteKeywords(wxString& str, const wxString& title, int pageNum, int pageCount);
|
|
|
|
private:
|
|
|
|
wxRichTextBuffer* m_richTextBuffer;
|
|
int m_numPages;
|
|
wxArrayInt m_pageBreaksStart;
|
|
wxArrayInt m_pageBreaksEnd;
|
|
wxArrayInt m_pageYOffsets;
|
|
int m_marginLeft, m_marginTop, m_marginRight, m_marginBottom;
|
|
|
|
wxRichTextHeaderFooterData m_headerFooterData;
|
|
|
|
wxDECLARE_NO_COPY_CLASS(wxRichTextPrintout);
|
|
};
|
|
|
|
/*
|
|
*! wxRichTextPrinting
|
|
* A simple interface to perform wxRichTextBuffer printing.
|
|
*/
|
|
|
|
class WXDLLIMPEXP_RICHTEXT wxRichTextPrinting : public wxObject
|
|
{
|
|
public:
|
|
wxRichTextPrinting(const wxString& name = _("Printing"), wxWindow *parentWindow = NULL);
|
|
virtual ~wxRichTextPrinting();
|
|
|
|
/// Preview the file or buffer
|
|
#if wxUSE_FFILE && wxUSE_STREAMS
|
|
bool PreviewFile(const wxString& richTextFile);
|
|
#endif
|
|
bool PreviewBuffer(const wxRichTextBuffer& buffer);
|
|
|
|
/// Print the file or buffer
|
|
#if wxUSE_FFILE && wxUSE_STREAMS
|
|
bool PrintFile(const wxString& richTextFile, bool showPrintDialog = true);
|
|
#endif
|
|
bool PrintBuffer(const wxRichTextBuffer& buffer, bool showPrintDialog = true);
|
|
|
|
/// Shows page setup dialog
|
|
void PageSetup();
|
|
|
|
/// Set/get header/footer data
|
|
void SetHeaderFooterData(const wxRichTextHeaderFooterData& data) { m_headerFooterData = data; }
|
|
const wxRichTextHeaderFooterData& GetHeaderFooterData() const { return m_headerFooterData; }
|
|
|
|
/// Set/get header text, e.g. wxRICHTEXT_PAGE_ODD, wxRICHTEXT_PAGE_LEFT
|
|
void SetHeaderText(const wxString& text, wxRichTextOddEvenPage page = wxRICHTEXT_PAGE_ALL, wxRichTextPageLocation location = wxRICHTEXT_PAGE_CENTRE);
|
|
wxString GetHeaderText(wxRichTextOddEvenPage page = wxRICHTEXT_PAGE_EVEN, wxRichTextPageLocation location = wxRICHTEXT_PAGE_CENTRE) const;
|
|
|
|
/// Set/get footer text, e.g. wxRICHTEXT_PAGE_ODD, wxRICHTEXT_PAGE_LEFT
|
|
void SetFooterText(const wxString& text, wxRichTextOddEvenPage page = wxRICHTEXT_PAGE_ALL, wxRichTextPageLocation location = wxRICHTEXT_PAGE_CENTRE);
|
|
wxString GetFooterText(wxRichTextOddEvenPage page = wxRICHTEXT_PAGE_EVEN, wxRichTextPageLocation location = wxRICHTEXT_PAGE_CENTRE) const;
|
|
|
|
/// Show header/footer on first page, or not
|
|
void SetShowOnFirstPage(bool show) { m_headerFooterData.SetShowOnFirstPage(show); }
|
|
|
|
/// Set the font
|
|
void SetHeaderFooterFont(const wxFont& font) { m_headerFooterData.SetFont(font); }
|
|
|
|
/// Set the colour
|
|
void SetHeaderFooterTextColour(const wxColour& font) { m_headerFooterData.SetTextColour(font); }
|
|
|
|
/// Get print and page setup data
|
|
wxPrintData *GetPrintData();
|
|
wxPageSetupDialogData *GetPageSetupData() { return m_pageSetupData; }
|
|
|
|
/// Set print and page setup data
|
|
void SetPrintData(const wxPrintData& printData);
|
|
void SetPageSetupData(const wxPageSetupDialogData& pageSetupData);
|
|
|
|
/// Set the rich text buffer pointer, deleting the existing object if present
|
|
void SetRichTextBufferPreview(wxRichTextBuffer* buf);
|
|
wxRichTextBuffer* GetRichTextBufferPreview() const { return m_richTextBufferPreview; }
|
|
|
|
void SetRichTextBufferPrinting(wxRichTextBuffer* buf);
|
|
wxRichTextBuffer* GetRichTextBufferPrinting() const { return m_richTextBufferPrinting; }
|
|
|
|
/// Set/get the parent window
|
|
void SetParentWindow(wxWindow* parent) { m_parentWindow = parent; }
|
|
wxWindow* GetParentWindow() const { return m_parentWindow; }
|
|
|
|
/// Set/get the title
|
|
void SetTitle(const wxString& title) { m_title = title; }
|
|
const wxString& GetTitle() const { return m_title; }
|
|
|
|
/// Set/get the preview rect
|
|
void SetPreviewRect(const wxRect& rect) { m_previewRect = rect; }
|
|
const wxRect& GetPreviewRect() const { return m_previewRect; }
|
|
|
|
protected:
|
|
virtual wxRichTextPrintout *CreatePrintout();
|
|
virtual bool DoPreview(wxRichTextPrintout *printout1, wxRichTextPrintout *printout2);
|
|
virtual bool DoPrint(wxRichTextPrintout *printout, bool showPrintDialog);
|
|
|
|
private:
|
|
wxPrintData* m_printData;
|
|
wxPageSetupDialogData* m_pageSetupData;
|
|
|
|
wxRichTextHeaderFooterData m_headerFooterData;
|
|
wxString m_title;
|
|
wxWindow* m_parentWindow;
|
|
wxRichTextBuffer* m_richTextBufferPreview;
|
|
wxRichTextBuffer* m_richTextBufferPrinting;
|
|
wxRect m_previewRect;
|
|
|
|
wxDECLARE_NO_COPY_CLASS(wxRichTextPrinting);
|
|
};
|
|
|
|
#endif // wxUSE_RICHTEXT & wxUSE_PRINTING_ARCHITECTURE
|
|
|
|
#endif // _WX_RICHTEXTPRINT_H_
|
|
|