]> git.saurik.com Git - wxWidgets.git/commitdiff
Printing improvements: GetPageInfo() gets called after the DC has
authorJulian Smart <julian@anthemion.co.uk>
Wed, 23 Jul 2003 20:30:19 +0000 (20:30 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Wed, 23 Jul 2003 20:30:19 +0000 (20:30 +0000)
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

12 files changed:
docs/changes.txt
docs/latex/wx/print.tex
docs/todo30.txt
include/wx/html/htmprint.h
include/wx/prntbase.h
src/common/cmndata.cpp
src/common/prntbase.cpp
src/generic/printps.cpp
src/html/htmprint.cpp
src/mac/carbon/printmac.cpp
src/mac/printmac.cpp
src/msw/printwin.cpp

index 33bcd1409049347afc296a617dba965be76f6b22..d3b9ad8063090e8927bf7808d4cd93762e77fa02 100644 (file)
@@ -126,6 +126,13 @@ All GUI ports:
 - send menu update events only when a menu is about to be used (MSW/GTK)
 - improved event processing performance (Hans Van Leemputten)
 - 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:
 
index c35a1f935f329b98716b8c26d91bcb49137cbf19..e87acae4b51b30dddad56d6cb779b643b938e762 100644 (file)
@@ -786,7 +786,7 @@ reference) and to return a tuple of four integers.
 }
 
 \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}
@@ -981,7 +981,7 @@ internally.
 
 \membersection{wxPrintPreview::GetCanvas}\label{wxprintpreviewgetcanvas}
 
-\func{wxWindow* }{GetCanvas}{\void}
+\func{wxPreviewCanvas* }{GetCanvas}{\void}
 
 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}
 
-\func{void}{SetCanvas}{\param{wxWindow* }{window}}
+\func{void}{SetCanvas}{\param{wxPreviewCanvas** }{window}}
 
 Sets the window to be used for displaying the print preview image.
 
index 008b93a19ecd48dbb1c75738a3f0db45d45d3937..8f7e1b91f44f04edfb2241daf6707d9c689f6051 100644 (file)
@@ -179,6 +179,8 @@ wxMiscellaneous
   has been destroyed or recreated. On wxMSW, this is done in
   ~wxToolBar. On wxGTK, in SetToolBar. In wxMac, not at all,
   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 -
   horrible.
 - No Append(wxArrayString&) for wxChoice and wxComboBox in wxGTK.
index 4cb723c388945aa770d5f0faee37563ba90b2252..5b7c72db7b5c5171e26ba34e8078b072ec03d5c8 100644 (file)
@@ -152,6 +152,7 @@ public:
     bool HasPage(int page);
     void GetPageInfo(int *minPage, int *maxPage, int *selPageFrom, int *selPageTo);
     bool OnBeginDocument(int startPage, int endPage);
+    void OnPreparePrinting();
 
     // Adds input filter
     static void AddFilter(wxHtmlFilter *filter);
index 2f3c3726fa8aedec3d28171ce8e1a21b0f1c0b22..42e04bf85f49d4f04d28498170057e22f806ae08 100644 (file)
@@ -171,6 +171,7 @@ public:
     ~wxPreviewCanvas();
 
     void OnPaint(wxPaintEvent& event);
+    void OnChar(wxKeyEvent &event);
 
     // Responds to colour changes
     void OnSysColourChanged(wxSysColourChangedEvent& event);
@@ -204,8 +205,11 @@ public:
     virtual void Initialize();
     virtual void CreateCanvas();
     virtual void CreateControlBar();
+
+    inline wxPreviewControlBar* GetControlBar() const { return m_controlBar; }
+
 protected:
-    wxWindow*             m_previewCanvas;
+    wxPreviewCanvas*      m_previewCanvas;
     wxPreviewControlBar*  m_controlBar;
     wxPrintPreviewBase*   m_printPreview;
 
@@ -253,7 +257,7 @@ public:
                         wxWindow *parent,
                         const wxPoint& pos = wxDefaultPosition,
                         const wxSize& size = wxDefaultSize,
-                        long style = 0,
+                        long style = wxTAB_TRAVERSAL,
                         const wxString& name = wxT("panel"));
     ~wxPreviewControlBar();
 
@@ -275,7 +279,6 @@ public:
     void OnFirstButton(wxCommandEvent & WXUNUSED(event)) { OnFirst(); }
     void OnLastButton(wxCommandEvent & WXUNUSED(event)) { OnLast(); }
     void OnGotoButton(wxCommandEvent & WXUNUSED(event)) { OnGoto(); }
-    void OnChar(wxKeyEvent &event);
     void OnZoom(wxCommandEvent& event);
     void OnPaint(wxPaintEvent& event);
 
@@ -322,16 +325,19 @@ public:
     wxPrintout *GetPrintoutForPrinting() const { return m_printPrintout; };
 
     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 wxWindow *GetCanvas() const { return m_previewCanvas; }
+    virtual wxPreviewCanvas *GetCanvas() const { return m_previewCanvas; }
 
     // 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
-    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.
     virtual bool RenderPage(int pageNum);
@@ -362,7 +368,7 @@ public:
 
 protected:
     wxPrintDialogData m_printDialogData;
-    wxWindow*         m_previewCanvas;
+    wxPreviewCanvas*  m_previewCanvas;
     wxFrame*          m_previewFrame;
     wxBitmap*         m_previewBitmap;
     wxPrintout*       m_previewPrintout;
index f9ecd46ff932b646561caf2603c4af2555e0c782..157e32eb143cd015829d10fb9ca6f8fed07c5af2 100644 (file)
@@ -776,10 +776,10 @@ wxPrintDialogData::wxPrintDialogData(const wxPrintData& printData)
 #ifdef __WXMSW__
     m_printDlgData = NULL;
 #endif
-    m_printFromPage = 0;
+    m_printFromPage = 1;
     m_printToPage = 0;
-    m_printMinPage = 0;
-    m_printMaxPage = 0;
+    m_printMinPage = 1;
+    m_printMaxPage = 9999;
     m_printNoCopies = 1;
     m_printAllPages = FALSE;
     m_printCollate = FALSE;
@@ -897,7 +897,7 @@ void wxPrintDialogData::ConvertToNative()
         pd->Flags |= PD_NOSELECTION;
     if ( !m_printEnablePageNumbers )
         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;
     if ( m_printEnableHelp )
         pd->Flags |= PD_SHOWHELP;
index 4f5860323fb3c54ff39c4aabd6522399fa81f44d..ee3ec90dad6a507348899ed946e8dc427f70a5df 100644 (file)
@@ -70,6 +70,7 @@ END_EVENT_TABLE()
 
 BEGIN_EVENT_TABLE(wxPreviewCanvas, wxScrolledWindow)
     EVT_PAINT(wxPreviewCanvas::OnPaint)
+    EVT_CHAR(wxPreviewCanvas::OnChar)
     EVT_SYS_COLOUR_CHANGED(wxPreviewCanvas::OnSysColourChanged)
 END_EVENT_TABLE()
 
@@ -197,7 +198,7 @@ wxScrolledWindow(parent, -1, pos, size, style, name)
 #endif    
     SetBackgroundColour(wxSystemSettings::GetColour(colourIndex));
 
-    SetScrollbars(15, 18, 100, 100);
+    SetScrollbars(10, 10, 100, 100);
 }
 
 wxPreviewCanvas::~wxPreviewCanvas()
@@ -239,6 +240,38 @@ void wxPreviewCanvas::OnSysColourChanged(wxSysColourChangedEvent& 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
 */
@@ -251,7 +284,6 @@ BEGIN_EVENT_TABLE(wxPreviewControlBar, wxPanel)
     EVT_BUTTON(wxID_PREVIEW_FIRST,    wxPreviewControlBar::OnFirstButton)
     EVT_BUTTON(wxID_PREVIEW_LAST,     wxPreviewControlBar::OnLastButton)
     EVT_BUTTON(wxID_PREVIEW_GOTO,     wxPreviewControlBar::OnGotoButton)
-    EVT_CHAR(wxPreviewControlBar::OnChar)
     EVT_CHOICE(wxID_PREVIEW_ZOOM,     wxPreviewControlBar::OnZoom)
     EVT_PAINT(wxPreviewControlBar::OnPaint)
 END_EVENT_TABLE()
@@ -297,25 +329,6 @@ void wxPreviewControlBar::OnPrint(wxCommandEvent& WXUNUSED(event))
     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)
 {
     wxPrintPreviewBase *preview = GetPrintPreview();
@@ -384,12 +397,12 @@ void wxPreviewControlBar::OnGoto(void)
             wxString strPrompt;
             wxString strPage;
 
-            strPrompt.Printf( wxT("%d...%d"),
+            strPrompt.Printf( _("Enter a page number between %d and %d:"),
                 preview->GetMinPage(), preview->GetMaxPage());
             strPage.Printf( wxT("%d"), preview->GetCurrentPage() );
 
             strPage =
-                wxGetTextFromUser( strPrompt, _("Goto Page"), strPage);
+                wxGetTextFromUser( strPrompt, _("Goto Page"), strPage, GetParent());
 
             if ( strPage.ToLong( &currentPage ) )
                 if (preview->GetPrintout()->HasPage(currentPage))
@@ -571,6 +584,10 @@ void wxPreviewFrame::Initialize()
 #endif
 
     Layout();
+    
+    m_printPreview->AdjustScrollbars(m_previewCanvas);
+    m_previewCanvas->SetFocus();
+    m_controlBar->SetFocus();
 }
 
 void wxPreviewFrame::CreateCanvas()
@@ -632,13 +649,8 @@ void wxPrintPreviewBase::Init(wxPrintout *printout,
     m_pageWidth = 0;
     m_pageHeight = 0;
     m_printingPrepared = FALSE;
-
-    // Too soon! Moved to RenderPage.
-    // printout->OnPreparePrinting();
-
-    // Get some parameters from the printout, if defined
-    int selFrom, selTo;
-    printout->GetPageInfo(&m_minPage, &m_maxPage, &selFrom, &selTo);
+    m_minPage = 1;
+    m_maxPage = 1;
 }
 
 wxPrintPreviewBase::~wxPrintPreviewBase()
@@ -662,17 +674,20 @@ bool wxPrintPreviewBase::SetCurrentPage(int pageNum)
         delete m_previewBitmap;
         m_previewBitmap = NULL;
     }
-
+    
     if (m_previewCanvas)
     {
+        AdjustScrollbars(m_previewCanvas);
+        
         if (!RenderPage(pageNum))
             return FALSE;
         m_previewCanvas->Refresh();
+        m_previewCanvas->SetFocus();
     }
     return TRUE;
 }
 
