Printing improvements: GetPageInfo() gets called after the DC has

been set and after OnPreparePrinting() has been called so it can
report the number of pages accurately; doesn't try to set
number of pages in print dialog, in common with other Windows apps;
wxHTML easy printing's preview shows number of pages
correctly; preview scrollbars are set correctly; keyboard navigation
improved


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@22263 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart 2003-07-23 20:30:19 +00:00
parent 3d16b99ece
commit d2b354f9c9
12 changed files with 205 additions and 155 deletions

View File

@ -126,6 +126,13 @@ All GUI ports:
- send menu update events only when a menu is about to be used (MSW/GTK) - send menu update events only when a menu is about to be used (MSW/GTK)
- improved event processing performance (Hans Van Leemputten) - improved event processing performance (Hans Van Leemputten)
- added wxMirrorDC class - added wxMirrorDC class
- printing improvements: GetPageInfo() gets called after the DC has
been set and after OnPreparePrinting() has been called so it can
report the number of pages accurately; doesn't try to set
number of pages in print dialog, in common with other Windows apps;
wxHTML easy printing's preview shows number of pages
correctly; preview scrollbars are set correctly; keyboard navigation
improved
Unix: Unix:

View File

@ -786,7 +786,7 @@ reference) and to return a tuple of four integers.
} }
\perlnote{When this method is overridden in a derived class, \perlnote{When this method is overridden in a derived class,
it must not take any parameters, an return a 4-element list. it must not take any parameters, and returns a 4-element list.
} }
\membersection{wxPrintout::GetPageSizeMM}\label{wxprintoutgetpagesizemm} \membersection{wxPrintout::GetPageSizeMM}\label{wxprintoutgetpagesizemm}
@ -981,7 +981,7 @@ internally.
\membersection{wxPrintPreview::GetCanvas}\label{wxprintpreviewgetcanvas} \membersection{wxPrintPreview::GetCanvas}\label{wxprintpreviewgetcanvas}
\func{wxWindow* }{GetCanvas}{\void} \func{wxPreviewCanvas* }{GetCanvas}{\void}
Gets the preview window used for displaying the print preview image. Gets the preview window used for displaying the print preview image.
@ -1067,7 +1067,7 @@ Renders a page into a wxMemoryDC. Used internally by wxPrintPreview.
\membersection{wxPrintPreview::SetCanvas}\label{wxprintpreviewsetcanvas} \membersection{wxPrintPreview::SetCanvas}\label{wxprintpreviewsetcanvas}
\func{void}{SetCanvas}{\param{wxWindow* }{window}} \func{void}{SetCanvas}{\param{wxPreviewCanvas** }{window}}
Sets the window to be used for displaying the print preview image. Sets the window to be used for displaying the print preview image.

View File

@ -179,6 +179,8 @@ wxMiscellaneous
has been destroyed or recreated. On wxMSW, this is done in has been destroyed or recreated. On wxMSW, this is done in
~wxToolBar. On wxGTK, in SetToolBar. In wxMac, not at all, ~wxToolBar. On wxGTK, in SetToolBar. In wxMac, not at all,
but sending a wxSizeEvent will do it. but sending a wxSizeEvent will do it.
- Need wxRect wxToolBar::GetToolRect(int id) or similar so we can
align a popup menu with a toolbar button.
- wxMac font selector dialog is the generic font selector - - wxMac font selector dialog is the generic font selector -
horrible. horrible.
- No Append(wxArrayString&) for wxChoice and wxComboBox in wxGTK. - No Append(wxArrayString&) for wxChoice and wxComboBox in wxGTK.

View File

@ -152,6 +152,7 @@ public:
bool HasPage(int page); bool HasPage(int page);
void GetPageInfo(int *minPage, int *maxPage, int *selPageFrom, int *selPageTo); void GetPageInfo(int *minPage, int *maxPage, int *selPageFrom, int *selPageTo);
bool OnBeginDocument(int startPage, int endPage); bool OnBeginDocument(int startPage, int endPage);
void OnPreparePrinting();
// Adds input filter // Adds input filter
static void AddFilter(wxHtmlFilter *filter); static void AddFilter(wxHtmlFilter *filter);

View File

