]> git.saurik.com Git - wxWidgets.git/blobdiff - src/richtext/richtextprint.cpp
ensure all topic overviews have an horizontal rule with the list of the sections...
[wxWidgets.git] / src / richtext / richtextprint.cpp
index 5319131f7452fa7252374e6e9b78e36c5bf36e85..5aa23ca70ff9d03d7f9da14706083d7b10f6d82b 100644 (file)
@@ -50,7 +50,7 @@ void wxRichTextPrintout::OnPreparePrinting()
 {
     wxBusyCursor wait;
 
-    m_numPages = 0;
+    m_numPages = 1;
 
     m_pageBreaksStart.Clear();
     m_pageBreaksEnd.Clear();
@@ -80,18 +80,22 @@ void wxRichTextPrintout::OnPreparePrinting()
             // child is a paragraph
             wxRichTextParagraph* child = wxDynamicCast(node->GetData(), wxRichTextParagraph);
             wxASSERT (child != NULL);
-
+            
             wxRichTextLineList::compatibility_iterator node2 = child->GetLines().GetFirst();
             while (node2)
             {
                 wxRichTextLine* line = node2->GetData();
-                
+
                 // Set the line to the page-adjusted position
                 line->SetPosition(wxPoint(line->GetPosition().x, line->GetPosition().y - yOffset));
 
                 int lineY = child->GetPosition().y + line->GetPosition().y;
                 
-                if ((lineY + line->GetSize().y) > rect.GetBottom())
+                // Break the page if either we're going off the bottom, or this paragraph specifies
+                // an explicit page break
+                
+                if (((lineY + line->GetSize().y) > rect.GetBottom()) ||
+                    ((node2 == child->GetLines().GetFirst()) && child->GetAttributes().HasPageBreak()))
                 {
                     // New page starting at this line
                     int newY = rect.y;
@@ -123,11 +127,10 @@ void wxRichTextPrintout::OnPreparePrinting()
         }
 
         // Closing page break
-        if (m_pageBreaksStart.GetCount() > 0 && (m_pageBreaksEnd[m_pageBreaksEnd.GetCount()-1] < (GetRichTextBuffer()->GetRange().GetEnd()-1)))
+        if (m_pageBreaksStart.GetCount() == 0 || (m_pageBreaksEnd[m_pageBreaksEnd.GetCount()-1] < (GetRichTextBuffer()->GetRange().GetEnd()-1)))
         {
             m_pageBreaksStart.Add(lastStartPos);
             m_pageBreaksEnd.Add(GetRichTextBuffer()->GetRange().GetEnd());
-            m_numPages ++;
         }
     }
 }
@@ -435,6 +438,17 @@ wxPrintData *wxRichTextPrinting::GetPrintData()
     return m_printData;
 }
 
+/// Set print and page setup data
+void wxRichTextPrinting::SetPrintData(const wxPrintData& printData)
+{
+    (*GetPrintData()) = printData;
+}
+
+void wxRichTextPrinting::SetPageSetupData(const wxPageSetupData& pageSetupData)
+{
+    (*GetPageSetupData()) = pageSetupData;
+}
+
 /// Set the rich text buffer pointer, deleting the existing object if present
 void wxRichTextPrinting::SetRichTextBufferPrinting(wxRichTextBuffer* buf)
 {