diff options
| author | 2014-12-06 17:33:25 -0500 | |
|---|---|---|
| committer | 2014-12-06 17:33:25 -0500 | |
| commit | 7167ce41b61d2ba2cdb526777a4233eb84a3b66a (patch) | |
| tree | a35c14143716e1f2c98f808c81f89426045a946f /Plugins/CsvExport | |
Imported Upstream version 2.99.6upstream/2.99.6
Diffstat (limited to 'Plugins/CsvExport')
| -rw-r--r-- | Plugins/CsvExport/CsvExport.pro | 29 | ||||
| -rw-r--r-- | Plugins/CsvExport/CsvExport.ui | 100 | ||||
| -rw-r--r-- | Plugins/CsvExport/csvexport.cpp | 191 | ||||
| -rw-r--r-- | Plugins/CsvExport/csvexport.h | 56 | ||||
| -rw-r--r-- | Plugins/CsvExport/csvexport.json | 7 | ||||
| -rw-r--r-- | Plugins/CsvExport/csvexport.qrc | 5 | ||||
| -rw-r--r-- | Plugins/CsvExport/csvexport_global.h | 12 |
7 files changed, 400 insertions, 0 deletions
diff --git a/Plugins/CsvExport/CsvExport.pro b/Plugins/CsvExport/CsvExport.pro new file mode 100644 index 0000000..9ffc8f9 --- /dev/null +++ b/Plugins/CsvExport/CsvExport.pro @@ -0,0 +1,29 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2014-06-14T16:04:07 +# +#------------------------------------------------- + +include($$PWD/../../SQLiteStudio3/plugins.pri) + +QT -= gui + +TARGET = CsvExport +TEMPLATE = lib + +DEFINES += CSVEXPORT_LIBRARY + +SOURCES += csvexport.cpp + +HEADERS += csvexport.h\ + csvexport_global.h + +FORMS += \ + CsvExport.ui + +OTHER_FILES += \ + csvexport.json + +RESOURCES += \ + csvexport.qrc + diff --git a/Plugins/CsvExport/CsvExport.ui b/Plugins/CsvExport/CsvExport.ui new file mode 100644 index 0000000..ec80b57 --- /dev/null +++ b/Plugins/CsvExport/CsvExport.ui @@ -0,0 +1,100 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>CsvExport</class> + <widget class="QWidget" name="CsvExport"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>312</width> + <height>90</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="0" colspan="3"> + <widget class="QCheckBox" name="columnsCheck"> + <property name="text"> + <string>Column names in first row</string> + </property> + <property name="cfg" stdset="0"> + <string>CsvExport.ColumnsInFirstRow</string> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label"> + <property name="text"> + <string>Column separator:</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QComboBox" name="comboBox"> + <property name="cfg" stdset="0"> + <string>CsvExport.Separator</string> + </property> + <item> + <property name="text"> + <string>, (comma)</string> + </property> + </item> + <item> + <property name="text"> + <string>; (semicolon)</string> + </property> + </item> + <item> + <property name="text"> + <string>\t (tab)</string> + </property> + </item> + <item> + <property name="text"> + <string> (whitespace)</string> + </property> + </item> + <item> + <property name="text"> + <string>Custom:</string> + </property> + </item> + </widget> + </item> + <item row="1" column="2"> + <widget class="QLineEdit" name="lineEdit"> + <property name="maximumSize"> + <size> + <width>30</width> + <height>16777215</height> + </size> + </property> + <property name="cfg" stdset="0"> + <string>CsvExport.CustomSeparator</string> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>Export NULL values as:</string> + </property> + </widget> + </item> + <item row="2" column="1" colspan="2"> + <widget class="QLineEdit" name="lineEdit_2"> + <property name="placeholderText"> + <string>Empty string</string> + </property> + <property name="cfg" stdset="0"> + <string>CsvExport.NullValueString</string> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/Plugins/CsvExport/csvexport.cpp b/Plugins/CsvExport/csvexport.cpp new file mode 100644 index 0000000..bdaf729 --- /dev/null +++ b/Plugins/CsvExport/csvexport.cpp @@ -0,0 +1,191 @@ +#include "csvexport.h" +#include "common/unused.h" +#include "services/exportmanager.h" +#include "csvserializer.h" + +CsvExport::CsvExport() +{ +} + +QString CsvExport::getFormatName() const +{ + return QStringLiteral("CSV"); +} + +ExportManager::StandardConfigFlags CsvExport::standardOptionsToEnable() const +{ + return ExportManager::CODEC; +} + +ExportManager::ExportModes CsvExport::getSupportedModes() const +{ + return ExportManager::FILE|ExportManager::TABLE|ExportManager::QUERY_RESULTS|ExportManager::CLIPBOARD; +} + +QString CsvExport::getExportConfigFormName() const +{ + return QStringLiteral("CsvExport"); +} + +CfgMain* CsvExport::getConfig() +{ + return &cfg; +} + +void CsvExport::validateOptions() +{ + if (cfg.CsvExport.Separator.get() >= 4) + { + EXPORT_MANAGER->updateVisibilityAndEnabled(cfg.CsvExport.CustomSeparator, true, true); + + bool valid = !cfg.CsvExport.CustomSeparator.get().isEmpty(); + EXPORT_MANAGER->handleValidationFromPlugin(valid, cfg.CsvExport.CustomSeparator, tr("Enter the custom separator character.")); + } + else + { + EXPORT_MANAGER->updateVisibilityAndEnabled(cfg.CsvExport.CustomSeparator, true, false); + EXPORT_MANAGER->handleValidationFromPlugin(true, cfg.CsvExport.CustomSeparator); + } +} + +QString CsvExport::defaultFileExtension() const +{ + return QStringLiteral("csv"); +} + +bool CsvExport::beforeExportQueryResults(const QString& query, QList<QueryExecutor::ResultColumnPtr>& columns, const QHash<ExportManager::ExportProviderFlag, QVariant> providedData) +{ + UNUSED(query); + UNUSED(providedData); + defineCsvFormat(); + + QStringList cols; + for (QueryExecutor::ResultColumnPtr resCol : columns) + cols << resCol->displayName; + + writeln(CsvSerializer::serialize(cols, format)); + return true; +} + +bool CsvExport::exportQueryResultsRow(SqlResultsRowPtr row) +{ + exportTableRow(row); + return true; +} + +bool CsvExport::exportTable(const QString& database, const QString& table, const QStringList& columnNames, const QString& ddl, SqliteCreateTablePtr createTable, const QHash<ExportManager::ExportProviderFlag, QVariant> providedData) +{ + UNUSED(database); + UNUSED(table); + UNUSED(ddl); + UNUSED(providedData); + UNUSED(createTable); + return exportTable(columnNames); +} + +bool CsvExport::exportVirtualTable(const QString& database, const QString& table, const QStringList& columnNames, const QString& ddl, SqliteCreateVirtualTablePtr createTable, const QHash<ExportManager::ExportProviderFlag, QVariant> providedData) +{ + UNUSED(database); + UNUSED(table); + UNUSED(ddl); + UNUSED(providedData); + UNUSED(createTable); + return exportTable(columnNames); +} + +bool CsvExport::exportTable(const QStringList& columnNames) +{ + if (!isTableExport()) + return false; + + defineCsvFormat(); + writeln(CsvSerializer::serialize(columnNames, format)); + return true; +} + +bool CsvExport::exportTableRow(SqlResultsRowPtr data) +{ + QStringList valList; + QString nl = cfg.CsvExport.NullValueString.get(); + for (const QVariant& val : data->valueList()) + valList << (val.isNull() ? nl : val.toString()); + + writeln(CsvSerializer::serialize(valList, format)); + return true; +} + +bool CsvExport::beforeExportDatabase(const QString& database) +{ + UNUSED(database); + return false; +} + +bool CsvExport::exportIndex(const QString& database, const QString& name, const QString& ddl, SqliteCreateIndexPtr createIndex) +{ + UNUSED(database); + UNUSED(name); + UNUSED(ddl); + UNUSED(createIndex); + if (isTableExport()) + return true; + + return false; +} + +bool CsvExport::exportTrigger(const QString& database, const QString& name, const QString& ddl, SqliteCreateTriggerPtr createTrigger) +{ + UNUSED(database); + UNUSED(name); + UNUSED(ddl); + UNUSED(createTrigger); + if (isTableExport()) + return true; + + return false; +} + +bool CsvExport::exportView(const QString& database, const QString& name, const QString& ddl, SqliteCreateViewPtr createView) +{ + UNUSED(database); + UNUSED(name); + UNUSED(ddl); + UNUSED(createView); + return false; +} + +void CsvExport::defineCsvFormat() +{ + format = CsvFormat(); + format.rowSeparator = '\n'; + + switch (cfg.CsvExport.Separator.get()) + { + case 0: + format.columnSeparator = ','; + break; + case 1: + format.columnSeparator = ';'; + break; + case 2: + format.columnSeparator = '\t'; + break; + case 3: + format.columnSeparator = ' '; + break; + default: + format.columnSeparator = cfg.CsvExport.CustomSeparator.get(); + break; + } +} + + +bool CsvExport::init() +{ + Q_INIT_RESOURCE(csvexport); + return GenericExportPlugin::init(); +} + +void CsvExport::deinit() +{ + Q_CLEANUP_RESOURCE(csvexport); +} diff --git a/Plugins/CsvExport/csvexport.h b/Plugins/CsvExport/csvexport.h new file mode 100644 index 0000000..7ecde7c --- /dev/null +++ b/Plugins/CsvExport/csvexport.h @@ -0,0 +1,56 @@ +#ifndef CSVEXPORT_H +#define CSVEXPORT_H + +#include "csvexport_global.h" +#include "plugins/genericexportplugin.h" +#include "config_builder.h" +#include "csvformat.h" + +CFG_CATEGORIES(CsvExportConfig, + CFG_CATEGORY(CsvExport, + CFG_ENTRY(bool, ColumnsInFirstRow, false) + CFG_ENTRY(int, Separator, 0) + CFG_ENTRY(QString, CustomSeparator, QString()) + CFG_ENTRY(QString, NullValueString, QString()) + ) +) + +class CSVEXPORTSHARED_EXPORT CsvExport : public GenericExportPlugin +{ + Q_OBJECT + SQLITESTUDIO_PLUGIN("csvexport.json") + + public: + CsvExport(); + + QString getFormatName() const; + ExportManager::StandardConfigFlags standardOptionsToEnable() const; + ExportManager::ExportModes getSupportedModes() const; + QString getExportConfigFormName() const; + CfgMain* getConfig(); + void validateOptions(); + QString defaultFileExtension() const; + bool beforeExportQueryResults(const QString& query, QList<QueryExecutor::ResultColumnPtr>& columns, + const QHash<ExportManager::ExportProviderFlag,QVariant> providedData); + bool exportQueryResultsRow(SqlResultsRowPtr row); + bool exportTable(const QString& database, const QString& table, const QStringList& columnNames, const QString& ddl, SqliteCreateTablePtr createTable, + const QHash<ExportManager::ExportProviderFlag,QVariant> providedData); + bool exportVirtualTable(const QString& database, const QString& table, const QStringList& columnNames, const QString& ddl, SqliteCreateVirtualTablePtr createTable, + const QHash<ExportManager::ExportProviderFlag,QVariant> providedData); + bool exportTableRow(SqlResultsRowPtr data); + bool beforeExportDatabase(const QString& database); + bool exportIndex(const QString& database, const QString& name, const QString& ddl, SqliteCreateIndexPtr createIndex); + bool exportTrigger(const QString& database, const QString& name, const QString& ddl, SqliteCreateTriggerPtr createTrigger); + bool exportView(const QString& database, const QString& name, const QString& ddl, SqliteCreateViewPtr createView); + bool init(); + void deinit(); + + private: + bool exportTable(const QStringList& columnNames); + void defineCsvFormat(); + + CFG_LOCAL(CsvExportConfig, cfg) + CsvFormat format; +}; + +#endif // CSVEXPORT_H diff --git a/Plugins/CsvExport/csvexport.json b/Plugins/CsvExport/csvexport.json new file mode 100644 index 0000000..57def5c --- /dev/null +++ b/Plugins/CsvExport/csvexport.json @@ -0,0 +1,7 @@ +{ + "type": "ExportPlugin", + "title": "CSV export", + "description": "Provides CSV format for exporting", + "version": 10000, + "author": "SalSoft" +} diff --git a/Plugins/CsvExport/csvexport.qrc b/Plugins/CsvExport/csvexport.qrc new file mode 100644 index 0000000..21d7213 --- /dev/null +++ b/Plugins/CsvExport/csvexport.qrc @@ -0,0 +1,5 @@ +<RCC> + <qresource prefix="/forms"> + <file>CsvExport.ui</file> + </qresource> +</RCC> diff --git a/Plugins/CsvExport/csvexport_global.h b/Plugins/CsvExport/csvexport_global.h new file mode 100644 index 0000000..8bdf173 --- /dev/null +++ b/Plugins/CsvExport/csvexport_global.h @@ -0,0 +1,12 @@ +#ifndef CSVEXPORT_GLOBAL_H +#define CSVEXPORT_GLOBAL_H + +#include <QtCore/qglobal.h> + +#if defined(CSVEXPORT_LIBRARY) +# define CSVEXPORTSHARED_EXPORT Q_DECL_EXPORT +#else +# define CSVEXPORTSHARED_EXPORT Q_DECL_IMPORT +#endif + +#endif // CSVEXPORT_GLOBAL_H |