@ -171,6 +171,7 @@ public:
~wxPreviewCanvas(); ~wxPreviewCanvas();
void OnPaint(wxPaintEvent& event); void OnPaint(wxPaintEvent& event);
void OnChar(wxKeyEvent &event);
// Responds to colour changes // Responds to colour changes
void OnSysColourChanged(wxSysColourChangedEvent& event); void OnSysColourChanged(wxSysColourChangedEvent& event);
@ -204,8 +205,11 @@ public:
virtual void Initialize(); virtual void Initialize();
virtual void CreateCanvas(); virtual void CreateCanvas();
virtual void CreateControlBar(); virtual void CreateControlBar();
inline wxPreviewControlBar* GetControlBar() const { return m_controlBar; }
protected: protected:
wxWindow* m_previewCanvas; wxPreviewCanvas* m_previewCanvas;
wxPreviewControlBar* m_controlBar; wxPreviewControlBar* m_controlBar;
wxPrintPreviewBase* m_printPreview; wxPrintPreviewBase* m_printPreview;
@ -253,7 +257,7 @@ public:
wxWindow *parent, wxWindow *parent,
const wxPoint& pos = wxDefaultPosition, const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize, const wxSize& size = wxDefaultSize,
long style = 0, long style = wxTAB_TRAVERSAL,
const wxString& name = wxT("panel")); const wxString& name = wxT("panel"));
~wxPreviewControlBar(); ~wxPreviewControlBar();
@ -275,7 +279,6 @@ public:
void OnFirstButton(wxCommandEvent & WXUNUSED(event)) { OnFirst(); } void OnFirstButton(wxCommandEvent & WXUNUSED(event)) { OnFirst(); }
void OnLastButton(wxCommandEvent & WXUNUSED(event)) { OnLast(); } void OnLastButton(wxCommandEvent & WXUNUSED(event)) { OnLast(); }
void OnGotoButton(wxCommandEvent & WXUNUSED(event)) { OnGoto(); } void OnGotoButton(wxCommandEvent & WXUNUSED(event)) { OnGoto(); }
void OnChar(wxKeyEvent &event);
void OnZoom(wxCommandEvent& event); void OnZoom(wxCommandEvent& event);
void OnPaint(wxPaintEvent& event); void OnPaint(wxPaintEvent& event);
@ -322,16 +325,19 @@ public:
wxPrintout *GetPrintoutForPrinting() const { return m_printPrintout; }; wxPrintout *GetPrintoutForPrinting() const { return m_printPrintout; };
void SetFrame(wxFrame *frame) { m_previewFrame = frame; }; void SetFrame(wxFrame *frame) { m_previewFrame = frame; };
void SetCanvas(wxWindow *canvas) { m_previewCanvas = canvas; }; void SetCanvas(wxPreviewCanvas *canvas) { m_previewCanvas = canvas; };
virtual wxFrame *GetFrame() const { return m_previewFrame; } virtual wxFrame *GetFrame() const { return m_previewFrame; }
virtual wxWindow *GetCanvas() const { return m_previewCanvas; } virtual wxPreviewCanvas *GetCanvas() const { return m_previewCanvas; }
// The preview canvas should call this from OnPaint // The preview canvas should call this from OnPaint
virtual bool PaintPage(wxWindow *canvas, wxDC& dc); virtual bool PaintPage(wxPreviewCanvas *canvas, wxDC& dc);
// This draws a blank page onto the preview canvas // This draws a blank page onto the preview canvas
virtual bool DrawBlankPage(wxWindow *canvas, wxDC& dc); virtual bool DrawBlankPage(wxPreviewCanvas *canvas, wxDC& dc);
// Adjusts the scrollbars for the current scale
virtual void AdjustScrollbars(wxPreviewCanvas *canvas);
// This is called by wxPrintPreview to render a page into a wxMemoryDC. // This is called by wxPrintPreview to render a page into a wxMemoryDC.
virtual bool RenderPage(int pageNum); virtual bool RenderPage(int pageNum);
@ -362,7 +368,7 @@ public:
protected: protected:
wxPrintDialogData m_printDialogData; wxPrintDialogData m_printDialogData;
wxWindow* m_previewCanvas; wxPreviewCanvas* m_previewCanvas;
wxFrame* m_previewFrame; wxFrame* m_previewFrame;
wxBitmap* m_previewBitmap; wxBitmap* m_previewBitmap;
wxPrintout* m_previewPrintout; wxPrintout* m_previewPrintout;

