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

List:       kde-commits
Subject:    koffice/kexi/plugins/reportspgz
From:       Adam Pigg <adam () piggz ! co ! uk>
Date:       2009-07-17 22:52:08
Message-ID: 1247871128.828592.15745.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 998556 by piggz:

Fixup saving, loading and rendering to use the new method of storing connection info.

 M  +2 -0      backend/common/koreportdata.h  
 M  +2 -2      backend/common/krreportdata.cpp  
 M  +2 -0      backend/common/krreportdata.h  
 M  +14 -25    backend/renderer/orprerender.cpp  
 M  +8 -5      backend/renderer/orprerender.h  
 M  +8 -2      backend/renderer/scripting/krscriptfunctions.cpp  
 M  +19 -5     kexidbreportdata.cpp  
 M  +2 -0      kexidbreportdata.h  
 M  +3 -1      keximigratereportdata.h  
 M  +41 -18    kexireportview.cpp  
 M  +3 -2      kexireportview.h  
 M  +5 -5      kexisourceselector.cpp  
 M  +3 -3      kexisourceselector.h  


--- trunk/koffice/kexi/plugins/reportspgz/backend/common/koreportdata.h \
#998555:998556 @@ -30,6 +30,8 @@
 public:
     virtual ~KoReportData(){};
 
+    virtual bool open() = 0;
+    virtual bool close() = 0;
     virtual bool moveNext() = 0;
     virtual bool movePrevious() = 0;
     virtual bool moveFirst() = 0;
--- trunk/koffice/kexi/plugins/reportspgz/backend/common/krreportdata.cpp \
#998555:998556 @@ -46,8 +46,8 @@
     init();
     bool valid; //used for local unit conversions
 
-    if (elemSource.tagName() != "report") {
-        kDebug() << "QDomElement passed to parseReport() was not <report> tag";
+    if (elemSource.tagName() != "koreport") {
+        kDebug() << "QDomElement passed to parseReport() was not <koreport> tag";
         kDebug() << elemSource.text();
         return;
     }
--- trunk/koffice/kexi/plugins/reportspgz/backend/common/krreportdata.h \
#998555:998556 @@ -47,6 +47,8 @@
     KRReportData();
     ~KRReportData();
 
+    bool isValid() { return m_valid; }
+    
     /**
     \return a list of all objects in the report
     */
--- trunk/koffice/kexi/plugins/reportspgz/backend/renderer/orprerender.cpp \
#998555:998556 @@ -123,6 +123,7 @@
     _pageCounter = 0;
     _maxHeight = _maxWidth = 0.0;
     _kodata = 0;
+    _conn = 0;
 }
 
 ORPreRenderPrivate::~ORPreRenderPrivate()
@@ -836,16 +837,10 @@
 //
 // ORPreRender
 //
-ORPreRender::ORPreRender(KexiDB::Connection *c)
-{
-    d = new ORPreRenderPrivate();
-    setDatabase(c);
-}
 
-ORPreRender::ORPreRender(const QString & pDocument, KexiDB::Connection *c)
+ORPreRender::ORPreRender(const QString & pDocument)
 {
     d = new ORPreRenderPrivate();
-    setDatabase(c);
     setDom(pDocument);
 }
 
@@ -930,17 +925,7 @@
     kDebug() << "Page Size:" << d->_maxWidth << d->_maxHeight;
 
     d->_document->setPageOptions(rpo);
-
-    //TODO!!!
-    /*
-    if (!d->_reportData->externalData())  {
-      d->_kodata = (new orQuery(d->_reportData->query(), d->_conn));
-    }
-    else {
-     d->_kodata = new orQuery( d->_reportData->query() );
-    }
-    */
-    
+    d->_kodata->open();
     d->initEngine();
     d->createNewPage();
     if (!label.isNull()) {
@@ -1033,6 +1018,7 @@
 
     d->_handler->displayErrors();
 
+    d->_kodata->close();
     delete d->_handler;
     delete d->_kodata
 ;
@@ -1043,18 +1029,23 @@
     return pDoc;
 }
 
