0
0
mirror of https://github.com/fralx/LimeReport.git synced 2025-11-20 06:30:03 +03:00

Added ability to create CSV data source

This commit is contained in:
Arin Alexander
2019-04-04 04:37:18 +03:00
parent de5cc0e0ca
commit 51b2effa3c
9 changed files with 737 additions and 329 deletions

View File

@@ -831,4 +831,118 @@ bool CallbackDatasource::checkIfEmpty(){
}
}
QString CSVDesc::name() const
{
return m_csvName;
}
void CSVDesc::setName(const QString &csvName)
{
m_csvName = csvName;
}
QString CSVDesc::csvText() const
{
return m_csvText;
}
void CSVDesc::setCsvText(const QString &csvText)
{
m_csvText = csvText;
emit cvsTextChanged(m_csvName, m_csvText);
}
QString CSVDesc::separator() const
{
return m_separator;
}
void CSVDesc::setSeparator(const QString &separator)
{
m_separator = separator;
}
bool CSVDesc::firstRowIsHeader() const
{
return m_firstRowIsHeader;
}
void CSVDesc::setFirstRowIsHeader(bool firstRowIsHeader)
{
m_firstRowIsHeader = firstRowIsHeader;
}
void CSVHolder::updateModel()
{
m_model.clear();
QString sep = (separator().compare("\\t") == 0) ? "\t" : separator();
bool firstRow = true;
QList<QStandardItem*> columns;
QStringList headers;
foreach(QString line, m_csvText.split('\n')){
columns.clear();
foreach(QString item, line.split(sep)){
columns.append(new QStandardItem(item));
if (firstRow && m_firstRowIsHeader) headers.append(item);
}
if (firstRow){
if (!headers.isEmpty()){
m_model.setHorizontalHeaderLabels(headers);
firstRow = false;
} else {
m_model.appendRow(columns);
}
} else {
m_model.appendRow(columns);
}
}
}
bool CSVHolder::firsRowIsHeader() const
{
return m_firstRowIsHeader;
}
void CSVHolder::setFirsRowIsHeader(bool firstRowIsHeader)
{
m_firstRowIsHeader = firstRowIsHeader;
}
CSVHolder::CSVHolder(const CSVDesc &desc, DataSourceManager *dataManager)
: m_csvText(desc.csvText()),
m_separator(desc.separator()),
m_dataManager(dataManager),
m_firstRowIsHeader(desc.firstRowIsHeader())
{
m_dataSource = IDataSource::Ptr(new ModelToDataSource(&m_model, false));
updateModel();
}
void CSVHolder::setCSVText(QString csvText)
{
m_csvText = csvText;
updateModel();
}
QString CSVHolder::separator() const
{
return m_separator;
}
void CSVHolder::setSeparator(const QString &separator)
{
m_separator = separator;
updateModel();
}
IDataSource *CSVHolder::dataSource(IDataSource::DatasourceMode mode)
{
Q_UNUSED(mode);
return m_dataSource.data();
}
} //namespace LimeReport