diff options
author | Miika Turkia <miika.turkia@gmail.com> | 2014-04-26 10:55:41 +0300 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2014-04-26 17:20:32 -0700 |
commit | f6be4ccf226da8a8f5326ac742d2cebd83d599e9 (patch) | |
tree | a6a89c6cc77ab6735704cbe32432922f3830372a | |
parent | 2b559225d6ea480e1a5023900b8498b37fadf861 (diff) | |
download | subsurface-f6be4ccf226da8a8f5326ac742d2cebd83d599e9.tar.gz |
Add GUI support for exporting in CSV format
This patch adds an item to File menu to export all dives in CSV format.
Naturally this includes also the code to perform the export.
Fixes #434
Signed-off-by: Miika Turkia <miika.turkia@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r-- | dive.h | 2 | ||||
-rw-r--r-- | qt-ui/divelistview.cpp | 2 | ||||
-rw-r--r-- | qt-ui/mainwindow.cpp | 12 | ||||
-rw-r--r-- | qt-ui/mainwindow.h | 1 | ||||
-rw-r--r-- | qt-ui/mainwindow.ui | 42 | ||||
-rw-r--r-- | save-xml.c | 15 | ||||
-rw-r--r-- | subsurface.qrc | 1 |
7 files changed, 47 insertions, 28 deletions
@@ -702,7 +702,7 @@ extern int parse_manual_file(const char *filename, int separator_index, int unit extern int save_dives(const char *filename); extern int save_dives_logic(const char *filename, bool select_only); extern int save_dive(FILE *f, struct dive *dive); -extern int export_dives_uddf(const char *filename, const bool selected); +extern int export_dives_xslt(const char *filename, const bool selected, const char *export_xslt); struct git_oid; struct git_repository; diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp index a3e2e5cf8..cbabdcffe 100644 --- a/qt-ui/divelistview.cpp +++ b/qt-ui/divelistview.cpp @@ -813,7 +813,7 @@ void DiveListView::exportSelectedDivesAsUDDF() filename = QFileDialog::getSaveFileName(this, tr("Export UDDF File as"), fi.absolutePath(), tr("UDDF files (*.uddf *.UDDF)")); if (!filename.isNull() && !filename.isEmpty()) - export_dives_uddf(filename.toUtf8(), true); + export_dives_xslt(filename.toUtf8(), true, "uddf-export.xslt"); } diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp index f93ad2d23..5e8459ecd 100644 --- a/qt-ui/mainwindow.cpp +++ b/qt-ui/mainwindow.cpp @@ -280,7 +280,17 @@ void MainWindow::on_actionExportUDDF_triggered() QString filename = QFileDialog::getSaveFileName(this, tr("Export UDDF File as"), fi.absolutePath(), tr("UDDF files (*.uddf *.UDDF)")); if (!filename.isNull() && !filename.isEmpty()) - export_dives_uddf(filename.toUtf8(), false); + export_dives_xslt(filename.toUtf8(), false, "uddf-export.xslt"); +} + +void MainWindow::on_actionExport_CSV_triggered() +{ + QFileInfo fi(system_default_filename()); + QString filename = QFileDialog::getSaveFileName(this, tr("Export CSV File as"), fi.absolutePath(), + tr("CSV files (*.csv *.CSV)")); + + if (!filename.isNull() && !filename.isEmpty()) + export_dives_xslt(filename.toUtf8(), false, "xml2csv.xslt"); } void MainWindow::on_actionExportHTMLworldmap_triggered() diff --git a/qt-ui/mainwindow.h b/qt-ui/mainwindow.h index 40d32b5e5..60081e957 100644 --- a/qt-ui/mainwindow.h +++ b/qt-ui/mainwindow.h @@ -91,6 +91,7 @@ slots: void on_actionSaveAs_triggered(); void on_actionClose_triggered(); void on_actionExportUDDF_triggered(); + void on_actionExport_CSV_triggered(); void on_actionExportHTMLworldmap_triggered(); void on_actionPrint_triggered(); void on_actionPreferences_triggered(); diff --git a/qt-ui/mainwindow.ui b/qt-ui/mainwindow.ui index a2621de9a..072d321fc 100644 --- a/qt-ui/mainwindow.ui +++ b/qt-ui/mainwindow.ui @@ -294,14 +294,14 @@ </property> </widget> </item> - <item row="7" column="0"> - <widget class="QToolButton" name="profHR"> - <property name="toolTip"> - <string>Show/hide heart rate</string> - </property> - <property name="text"> - <string>...</string> - </property> + <item row="7" column="0"> + <widget class="QToolButton" name="profHR"> + <property name="toolTip"> + <string>Show/hide heart rate</string> + </property> + <property name="text"> + <string>...</string> + </property> <property name="icon"> <iconset resource="../subsurface.qrc"> <normaloff>:/icon_HR</normaloff>:/icon_HR</iconset> @@ -312,14 +312,14 @@ <height>24</height> </size> </property> - <property name="checkable"> - <bool>true</bool> - </property> - <property name="autoRaise"> - <bool>true</bool> - </property> - </widget> - </item> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> <item row="8" column="0"> <widget class="QToolButton" name="profMod"> <property name="toolTip"> @@ -475,7 +475,7 @@ <bool>true</bool> </property> </widget> - </item> + </item> <item row="0" column="1" rowspan="15"> <widget class="ProfileWidget2" name="newProfile"/> </item> @@ -577,6 +577,7 @@ <addaction name="separator"/> <addaction name="actionClose"/> <addaction name="actionExportUDDF"/> + <addaction name="actionExport_CSV"/> <addaction name="actionExportHTMLworldmap"/> <addaction name="actionPrint"/> <addaction name="actionPreferences"/> @@ -709,7 +710,7 @@ <string>Ctrl+U</string> </property> </action> - <action name="actionExportHTMLworldmap"> + <action name="actionExportHTMLworldmap"> <property name="text"> <string>Export HTML World Map</string> </property> @@ -945,6 +946,11 @@ <string>&Check for Updates</string> </property> </action> + <action name="actionExport_CSV"> + <property name="text"> + <string>Export CSV</string> + </property> + </action> </widget> <customwidgets> <customwidget> diff --git a/save-xml.c b/save-xml.c index 1db2513d0..b61f79440 100644 --- a/save-xml.c +++ b/save-xml.c @@ -618,7 +618,7 @@ int save_dives_logic(const char *filename, const bool select_only) return error; } -int export_dives_uddf(const char *filename, const bool selected) +int export_dives_xslt(const char *filename, const bool selected, const char *export_xslt) { FILE *f; struct membuffer buf = { 0 }; @@ -626,15 +626,16 @@ int export_dives_uddf(const char *filename, const bool selected) xsltStylesheetPtr xslt = NULL; xmlDoc *transformed; + if (!filename) - return report_error("No filename for UDDF export"); + return report_error("No filename for export"); /* Save XML to file and convert it into a memory buffer */ save_dives_buffer(&buf, selected); /* * Parse the memory buffer into XML document and - * transform it to UDDF format, finally dumping + * transform it to selected export format, finally dumping * the XML into a character buffer. */ doc = xmlReadMemory(buf.buffer, buf.len, "divelog", NULL, 0); @@ -642,16 +643,16 @@ int export_dives_uddf(const char *filename, const bool selected) if (!doc) return report_error("Failed to read XML memory"); - /* Convert to UDDF format */ - xslt = get_stylesheet("uddf-export.xslt"); + /* Convert to export format */ + xslt = get_stylesheet(export_xslt); if (!xslt) - return report_error("Failed to open UDDF conversion stylesheet"); + return report_error("Failed to open export conversion stylesheet"); transformed = xsltApplyStylesheet(xslt, doc, NULL); xsltFreeStylesheet(xslt); xmlFreeDoc(doc); - /* Write the transformed XML to file */ + /* Write the transformed export to file */ f = subsurface_fopen(filename, "w"); if (!f) return report_error("Failed to open %s for writing (%s)", filename, strerror(errno)); diff --git a/subsurface.qrc b/subsurface.qrc index 27716b604..d074ea324 100644 --- a/subsurface.qrc +++ b/subsurface.qrc @@ -36,6 +36,7 @@ <file>xslt/SuuntoSDM.xslt</file> <file>xslt/udcf.xslt</file> <file>xslt/uddf-export.xslt</file> + <file>xslt/xml2csv.xslt</file> <file>xslt/uddf.xslt</file> <file>xslt/sensuscsv.xslt</file> <file>xslt/manualcsv2xml.xslt</file> |