-void ORPreRender::setDatabase(KexiDB::Connection *c)
+void ORPreRender::setSourceData(KoReportData *data)
 {
-    if (d != 0)
-        d->_conn = c;
+    if (d != 0 && data != 0)
+    {
+        d->_kodata = data;
+        d->_conn  = static_cast<KexiDB::Connection*>(data->connection());
+    }
 }
 
+/*
 KexiDB::Connection* ORPreRender::database() const
 {
     if (d != 0)
         return d->_conn;
     return 0;
 }
+*/
 
 bool ORPreRender::setDom(const QString & docReport)
 {
@@ -1065,10 +1056,8 @@
         d->_valid = false;
 
         d->_docReport.setContent(docReport);
-        d->_reportData = new KRReportData(d->_docReport.documentElement());
-        //TODO KRReportData->isValid()
-        d->_valid = true;
-
+        d->_reportData = new \
KRReportData(d->_docReport.documentElement().firstChildElement( "koreport" )); +      \
d->_valid = d->_reportData->isValid();  }
     return isValid();
 }
--- trunk/koffice/kexi/plugins/reportspgz/backend/renderer/orprerender.h \
#998555:998556 @@ -29,6 +29,8 @@
 class ORPreRenderPrivate;
 class ParameterList;
 class ORODocument;