View File

@ -776,10 +776,10 @@ wxPrintDialogData::wxPrintDialogData(const wxPrintData& printData)
#ifdef __WXMSW__ #ifdef __WXMSW__
m_printDlgData = NULL; m_printDlgData = NULL;
#endif #endif
m_printFromPage = 0; m_printFromPage = 1;
m_printToPage = 0; m_printToPage = 0;
m_printMinPage = 0; m_printMinPage = 1;
m_printMaxPage = 0; m_printMaxPage = 9999;
m_printNoCopies = 1; m_printNoCopies = 1;
m_printAllPages = FALSE; m_printAllPages = FALSE;
m_printCollate = FALSE; m_printCollate = FALSE;
@ -897,7 +897,7 @@ void wxPrintDialogData::ConvertToNative()
pd->Flags |= PD_NOSELECTION; pd->Flags |= PD_NOSELECTION;
if ( !m_printEnablePageNumbers ) if ( !m_printEnablePageNumbers )
pd->Flags |= PD_NOPAGENUMS; pd->Flags |= PD_NOPAGENUMS;
else if ( (!m_printAllPages) && (!m_printSelection) ) else if ( (!m_printAllPages) && (!m_printSelection) && (m_printFromPage != 0) && (m_printToPage != 0))
pd->Flags |= PD_PAGENUMS; pd->Flags |= PD_PAGENUMS;
if ( m_printEnableHelp ) if ( m_printEnableHelp )
pd->Flags |= PD_SHOWHELP; pd->Flags |= PD_SHOWHELP;

View File

@ -70,6 +70,7 @@ END_EVENT_TABLE()
BEGIN_EVENT_TABLE(wxPreviewCanvas, wxScrolledWindow) BEGIN_EVENT_TABLE(wxPreviewCanvas, wxScrolledWindow)
EVT_PAINT(wxPreviewCanvas::OnPaint) EVT_PAINT(wxPreviewCanvas::OnPaint)
EVT_CHAR(wxPreviewCanvas::OnChar)
EVT_SYS_COLOUR_CHANGED(wxPreviewCanvas::OnSysColourChanged) EVT_SYS_COLOUR_CHANGED(wxPreviewCanvas::OnSysColourChanged)
END_EVENT_TABLE() END_EVENT_TABLE()
@ -197,7 +198,7 @@ wxScrolledWindow(parent, -1, pos, size, style, name)
#endif #endif
SetBackgroundColour(wxSystemSettings::GetColour(colourIndex)); SetBackgroundColour(wxSystemSettings::GetColour(colourIndex));
SetScrollbars(15, 18, 100, 100); SetScrollbars(10, 10, 100, 100);
} }
wxPreviewCanvas::~wxPreviewCanvas() wxPreviewCanvas::~wxPreviewCanvas()
@ -239,6 +240,38 @@ void wxPreviewCanvas::OnSysColourChanged(wxSysColourChangedEvent& event)
wxWindow::OnSysColourChanged(event); wxWindow::OnSysColourChanged(event);
} }
void wxPreviewCanvas::OnChar(wxKeyEvent &event)
{
if (event.GetKeyCode() == WXK_ESCAPE)
{
((wxPreviewFrame*) GetParent())->Close(TRUE);
return;
}
if (!event.ControlDown())
{
event.Skip();
return;
}
wxPreviewControlBar* controlBar = ((wxPreviewFrame*) GetParent())->GetControlBar();
switch(event.GetKeyCode())
{
case WXK_NEXT:
controlBar->OnNext(); break;
case WXK_PRIOR:
controlBar->OnPrevious(); break;
case WXK_HOME:
controlBar->OnFirst(); break;
case WXK_END:
controlBar->OnLast(); break;
case WXK_TAB:
controlBar->OnGoto(); break;
default:
event.Skip();
}
}
/* /*
* Preview control bar * Preview control bar
*/ */
@ -251,7 +284,6 @@ BEGIN_EVENT_TABLE(wxPreviewControlBar, wxPanel)
EVT_BUTTON(wxID_PREVIEW_FIRST, wxPreviewControlBar::OnFirstButton) EVT_BUTTON(wxID_PREVIEW_FIRST, wxPreviewControlBar::OnFirstButton)
EVT_BUTTON(wxID_PREVIEW_LAST, wxPreviewControlBar::OnLastButton) EVT_BUTTON(wxID_PREVIEW_LAST, wxPreviewControlBar::OnLastButton)
EVT_BUTTON(wxID_PREVIEW_GOTO, wxPreviewControlBar::OnGotoButton) EVT_BUTTON(wxID_PREVIEW_GOTO, wxPreviewControlBar::OnGotoButton)
EVT_CHAR(wxPreviewControlBar::OnChar)
EVT_CHOICE(wxID_PREVIEW_ZOOM, wxPreviewControlBar::OnZoom) EVT_CHOICE(wxID_PREVIEW_ZOOM, wxPreviewControlBar::OnZoom)
EVT_PAINT(wxPreviewControlBar::OnPaint) EVT_PAINT(wxPreviewControlBar::OnPaint)
END_EVENT_TABLE() END_EVENT_TABLE()
@ -297,25 +329,6 @@ void wxPreviewControlBar::OnPrint(wxCommandEvent& WXUNUSED(event))
preview->Print(TRUE); preview->Print(TRUE);
} }
void wxPreviewControlBar::OnChar(wxKeyEvent &event)
{
switch(event.GetKeyCode())
{
case WXK_NEXT:
OnNext(); break;
case WXK_PRIOR:
OnPrevious(); break;
case WXK_HOME:
OnFirst(); break;
case WXK_END:
OnLast(); break;
case WXK_TAB:
OnGoto(); break;
default:
event.Skip();
}
}
void wxPreviewControlBar::OnNext(void) void wxPreviewControlBar::OnNext(void)
{ {
wxPrintPreviewBase *preview = GetPrintPreview(); wxPrintPreviewBase *preview = GetPrintPreview();
@ -384,12 +397,12 @@ void wxPreviewControlBar::OnGoto(void)
wxString strPrompt; wxString strPrompt;
wxString strPage; wxString strPage;
strPrompt.Printf( wxT("%d...%d"), strPrompt.Printf( _("Enter a page number between %d and %d:"),
preview->GetMinPage(), preview->GetMaxPage()); preview->GetMinPage(), preview->GetMaxPage());
strPage.Printf( wxT("%d"), preview->GetCurrentPage() ); strPage.Printf( wxT("%d"), preview->GetCurrentPage() );
strPage = strPage =
wxGetTextFromUser( strPrompt, _("Goto Page"), strPage); wxGetTextFromUser( strPrompt, _("Goto Page"), strPage, GetParent());
if ( strPage.ToLong( &currentPage ) ) if ( strPage.ToLong( &currentPage ) )
if (preview->GetPrintout()->HasPage(currentPage)) if (preview->GetPrintout()->HasPage(currentPage))
@ -571,6 +584,10 @@ void wxPreviewFrame::Initialize()
#endif #endif
Layout(); Layout();
m_printPreview->AdjustScrollbars(m_previewCanvas);
m_previewCanvas->SetFocus();
m_controlBar->SetFocus();
} }
void wxPreviewFrame::CreateCanvas() void wxPreviewFrame::CreateCanvas()
@ -632,13 +649,8 @@ void wxPrintPreviewBase::Init(wxPrintout *printout,
m_pageWidth = 0; m_pageWidth = 0;
m_pageHeight = 0; m_pageHeight = 0;
m_printingPrepared = FALSE; m_printingPrepared = FALSE;
m_minPage = 1;
// Too soon! Moved to RenderPage. m_maxPage = 1;
// printout->OnPreparePrinting();
// Get some parameters from the printout, if defined
int selFrom, selTo;
printout->GetPageInfo(&m_minPage, &m_maxPage, &selFrom, &selTo);
} }
wxPrintPreviewBase::~wxPrintPreviewBase() wxPrintPreviewBase::~wxPrintPreviewBase()
@ -662,17 +674,20 @@ bool wxPrintPreviewBase::SetCurrentPage(int pageNum)
delete m_previewBitmap; delete m_previewBitmap;
m_previewBitmap = NULL; m_previewBitmap = NULL;
} }
if (m_previewCanvas) if (m_previewCanvas)
{ {
AdjustScrollbars(m_previewCanvas);
if (!RenderPage(pageNum)) if (!RenderPage(pageNum))
return FALSE; return FALSE;
m_previewCanvas->Refresh(); m_previewCanvas->Refresh();
m_previewCanvas->SetFocus();
} }
return TRUE; return TRUE;
} }
bool wxPrintPreviewBase::PaintPage(wxWindow *canvas, wxDC& dc) bool wxPrintPreviewBase::PaintPage(wxPreviewCanvas *canvas, wxDC& dc)
{ {
DrawBlankPage(canvas, dc); DrawBlankPage(canvas, dc);
@ -708,6 +723,29 @@ bool wxPrintPreviewBase::PaintPage(wxWindow *canvas, wxDC& dc)
return TRUE; return TRUE;
} }
// Adjusts the scrollbars for the current scale
void wxPrintPreviewBase::AdjustScrollbars(wxPreviewCanvas *canvas)
{
if (!canvas)
return ;
int canvasWidth, canvasHeight;
canvas->GetSize(&canvasWidth, &canvasHeight);
double zoomScale = ((float)m_currentZoom/(float)100);
double actualWidth = (zoomScale*m_pageWidth*m_previewScale);
double actualHeight = (zoomScale*m_pageHeight*m_previewScale);
// Set the scrollbars appropriately
int totalWidth = actualWidth + 2*m_leftMargin;
int totalHeight = actualHeight + 2*m_topMargin;
int scrollUnitsX = totalWidth/10;
int scrollUnitsY = totalHeight/10;
wxSize virtualSize = canvas->GetVirtualSize();
if (virtualSize.GetWidth() != totalWidth || virtualSize.GetHeight() != totalHeight)
canvas->SetScrollbars(10, 10, scrollUnitsX, scrollUnitsY, 0, 0, TRUE);
}
bool wxPrintPreviewBase::RenderPage(int pageNum) bool wxPrintPreviewBase::RenderPage(int pageNum)
{ {
wxBusyCursor busy; wxBusyCursor busy;
@ -758,6 +796,8 @@ bool wxPrintPreviewBase::RenderPage(int pageNum)
if (!m_printingPrepared) if (!m_printingPrepared)
{ {
m_previewPrintout->OnPreparePrinting(); m_previewPrintout->OnPreparePrinting();
int selFrom, selTo;
m_previewPrintout->GetPageInfo(&m_minPage, &m_maxPage, &selFrom, &selTo);
m_printingPrepared = TRUE; m_printingPrepared = TRUE;
} }
@ -797,7 +837,7 @@ bool wxPrintPreviewBase::RenderPage(int pageNum)
} }
bool wxPrintPreviewBase::DrawBlankPage(wxWindow *canvas, wxDC& dc) bool wxPrintPreviewBase::DrawBlankPage(wxPreviewCanvas *canvas, wxDC& dc)
{ {
int canvasWidth, canvasHeight; int canvasWidth, canvasHeight;
canvas->GetSize(&canvasWidth, &canvasHeight); canvas->GetSize(&canvasWidth, &canvasHeight);
@ -851,10 +891,12 @@ void wxPrintPreviewBase::SetZoom(int percent)
if (m_previewCanvas) if (m_previewCanvas)
{ {
AdjustScrollbars(m_previewCanvas);
RenderPage(m_currentPage); RenderPage(m_currentPage);
((wxScrolledWindow *) m_previewCanvas)->Scroll(0, 0); ((wxScrolledWindow *) m_previewCanvas)->Scroll(0, 0);
m_previewCanvas->Clear(); m_previewCanvas->Clear();
m_previewCanvas->Refresh(); m_previewCanvas->Refresh();
m_previewCanvas->SetFocus();
} }
} }

View File

@ -88,6 +88,7 @@ bool wxPostScriptPrinter::Print(wxWindow *parent, wxPrintout *printout, bool pro
printout->SetIsPreview(FALSE); printout->SetIsPreview(FALSE);
#if 0
// 4/9/99, JACS: this is a silly place to allow preparation, considering // 4/9/99, JACS: this is a silly place to allow preparation, considering
// the DC and no parameters have been set in the printout object. // the DC and no parameters have been set in the printout object.
// Moved further down. // Moved further down.
@ -126,7 +127,12 @@ bool wxPostScriptPrinter::Print(wxWindow *parent, wxPrintout *printout, bool pro
} }
else else
m_printDialogData.EnablePageNumbers(FALSE); m_printDialogData.EnablePageNumbers(FALSE);
#endif
if (m_printDialogData.GetMinPage() < 1)
m_printDialogData.SetMinPage(1);
if (m_printDialogData.GetMaxPage() < 1)
m_printDialogData.SetMaxPage(9999);
// Create a suitable device context // Create a suitable device context
wxDC *dc = (wxDC *) NULL; wxDC *dc = (wxDC *) NULL;
@ -171,6 +177,23 @@ bool wxPostScriptPrinter::Print(wxWindow *parent, wxPrintout *printout, bool pro
printout->OnPreparePrinting(); printout->OnPreparePrinting();
// Get some parameters from the printout, if defined
int fromPage, toPage;
int minPage, maxPage;
printout->GetPageInfo(&minPage, &maxPage, &fromPage, &toPage);
if (maxPage == 0)
{
sm_lastError = wxPRINTER_ERROR;
wxEndBusyCursor();
return FALSE;
}
// Only set min and max, because from and to have been
// set by the user
m_printDialogData.SetMinPage(minPage);
m_printDialogData.SetMaxPage(maxPage);
int int
pagesPerCopy = m_printDialogData.GetToPage()-m_printDialogData.GetFromPage()+1, pagesPerCopy = m_printDialogData.GetToPage()-m_printDialogData.GetFromPage()+1,
totalPages = pagesPerCopy * m_printDialogData.GetNoCopies(), totalPages = pagesPerCopy * m_printDialogData.GetNoCopies(),

View File

@ -178,13 +178,11 @@ void wxHtmlPrintout::AddFilter(wxHtmlFilter *filter)
m_Filters.Append(filter); m_Filters.Append(filter);
} }
bool wxHtmlPrintout::OnBeginDocument(int startPage, int endPage) void wxHtmlPrintout::OnPreparePrinting()
{ {
int pageWidth, pageHeight, mm_w, mm_h, scr_w, scr_h, dc_w, dc_h; int pageWidth, pageHeight, mm_w, mm_h, scr_w, scr_h, dc_w, dc_h;
float ppmm_h, ppmm_v; float ppmm_h, ppmm_v;
if (!wxPrintout::OnBeginDocument(startPage, endPage)) return FALSE;
GetPageSizePixels(&pageWidth, &pageHeight); GetPageSizePixels(&pageWidth, &pageHeight);
GetPageSizeMM(&mm_w, &mm_h); GetPageSizeMM(&mm_w, &mm_h);
ppmm_h = (float)pageWidth / mm_w; ppmm_h = (float)pageWidth / mm_w;
@ -236,6 +234,12 @@ bool wxHtmlPrintout::OnBeginDocument(int startPage, int endPage)
)); ));
m_Renderer->SetHtmlText(m_Document, m_BasePath, m_BasePathIsDir); m_Renderer->SetHtmlText(m_Document, m_BasePath, m_BasePathIsDir);
CountPages(); CountPages();
}
bool wxHtmlPrintout::OnBeginDocument(int startPage, int endPage)
{
if (!wxPrintout::OnBeginDocument(startPage, endPage)) return FALSE;
return TRUE; return TRUE;
} }
@ -256,9 +260,9 @@ bool wxHtmlPrintout::OnPrintPage(int page)
void wxHtmlPrintout::GetPageInfo(int *minPage, int *maxPage, int *selPageFrom, int *selPageTo) void wxHtmlPrintout::GetPageInfo(int *minPage, int *maxPage, int *selPageFrom, int *selPageTo)
{ {
*minPage = 1; *minPage = 1;
*maxPage = wxHTML_PRINT_MAX_PAGES; *maxPage = m_NumPages;
*selPageFrom = 1; *selPageFrom = 1;
*selPageTo = wxHTML_PRINT_MAX_PAGES; *selPageTo = m_NumPages;
} }

View File

@ -535,38 +535,11 @@ bool wxMacPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt)
return FALSE; return FALSE;
printout->SetIsPreview(FALSE); printout->SetIsPreview(FALSE);
printout->OnPreparePrinting(); if (m_printDialogData.GetMinPage() < 1)
m_printDialogData.SetMinPage(1);
// Get some parameters from the printout, if defined if (m_printDialogData.GetMaxPage() < 1)
int fromPage, toPage; m_printDialogData.SetMaxPage(9999);
int minPage, maxPage;
printout->GetPageInfo(&minPage, &maxPage, &fromPage, &toPage);
if (maxPage == 0)
return FALSE;
m_printDialogData.SetMinPage(minPage);
m_printDialogData.SetMaxPage(maxPage);
if (fromPage != 0)
m_printDialogData.SetFromPage(fromPage);
if (toPage != 0)
m_printDialogData.SetToPage(toPage);
if (minPage != 0)
{
m_printDialogData.EnablePageNumbers(TRUE);
if (m_printDialogData.GetFromPage() < m_printDialogData.GetMinPage())
m_printDialogData.SetFromPage(m_printDialogData.GetMinPage());
else if (m_printDialogData.GetFromPage() > m_printDialogData.GetMaxPage())
m_printDialogData.SetFromPage(m_printDialogData.GetMaxPage());
if (m_printDialogData.GetToPage() > m_printDialogData.GetMaxPage())
m_printDialogData.SetToPage(m_printDialogData.GetMaxPage());
else if (m_printDialogData.GetToPage() < m_printDialogData.GetMinPage())
m_printDialogData.SetToPage(m_printDialogData.GetMinPage());
}
else
m_printDialogData.EnablePageNumbers(FALSE);
// Create a suitable device context // Create a suitable device context
wxDC *dc = NULL; wxDC *dc = NULL;
if (prompt) if (prompt)
@ -609,6 +582,24 @@ bool wxMacPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt)
// Create an abort window // Create an abort window
wxBeginBusyCursor(); wxBeginBusyCursor();
printout->OnPreparePrinting();
// Get some parameters from the printout, if defined
int fromPage, toPage;
int minPage, maxPage;
printout->GetPageInfo(&minPage, &maxPage, &fromPage, &toPage);
if (maxPage == 0)
{
wxEndBusyCursor();
return FALSE;
}
// Only set min and max, because from and to have been
// set by the user
m_printDialogData.SetMinPage(minPage);
m_printDialogData.SetMaxPage(maxPage);
wxWindow *win = CreateAbortWindow(parent, printout); wxWindow *win = CreateAbortWindow(parent, printout);
wxSafeYield(win,true); wxSafeYield(win,true);

