2017-04-27 18:26:05 +00:00
|
|
|
// SPDX-License-Identifier: GPL-2.0
|
2014-05-29 15:54:19 +00:00
|
|
|
#ifndef CONFIGUREDIVECOMPUTERDIALOG_H
|
|
|
|
#define CONFIGUREDIVECOMPUTERDIALOG_H
|
|
|
|
|
|
|
|
#include <QDialog>
|
2014-05-29 16:16:34 +00:00
|
|
|
#include <QStringListModel>
|
2014-10-15 23:13:53 +00:00
|
|
|
#include "ui_configuredivecomputerdialog.h"
|
2016-04-05 05:02:03 +00:00
|
|
|
#include "core/libdivecomputer.h"
|
|
|
|
#include "core/configuredivecomputer.h"
|
2014-10-27 21:12:45 +00:00
|
|
|
#include <QStyledItemDelegate>
|
2014-12-28 18:22:46 +00:00
|
|
|
#include <QNetworkAccessManager>
|
2015-10-26 13:05:27 +00:00
|
|
|
#ifdef BT_SUPPORT
|
2016-04-05 05:02:03 +00:00
|
|
|
#include "desktop-widgets/btdeviceselectiondialog.h"
|
2015-10-26 13:05:27 +00:00
|
|
|
#endif
|
2014-10-27 21:12:45 +00:00
|
|
|
|
2014-12-29 04:56:58 +00:00
|
|
|
class GasSpinBoxItemDelegate : public QStyledItemDelegate {
|
2014-10-27 21:12:46 +00:00
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
enum column_type {
|
|
|
|
PERCENT,
|
|
|
|
DEPTH,
|
2015-09-10 22:13:56 +00:00
|
|
|
SETPOINT,
|
2014-10-27 21:12:46 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
GasSpinBoxItemDelegate(QObject *parent = 0, column_type type = PERCENT);
|
|
|
|
~GasSpinBoxItemDelegate();
|
|
|
|
|
2018-09-29 20:13:44 +00:00
|
|
|
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
|
|
|
|
void setEditorData(QWidget *editor, const QModelIndex &index) const override;
|
|
|
|
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
|
2014-12-29 04:56:58 +00:00
|
|
|
|
2014-10-27 21:12:46 +00:00
|
|
|
private:
|
|
|
|
column_type type;
|
|
|
|
};
|
|
|
|
|
2014-12-29 04:56:58 +00:00
|
|
|
class GasTypeComboBoxItemDelegate : public QStyledItemDelegate {
|
2014-10-27 21:12:45 +00:00
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
enum computer_type {
|
|
|
|
OSTC3,
|
|
|
|
OSTC,
|
|
|
|
};
|
|
|
|
|
|
|
|
GasTypeComboBoxItemDelegate(QObject *parent = 0, computer_type type = OSTC3);
|
|
|
|
~GasTypeComboBoxItemDelegate();
|
|
|
|
|
2018-09-29 20:13:44 +00:00
|
|
|
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
|
|
|
|
void setEditorData(QWidget *editor, const QModelIndex &index) const override;
|
|
|
|
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
|
2014-12-29 04:56:58 +00:00
|
|
|
|
2014-10-27 21:12:45 +00:00
|
|
|
private:
|
|
|
|
computer_type type;
|
|
|
|
};
|
2014-05-30 06:56:27 +00:00
|
|
|
|
2014-12-29 04:56:58 +00:00
|
|
|
class ConfigureDiveComputerDialog : public QDialog {
|
2014-05-29 15:54:19 +00:00
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
public:
|
2024-03-16 08:53:22 +00:00
|
|
|
explicit ConfigureDiveComputerDialog(const QString &filename, QWidget *parent = 0);
|
2014-05-29 15:54:19 +00:00
|
|
|
~ConfigureDiveComputerDialog();
|
|
|
|
|
2014-12-29 04:56:58 +00:00
|
|
|
private
|
|
|
|
slots:
|
2015-05-27 19:19:13 +00:00
|
|
|
void checkLogFile(int state);
|
|
|
|
void pickLogFile();
|
2014-05-30 06:56:27 +00:00
|
|
|
void readSettings();
|
2014-10-17 22:33:47 +00:00
|
|
|
void resetSettings();
|
2014-05-30 06:56:27 +00:00
|
|
|
void configMessage(QString msg);
|
|
|
|
void configError(QString err);
|
2023-06-12 02:27:02 +00:00
|
|
|
void on_close_clicked();
|
2014-06-10 12:03:26 +00:00
|
|
|
void on_saveSettingsPushButton_clicked();
|
computer configuration: use value semantics for DeviceDetails
The memory managements for DeviceDetails was very sketchy.
First of all, sharing a pointer to a structure between threads
seems like a recipe for disaster. Secondly, the structure was
a QObject and when first generated included in the (silly)
Qt object tree, but when generated in the threads it was not.
Clearly, this leaks.
Instead, use value semantics and use local copies of the
structure. I didn't go full length and use std::move to
move the data, because this doesn't work through signals
(which are the wrong abstraction here, but OK) and secondly
I didn't have time to analyze whether the caller still
needs the data after passing it down to the worker thread.
To be able to pass an object through signals, the class
has to be registered in the Qt MetaType system. Super
ugly, but fine for now. Ultimately, this whole thing should
probably be replaced by futures, co-routines, or whatever.
Moreover, this removes the prefix from number of "m_*"
function parameters. By convention, "m_" marks member
variables, which function parameters are not.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
make DeviceDetails a metatype
So that we can pass it as value through the signal/slot system.
(squash with original commit)
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2024-03-16 08:29:54 +00:00
|
|
|
void deviceDetailsReceived(DeviceDetails newDeviceDetails);
|
2014-06-10 15:25:25 +00:00
|
|
|
void reloadValues();
|
2014-06-10 16:19:28 +00:00
|
|
|
void on_backupButton_clicked();
|
|
|
|
|
2014-06-11 06:37:27 +00:00
|
|
|
void on_restoreBackupButton_clicked();
|
|
|
|
|
2014-06-23 15:16:27 +00:00
|
|
|
void on_updateFirmwareButton_clicked();
|
|
|
|
|
2014-07-16 09:04:54 +00:00
|
|
|
void on_DiveComputerList_currentRowChanged(int currentRow);
|
|
|
|
|
2015-09-12 20:37:34 +00:00
|
|
|
void dc_open();
|
|
|
|
void dc_close();
|
|
|
|
|
2015-10-26 13:05:27 +00:00
|
|
|
#ifdef BT_SUPPORT
|
2015-09-12 20:37:35 +00:00
|
|
|
void bluetoothSelectionDialogIsFinished(int result);
|
|
|
|
void selectRemoteBluetoothDevice();
|
|
|
|
#endif
|
|
|
|
|
2014-05-29 15:54:19 +00:00
|
|
|
private:
|
2014-10-15 23:13:53 +00:00
|
|
|
Ui::ConfigureDiveComputerDialog ui;
|
2014-05-29 16:16:34 +00:00
|
|
|
|
2015-05-27 19:19:13 +00:00
|
|
|
QString logFile;
|
2024-03-16 08:53:22 +00:00
|
|
|
QString filename;
|
2015-05-27 19:19:13 +00:00
|
|
|
|
2024-03-16 08:40:28 +00:00
|
|
|
void closeEvent(QCloseEvent *event);
|
|
|
|
|
2014-05-30 06:56:27 +00:00
|
|
|
ConfigureDiveComputer *config;
|
|
|
|
device_data_t device_data;
|
|
|
|
void getDeviceData();
|
|
|
|
|
2018-08-27 17:32:14 +00:00
|
|
|
void fill_device_list(unsigned int transport);
|
2014-06-10 12:03:26 +00:00
|
|
|
|
computer configuration: use value semantics for DeviceDetails
The memory managements for DeviceDetails was very sketchy.
First of all, sharing a pointer to a structure between threads
seems like a recipe for disaster. Secondly, the structure was
a QObject and when first generated included in the (silly)
Qt object tree, but when generated in the threads it was not.
Clearly, this leaks.
Instead, use value semantics and use local copies of the
structure. I didn't go full length and use std::move to
move the data, because this doesn't work through signals
(which are the wrong abstraction here, but OK) and secondly
I didn't have time to analyze whether the caller still
needs the data after passing it down to the worker thread.
To be able to pass an object through signals, the class
has to be registered in the Qt MetaType system. Super
ugly, but fine for now. Ultimately, this whole thing should
probably be replaced by futures, co-routines, or whatever.
Moreover, this removes the prefix from number of "m_*"
function parameters. By convention, "m_" marks member
variables, which function parameters are not.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
make DeviceDetails a metatype
So that we can pass it as value through the signal/slot system.
(squash with original commit)
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2024-03-16 08:29:54 +00:00
|
|
|
DeviceDetails deviceDetails;
|
2014-06-10 16:19:28 +00:00
|
|
|
void populateDeviceDetails();
|
2014-10-12 14:51:30 +00:00
|
|
|
void populateDeviceDetailsOSTC3();
|
2014-10-27 20:54:57 +00:00
|
|
|
void populateDeviceDetailsOSTC();
|
2014-10-12 14:51:30 +00:00
|
|
|
void populateDeviceDetailsSuuntoVyper();
|
2017-04-26 18:49:12 +00:00
|
|
|
void populateDeviceDetailsOSTC4();
|
2014-10-12 14:51:30 +00:00
|
|
|
void reloadValuesOSTC3();
|
2014-10-27 20:54:57 +00:00
|
|
|
void reloadValuesOSTC();
|
2014-10-12 14:51:30 +00:00
|
|
|
void reloadValuesSuuntoVyper();
|
2017-04-26 18:49:12 +00:00
|
|
|
void reloadValuesOSTC4();
|
2014-06-11 08:47:25 +00:00
|
|
|
|
2015-10-26 13:05:27 +00:00
|
|
|
#ifdef BT_SUPPORT
|
2015-09-12 20:37:35 +00:00
|
|
|
BtDeviceSelectionDialog *btDeviceSelectionDialog;
|
2015-10-26 13:05:27 +00:00
|
|
|
#endif
|
2014-12-27 16:31:51 +00:00
|
|
|
};
|
2014-12-26 21:39:53 +00:00
|
|
|
|
2020-10-04 19:44:41 +00:00
|
|
|
class OstcFirmwareCheck : public QObject {
|
2014-12-27 16:31:51 +00:00
|
|
|
Q_OBJECT
|
|
|
|
public:
|
2024-01-15 20:22:20 +00:00
|
|
|
explicit OstcFirmwareCheck(const QString &product);
|
2014-12-28 18:22:46 +00:00
|
|
|
void checkLatest(QWidget *parent, device_data_t *data);
|
2014-12-27 16:31:51 +00:00
|
|
|
public
|
|
|
|
slots:
|
2014-12-28 18:22:46 +00:00
|
|
|
void parseOstcFwVersion(QNetworkReply *reply);
|
2014-12-29 04:56:58 +00:00
|
|
|
void saveOstcFirmware(QNetworkReply *reply);
|
|
|
|
|
2014-12-27 16:31:51 +00:00
|
|
|
private:
|
2014-12-28 18:22:46 +00:00
|
|
|
void upgradeFirmware();
|
|
|
|
device_data_t devData;
|
2014-12-27 16:31:51 +00:00
|
|
|
QString latestFirmwareAvailable;
|
2014-12-28 18:22:46 +00:00
|
|
|
QString latestFirmwareHexFile;
|
|
|
|
QString storeFirmware;
|
|
|
|
QWidget *parent;
|
|
|
|
QNetworkAccessManager manager;
|
2014-05-29 15:54:19 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif // CONFIGUREDIVECOMPUTERDIALOG_H
|