Re: Reports: problem with pageTotal()

Dag Andersen <[email protected]> Thu, 2 Dec 2010 12:58:04 +0100
Newsgroups gmane.comp.kde.devel.koffice
Message-ID <[email protected]>
Torsdag 02 december 2010 10:09:30 skrev Dag Andersen:
> In kplato I define a report with fields for page number (working) and total
> number of pages (not working). I specify control sources like this:
> =constants.PageNumber()
> =constants.PageTotal()
> 
> The page total field in the generated report shows:
> constants.PageTotal()
> 
> Any hints?
Seems this was only half finished, att patch fixes it for me.
Could you commit if it is ok Jaroslaw?
-- 
Mvh.
Dag Andersen

_______________________________________________
koffice-devel mailing list
[email protected]
https://mail.kde.org/mailman/listinfo/koffice-devel
pagetotal.diff (text/x-patch, 2.6 KB)
Index: renderer/KoReportPreRenderer.cpp
===================================================================
--- renderer/KoReportPreRenderer.cpp	(revision 1202520)
+++ renderer/KoReportPreRenderer.cpp	(working copy)
@@ -65,7 +65,6 @@
     int m_recordCount;
 
     KoReportData* m_kodata;
-    QList<OROTextBox*> m_postProcText;
 
     void createNewPage();
     qreal finishCurPage(bool = false);
@@ -105,8 +104,6 @@
         delete m_reportData;
         m_reportData = 0;
     }
-
-    m_postProcText.clear();
 }
 
 void KoReportPreRendererPrivate::createNewPage()
@@ -399,17 +396,7 @@
         
         if (itemHeight > sectionHeight) {
             sectionHeight = itemHeight;
-        }
-        
-#if 0 //!TODO Handle post processing of text data
-        if (ob->type() == OROTextBox::TextBox) {
-            OROTextBox *text = dynamic_cast<OROTextBox*>(ob);
-            if (text->requiresPostProcessing()) {
-                m_postProcText.append(text);
-            }
-
-#endif
- 
+        } 
     }
 
     m_yOffset += sectionHeight;
@@ -614,24 +601,31 @@
     }
     d->finishCurPage(true);
 
-    // _postProcText contains those text boxes that need to be updated
+    // post process primitives that need to be updated
     // with information that wasn't available at the time it was added to the document
     d->m_scriptHandler->setPageTotal(d->m_document->pages());
 
-    for (int i = 0; i < d->m_postProcText.size(); i++) {
-        OROTextBox * tb = d->m_postProcText.at(i);
+    //TODO: post process sections (field items can also add textboxes to sections)
 
-        d->m_scriptHandler->setPageNumber(tb->page()->page() + 1);
-
-        tb->setText(d->m_scriptHandler->evaluate(tb->text()).toString());
+    for(int i = 0; i < d->m_document->pages(); ++i) {
+        OROPage *page = d->m_document->page(i);
+        for(int j = 0; j < page->primitives(); ++j) {
+            OROPrimitive * ob = page->primitive(j);
+            if (ob->type() == OROTextBox::TextBox) {
+                // only handles textbox primitives atm
+                OROTextBox *tb = static_cast<OROTextBox*>(ob);
+                if (tb->requiresPostProcessing()) {
+                    d->m_scriptHandler->setPageNumber(tb->page()->page() + 1);
+                    tb->setText(d->m_scriptHandler->evaluate(tb->text()).toString());
+                }
+            }
+        }
     }
-
     d->m_scriptHandler->displayErrors();
 
     d->m_kodata->close();
     delete d->m_scriptHandler;
     delete d->m_kodata;
-    d->m_postProcText.clear();
 
     ORODocument * pDoc = d->m_document;
     d->m_document = 0;