-bool wxPrintPreviewBase::PaintPage(wxWindow *canvas, wxDC& dc)
+bool wxPrintPreviewBase::PaintPage(wxPreviewCanvas *canvas, wxDC& dc)
 {
     DrawBlankPage(canvas, dc);
 
@@ -708,6 +723,29 @@ bool wxPrintPreviewBase::PaintPage(wxWindow *canvas, wxDC& dc)
     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)
 {
     wxBusyCursor busy;
@@ -758,6 +796,8 @@ bool wxPrintPreviewBase::RenderPage(int pageNum)
     if (!m_printingPrepared)
     {
         m_previewPrintout->OnPreparePrinting();
+        int selFrom, selTo;
+        m_previewPrintout->GetPageInfo(&m_minPage, &m_maxPage, &selFrom, &selTo);
         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;
     canvas->GetSize(&canvasWidth, &canvasHeight);
@@ -851,10 +891,12 @@ void wxPrintPreviewBase::SetZoom(int percent)
 
     if (m_previewCanvas)
     {
+        AdjustScrollbars(m_previewCanvas);
         RenderPage(m_currentPage);
         ((wxScrolledWindow *) m_previewCanvas)->Scroll(0, 0);
         m_previewCanvas->Clear();
         m_previewCanvas->Refresh();
+        m_previewCanvas->SetFocus();
     }
 }
 
index 79ffa7c8fc325ec2fd44cb3471d6139e88a1fbd2..d9e0259f74bf9545040b119cf11b6f9d2fdce34d 100644 (file)
@@ -88,6 +88,7 @@ bool wxPostScriptPrinter::Print(wxWindow *parent, wxPrintout *printout, bool pro
 
     printout->SetIsPreview(FALSE);
 
+#if 0    
     // 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.
     // Moved further down.
@@ -126,7 +127,12 @@ bool wxPostScriptPrinter::Print(wxWindow *parent, wxPrintout *printout, bool pro
     }
     else
         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
     wxDC *dc = (wxDC *) NULL;
@@ -171,6 +177,23 @@ bool wxPostScriptPrinter::Print(wxWindow *parent, wxPrintout *printout, bool pro
 
     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
        pagesPerCopy = m_printDialogData.GetToPage()-m_printDialogData.GetFromPage()+1,
        totalPages = pagesPerCopy * m_printDialogData.GetNoCopies(),
index 14b443a30ef27767f5c46f0ddad495bafcf135bf..1206f2f87054bf559bd9b64b6e557552a48dbc26 100644 (file)
@@ -178,13 +178,11 @@ void wxHtmlPrintout::AddFilter(wxHtmlFilter *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;
     float ppmm_h, ppmm_v;
 
-    if (!wxPrintout::OnBeginDocument(startPage, endPage)) return FALSE;
-
     GetPageSizePixels(&pageWidth, &pageHeight);
     GetPageSizeMM(&mm_w, &mm_h);
     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);
     CountPages();
+}
+
+bool wxHtmlPrintout::OnBeginDocument(int startPage, int endPage)
+{
+    if (!wxPrintout::OnBeginDocument(startPage, endPage)) return FALSE;
+
     return TRUE;
 }
 
@@ -256,9 +260,9 @@ bool wxHtmlPrintout::OnPrintPage(int page)
 void wxHtmlPrintout::GetPageInfo(int *minPage, int *maxPage, int *selPageFrom, int *selPageTo)
 {
     *minPage = 1;
-    *maxPage = wxHTML_PRINT_MAX_PAGES;
+    *maxPage = m_NumPages;
     *selPageFrom = 1;
-    *selPageTo = wxHTML_PRINT_MAX_PAGES;
+    *selPageTo = m_NumPages;
 }
 
 
index 1a0f8d51213f12d50517f77ca991b90c9e67ce08..b7c8915190776a12a2bab1abb2ede1921f74b4b9 100644 (file)
@@ -535,38 +535,11 @@ bool wxMacPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt)
         return FALSE;
     
     printout->SetIsPreview(FALSE);
-    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)
-        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);
-    
+    if (m_printDialogData.GetMinPage() < 1)
+        m_printDialogData.SetMinPage(1);
+    if (m_printDialogData.GetMaxPage() < 1)
+        m_printDialogData.SetMaxPage(9999);
+
     // Create a suitable device context  
     wxDC *dc = NULL;
     if (prompt)
@@ -609,6 +582,24 @@ bool wxMacPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt)
     // Create an abort window
     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);
     wxSafeYield(win,true);
     
index 1a0f8d51213f12d50517f77ca991b90c9e67ce08..b7c8915190776a12a2bab1abb2ede1921f74b4b9 100644 (file)
@@ -535,38 +535,11 @@ bool wxMacPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt)
         return FALSE;
     
     printout->SetIsPreview(FALSE);
-    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)
-        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);
-    
+    if (m_printDialogData.GetMinPage() < 1)
+        m_printDialogData.SetMinPage(1);
+    if (m_printDialogData.GetMaxPage() < 1)
+        m_printDialogData.SetMaxPage(9999);
+
     // Create a suitable device context  
     wxDC *dc = NULL;
     if (prompt)
@@ -609,6 +582,24 @@ bool wxMacPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt)
     // Create an abort window
     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);
     wxSafeYield(win,true);
     
index 5c5279e6f4b9ceb59ebfcfa198d4f2871d5ff767..36691904cc81adf81567b6794c511aab8d013185 100644 (file)
@@ -107,43 +107,10 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt
 
     printout->SetIsPreview(FALSE);
 
-    // 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.
-    // Moved further down.
-    // 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;
-        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);
+    if (m_printDialogData.GetMinPage() < 1)
+        m_printDialogData.SetMinPage(1);
+    if (m_printDialogData.GetMaxPage() < 1)
+        m_printDialogData.SetMaxPage(9999);
 
     // Create a suitable device context
     wxDC *dc = NULL;
@@ -155,7 +122,6 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt
     }
     else
     {
-        //      dc = new wxPrinterDC("", "", "", FALSE, m_printData.GetOrientation());
         dc = new wxPrinterDC(m_printDialogData.GetPrintData());
     }
 
@@ -203,6 +169,23 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt
 
     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);
     wxYield();