[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [calligra] libs/koreport: Improve the async backend. Add some
From: Jaroslaw Staniek <staniek () kde ! org>
Date: 2011-09-30 22:30:28
Message-ID: 20110930223028.8FDF8A60C6 () git ! kde ! org
[Download RAW message or body]
Git commit 899c0c10f06b54903e9f6056c61ea2fce88ebe66 by Jaroslaw Staniek, on behalf of \
Adam Pigg. Committed on 29/09/2011 at 19:40.
Pushed by staniek into branch 'master'.
Improve the async backend. Add some debugging and dont check async items for height \
changes as its not allowed
M +2 -0 libs/koreport/common/renderobjects.cpp
M +10 -1 libs/koreport/renderer/KoReportASyncItemManager.cpp
M +1 -0 libs/koreport/renderer/KoReportASyncItemManager.h
M +13 -6 libs/koreport/renderer/KoReportPreRenderer.cpp
http://commits.kde.org/calligra/899c0c10f06b54903e9f6056c61ea2fce88ebe66
diff --git a/libs/koreport/common/renderobjects.cpp \
b/libs/koreport/common/renderobjects.cpp index d326010..eeec023 100644
--- a/libs/koreport/common/renderobjects.cpp
+++ b/libs/koreport/common/renderobjects.cpp
@@ -116,6 +116,8 @@ OROPrimitive* OROPage::primitive(int idx)
void OROPage::addPrimitive(OROPrimitive* p, bool atBeginning)
{
+ kDebug() << "Adding primitive" << p->type() << "to page" << page();
+
if (p == 0)
return;
diff --git a/libs/koreport/renderer/KoReportASyncItemManager.cpp \
b/libs/koreport/renderer/KoReportASyncItemManager.cpp index 667b293..5041725 100644
--- a/libs/koreport/renderer/KoReportASyncItemManager.cpp
+++ b/libs/koreport/renderer/KoReportASyncItemManager.cpp
@@ -20,6 +20,7 @@
#include "KoReportASyncItemManager.h"
#include "common/KoReportASyncItemBase.h"
+#include <kdebug.h>
KoReportASyncItemManager::KoReportASyncItemManager(QObject* parent): QObject(parent)
{
@@ -43,13 +44,20 @@ void KoReportASyncItemManager::addItem(KoReportASyncItemBase* \
item, OROPage* pag
m_renderList.enqueue(rdata);
- connect(item, SIGNAL(finishedRendering()), this, SLOT(itemFinished()));
+ //Just connect the first instance
+ if (!m_itemList.contains(item)) {
+ m_itemList.append(item);
+ connect(item, SIGNAL(finishedRendering()), this, SLOT(itemFinished()));
+ }
+ kDebug() << m_renderList.count();
}
void KoReportASyncItemManager::itemFinished()
{
+ kDebug();
if (m_renderList.count() > 0) {
RenderData *rdata = m_renderList.dequeue();
+ rdata->item->render(rdata->page, rdata->section, rdata->offset, rdata->data, \
rdata->script); } else {
emit(finished());
}
@@ -57,6 +65,7 @@ void KoReportASyncItemManager::itemFinished()
void KoReportASyncItemManager::startRendering()
{
+ kDebug();
if (m_renderList.count() > 0) {
RenderData *rdata = m_renderList.dequeue();
rdata->item->render(rdata->page, rdata->section, rdata->offset, rdata->data, \
rdata->script);
diff --git a/libs/koreport/renderer/KoReportASyncItemManager.h \
b/libs/koreport/renderer/KoReportASyncItemManager.h index 2472839..a3510ff 100644
--- a/libs/koreport/renderer/KoReportASyncItemManager.h
+++ b/libs/koreport/renderer/KoReportASyncItemManager.h
@@ -49,6 +49,7 @@ public:
private:
QQueue<RenderData*> m_renderList;
+ QList<KoReportASyncItemBase*> m_itemList;
private slots:
void itemFinished();
diff --git a/libs/koreport/renderer/KoReportPreRenderer.cpp \
b/libs/koreport/renderer/KoReportPreRenderer.cpp index 6d4939e..98e07e9 100644
--- a/libs/koreport/renderer/KoReportPreRenderer.cpp
+++ b/libs/koreport/renderer/KoReportPreRenderer.cpp
@@ -353,11 +353,16 @@ qreal KoReportPreRendererPrivate::renderSectionSize(const \
KRSectionData & sectio foreach(KoReportItemBase *ob, objects) {
QPointF offset(m_leftMargin, m_yOffset);
QVariant itemData = m_kodata->value(ob->itemDataSource());
-
- itemHeight = ob->render(0, 0, offset, itemData, m_scriptHandler);
-
- if (itemHeight > intHeight) {
- intHeight = itemHeight;
+
+ //ASync objects cannot alter the section height
+ KoReportASyncItemBase *async_ob = qobject_cast<KoReportASyncItemBase*>(ob);
+
+ if (!async_ob) {
+ itemHeight = ob->render(0, 0, offset, itemData, m_scriptHandler);
+
+ if (itemHeight > intHeight) {
+ intHeight = itemHeight;
+ }
}
}
@@ -397,10 +402,12 @@ qreal KoReportPreRendererPrivate::renderSection(const \
KRSectionData & sectionDat if (ob->supportsSubQuery()) {
itemHeight = ob->render(m_page, sec, offset, m_kodata, m_scriptHandler);
} else {
- KoReportASyncItemBase *async_ob = \
dynamic_cast<KoReportASyncItemBase*>(ob); + KoReportASyncItemBase \
*async_ob = qobject_cast<KoReportASyncItemBase*>(ob); if (async_ob){
+ kDebug() << "async object";
asyncManager->addItem(async_ob, m_page, sec, offset, itemData, \
m_scriptHandler); } else {
+ kDebug() << "sync object";
itemHeight = ob->render(m_page, sec, offset, itemData, \
m_scriptHandler); }
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic