Notify user less intrusively about overflow when previewing HTML printouts.
We used to show a modal dialog if the page didn't fit horizontally but this was too intrusive when the user was just previewing the output and not really printing it. Moreover, the question of the message box ("Print" or "Cancel") simply didn't make sense in this case. Fix both problems by not showing this dialog at all when previewing. Instead, notify the user with a much less intrusive info bar in the preview window. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64214 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
742df99230
commit
fc48f78fd0
@ -176,15 +176,17 @@ public:
|
||||
private:
|
||||
// this function is called by the base class OnPreparePrinting()
|
||||
// implementation and by default checks whether the document fits into
|
||||
// pageArea horizontally and warns the user if it does not, giving him
|
||||
// the possibility to cancel printing in this case
|
||||
// pageArea horizontally and warns the user if it does not and, if we're
|
||||
// going to print and not just to preview the document, giving him the
|
||||
// possibility to cancel printing
|
||||
//
|
||||
// you may override it to either suppress this check if truncation of the
|
||||
// HTML being printed is acceptable or, on the contrary, add more checks to
|
||||
// it, e.g. for the fit in the vertical direction if the document should
|
||||
// always appear on a single page
|
||||
//
|
||||
// return true if printing should go ahead or false to cancel it
|
||||
// return true if printing should go ahead or false to cancel it (the
|
||||
// return value is ignored when previewing)
|
||||
virtual bool CheckFit(const wxSize& pageArea, const wxSize& docArea) const;
|
||||
|
||||
void RenderPage(wxDC *dc, int page);
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include "wx/html/htmprint.h"
|
||||
#include "wx/wxhtml.h"
|
||||
#include "wx/wfstream.h"
|
||||
#include "wx/infobar.h"
|
||||
|
||||
|
||||
// default font size of normal text (HTML font size 0) for printing, in points:
|
||||
@ -225,8 +226,42 @@ void wxHtmlPrintout::AddFilter(wxHtmlFilter *filter)
|
||||
bool
|
||||
wxHtmlPrintout::CheckFit(const wxSize& pageArea, const wxSize& docArea) const
|
||||
{
|
||||
if ( docArea.x > pageArea.x )
|
||||
// Nothing to do if the contents fits horizontally.
|
||||
if ( docArea.x <= pageArea.x )
|
||||
return true;
|
||||
|
||||
// Otherwise warn the user more or less intrusively depending on whether
|
||||
// we're previewing or printing:
|
||||
if ( wxPrintPreview * const preview = GetPreview() )
|
||||
{
|
||||
// Don't annoy the user too much when previewing by using info bar
|
||||
// instead of a dialog box.
|
||||
#if wxUSE_INFOBAR
|
||||
wxFrame * const parent = preview->GetFrame();
|
||||
wxCHECK_MSG( parent, false, "No parent preview frame?" );
|
||||
|
||||
wxSizer * const sizer = parent->GetSizer();
|
||||
wxCHECK_MSG( sizer, false, "Preview frame should be using sizers" );
|
||||
|
||||
wxInfoBar * const bar = new wxInfoBar(parent);
|
||||
sizer->Add(bar, wxSizerFlags().Expand());
|
||||
|
||||
// Note that the message here is similar to the one below but not
|
||||
// exactly the same, notably we don't use the document title here
|
||||
// because it's already clear which document it pertains to and the
|
||||
// title may be long enough to make the text not fit in the window.
|
||||
bar->ShowMessage
|
||||
(
|
||||
_("This document doesn't fit on the page horizontally and "
|
||||
"will be truncated when it is printed."),
|
||||
wxICON_WARNING
|
||||
);
|
||||
#endif // wxUSE_INFOBAR
|
||||
}
|
||||
else // We're going to really print and not just preview.
|
||||
{
|
||||
// This is our last chance to warn the user that the output will be
|
||||
// mangled so do show a message box.
|
||||
wxMessageDialog
|
||||
dlg
|
||||
(
|
||||
@ -323,7 +358,7 @@ void wxHtmlPrintout::OnPreparePrinting()
|
||||
|
||||
if ( CheckFit(wxSize(printAreaW, printAreaH),
|
||||
wxSize(m_Renderer->GetTotalWidth(),
|
||||
m_Renderer->GetTotalHeight())) )
|
||||
m_Renderer->GetTotalHeight())) || IsPreview() )
|
||||
{
|
||||
// do paginate the document
|
||||
CountPages();
|
||||
|
Loading…
Reference in New Issue
Block a user