+class KoReportData;
+
 namespace KexiDB
 {
 class Connection;
@@ -41,17 +43,17 @@
 class ORPreRender
 {
 public:
-    ORPreRender(KexiDB::Connection*c = 0);
-    ORPreRender(const QString &, KexiDB::Connection*c = 0);
+//    ORPreRender(KexiDB::Connection*c = 0);
+    ORPreRender(const QString &);
 
     virtual ~ORPreRender();
 
+    void setSourceData(KoReportData*);
+    
     ORODocument * generate();
 
-    void setDatabase(KexiDB::Connection*);
-    KexiDB::Connection* database() const;
 
-    bool setDom(const QString &);
+//    KexiDB::Connection* database() const;
     
     /**
     @brief Set the name of the report so that it can be used internally by the \
script engine @@ -64,6 +66,7 @@
 
 private:
     ORPreRenderPrivate* d;
+    bool setDom(const QString &);
 
 };
 
--- trunk/koffice/kexi/plugins/reportspgz/backend/renderer/scripting/krscriptfunctions.cpp \
#998555:998556 @@ -24,8 +24,14 @@
 
 KRScriptFunctions::KRScriptFunctions(const KoReportData *kodata)
 {
-    m_connection = static_cast<KexiDB::Connection*>(kodata->connection());
-    m_cursor = kodata;
+    m_connection = 0;
+    m_cursor = 0;
+    
+    if (kodata)
+    {
+        m_connection = static_cast<KexiDB::Connection*>(kodata->connection());
+        m_cursor = kodata;
+    }
 }
 
 
--- trunk/koffice/kexi/plugins/reportspgz/kexidbreportdata.cpp #998555:998556
@@ -25,18 +25,28 @@
     m_cursor = 0;
     m_connection = pDb;
     m_schema = 0;
-
     m_qstrQuery = qstrSQL;
+    open();
+    close();
+    m_valid = true;
+}
 
+KexiDBReportData::~KexiDBReportData() {
+    close();
+}
+
+bool KexiDBReportData::open() {
     m_valid = executeInternal();
+    return m_valid;
 }
 
-KexiDBReportData::~KexiDBReportData() {
+bool KexiDBReportData::close() {
     if ( m_cursor ) {
         m_cursor->close();
         delete m_cursor;
         m_cursor = 0;
     }
+    return true;
 }
 
 bool KexiDBReportData::executeInternal() {
@@ -92,10 +102,13 @@
 }
 
 QStringList KexiDBReportData::fieldNames() {
+    QStringList names;
+    open();
     if ( m_cursor->query() ) {
-        return m_cursor->query()->names();
+        names =  m_cursor->query()->names();
     }
-    return QStringList();
+    close();
+    return names;
 }
 
 void* KexiDBReportData::schema() const {
@@ -169,7 +182,8 @@
 }
 
 long KexiDBReportData::recordCount() const {
-    if ( m_schema->table() || m_schema->query() ) {
+    
+    if ( m_schema && (m_schema->table() || m_schema->query()) ) {
         return KexiDB::rowCount ( *m_schema );
     } else {
         return 1;
--- trunk/koffice/kexi/plugins/reportspgz/kexidbreportdata.h #998555:998556
@@ -58,6 +58,8 @@
         virtual QVariant value ( unsigned int );
         virtual QVariant value ( const QString &field );
 
+        virtual bool open();
+        virtual bool close();
         virtual bool moveNext();
         virtual bool movePrevious();
         virtual bool moveFirst();
--- trunk/koffice/kexi/plugins/reportspgz/keximigratereportdata.h #998555:998556
@@ -48,7 +48,9 @@
     
     virtual QVariant value(unsigned int);
     virtual QVariant value(const QString &field);
-    
+
+    virtual bool open() {return true;}
+    virtual bool close() {return true;}
     virtual bool moveNext();
     virtual bool movePrevious();
     virtual bool moveFirst();
--- trunk/koffice/kexi/plugins/reportspgz/kexireportview.cpp #998555:998556
@@ -33,6 +33,8 @@
 #include <QPrintDialog>
 #include <widget/utils/kexirecordnavigator.h>
 #include <core/KexiWindow.h>
+#include "kexidbreportdata.h"
+#include "keximigratereportdata.h"
 
 #ifdef HAVE_KSPREAD
 #include <krkspreadrender.h>
@@ -109,37 +111,37 @@
 
 void KexiReportView::nextPage()
 {
-    if (m_currentPpage < m_pageCount) {
-        m_currentPpage++;
-        m_reportWidget->renderPage(m_currentPpage);
-        m_pageSelector->setCurrentRecordNumber(m_currentPpage);
+    if (m_currentPage < m_pageCount) {
+        m_currentPage++;
+        m_reportWidget->renderPage(m_currentPage);
+        m_pageSelector->setCurrentRecordNumber(m_currentPage);
     }
 }
 
 void KexiReportView::prevPage()
 {
-    if (m_currentPpage > 1) {
-        m_currentPpage--;
-        m_reportWidget->renderPage(m_currentPpage);
-        m_pageSelector->setCurrentRecordNumber(m_currentPpage);
+    if (m_currentPage > 1) {
+        m_currentPage--;
+        m_reportWidget->renderPage(m_currentPage);
+        m_pageSelector->setCurrentRecordNumber(m_currentPage);
     }
 }
 
 void KexiReportView::firstPage()
 {
-    if (m_currentPpage != 1) {
-        m_currentPpage = 1;
-        m_reportWidget->renderPage(m_currentPpage);
-        m_pageSelector->setCurrentRecordNumber(m_currentPpage);
+    if (m_currentPage != 1) {
+        m_currentPage = 1;
+        m_reportWidget->renderPage(m_currentPage);
+        m_pageSelector->setCurrentRecordNumber(m_currentPage);
     }
 }
 
 void KexiReportView::lastPage()
 {
-    if (m_currentPpage != m_pageCount) {
-        m_currentPpage = m_pageCount;
-        m_reportWidget->renderPage(m_currentPpage);
-        m_pageSelector->setCurrentRecordNumber(m_currentPpage);
+    if (m_currentPage != m_pageCount) {
+        m_currentPage = m_pageCount;
+        m_reportWidget->renderPage(m_currentPage);
+        m_pageSelector->setCurrentRecordNumber(m_currentPage);
     }
 }
 
@@ -219,9 +221,15 @@
     if (tempData()->reportSchemaChangedInPreviousView) {
         delete m_preRenderer;
 
-        m_preRenderer = new ORPreRender(tempData()->document, \
KexiMainWindowIface::global()->project()->dbConnection()); +        QDomDocument doc;
+        doc.setContent ( tempData()->document );
+        QDomElement root = doc.documentElement();
+        QDomElement conn = root.firstChildElement( "connection" );
+        
+        m_preRenderer = new ORPreRender(tempData()->document);
+        m_preRenderer->setSourceData(sourceData(conn));
         m_preRenderer->setName( tempData()->name );
-        m_currentPpage = 1;
+        m_currentPage = 1;
 
         m_reportDocument = m_preRenderer->generate();
         m_pageCount = m_reportDocument->pages();
@@ -236,6 +244,21 @@
     return true;
 }
 
+KoReportData* KexiReportView::sourceData(QDomElement e)
+{
+    KoReportData *kodata;
+    kodata = 0;
+    
+    if (e.attribute("type") == "internal" ) {
+        kodata = new KexiDBReportData(e.attribute("source"), \
KexiMainWindowIface::global()->project()->dbConnection()); +    }
+    if (e.attribute("type") ==  "external" ) {
+        kodata = new KexiMigrateReportData(e.attribute("source"));
+    }
+    
+    return kodata;
+}
+
 KexiReportPart::TempData* KexiReportView::tempData() const
 {
     return static_cast<KexiReportPart::TempData*>(window()->data());
--- trunk/koffice/kexi/plugins/reportspgz/kexireportview.h #998555:998556
@@ -53,10 +53,11 @@
     QScrollArea *m_scrollArea;
     KexiReportPage *m_reportWidget;
     KexiRecordNavigator *m_pageSelector;
-    int m_currentPpage;
+    int m_currentPage;
     int m_pageCount;
     KexiReportPart::TempData* tempData() const;
-
+    KoReportData* sourceData(QDomElement e);
+    
 private slots:
     void nextPage();
     void prevPage();
--- trunk/koffice/kexi/plugins/reportspgz/kexisourceselector.cpp #998555:998556
@@ -30,8 +30,8 @@
     m_kmd = 0;
     
     m_layout = new QVBoxLayout(this);
-    m_sourceType = new KComboBox(this);
-    m_internalSource = new KComboBox(this);
+    m_sourceType = new QComboBox(this);
+    m_internalSource = new QComboBox(this);
     m_externalSource = new KLineEdit(this);
     m_setData = new KPushButton(i18n("Set Data"));
 
@@ -108,9 +108,9 @@
     QDomElement conndata = d.createElement("connection");
 
     conndata.setAttribute("type", \
                m_sourceType->itemData(m_sourceType->currentIndex()).toString());
-
-    if (m_sourceType->currentText() == "internal") {
-        conndata.setAttribute("source", \
m_internalSource->itemText(m_internalSource->currentIndex())); +    
+    if (m_sourceType->itemData(m_sourceType->currentIndex()).toString() == \
"internal") { +        conndata.setAttribute("source", \
m_internalSource->currentText());  }
     else {
         conndata.setAttribute("source", m_externalSource->text());
--- trunk/koffice/kexi/plugins/reportspgz/kexisourceselector.h #998555:998556
@@ -22,7 +22,7 @@
 
 #include <QWidget>
 #include <QVBoxLayout>
-#include <KComboBox>
+#include <QComboBox>
 #include <KLineEdit>
 #include <KPushButton>
 
@@ -46,8 +46,8 @@
         KexiDB::Connection *m_conn;
         QStringList queryList();
         QVBoxLayout *m_layout;
-        KComboBox *m_sourceType;
-        KComboBox *m_internalSource;
+        QComboBox *m_sourceType;
+        QComboBox *m_internalSource;
         KLineEdit *m_externalSource;
         KPushButton *m_setData;
 


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

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