[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