mirror of
https://github.com/fralx/LimeReport.git
synced 2025-01-11 17:18:10 +03:00
DatasourceFunctions have been extended
This commit is contained in:
parent
d09ae57d0f
commit
5a5c9e76df
@ -31,6 +31,7 @@
|
|||||||
|
|
||||||
#include <QDate>
|
#include <QDate>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
|
#include <QUuid>
|
||||||
#ifndef USE_QJSENGINE
|
#ifndef USE_QJSENGINE
|
||||||
#include <QScriptValueIterator>
|
#include <QScriptValueIterator>
|
||||||
#endif
|
#endif
|
||||||
@ -1823,7 +1824,7 @@ bool DatasourceFunctions::isEOF(const QString &datasourceName)
|
|||||||
{
|
{
|
||||||
if (m_dataManager && m_dataManager->dataSource(datasourceName))
|
if (m_dataManager && m_dataManager->dataSource(datasourceName))
|
||||||
return m_dataManager->dataSource(datasourceName)->eof();
|
return m_dataManager->dataSource(datasourceName)->eof();
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DatasourceFunctions::invalidate(const QString& datasourceName)
|
bool DatasourceFunctions::invalidate(const QString& datasourceName)
|
||||||
@ -1835,6 +1836,73 @@ bool DatasourceFunctions::invalidate(const QString& datasourceName)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QObject* DatasourceFunctions::createTableBuilder(BaseDesignIntf* horizontalLayout)
|
||||||
|
{
|
||||||
|
return new TableBuilder(dynamic_cast<LimeReport::HorizontalLayout*>(horizontalLayout), dynamic_cast<DataSourceManager*>(m_dataManager));
|
||||||
|
}
|
||||||
|
|
||||||
|
QObject* TableBuilder::addRow()
|
||||||
|
{
|
||||||
|
checkBaseLayout();
|
||||||
|
HorizontalLayout* newRow = new HorizontalLayout(m_baseLayout, m_baseLayout);
|
||||||
|
for(int i = 0; i < m_horizontalLayout->childrenCount(); ++i){
|
||||||
|
BaseDesignIntf* item = dynamic_cast<BaseDesignIntf*>(m_horizontalLayout->at(i));
|
||||||
|
BaseDesignIntf* cloneItem = item->cloneItem(item->itemMode(), newRow, newRow);
|
||||||
|
newRow->addChild(cloneItem);
|
||||||
|
}
|
||||||
|
m_baseLayout->addChild(newRow);
|
||||||
|
return newRow;
|
||||||
|
}
|
||||||
|
|
||||||
|
QObject* TableBuilder::currentRow()
|
||||||
|
{
|
||||||
|
checkBaseLayout();
|
||||||
|
if (m_baseLayout && m_baseLayout->childrenCount()>0)
|
||||||
|
return m_baseLayout->at(m_baseLayout->childrenCount()-1);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TableBuilder::fillInRowData(QObject* row)
|
||||||
|
{
|
||||||
|
HorizontalLayout* layout = dynamic_cast<HorizontalLayout*>(row);
|
||||||
|
if (layout){
|
||||||
|
for (int i = 0; i < layout->childrenCount(); ++i) {
|
||||||
|
BaseDesignIntf* item = dynamic_cast<BaseDesignIntf*>(layout->at(i));
|
||||||
|
DataSourceManager* dm = dynamic_cast<DataSourceManager*>(m_dataManager);
|
||||||
|
if (item && dm)
|
||||||
|
item->updateItemSize(dm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TableBuilder::buildTable(const QString& datasourceName)
|
||||||
|
{
|
||||||
|
checkBaseLayout();
|
||||||
|
m_dataManager->dataSource(datasourceName)->first();
|
||||||
|
while(!m_dataManager->dataSource(datasourceName)->eof()){
|
||||||
|
fillInRowData(addRow());
|
||||||
|
m_dataManager->dataSource(datasourceName)->next();
|
||||||
|
}
|
||||||
|
m_horizontalLayout->setVisible(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TableBuilder::checkBaseLayout()
|
||||||
|
{
|
||||||
|
if (!m_baseLayout){
|
||||||
|
m_baseLayout = dynamic_cast<VerticalLayout*>(m_horizontalLayout->parentItem());
|
||||||
|
if (!m_baseLayout){
|
||||||
|
m_baseLayout = new VerticalLayout(m_horizontalLayout->parent(), m_horizontalLayout->parentItem());
|
||||||
|
m_baseLayout->setItemLocation(m_horizontalLayout->itemLocation());
|
||||||
|
m_baseLayout->setPos(m_horizontalLayout->pos());
|
||||||
|
m_baseLayout->setWidth(m_horizontalLayout->width());
|
||||||
|
m_baseLayout->setHeight(0);
|
||||||
|
m_baseLayout->addChild(m_horizontalLayout);
|
||||||
|
m_baseLayout->setObjectName(QUuid::createUuid().toString());
|
||||||
|
m_baseLayout->setItemTypeName("VerticalLayout");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef USE_QJSENGINE
|
#ifndef USE_QJSENGINE
|
||||||
void ComboBoxPrototype::addItem(const QString &text)
|
void ComboBoxPrototype::addItem(const QString &text)
|
||||||
{
|
{
|
||||||
|
@ -54,6 +54,8 @@
|
|||||||
#include "lrcollection.h"
|
#include "lrcollection.h"
|
||||||
#include "lrdatasourceintf.h"
|
#include "lrdatasourceintf.h"
|
||||||
#include "lrdatasourcemanagerintf.h"
|
#include "lrdatasourcemanagerintf.h"
|
||||||
|
#include "lrhorizontallayout.h"
|
||||||
|
#include "lrverticallayout.h"
|
||||||
|
|
||||||
namespace LimeReport{
|
namespace LimeReport{
|
||||||
|
|
||||||
@ -298,16 +300,35 @@ private:
|
|||||||
QObject* createWrapper(QObject* item);
|
QObject* createWrapper(QObject* item);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class TableBuilder: public QObject{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
TableBuilder(LimeReport::HorizontalLayout* layout, DataSourceManager* dataManager)
|
||||||
|
: m_horizontalLayout(layout), m_baseLayout(0), m_dataManager(dataManager){}
|
||||||
|
~TableBuilder(){}
|
||||||
|
Q_INVOKABLE QObject* addRow();
|
||||||
|
Q_INVOKABLE QObject* currentRow();
|
||||||
|
Q_INVOKABLE void fillInRowData(QObject* row);
|
||||||
|
Q_INVOKABLE void buildTable(const QString& datasourceName);
|
||||||
|
private:
|
||||||
|
void checkBaseLayout();
|
||||||
|
private:
|
||||||
|
LimeReport::HorizontalLayout* m_horizontalLayout;
|
||||||
|
LimeReport::VerticalLayout* m_baseLayout;
|
||||||
|
DataSourceManager* m_dataManager;
|
||||||
|
};
|
||||||
|
|
||||||
class DatasourceFunctions : public QObject{
|
class DatasourceFunctions : public QObject{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit DatasourceFunctions(IDataSourceManager* dataManager): m_dataManager(dataManager){}
|
explicit DatasourceFunctions(IDataSourceManager* dataManager)
|
||||||
|
: m_dataManager(dataManager){}
|
||||||
Q_INVOKABLE bool first(const QString& datasourceName);
|
Q_INVOKABLE bool first(const QString& datasourceName);
|
||||||
Q_INVOKABLE bool next(const QString& datasourceName);
|
Q_INVOKABLE bool next(const QString& datasourceName);
|
||||||
Q_INVOKABLE bool prior(const QString& datasourceName);
|
Q_INVOKABLE bool prior(const QString& datasourceName);
|
||||||
Q_INVOKABLE bool isEOF(const QString& datasourceName);
|
Q_INVOKABLE bool isEOF(const QString& datasourceName);
|
||||||
Q_INVOKABLE bool invalidate(const QString& datasourceName);
|
Q_INVOKABLE bool invalidate(const QString& datasourceName);
|
||||||
|
Q_INVOKABLE QObject *createTableBuilder(BaseDesignIntf* horizontalLayout);
|
||||||
private:
|
private:
|
||||||
IDataSourceManager* m_dataManager;
|
IDataSourceManager* m_dataManager;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user