[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    koffice/kspread/ui
From:       Stefan Nikolaus <nikolaus4 () googlemail ! com>
Date:       2008-05-29 11:57:11
Message-ID: 1212062231.786264.32012.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 814133 by nikolaus:

Printing	Page ranges work now.


 M  +38 -70    PrintJob.cpp  
 M  +2 -0      PrintJob.h  


--- trunk/koffice/kspread/ui/PrintJob.cpp #814132:814133
@@ -1,4 +1,5 @@
 /* This file is part of the KDE project
+ * Copyright 2008 Stefan Nikolaus <stefan.nikolaus@kdemail.net>
  * Copyright (C) 2007 Thomas Zander <zander@kde.org>
  *
  * This library is free software; you can redistribute it and/or
@@ -40,7 +41,7 @@
 public:
     View* view;
     SheetSelectPage* sheetSelectPage;
-    QStringList selectedSheets;
+    QList<Sheet*> selectedSheets;
 
 public:
     int setupPages();
@@ -51,32 +52,29 @@
     // Setup the pages.
     // TODO Stefan: Use the current page layout.
     // TODO Stefan: Only perform layouting, if necessary, i.e. after page layout \
                changes.
-    int pageCount = 0;
-    QStringList sheets;
+    selectedSheets.clear();
     if (sheetSelectPage->allSheetsButton->isChecked())
-    {
-        const QList<Sheet*> availableSheets = view->doc()->map()->sheetList();
-        for (int i = 0; i < availableSheets.count(); ++i)
-            sheets.append(availableSheets[i]->sheetName());
-    }
+        selectedSheets = view->doc()->map()->sheetList();
     else if (sheetSelectPage->activeSheetButton->isChecked())
-        sheets = QStringList() << view->activeSheet()->sheetName();
+        selectedSheets.append(view->activeSheet());
     else if (sheetSelectPage->selectedSheetsButton->isChecked())
-        sheets = sheetSelectPage->selectedSheets();
-    // Store the selected sheets.
-    // The printing is done in threads; one for each page.
-    // At that time the dialog is already deleted.
-    selectedSheets = sheets;
-    for (int i = 0; i < sheets.count(); ++i)
     {
-        Sheet* sheet = view->doc()->map()->findSheet(sheets[i]);
-        if (sheet == 0)
+        const QStringList sheetNames = sheetSelectPage->selectedSheets();
+        for (int i = 0; i < sheetNames.count(); ++i)
         {
-            kWarning(36005) << i18n("Sheet %1 could not be found for printing", \
                sheets[i]);
-            continue;
+            Sheet* sheet = view->doc()->map()->findSheet(sheetNames[i]);
+            if (sheet == 0)
+            {
+                kWarning(36005) << i18n("Sheet %1 could not be found for printing", \
sheetNames[i]); +                continue;
+            }
+            selectedSheets.append(sheet);
         }
-        pageCount += sheet->printManager()->setupPages();
     }
+
+    int pageCount = 0;
+    for (int i = 0; i < selectedSheets.count(); ++i)
+        pageCount += selectedSheets[i]->printManager()->setupPages();
     return pageCount;
 }
 
@@ -89,23 +87,17 @@
 
     setShapeManager(static_cast<Canvas*>(d->view->canvas())->shapeManager());
 
-    PrintSettings* settings = d->view->activeSheet()->printSettings();
-
     //apply page layout parameters
-    KoPageFormat::Format pageFormat = settings->pageLayout().format;
-
-    printer().setPageSize( static_cast<QPrinter::PageSize>( \
                KoPageFormat::printerPageSize( pageFormat ) ) );
-
-    if (settings->pageLayout().orientation == KoPageFormat::Landscape || pageFormat \
== KoPageFormat::ScreenSize) +    const PrintSettings* settings = \
d->view->activeSheet()->printSettings(); +    const KoPageLayout pageLayout = \
settings->pageLayout(); +    const KoPageFormat::Format pageFormat = \
pageLayout.format; +    printer().setPaperSize( static_cast<QPrinter::PageSize>( \
KoPageFormat::printerPageSize( pageFormat ) ) ); +    if (pageLayout.orientation == \
KoPageFormat::Landscape || pageFormat == KoPageFormat::ScreenSize)  \
printer().setOrientation( QPrinter::Landscape );  else
         printer().setOrientation( QPrinter::Portrait );
-
     printer().setFullPage( true );
 
-    //add possibility to select the sheets to print:
-    //kDebug(36005) <<"Adding sheet selection page.";
-
     //kDebug(36005) <<"Iterating through available sheets and initializing list of \
available sheets.";  QList<Sheet*> sheetList = d->view->doc()->map()->sheetList();
     for ( int i = sheetList.count()-1; i >= 0; --i )
@@ -127,28 +119,15 @@
 
 int PrintJob::documentFirstPage() const
 {
-    return 1;
+    return d->selectedSheets.isEmpty() ? 0 : 1;
 }
 
 int PrintJob::documentLastPage() const
 {
-    const QStringList sheets = d->selectedSheets;
+    const QList<Sheet*> sheets = d->selectedSheets;
     int pageCount = 0;
-    if (sheets.isEmpty())
-        pageCount = d->view->activeSheet()->printManager()->pageCount();
-    else
-    {
-        for (int i = 0; i < sheets.count(); ++i)
-        {
-            Sheet* sheet = d->view->doc()->map()->findSheet(sheets[i]);
-            if (sheet == 0)
-            {
-                kWarning(36005) << i18n("Sheet %1 could not be found for printing", \
                sheets[i]);
-                continue;
-            }
-            pageCount += sheet->printManager()->pageCount();
-        }
-    }
+    for (int i = 0; i < sheets.count(); ++i)
+        pageCount += sheets[i]->printManager()->pageCount();
     return pageCount;
 }
 
@@ -160,37 +139,26 @@
     KoPrintingDialog::startPrinting(removePolicy);
 }
 
+void PrintJob::preparePage(int pageNumber)
+{
+    printer().setPaperSize(QPrinter::A4);
+}
+
 void PrintJob::printPage(int pageNumber, QPainter &painter)
 {
     kDebug(36004) << "Printing page" << pageNumber;
     // Find the sheet specific page number.
     Sheet* sheet = 0;
     int sheetPageNumber = pageNumber;
-    const QStringList sheets = d->selectedSheets;
-    if (sheets.isEmpty())
+    const QList<Sheet*> sheets = d->selectedSheets;
+    for (int i = 0; i < sheets.count(); ++i)
     {
-        if (pageNumber > d->view->activeSheet()->printManager()->pageCount())
-            return;
-        // sheetPageNumber = pageNumber;
-        sheet = d->view->activeSheet();
+        sheet = sheets[i];
+        if (pageNumber <= sheet->printManager()->pageCount())
+            break;
+        sheetPageNumber -= sheet->printManager()->pageCount();
     }
-    else
-    {
-        for (int i = 0; i < sheets.count(); ++i)
-        {
-            sheet = d->view->doc()->map()->findSheet(sheets[i]);
-            if (sheet == 0)
-            {
-                kWarning(36005) << i18n("Sheet %1 could not be found for printing", \
                sheets[i]);
-                continue;
-            }
 
-            if (pageNumber <= sheet->printManager()->pageCount())
-                break;
-            sheetPageNumber -= sheet->printManager()->pageCount();
-        }
-    }
-
     // Print the page.
     if (sheet)
         sheet->printManager()->printPage(sheetPageNumber, painter);
--- trunk/koffice/kspread/ui/PrintJob.h #814132:814133
@@ -1,4 +1,5 @@
 /* This file is part of the KDE project
+ * Copyright 2008 Stefan Nikolaus <stefan.nikolaus@kdemail.net>
  * Copyright (C) 2007 Thomas Zander <zander@kde.org>
  *
  * This library is free software; you can redistribute it and/or
@@ -37,6 +38,7 @@
     virtual void startPrinting(RemovePolicy removePolicy = DoNotDelete);
 
 protected:
+    virtual void preparePage(int pageNumber);
     virtual void printPage(int pageNumber, QPainter &painter);
     virtual QList<KoShape*> shapesOnPage(int pageNumber);
     virtual QList<QWidget*> createOptionWidgets() const;


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic