diff options
-rw-r--r-- | core/downloadfromdcthread.cpp | 11 | ||||
-rw-r--r-- | core/downloadfromdcthread.h | 6 | ||||
-rw-r--r-- | core/pref.h | 1 | ||||
-rw-r--r-- | core/subsurface-qt/SettingsObjectWrapper.cpp | 18 | ||||
-rw-r--r-- | core/subsurface-qt/SettingsObjectWrapper.h | 4 | ||||
-rw-r--r-- | desktop-widgets/btdeviceselectiondialog.cpp | 14 | ||||
-rw-r--r-- | desktop-widgets/btdeviceselectiondialog.h | 2 | ||||
-rw-r--r-- | desktop-widgets/configuredivecomputerdialog.cpp | 8 | ||||
-rw-r--r-- | desktop-widgets/downloadfromdivecomputer.cpp | 16 |
9 files changed, 69 insertions, 11 deletions
diff --git a/core/downloadfromdcthread.cpp b/core/downloadfromdcthread.cpp index e01de2881..a634b45aa 100644 --- a/core/downloadfromdcthread.cpp +++ b/core/downloadfromdcthread.cpp @@ -56,6 +56,7 @@ void DownloadThread::run() dcs->setVendor(internalData->vendor); dcs->setProduct(internalData->product); dcs->setDevice(internalData->devname); + dcs->setDeviceName(m_data->devBluetoothName()); } static void fill_supported_mobile_list() @@ -239,6 +240,11 @@ QString DCDeviceData::devName() const return data.devname; } +QString DCDeviceData::devBluetoothName() const +{ + return m_devBluetoothName; +} + QString DCDeviceData::descriptor() const { return ""; @@ -284,6 +290,11 @@ void DCDeviceData::setDevName(const QString& devName) data.devname = strdup(qPrintable(devName)); } +void DCDeviceData::setDevBluetoothName(const QString& name) +{ + m_devBluetoothName = name; +} + void DCDeviceData::setBluetoothMode(bool mode) { data.bluetooth_mode = mode; diff --git a/core/downloadfromdcthread.h b/core/downloadfromdcthread.h index ff4b8f39c..e95cb7a98 100644 --- a/core/downloadfromdcthread.h +++ b/core/downloadfromdcthread.h @@ -19,6 +19,7 @@ class DCDeviceData : public QObject { Q_PROPERTY(QString product READ product WRITE setProduct) Q_PROPERTY(bool bluetoothMode READ bluetoothMode WRITE setBluetoothMode) Q_PROPERTY(QString devName READ devName WRITE setDevName) + Q_PROPERTY(QString devBluetoothName READ devBluetoothName WRITE setDevBluetoothName) Q_PROPERTY(QString descriptor READ descriptor) Q_PROPERTY(bool forceDownload READ forceDownload WRITE setForceDownload) Q_PROPERTY(bool createNewTrip READ createNewTrip WRITE setCreateNewTrip) @@ -34,6 +35,7 @@ public: QString vendor() const; QString product() const; QString devName() const; + QString devBluetoothName() const; QString descriptor() const; bool bluetoothMode() const; bool forceDownload() const; @@ -57,6 +59,7 @@ public slots: void setVendor(const QString& vendor); void setProduct(const QString& product); void setDevName(const QString& devName); + void setDevBluetoothName(const QString& devBluetoothName); void setBluetoothMode(bool mode); void setForceDownload(bool force); void setCreateNewTrip(bool create); @@ -67,6 +70,9 @@ public slots: private: static DCDeviceData *m_instance; device_data_t data; + + // Bluetooth name is managed outside of libdivecomputer + QString m_devBluetoothName; }; class DownloadThread : public QThread { diff --git a/core/pref.h b/core/pref.h index 2d835dda1..d00d766a5 100644 --- a/core/pref.h +++ b/core/pref.h @@ -54,6 +54,7 @@ typedef struct { char *vendor; char *product; char *device; + char *device_name; int download_mode; } dive_computer_prefs_t; diff --git a/core/subsurface-qt/SettingsObjectWrapper.cpp b/core/subsurface-qt/SettingsObjectWrapper.cpp index ed4b556d1..d1146b7b6 100644 --- a/core/subsurface-qt/SettingsObjectWrapper.cpp +++ b/core/subsurface-qt/SettingsObjectWrapper.cpp @@ -29,6 +29,11 @@ QString DiveComputerSettings::dc_device() const return prefs.dive_computer.device; } +QString DiveComputerSettings::dc_device_name() const +{ + return prefs.dive_computer.device_name; +} + int DiveComputerSettings::downloadMode() const { return prefs.dive_computer.download_mode; @@ -70,6 +75,18 @@ void DiveComputerSettings::setDevice(const QString& device) prefs.dive_computer.device = copy_string(qPrintable(device)); } +void DiveComputerSettings::setDeviceName(const QString& device_name) +{ + if (device_name == prefs.dive_computer.device_name) + return; + + QSettings s; + s.beginGroup(group); + s.setValue("dive_computer_device_name", device_name); + free(prefs.dive_computer.device_name); + prefs.dive_computer.device_name = copy_string(qPrintable(device_name)); +} + void DiveComputerSettings::setDownloadMode(int mode) { if (mode == prefs.dive_computer.download_mode) @@ -2333,6 +2350,7 @@ void SettingsObjectWrapper::load() GET_TXT("dive_computer_vendor",dive_computer.vendor); GET_TXT("dive_computer_product", dive_computer.product); GET_TXT("dive_computer_device", dive_computer.device); + GET_TXT("dive_computer_device_name", dive_computer.device_name); GET_INT("dive_computer_download_mode", dive_computer.download_mode); s.endGroup(); diff --git a/core/subsurface-qt/SettingsObjectWrapper.h b/core/subsurface-qt/SettingsObjectWrapper.h index d16d3fa27..19cfcdd50 100644 --- a/core/subsurface-qt/SettingsObjectWrapper.h +++ b/core/subsurface-qt/SettingsObjectWrapper.h @@ -18,24 +18,28 @@ class DiveComputerSettings : public QObject { Q_PROPERTY(QString vendor READ dc_vendor WRITE setVendor NOTIFY vendorChanged) Q_PROPERTY(QString product READ dc_product WRITE setProduct NOTIFY productChanged) Q_PROPERTY(QString device READ dc_device WRITE setDevice NOTIFY deviceChanged) + Q_PROPERTY(QString device_name READ dc_device_name WRITE setDeviceName NOTIFY deviceNameChanged) Q_PROPERTY(int download_mode READ downloadMode WRITE setDownloadMode NOTIFY downloadModeChanged) public: DiveComputerSettings(QObject *parent); QString dc_vendor() const; QString dc_product() const; QString dc_device() const; + QString dc_device_name() const; int downloadMode() const; public slots: void setVendor(const QString& vendor); void setProduct(const QString& product); void setDevice(const QString& device); + void setDeviceName(const QString& device_name); void setDownloadMode(int mode); signals: void vendorChanged(const QString& vendor); void productChanged(const QString& product); void deviceChanged(const QString& device); + void deviceNameChanged(const QString& device_name); void downloadModeChanged(int mode); private: const QString group = QStringLiteral("DiveComputer"); diff --git a/desktop-widgets/btdeviceselectiondialog.cpp b/desktop-widgets/btdeviceselectiondialog.cpp index 1b43c8471..de3e383c5 100644 --- a/desktop-widgets/btdeviceselectiondialog.cpp +++ b/desktop-widgets/btdeviceselectiondialog.cpp @@ -466,6 +466,20 @@ QString BtDeviceSelectionDialog::getSelectedDeviceName() return QString(); } +QString BtDeviceSelectionDialog::getSelectedDeviceText() +{ + return formatDeviceText(getSelectedDeviceAddress(), getSelectedDeviceName()); +} + +QString BtDeviceSelectionDialog::formatDeviceText(const QString &address, const QString &name) +{ + if (address.isEmpty()) + return name; + if (name.isEmpty()) + return address; + return QString("%1 (%2)").arg(name, address); +} + void BtDeviceSelectionDialog::updateLocalDeviceInformation() { #if defined(Q_OS_WIN) diff --git a/desktop-widgets/btdeviceselectiondialog.h b/desktop-widgets/btdeviceselectiondialog.h index e883278ce..67d1ef0b9 100644 --- a/desktop-widgets/btdeviceselectiondialog.h +++ b/desktop-widgets/btdeviceselectiondialog.h @@ -59,6 +59,8 @@ public: ~BtDeviceSelectionDialog(); QString getSelectedDeviceAddress(); QString getSelectedDeviceName(); + QString getSelectedDeviceText(); + static QString formatDeviceText(const QString &address, const QString &name); private slots: void on_changeDeviceState_clicked(); diff --git a/desktop-widgets/configuredivecomputerdialog.cpp b/desktop-widgets/configuredivecomputerdialog.cpp index 24fe63c3e..dd9913da4 100644 --- a/desktop-widgets/configuredivecomputerdialog.cpp +++ b/desktop-widgets/configuredivecomputerdialog.cpp @@ -904,7 +904,9 @@ void ConfigureDiveComputerDialog::configError(QString err) void ConfigureDiveComputerDialog::getDeviceData() { - device_data.devname = strdup(ui.device->currentText().toUtf8().data()); + QString device = ui.bluetoothMode && btDeviceSelectionDialog ? + btDeviceSelectionDialog->getSelectedDeviceAddress() : ui.device->currentText(); + device_data.devname = strdup(device.toUtf8().data()); device_data.vendor = strdup(selected_vendor.toUtf8().data()); device_data.product = strdup(selected_product.toUtf8().data()); @@ -913,6 +915,8 @@ void ConfigureDiveComputerDialog::getDeviceData() auto dc = SettingsObjectWrapper::instance()->dive_computer_settings; dc->setDevice(device_data.devname); + if (ui.bluetoothMode && btDeviceSelectionDialog) + dc->setDeviceName(btDeviceSelectionDialog->getSelectedDeviceName()); } void ConfigureDiveComputerDialog::on_cancel_clicked() @@ -1488,7 +1492,7 @@ void ConfigureDiveComputerDialog::selectRemoteBluetoothDevice() void ConfigureDiveComputerDialog::bluetoothSelectionDialogIsFinished(int result) { if (result == QDialog::Accepted) { - ui.device->setCurrentText(btDeviceSelectionDialog->getSelectedDeviceAddress()); + ui.device->setCurrentText(btDeviceSelectionDialog->getSelectedDeviceText()); device_data.bluetooth_mode = true; ui.progressBar->setFormat("Connecting to device..."); diff --git a/desktop-widgets/downloadfromdivecomputer.cpp b/desktop-widgets/downloadfromdivecomputer.cpp index f4506fd4c..0dd98d35a 100644 --- a/desktop-widgets/downloadfromdivecomputer.cpp +++ b/desktop-widgets/downloadfromdivecomputer.cpp @@ -84,14 +84,13 @@ DownloadFromDCWidget::DownloadFromDCWidget(QWidget *parent, Qt::WindowFlags f) : if (!dc->dc_product().isEmpty()) ui.product->setCurrentIndex(ui.product->findText(dc->dc_product())); } - if (!dc->dc_device().isEmpty()) - ui.device->setEditText(dc->dc_device()); updateState(INITIAL); ui.ok->setEnabled(false); ui.downloadCancelRetryButton->setEnabled(true); ui.downloadCancelRetryButton->setText(tr("Download")); + QString deviceText = dc->dc_device(); #if defined(BT_SUPPORT) && defined(SSRF_CUSTOM_IO) ui.bluetoothMode->setText(tr("Choose Bluetooth download mode")); ui.bluetoothMode->setChecked(dc->downloadMode() == DC_TRANSPORT_BLUETOOTH); @@ -99,10 +98,14 @@ DownloadFromDCWidget::DownloadFromDCWidget(QWidget *parent, Qt::WindowFlags f) : connect(ui.bluetoothMode, SIGNAL(stateChanged(int)), this, SLOT(enableBluetoothMode(int))); connect(ui.chooseBluetoothDevice, SIGNAL(clicked()), this, SLOT(selectRemoteBluetoothDevice())); ui.chooseBluetoothDevice->setEnabled(ui.bluetoothMode->isChecked()); + if (ui.bluetoothMode->isChecked()) + deviceText = BtDeviceSelectionDialog::formatDeviceText(dc->dc_device(), dc->dc_device_name()); #else ui.bluetoothMode->hide(); ui.chooseBluetoothDevice->hide(); #endif + if (!deviceText.isEmpty()) + ui.device->setEditText(deviceText); } void DownloadFromDCWidget::updateProgressBar() @@ -291,6 +294,7 @@ void DownloadFromDCWidget::on_downloadCancelRetryButton_clicked() if (data->bluetoothMode() && btDeviceSelectionDialog != NULL) { // Get the selected device address data->setDevName(btDeviceSelectionDialog->getSelectedDeviceAddress()); + data->setDevBluetoothName(btDeviceSelectionDialog->getSelectedDeviceName()); } else // this breaks an "else if" across lines... not happy... #endif @@ -544,13 +548,7 @@ void DownloadFromDCWidget::bluetoothSelectionDialogIsFinished(int result) { if (result == QDialog::Accepted) { /* Make the selected Bluetooth device default */ - QString selectedDeviceName = btDeviceSelectionDialog->getSelectedDeviceName(); - - if (selectedDeviceName.isEmpty()) { - ui.device->setCurrentText(btDeviceSelectionDialog->getSelectedDeviceAddress()); - } else { - ui.device->setCurrentText(selectedDeviceName); - } + ui.device->setEditText(btDeviceSelectionDialog->getSelectedDeviceText()); } else if (result == QDialog::Rejected){ /* Disable Bluetooth download mode */ ui.bluetoothMode->setChecked(false); |