From 4355cf6b49f48ea312b5d00bdd86f09faeb6e999 Mon Sep 17 00:00:00 2001
From: imr <iron_hat@hotmail.com>
Date: Tue, 20 Sep 2016 22:20:01 -0400
Subject: [PATCH] Correct page numbers for pcbnew multipage print.

---
 gerbview/printout_control.cpp |  4 ++--
 pcbnew/printout_controler.cpp | 15 +++++++++++++--
 pcbnew/printout_controler.h   |  2 +-
 3 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/gerbview/printout_control.cpp b/gerbview/printout_control.cpp
index cc0da57..0681aed 100644
--- a/gerbview/printout_control.cpp
+++ b/gerbview/printout_control.cpp
@@ -77,7 +77,7 @@ bool BOARD_PRINTOUT_CONTROLLER::OnPrintPage( int aPage )
     // in gerbview, draw layers are always printed on separate pages
     // because handling negative objects when using only one page is tricky
     m_PrintParams.m_Flags = aPage;
-    DrawPage( wxEmptyString );
+    DrawPage();
 
     return true;
 }
@@ -99,7 +99,7 @@ void BOARD_PRINTOUT_CONTROLLER::GetPageInfo( int* minPage, int* maxPage,
 }
 
 
-void BOARD_PRINTOUT_CONTROLLER::DrawPage( wxString layer = wxEmptyString )
+void BOARD_PRINTOUT_CONTROLLER::DrawPage( wxString layer, int aPageNum, int aPageCount)
 {
     wxPoint       offset;
     double        userscale;
diff --git a/pcbnew/printout_controler.cpp b/pcbnew/printout_controler.cpp
index aec6957..a1d0bd4 100644
--- a/pcbnew/printout_controler.cpp
+++ b/pcbnew/printout_controler.cpp
@@ -84,6 +84,7 @@ BOARD_PRINTOUT_CONTROLLER::BOARD_PRINTOUT_CONTROLLER( const PRINT_PARAMETERS& aP
 bool BOARD_PRINTOUT_CONTROLLER::OnPrintPage( int aPage )
 {
     LSET lset = m_PrintParams.m_PrintMaskLayer;
+    int aPageCount = lset.count();
     wxString layer;
     LAYER_ID extractLayer;
 
@@ -113,7 +114,7 @@ bool BOARD_PRINTOUT_CONTROLLER::OnPrintPage( int aPage )
     if( m_PrintParams.m_Flags == 1 )
         m_PrintParams.m_PrintMaskLayer.set( Edge_Cuts );
 
-    DrawPage( layer );
+    DrawPage( layer, aPage, aPageCount );
 
     m_PrintParams.m_PrintMaskLayer = lset;
 
@@ -137,7 +138,7 @@ void BOARD_PRINTOUT_CONTROLLER::GetPageInfo( int* minPage, int* maxPage,
 }
 
 
-void BOARD_PRINTOUT_CONTROLLER::DrawPage( wxString layer = wxEmptyString )
+void BOARD_PRINTOUT_CONTROLLER::DrawPage( wxString layer, int aPageNum, int aPageCount )
 {
     wxPoint       offset;
     double        userscale;
@@ -147,6 +148,8 @@ void BOARD_PRINTOUT_CONTROLLER::DrawPage( wxString layer = wxEmptyString )
     BASE_SCREEN*  screen = m_Parent->GetScreen();
     bool          printMirror = m_PrintParams.m_PrintMirror;
     wxSize        pageSizeIU = m_Parent->GetPageSizeIU();
+    int           tempScreenNumber;
+    int           tempNumberOfScreens;
 
     wxBusyCursor  dummy;
 
@@ -286,8 +289,16 @@ void BOARD_PRINTOUT_CONTROLLER::DrawPage( wxString layer = wxEmptyString )
         GRForceBlackPen( true );
 
     if( m_PrintParams.PrintBorderAndTitleBlock() )
+    {
+        tempScreenNumber = screen->m_ScreenNumber;
+        tempNumberOfScreens = screen->m_NumberOfScreens;
+        screen->m_ScreenNumber = aPageNum;
+        screen->m_NumberOfScreens = aPageCount;
         m_Parent->DrawWorkSheet( dc, screen, m_PrintParams.m_PenDefaultSize,
                                   IU_PER_MILS, titleblockFilename, layer );
+        screen->m_ScreenNumber = tempScreenNumber;
+        screen->m_NumberOfScreens = tempNumberOfScreens;
+    }
 
     if( printMirror )
     {
diff --git a/pcbnew/printout_controler.h b/pcbnew/printout_controler.h
index 8527bcf..df48b88 100644
--- a/pcbnew/printout_controler.h
+++ b/pcbnew/printout_controler.h
@@ -123,7 +123,7 @@ public:
 
     void GetPageInfo( int* minPage, int* maxPage, int* selPageFrom, int* selPageTo );
 
-    void DrawPage( wxString layer );
+    void DrawPage( wxString layer = wxEmptyString, int aPageNum = 1, int aPageCount = 1 );
 };
 
 #endif      // PRINTOUT_CONTROLLER_H
-- 
2.6.6
