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;