View File

@ -535,38 +535,11 @@ bool wxMacPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt)
return FALSE; return FALSE;
printout->SetIsPreview(FALSE); printout->SetIsPreview(FALSE);
printout->OnPreparePrinting(); if (m_printDialogData.GetMinPage() < 1)
m_printDialogData.SetMinPage(1);
// Get some parameters from the printout, if defined if (m_printDialogData.GetMaxPage() < 1)
int fromPage, toPage; m_printDialogData.SetMaxPage(9999);
int minPage, maxPage;
printout->GetPageInfo(&minPage, &maxPage, &fromPage, &toPage);
if (maxPage == 0)
return FALSE;
m_printDialogData.SetMinPage(minPage);
m_printDialogData.SetMaxPage(maxPage);
if (fromPage != 0)
m_printDialogData.SetFromPage(fromPage);
if (toPage != 0)
m_printDialogData.SetToPage(toPage);
if (minPage != 0)
{
m_printDialogData.EnablePageNumbers(TRUE);
if (m_printDialogData.GetFromPage() < m_printDialogData.GetMinPage())
m_printDialogData.SetFromPage(m_printDialogData.GetMinPage());
else if (m_printDialogData.GetFromPage() > m_printDialogData.GetMaxPage())
m_printDialogData.SetFromPage(m_printDialogData.GetMaxPage());
if (m_printDialogData.GetToPage() > m_printDialogData.GetMaxPage())
m_printDialogData.SetToPage(m_printDialogData.GetMaxPage());
else if (m_printDialogData.GetToPage() < m_printDialogData.GetMinPage())
m_printDialogData.SetToPage(m_printDialogData.GetMinPage());
}
else
m_printDialogData.EnablePageNumbers(FALSE);
// Create a suitable device context // Create a suitable device context
wxDC *dc = NULL; wxDC *dc = NULL;
if (prompt) if (prompt)
@ -609,6 +582,24 @@ bool wxMacPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt)
// Create an abort window // Create an abort window
wxBeginBusyCursor(); wxBeginBusyCursor();
printout->OnPreparePrinting();
// Get some parameters from the printout, if defined
int fromPage, toPage;
int minPage, maxPage;
printout->GetPageInfo(&minPage, &maxPage, &fromPage, &toPage);
if (maxPage == 0)
{
wxEndBusyCursor();
return FALSE;
}
// Only set min and max, because from and to have been
// set by the user
m_printDialogData.SetMinPage(minPage);
m_printDialogData.SetMaxPage(maxPage);
wxWindow *win = CreateAbortWindow(parent, printout); wxWindow *win = CreateAbortWindow(parent, printout);
wxSafeYield(win,true); wxSafeYield(win,true);

View File

@ -107,43 +107,10 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt
printout->SetIsPreview(FALSE); printout->SetIsPreview(FALSE);
// 4/9/99, JACS: this is a silly place to allow preparation, considering if (m_printDialogData.GetMinPage() < 1)
// the DC and no parameters have been set in the printout object. m_printDialogData.SetMinPage(1);
// Moved further down. if (m_printDialogData.GetMaxPage() < 1)
// printout->OnPreparePrinting(); m_printDialogData.SetMaxPage(9999);
// Get some parameters from the printout, if defined
int fromPage, toPage;
int minPage, maxPage;
printout->GetPageInfo(&minPage, &maxPage, &fromPage, &toPage);
if (maxPage == 0)
{
sm_lastError = wxPRINTER_ERROR;
return FALSE;
}
m_printDialogData.SetMinPage(minPage);
m_printDialogData.SetMaxPage(maxPage);
if (fromPage != 0)
m_printDialogData.SetFromPage(fromPage);
if (toPage != 0)
m_printDialogData.SetToPage(toPage);
if (minPage != 0)
{
m_printDialogData.EnablePageNumbers(TRUE);
if (m_printDialogData.GetFromPage() < m_printDialogData.GetMinPage())
m_printDialogData.SetFromPage(m_printDialogData.GetMinPage());
else if (m_printDialogData.GetFromPage() > m_printDialogData.GetMaxPage())
m_printDialogData.SetFromPage(m_printDialogData.GetMaxPage());
if (m_printDialogData.GetToPage() > m_printDialogData.GetMaxPage())
m_printDialogData.SetToPage(m_printDialogData.GetMaxPage());
else if (m_printDialogData.GetToPage() < m_printDialogData.GetMinPage())
m_printDialogData.SetToPage(m_printDialogData.GetMinPage());
}
else
m_printDialogData.EnablePageNumbers(FALSE);
// Create a suitable device context // Create a suitable device context
wxDC *dc = NULL; wxDC *dc = NULL;
@ -155,7 +122,6 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt
} }
else else
{ {
// dc = new wxPrinterDC("", "", "", FALSE, m_printData.GetOrientation());
dc = new wxPrinterDC(m_printDialogData.GetPrintData()); dc = new wxPrinterDC(m_printDialogData.GetPrintData());
} }
@ -203,6 +169,23 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt
printout->OnPreparePrinting(); printout->OnPreparePrinting();
// Get some parameters from the printout, if defined
int fromPage, toPage;
int minPage, maxPage;
printout->GetPageInfo(&minPage, &maxPage, &fromPage, &toPage);
if (maxPage == 0)
{
sm_lastError = wxPRINTER_ERROR;
wxEndBusyCursor();
return FALSE;
}
// Only set min and max, because from and to have been
// set by the user
m_printDialogData.SetMinPage(minPage);
m_printDialogData.SetMaxPage(maxPage);
wxWindow *win = CreateAbortWindow(parent, printout); wxWindow *win = CreateAbortWindow(parent, printout);
wxYield(); wxYield();