diff options
-rw-r--r-- | libdivecomputer.c | 14 | ||||
-rw-r--r-- | libdivecomputer.h | 4 | ||||
-rw-r--r-- | qt-ui/downloadfromdivecomputer.cpp | 49 | ||||
-rw-r--r-- | qt-ui/downloadfromdivecomputer.h | 7 | ||||
-rw-r--r-- | qt-ui/downloadfromdivecomputer.ui | 66 | ||||
-rw-r--r-- | qthelper.cpp | 4 |
6 files changed, 113 insertions, 31 deletions
diff --git a/libdivecomputer.c b/libdivecomputer.c index 2b73a3be8..105a08133 100644 --- a/libdivecomputer.c +++ b/libdivecomputer.c @@ -9,7 +9,6 @@ #include "display.h" #include "libdivecomputer.h" -#include "libdivecomputer/version.h" /* Christ. Libdivecomputer has the worst configuration system ever. */ #ifdef HW_FROG_H @@ -19,6 +18,8 @@ #define NOT_FROG #endif +char *dumpfile_name; +char *logfile_name; const char *progress_bar_text = ""; double progress_bar_fraction = 0.0; @@ -657,7 +658,6 @@ static const char *do_device_import(device_data_t *data) { dc_status_t rc; dc_device_t *device = data->device; - int dump = 0; /* TODO: Enable memory dump from the UI somehow. */ data->model = str_printf("%s %s", data->vendor, data->product); @@ -672,13 +672,12 @@ static const char *do_device_import(device_data_t *data) if (rc != DC_STATUS_SUCCESS) return translate("gettextFromC","Error registering the cancellation handler."); - if (dump) { + if (data->libdc_dump) { dc_buffer_t *buffer = dc_buffer_new (0); rc = dc_device_dump (device, buffer); if (rc == DC_STATUS_SUCCESS) { - /* TODO: Should the filename (and directory) be configurable? */ - FILE* fp = fopen ("subsurface.bin", "wb"); + FILE* fp = subsurface_fopen(dumpfile_name, "wb"); if (fp != NULL) { fwrite (dc_buffer_get_data (buffer), 1, dc_buffer_get_size (buffer), fp); fclose (fp); @@ -722,9 +721,8 @@ const char *do_libdivecomputer_import(device_data_t *data) data->device = NULL; data->context = NULL; - /* TODO: Enable logging from the UI somehow. */ - /* TODO: Should the filename (and directory) be configurable? */ - fp = fopen("subsurface.log", "w"); + if (data->libdc_log) + fp = subsurface_fopen(logfile_name, "w"); rc = dc_context_new(&data->context); if (rc != DC_STATUS_SUCCESS) diff --git a/libdivecomputer.h b/libdivecomputer.h index cc5aa7555..754a98f44 100644 --- a/libdivecomputer.h +++ b/libdivecomputer.h @@ -24,6 +24,8 @@ typedef struct device_data_t { dc_context_t *context; int preexisting; bool force_download; + bool libdc_log; + bool libdc_dump; } device_data_t; const char *do_libdivecomputer_import(device_data_t *data); @@ -32,6 +34,8 @@ const char *do_uemis_import(const char *mountpath, short force_download); extern int import_thread_cancelled; extern const char *progress_bar_text; extern double progress_bar_fraction; +extern char *logfile_name; +extern char *dumpfile_name; #ifdef __cplusplus } diff --git a/qt-ui/downloadfromdivecomputer.cpp b/qt-ui/downloadfromdivecomputer.cpp index e1d761e85..d8983e9aa 100644 --- a/qt-ui/downloadfromdivecomputer.cpp +++ b/qt-ui/downloadfromdivecomputer.cpp @@ -10,6 +10,7 @@ #include <QDebug> #include <QStringListModel> #include <QTimer> +#include <QFileDialog> #include <QMessageBox> struct product { @@ -43,7 +44,7 @@ DownloadFromDCWidget *DownloadFromDCWidget::instance() } DownloadFromDCWidget::DownloadFromDCWidget(QWidget* parent, Qt::WindowFlags f) : - QDialog(parent, f), thread(0), timer(new QTimer(this)), + QDialog(parent, f), thread(0), timer(new QTimer(this)), currentState(INITIAL) { ui.setupUi(this); @@ -54,6 +55,12 @@ DownloadFromDCWidget::DownloadFromDCWidget(QWidget* parent, Qt::WindowFlags f) : fill_device_list(); fill_computer_list(); + ui.chooseDumpFile->setEnabled(ui.dumpToFile->isChecked()); + connect(ui.chooseDumpFile, SIGNAL(clicked()), this, SLOT(pickDumpFile())); + connect(ui.dumpToFile, SIGNAL(stateChanged(int)), this, SLOT(checkDumpFile(int))); + ui.chooseLogFile->setEnabled(ui.logToFile->isChecked()); + connect(ui.chooseLogFile, SIGNAL(clicked()), this, SLOT(pickLogFile())); + connect(ui.logToFile, SIGNAL(stateChanged(int)), this, SLOT(checkLogFile(int))); vendorModel = new QStringListModel(vendorList); ui.vendor->setModel(vendorModel); if (default_dive_computer_vendor) { @@ -248,6 +255,46 @@ bool DownloadFromDCWidget::preferDownloaded() return ui.preferDownloaded->isChecked(); } +void DownloadFromDCWidget::checkLogFile(int state) +{ + ui.chooseLogFile->setEnabled(state == Qt::Checked); + data.libdc_log = (state == Qt::Checked); + if (state == Qt::Checked && logFile.isEmpty()) { + pickLogFile(); + } +} + +void DownloadFromDCWidget::pickLogFile() +{ + QString filename = existing_filename ? : prefs.default_filename; + QFileInfo fi(filename); + filename = fi.absolutePath().append(QDir::separator()).append("subsurface.log"); + logFile = QFileDialog::getSaveFileName(this, tr("Choose file for divecomputer download logfile"), + filename, tr("Log files (*.log)")); + if (!logFile.isEmpty()) + logfile_name = strdup(logFile.toUtf8().data()); +} + +void DownloadFromDCWidget::checkDumpFile(int state) +{ + ui.chooseDumpFile->setEnabled(state == Qt::Checked); + data.libdc_dump = (state == Qt::Checked); + if (state == Qt::Checked && dumpFile.isEmpty()) { + pickDumpFile(); + } +} + +void DownloadFromDCWidget::pickDumpFile() +{ + QString filename = existing_filename ? : prefs.default_filename; + QFileInfo fi(filename); + filename = fi.absolutePath().append(QDir::separator()).append("subsurface.bin"); + dumpFile = QFileDialog::getSaveFileName(this, tr("Choose file for divecomputer binary dump file"), + filename, tr("Dump files (*.bin)")); + if (!dumpFile.isEmpty()) + dumpfile_name = strdup(dumpFile.toUtf8().data()); +} + void DownloadFromDCWidget::reject() { // we don't want the download window being able to close diff --git a/qt-ui/downloadfromdivecomputer.h b/qt-ui/downloadfromdivecomputer.h index 725dc787f..cb09a9f6d 100644 --- a/qt-ui/downloadfromdivecomputer.h +++ b/qt-ui/downloadfromdivecomputer.h @@ -44,6 +44,10 @@ public slots: void onDownloadThreadFinished(); void updateProgressBar(); void runDialog(); + void checkLogFile(int state); + void checkDumpFile(int state); + void pickDumpFile(); + void pickLogFile(); private: void markChildrenAsDisabled(); @@ -63,7 +67,8 @@ private: QStringListModel *productModel; void fill_computer_list(); void fill_device_list(); - + QString logFile; + QString dumpFile; QTimer *timer; public: diff --git a/qt-ui/downloadfromdivecomputer.ui b/qt-ui/downloadfromdivecomputer.ui index 05abd0e40..333ce783c 100644 --- a/qt-ui/downloadfromdivecomputer.ui +++ b/qt-ui/downloadfromdivecomputer.ui @@ -7,7 +7,7 @@ <x>0</x> <y>0</y> <width>331</width> - <height>241</height> + <height>314</height> </rect> </property> <property name="windowTitle"> @@ -19,6 +19,20 @@ </iconset> </property> <layout class="QGridLayout" name="gridLayout"> + <item row="2" column="0" colspan="3"> + <widget class="QLabel" name="label_3"> + <property name="text"> + <string>Device or Mount Point</string> + </property> + </widget> + </item> + <item row="3" column="0" colspan="2"> + <widget class="QComboBox" name="device"> + <property name="editable"> + <bool>true</bool> + </property> + </widget> + </item> <item row="0" column="0"> <widget class="QLabel" name="label"> <property name="text"> @@ -39,20 +53,6 @@ <item row="1" column="1" colspan="2"> <widget class="QComboBox" name="product"/> </item> - <item row="2" column="0" colspan="3"> - <widget class="QLabel" name="label_3"> - <property name="text"> - <string>Device or Mount Point</string> - </property> - </widget> - </item> - <item row="3" column="0" colspan="2"> - <widget class="QComboBox" name="device"> - <property name="editable"> - <bool>true</bool> - </property> - </widget> - </item> <item row="3" column="2"> <widget class="QToolButton" name="search"> <property name="text"> @@ -74,7 +74,7 @@ </property> </widget> </item> - <item row="6" column="0" colspan="3"> + <item row="8" column="0" colspan="3"> <layout class="QHBoxLayout" name="horizontalLayout"> <item> <spacer name="horizontalSpacer"> @@ -105,17 +105,43 @@ </item> </layout> </item> - <item row="7" column="0" colspan="3"> + <item row="9" column="0" colspan="3"> <widget class="QProgressBar" name="progressBar"> <property name="value"> <number>24</number> </property> </widget> </item> + <item row="6" column="0" colspan="2"> + <widget class="QCheckBox" name="logToFile"> + <property name="text"> + <string>Save libdivecomputer logfile</string> + </property> + </widget> + </item> + <item row="7" column="0" colspan="2"> + <widget class="QCheckBox" name="dumpToFile"> + <property name="text"> + <string>Save libdivecomputer dumpfile</string> + </property> + </widget> + </item> + <item row="6" column="2"> + <widget class="QToolButton" name="chooseLogFile"> + <property name="text"> + <string>...</string> + </property> + </widget> + </item> + <item row="7" column="2"> + <widget class="QToolButton" name="chooseDumpFile"> + <property name="text"> + <string>...</string> + </property> + </widget> + </item> </layout> </widget> - <resources> - <include location="../subsurface.qrc"/> - </resources> + <resources/> <connections/> </ui> diff --git a/qthelper.cpp b/qthelper.cpp index 111e01520..9587fcf3f 100644 --- a/qthelper.cpp +++ b/qthelper.cpp @@ -1,6 +1,9 @@ #include "qthelper.h" #include "qt-ui/mainwindow.h" +#include "qt-gui.h" #include <QRegExp> +#include <QDir> +#include <QFileDialog> #include <QDebug> #define tr(_arg) mainWindow()->information()->tr(_arg) @@ -197,4 +200,3 @@ QList< int > getDivesInTrip ( dive_trip_t* trip ) } return ret; } - |