2017-04-27 18:26:05 +00:00
// SPDX-License-Identifier: GPL-2.0
2016-04-05 05:02:03 +00:00
# include "desktop-widgets/configuredivecomputerdialog.h"
2014-05-29 15:54:19 +00:00
2022-11-12 11:44:29 +00:00
# include "core/device.h"
2018-07-26 01:40:19 +00:00
# include "core/qthelper.h"
2018-08-15 09:56:17 +00:00
# include "core/settings/qPrefDiveComputer.h"
2018-07-26 01:40:19 +00:00
# include "desktop-widgets/mainwindow.h"
2017-06-15 12:50:49 +00:00
// For fill_computer_list, descriptorLookup
# include "core/downloadfromdcthread.h"
2015-02-09 21:51:31 +00:00
2023-06-12 02:27:02 +00:00
# include <array>
2014-06-10 16:19:28 +00:00
# include <QFileDialog>
# include <QMessageBox>
2014-12-28 18:22:46 +00:00
# include <QNetworkReply>
2015-01-20 21:49:56 +00:00
# include <QProgressDialog>
2018-07-26 01:40:19 +00:00
# include <QSettings>
2014-12-26 21:39:53 +00:00
2014-12-29 04:56:58 +00:00
GasSpinBoxItemDelegate : : GasSpinBoxItemDelegate ( QObject * parent , column_type type ) : QStyledItemDelegate ( parent ) , type ( type )
{
}
GasSpinBoxItemDelegate : : ~ GasSpinBoxItemDelegate ( )
{
}
2014-10-27 21:12:46 +00:00
2018-07-26 01:40:19 +00:00
QWidget * GasSpinBoxItemDelegate : : createEditor ( QWidget * parent , const QStyleOptionViewItem & , const QModelIndex & ) const
2014-10-27 21:12:46 +00:00
{
// Create the spinbox and give it it's settings
QSpinBox * sb = new QSpinBox ( parent ) ;
if ( type = = PERCENT ) {
sb - > setMinimum ( 0 ) ;
sb - > setMaximum ( 100 ) ;
sb - > setSuffix ( " % " ) ;
} else if ( type = = DEPTH ) {
sb - > setMinimum ( 0 ) ;
sb - > setMaximum ( 255 ) ;
2015-09-10 22:13:56 +00:00
sb - > setSuffix ( " m " ) ;
} else if ( type = = SETPOINT ) {
sb - > setMinimum ( 0 ) ;
sb - > setMaximum ( 255 ) ;
sb - > setSuffix ( " cbar " ) ;
2014-10-27 21:12:46 +00:00
}
return sb ;
}
void GasSpinBoxItemDelegate : : setEditorData ( QWidget * editor , const QModelIndex & index ) const
{
2014-12-29 04:56:58 +00:00
if ( QSpinBox * sb = qobject_cast < QSpinBox * > ( editor ) )
2014-10-27 21:12:46 +00:00
sb - > setValue ( index . data ( Qt : : EditRole ) . toInt ( ) ) ;
else
QStyledItemDelegate : : setEditorData ( editor , index ) ;
}
void GasSpinBoxItemDelegate : : setModelData ( QWidget * editor , QAbstractItemModel * model , const QModelIndex & index ) const
{
2014-12-29 04:56:58 +00:00
if ( QSpinBox * sb = qobject_cast < QSpinBox * > ( editor ) )
2014-10-27 21:12:46 +00:00
model - > setData ( index , sb - > value ( ) , Qt : : EditRole ) ;
else
QStyledItemDelegate : : setModelData ( editor , model , index ) ;
}
2014-12-29 04:56:58 +00:00
GasTypeComboBoxItemDelegate : : GasTypeComboBoxItemDelegate ( QObject * parent , computer_type type ) : QStyledItemDelegate ( parent ) , type ( type )
{
}
GasTypeComboBoxItemDelegate : : ~ GasTypeComboBoxItemDelegate ( )
{
}
2014-10-27 21:12:45 +00:00
2018-07-26 01:40:19 +00:00
QWidget * GasTypeComboBoxItemDelegate : : createEditor ( QWidget * parent , const QStyleOptionViewItem & , const QModelIndex & ) const
2014-10-27 21:12:45 +00:00
{
// Create the combobox and populate it
QComboBox * cb = new QComboBox ( parent ) ;
cb - > addItem ( QString ( " Disabled " ) ) ;
if ( type = = OSTC3 ) {
2015-09-10 22:13:55 +00:00
cb - > addItem ( QString ( " First " ) ) ;
2014-10-27 21:12:45 +00:00
cb - > addItem ( QString ( " Travel " ) ) ;
cb - > addItem ( QString ( " Deco " ) ) ;
} else if ( type = = OSTC ) {
cb - > addItem ( QString ( " Active " ) ) ;
2015-09-10 22:13:55 +00:00
cb - > addItem ( QString ( " First " ) ) ;
2014-10-27 21:12:45 +00:00
}
return cb ;
}
void GasTypeComboBoxItemDelegate : : setEditorData ( QWidget * editor , const QModelIndex & index ) const
{
2014-12-29 04:56:58 +00:00
if ( QComboBox * cb = qobject_cast < QComboBox * > ( editor ) )
2014-10-27 21:12:45 +00:00
cb - > setCurrentIndex ( index . data ( Qt : : EditRole ) . toInt ( ) ) ;
else
QStyledItemDelegate : : setEditorData ( editor , index ) ;
}
void GasTypeComboBoxItemDelegate : : setModelData ( QWidget * editor , QAbstractItemModel * model , const QModelIndex & index ) const
{
2014-12-29 04:56:58 +00:00
if ( QComboBox * cb = qobject_cast < QComboBox * > ( editor ) )
2014-10-27 21:12:45 +00:00
model - > setData ( index , cb - > currentIndex ( ) , Qt : : EditRole ) ;
else
QStyledItemDelegate : : setModelData ( editor , model , index ) ;
}
2023-06-13 03:32:27 +00:00
struct DiveComputerEntry {
QString vendor ;
QString product ;
unsigned int transport ;
bool fwUpgradePossible ;
2023-07-11 11:57:16 +00:00
bool forcedFirmwareUpgradeSupported ;
2023-06-12 02:27:02 +00:00
} ;
2023-06-18 01:57:56 +00:00
//WARNING: Do not edit this list or even just change its order without
// making corresponding changes to the `DiveComputerList` element
// in `configuredivecomputerdialog.ui` or this functionality will stop working.
static const DiveComputerEntry supportedDiveComputers [ ] = {
2023-07-11 11:57:16 +00:00
{ " Heinrichs Weikamp " , " OSTC 2N " , DC_TRANSPORT_SERIAL , true , false } ,
{ " Heinrichs Weikamp " , " OSTC Plus " , DC_TRANSPORT_BLUETOOTH , true , false } ,
{ " Heinrichs Weikamp " , " OSTC 4 " , DC_TRANSPORT_BLUETOOTH , true , true } ,
{ " Suunto " , " Vyper " , DC_TRANSPORT_SERIAL , false , false } ,
2023-06-18 01:57:56 +00:00
} ;
2023-06-12 02:27:02 +00:00
2024-03-16 08:53:22 +00:00
ConfigureDiveComputerDialog : : ConfigureDiveComputerDialog ( const QString & filename , QWidget * parent ) : QDialog ( parent ) ,
filename ( filename ) ,
config ( 0 )
2015-10-26 13:05:27 +00:00
# ifdef BT_SUPPORT
2024-03-16 08:53:22 +00:00
, btDeviceSelectionDialog ( 0 )
2015-10-26 13:05:27 +00:00
# endif
2014-05-29 15:54:19 +00:00
{
2014-10-15 23:13:53 +00:00
ui . setupUi ( this ) ;
2014-05-29 16:16:34 +00:00
2014-12-29 04:44:31 +00:00
config = new ConfigureDiveComputer ( ) ;
2020-10-04 19:44:41 +00:00
connect ( config , & ConfigureDiveComputer : : progress , ui . progressBar , & QProgressBar : : setValue ) ;
connect ( config , & ConfigureDiveComputer : : error , this , & ConfigureDiveComputerDialog : : configError ) ;
connect ( config , & ConfigureDiveComputer : : message , this , & ConfigureDiveComputerDialog : : configMessage ) ;
connect ( config , & ConfigureDiveComputer : : deviceDetailsChanged , this , & ConfigureDiveComputerDialog : : deviceDetailsReceived ) ;
connect ( ui . retrieveDetails , & QPushButton : : clicked , this , & ConfigureDiveComputerDialog : : readSettings ) ;
connect ( ui . resetButton , & QPushButton : : clicked , this , & ConfigureDiveComputerDialog : : resetSettings ) ;
connect ( ui . resetButton_4 , & QPushButton : : clicked , this , & ConfigureDiveComputerDialog : : resetSettings ) ;
2015-05-27 19:19:13 +00:00
ui . chooseLogFile - > setEnabled ( ui . logToFile - > isChecked ( ) ) ;
2020-10-04 19:44:41 +00:00
connect ( ui . chooseLogFile , & QToolButton : : clicked , this , & ConfigureDiveComputerDialog : : pickLogFile ) ;
connect ( ui . logToFile , & QCheckBox : : stateChanged , this , & ConfigureDiveComputerDialog : : checkLogFile ) ;
connect ( ui . connectButton , & QPushButton : : clicked , this , & ConfigureDiveComputerDialog : : dc_open ) ;
connect ( ui . disconnectButton , & QPushButton : : clicked , this , & ConfigureDiveComputerDialog : : dc_close ) ;
2015-10-26 13:05:27 +00:00
# ifdef BT_SUPPORT
2023-06-12 02:27:02 +00:00
connect ( ui . connectBluetoothButton , & QPushButton : : clicked , this , & ConfigureDiveComputerDialog : : selectRemoteBluetoothDevice ) ;
2015-09-12 20:37:35 +00:00
# else
2023-06-12 02:27:02 +00:00
ui . connectBluetoothButton - > setVisible ( false ) ;
2015-09-12 20:37:35 +00:00
# endif
2014-05-30 06:56:27 +00:00
2014-06-11 08:47:25 +00:00
memset ( & device_data , 0 , sizeof ( device_data ) ) ;
2014-05-29 16:16:34 +00:00
fill_computer_list ( ) ;
2014-05-30 06:56:27 +00:00
2023-06-12 02:27:02 +00:00
unsigned int selectedDiveComputerIndex = 0 ;
2023-06-18 01:57:56 +00:00
const auto it = std : : find_if ( std : : begin ( supportedDiveComputers ) , std : : end ( supportedDiveComputers ) , [ ] ( const DiveComputerEntry & entry ) {
return entry . vendor = = qPrefDiveComputer : : vendor ( ) & & entry . product = = qPrefDiveComputer : : product ( ) ;
} ) ;
if ( it ! = std : : end ( supportedDiveComputers ) ) {
selectedDiveComputerIndex = it - std : : begin ( supportedDiveComputers ) ;
2023-06-12 02:27:02 +00:00
}
ui . DiveComputerList - > setCurrentRow ( selectedDiveComputerIndex ) ;
on_DiveComputerList_currentRowChanged ( selectedDiveComputerIndex ) ;
QString deviceText = qPrefDiveComputer : : device ( ) ;
if ( ! deviceText . isEmpty ( ) ) {
# if defined(BT_SUPPORT)
if ( isBluetoothAddress ( deviceText ) ) {
deviceText = BtDeviceSelectionDialog : : formatDeviceText ( deviceText , qPrefDiveComputer : : device_name ( ) ) ;
}
# endif
ui . device - > setEditText ( deviceText ) ;
}
2014-10-15 23:13:54 +00:00
2014-10-27 21:12:46 +00:00
ui . ostc3GasTable - > setItemDelegateForColumn ( 1 , new GasSpinBoxItemDelegate ( this , GasSpinBoxItemDelegate : : PERCENT ) ) ;
ui . ostc3GasTable - > setItemDelegateForColumn ( 2 , new GasSpinBoxItemDelegate ( this , GasSpinBoxItemDelegate : : PERCENT ) ) ;
2014-10-27 21:12:45 +00:00
ui . ostc3GasTable - > setItemDelegateForColumn ( 3 , new GasTypeComboBoxItemDelegate ( this , GasTypeComboBoxItemDelegate : : OSTC3 ) ) ;
2014-10-27 21:12:46 +00:00
ui . ostc3GasTable - > setItemDelegateForColumn ( 4 , new GasSpinBoxItemDelegate ( this , GasSpinBoxItemDelegate : : DEPTH ) ) ;
2014-10-27 21:12:45 +00:00
ui . ostc3DilTable - > setItemDelegateForColumn ( 3 , new GasTypeComboBoxItemDelegate ( this , GasTypeComboBoxItemDelegate : : OSTC3 ) ) ;
2014-10-27 21:12:46 +00:00
ui . ostc3DilTable - > setItemDelegateForColumn ( 4 , new GasSpinBoxItemDelegate ( this , GasSpinBoxItemDelegate : : DEPTH ) ) ;
2015-09-10 22:13:56 +00:00
ui . ostc3SetPointTable - > setItemDelegateForColumn ( 1 , new GasSpinBoxItemDelegate ( this , GasSpinBoxItemDelegate : : SETPOINT ) ) ;
ui . ostc3SetPointTable - > setItemDelegateForColumn ( 2 , new GasSpinBoxItemDelegate ( this , GasSpinBoxItemDelegate : : DEPTH ) ) ;
2014-10-27 21:12:46 +00:00
ui . ostcGasTable - > setItemDelegateForColumn ( 1 , new GasSpinBoxItemDelegate ( this , GasSpinBoxItemDelegate : : PERCENT ) ) ;
ui . ostcGasTable - > setItemDelegateForColumn ( 2 , new GasSpinBoxItemDelegate ( this , GasSpinBoxItemDelegate : : PERCENT ) ) ;
2014-10-27 21:12:45 +00:00
ui . ostcGasTable - > setItemDelegateForColumn ( 3 , new GasTypeComboBoxItemDelegate ( this , GasTypeComboBoxItemDelegate : : OSTC ) ) ;
2014-10-27 21:12:46 +00:00
ui . ostcGasTable - > setItemDelegateForColumn ( 4 , new GasSpinBoxItemDelegate ( this , GasSpinBoxItemDelegate : : DEPTH ) ) ;
2014-10-27 21:12:45 +00:00
ui . ostcDilTable - > setItemDelegateForColumn ( 3 , new GasTypeComboBoxItemDelegate ( this , GasTypeComboBoxItemDelegate : : OSTC ) ) ;
2014-10-27 21:12:46 +00:00
ui . ostcDilTable - > setItemDelegateForColumn ( 4 , new GasSpinBoxItemDelegate ( this , GasSpinBoxItemDelegate : : DEPTH ) ) ;
2015-09-10 22:13:56 +00:00
ui . ostcSetPointTable - > setItemDelegateForColumn ( 1 , new GasSpinBoxItemDelegate ( this , GasSpinBoxItemDelegate : : SETPOINT ) ) ;
ui . ostcSetPointTable - > setItemDelegateForColumn ( 2 , new GasSpinBoxItemDelegate ( this , GasSpinBoxItemDelegate : : DEPTH ) ) ;
2017-02-04 07:58:27 +00:00
ui . ostc4GasTable - > setItemDelegateForColumn ( 1 , new GasSpinBoxItemDelegate ( this , GasSpinBoxItemDelegate : : PERCENT ) ) ;
ui . ostc4GasTable - > setItemDelegateForColumn ( 2 , new GasSpinBoxItemDelegate ( this , GasSpinBoxItemDelegate : : PERCENT ) ) ;
ui . ostc4GasTable - > setItemDelegateForColumn ( 3 , new GasTypeComboBoxItemDelegate ( this , GasTypeComboBoxItemDelegate : : OSTC3 ) ) ;
ui . ostc4GasTable - > setItemDelegateForColumn ( 4 , new GasSpinBoxItemDelegate ( this , GasSpinBoxItemDelegate : : DEPTH ) ) ;
ui . ostc4DilTable - > setItemDelegateForColumn ( 3 , new GasTypeComboBoxItemDelegate ( this , GasTypeComboBoxItemDelegate : : OSTC3 ) ) ;
ui . ostc4DilTable - > setItemDelegateForColumn ( 4 , new GasSpinBoxItemDelegate ( this , GasSpinBoxItemDelegate : : DEPTH ) ) ;
ui . ostc4SetPointTable - > setItemDelegateForColumn ( 1 , new GasSpinBoxItemDelegate ( this , GasSpinBoxItemDelegate : : SETPOINT ) ) ;
ui . ostc4SetPointTable - > setItemDelegateForColumn ( 2 , new GasSpinBoxItemDelegate ( this , GasSpinBoxItemDelegate : : DEPTH ) ) ;
2014-10-27 21:12:45 +00:00
2014-10-15 23:13:54 +00:00
QSettings settings ;
settings . beginGroup ( " ConfigureDiveComputerDialog " ) ;
settings . beginGroup ( " ostc3GasTable " ) ;
for ( int i = 0 ; i < ui . ostc3GasTable - > columnCount ( ) ; i + + ) {
2014-12-29 04:56:58 +00:00
QVariant width = settings . value ( QString ( " colwidth%1 " ) . arg ( i ) ) ;
2014-10-15 23:13:54 +00:00
if ( width . isValid ( ) )
ui . ostc3GasTable - > setColumnWidth ( i , width . toInt ( ) ) ;
}
settings . endGroup ( ) ;
settings . beginGroup ( " ostc3DilTable " ) ;
for ( int i = 0 ; i < ui . ostc3DilTable - > columnCount ( ) ; i + + ) {
2014-12-29 04:56:58 +00:00
QVariant width = settings . value ( QString ( " colwidth%1 " ) . arg ( i ) ) ;
2014-10-15 23:13:54 +00:00
if ( width . isValid ( ) )
ui . ostc3DilTable - > setColumnWidth ( i , width . toInt ( ) ) ;
}
settings . endGroup ( ) ;
settings . beginGroup ( " ostc3SetPointTable " ) ;
for ( int i = 0 ; i < ui . ostc3SetPointTable - > columnCount ( ) ; i + + ) {
2014-12-29 04:56:58 +00:00
QVariant width = settings . value ( QString ( " colwidth%1 " ) . arg ( i ) ) ;
2014-10-15 23:13:54 +00:00
if ( width . isValid ( ) )
ui . ostc3SetPointTable - > setColumnWidth ( i , width . toInt ( ) ) ;
}
settings . endGroup ( ) ;
2014-10-27 20:54:57 +00:00
settings . beginGroup ( " ostcGasTable " ) ;
for ( int i = 0 ; i < ui . ostcGasTable - > columnCount ( ) ; i + + ) {
2014-12-29 04:56:58 +00:00
QVariant width = settings . value ( QString ( " colwidth%1 " ) . arg ( i ) ) ;
2014-10-27 20:54:57 +00:00
if ( width . isValid ( ) )
ui . ostcGasTable - > setColumnWidth ( i , width . toInt ( ) ) ;
}
settings . endGroup ( ) ;
settings . beginGroup ( " ostcDilTable " ) ;
for ( int i = 0 ; i < ui . ostcDilTable - > columnCount ( ) ; i + + ) {
2014-12-29 04:56:58 +00:00
QVariant width = settings . value ( QString ( " colwidth%1 " ) . arg ( i ) ) ;
2014-10-27 20:54:57 +00:00
if ( width . isValid ( ) )
ui . ostcDilTable - > setColumnWidth ( i , width . toInt ( ) ) ;
}
settings . endGroup ( ) ;
settings . beginGroup ( " ostcSetPointTable " ) ;
for ( int i = 0 ; i < ui . ostcSetPointTable - > columnCount ( ) ; i + + ) {
2014-12-29 04:56:58 +00:00
QVariant width = settings . value ( QString ( " colwidth%1 " ) . arg ( i ) ) ;
2014-10-27 20:54:57 +00:00
if ( width . isValid ( ) )
ui . ostcSetPointTable - > setColumnWidth ( i , width . toInt ( ) ) ;
}
settings . endGroup ( ) ;
2017-02-04 07:58:27 +00:00
settings . beginGroup ( " ostc4GasTable " ) ;
for ( int i = 0 ; i < ui . ostc4GasTable - > columnCount ( ) ; i + + ) {
QVariant width = settings . value ( QString ( " colwidth%1 " ) . arg ( i ) ) ;
if ( width . isValid ( ) )
ui . ostc4GasTable - > setColumnWidth ( i , width . toInt ( ) ) ;
}
settings . endGroup ( ) ;
settings . beginGroup ( " ostc4DilTable " ) ;
for ( int i = 0 ; i < ui . ostc4DilTable - > columnCount ( ) ; i + + ) {
QVariant width = settings . value ( QString ( " colwidth%1 " ) . arg ( i ) ) ;
if ( width . isValid ( ) )
ui . ostc4DilTable - > setColumnWidth ( i , width . toInt ( ) ) ;
}
settings . endGroup ( ) ;
settings . beginGroup ( " ostc4SetPointTable " ) ;
for ( int i = 0 ; i < ui . ostc4SetPointTable - > columnCount ( ) ; i + + ) {
QVariant width = settings . value ( QString ( " colwidth%1 " ) . arg ( i ) ) ;
if ( width . isValid ( ) )
ui . ostc4SetPointTable - > setColumnWidth ( i , width . toInt ( ) ) ;
}
settings . endGroup ( ) ;
2014-10-15 23:13:54 +00:00
settings . endGroup ( ) ;
2014-12-27 16:31:51 +00:00
}
2014-12-26 21:39:53 +00:00
2024-01-15 20:22:20 +00:00
OstcFirmwareCheck : : OstcFirmwareCheck ( const QString & product ) : parent ( 0 )
2014-12-27 16:31:51 +00:00
{
2014-12-28 15:37:11 +00:00
QUrl url ;
2015-10-02 19:42:43 +00:00
memset ( & devData , 1 , sizeof ( devData ) ) ;
2018-08-27 19:09:40 +00:00
if ( product = = " OSTC 3 " | | product = = " OSTC 3+ " | | product = = " OSTC cR " | | product = = " OSTC Plus " ) {
2014-12-28 15:37:11 +00:00
url = QUrl ( " http://www.heinrichsweikamp.net/autofirmware/ostc3_changelog.txt " ) ;
2014-12-28 18:22:46 +00:00
latestFirmwareHexFile = QString ( " http://www.heinrichsweikamp.net/autofirmware/ostc3_firmware.hex " ) ;
} else if ( product = = " OSTC Sport " ) {
2014-12-28 15:37:11 +00:00
url = QUrl ( " http://www.heinrichsweikamp.net/autofirmware/ostc_sport_changelog.txt " ) ;
2014-12-28 18:22:46 +00:00
latestFirmwareHexFile = QString ( " http://www.heinrichsweikamp.net/autofirmware/ostc_sport_firmware.hex " ) ;
2016-12-28 15:49:14 +00:00
} else if ( product = = " OSTC 4 " ) {
url = QUrl ( " http://www.heinrichsweikamp.net/autofirmware/ostc4_changelog.txt " ) ;
latestFirmwareHexFile = QString ( " http://www.heinrichsweikamp.net/autofirmware/ostc4_firmware.bin " ) ;
2014-12-28 18:22:46 +00:00
} else { // not one of the known dive computers
2014-12-28 15:37:11 +00:00
return ;
2014-12-28 18:22:46 +00:00
}
2020-10-04 19:44:41 +00:00
connect ( & manager , & QNetworkAccessManager : : finished , this , & OstcFirmwareCheck : : parseOstcFwVersion ) ;
2014-12-28 18:22:46 +00:00
QNetworkRequest download ( url ) ;
manager . get ( download ) ;
2014-12-26 21:39:53 +00:00
}
2014-12-28 18:22:46 +00:00
void OstcFirmwareCheck : : parseOstcFwVersion ( QNetworkReply * reply )
2014-12-26 21:39:53 +00:00
{
2014-12-28 18:22:46 +00:00
QString parse = reply - > readAll ( ) ;
2014-12-28 15:37:11 +00:00
int firstOpenBracket = parse . indexOf ( ' [ ' ) ;
int firstCloseBracket = parse . indexOf ( ' ] ' ) ;
2014-12-29 04:56:58 +00:00
latestFirmwareAvailable = parse . mid ( firstOpenBracket + 1 , firstCloseBracket - firstOpenBracket - 1 ) ;
2020-10-04 19:44:41 +00:00
disconnect ( & manager , & QNetworkAccessManager : : finished , this , & OstcFirmwareCheck : : parseOstcFwVersion ) ;
2014-12-27 16:31:51 +00:00
}
2024-03-16 09:02:54 +00:00
void OstcFirmwareCheck : : checkLatest ( QWidget * _parent , device_data_t * data , const QString & filename )
2014-12-27 16:31:51 +00:00
{
2014-12-28 18:22:46 +00:00
devData = * data ;
parent = _parent ;
2023-01-30 22:10:09 +00:00
// If we didn't find a current firmware version stop this whole thing here.
2015-01-08 22:14:40 +00:00
if ( latestFirmwareAvailable . isEmpty ( ) )
return ;
2016-12-28 20:06:54 +00:00
// libdivecomputer gives us the firmware on device as an integer
2014-12-27 16:31:51 +00:00
// for the OSTC that means highbyte.lowbyte is the version number
2016-12-28 15:49:14 +00:00
// For OSTC 4's its stored as XXXX XYYY YYZZ ZZZB, -> X.Y.Z beta?
2015-01-08 22:14:40 +00:00
Re-do the libdivecomputer fingerprint save/load code
This tries to make our fingerprinting code work better, by avoiding
using the "deviceid" field that has always been unreliable because we've
calculated it multiple different ways, and even for the same version of
subsurface, it ends up changing in the middle (ie we calculate one value
initially, then re-calculate it when we have a proper serial number
string).
So instead, the fingerprinting code will look up and save the
fingerprint file using purely "stable" information that is available
early during the download:
- the device model name (which is a string with vendor and product name
separated by a space)
- the DC_EVENT_DEVINFO 32-bit 'serial' number (which is not necessarily
a real serial number at all, but hopefully at least a unique number
for the particular product)
but because the model name is not necessarily a good filename (think
slashes and other possibly invalid characters), we hash that model name
and use the resulting hex number in the fingerprint file name.
This way the fingerprint file is unambiguous at load and save time, and
depends purely on libdivecomputer data.
But because we also need to verify that we have the actual _dive_
associated with that fingerprint, we also need to save the final
deviceid and diveid when saving the fingerprint file, so that when we
load it again we can look up the dive and verify that we have it before
we use the fingerprint data.
To do that, the fingerprint file itself contains not just the
fingerprint data from libdivecomputer, but the last 8 bytes of the file
are the (subsurface) deviceid and the diveid of the dive that is
associated with the fingerprint.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2021-09-19 01:52:50 +00:00
int firmwareOnDevice = devData . devinfo . firmware ;
2016-12-28 15:49:14 +00:00
QString firmwareOnDeviceString ;
2023-01-30 22:10:09 +00:00
// Convert the latestFirmwareAvailable to a integer we can compare with
2015-01-08 22:14:40 +00:00
QStringList fwParts = latestFirmwareAvailable . split ( " . " ) ;
2016-12-28 15:49:14 +00:00
int latestFirmwareAvailableNumber ;
if ( strcmp ( data - > product , " OSTC 4 " ) = = 0 ) {
unsigned char X , Y , Z , beta ;
X = ( firmwareOnDevice & 0xF800 ) > > 11 ;
Y = ( firmwareOnDevice & 0x07C0 ) > > 6 ;
Z = ( firmwareOnDevice & 0x003E ) > > 1 ;
beta = firmwareOnDevice & 0x0001 ;
2018-07-26 01:40:19 +00:00
firmwareOnDeviceString = QString ( " %1.%2.%3%4 " ) . arg ( X ) . arg ( Y ) . arg ( Z ) . arg ( beta ? " beta " : " " ) ;
2016-12-28 15:49:14 +00:00
latestFirmwareAvailableNumber = ( fwParts [ 0 ] . toInt ( ) < < 11 ) + ( fwParts [ 1 ] . toInt ( ) < < 6 ) + ( fwParts [ 2 ] . toInt ( ) < < 1 ) ;
} else { // OSTC 3, Sport, Cr
firmwareOnDeviceString = QString ( " %1.%2 " ) . arg ( firmwareOnDevice / 256 ) . arg ( firmwareOnDevice % 256 ) ;
latestFirmwareAvailableNumber = fwParts [ 0 ] . toInt ( ) * 256 + fwParts [ 1 ] . toInt ( ) ;
}
2015-01-08 22:14:40 +00:00
if ( latestFirmwareAvailableNumber > firmwareOnDevice ) {
2014-12-27 17:16:39 +00:00
QMessageBox response ( parent ) ;
2023-01-30 23:52:04 +00:00
QString message = tr ( " A firmware update for your dive computer is available: you have version %1 but the latest stable version is %2. \n Not using the latest available stable firmware version on your dive computer means that Subsurface may not work correctly with it. " )
2015-01-08 22:14:40 +00:00
. arg ( firmwareOnDeviceString )
2014-12-29 04:56:58 +00:00
. arg ( latestFirmwareAvailable ) ;
2016-12-28 19:56:14 +00:00
message + = tr ( " \n \n If your device uses Bluetooth, do the same preparations as for a logbook download before continuing with the update " ) ;
2014-12-27 17:16:39 +00:00
response . addButton ( tr ( " Not now " ) , QMessageBox : : RejectRole ) ;
response . addButton ( tr ( " Update firmware " ) , QMessageBox : : AcceptRole ) ;
response . setText ( message ) ;
response . setWindowTitle ( tr ( " Firmware upgrade notice " ) ) ;
response . setIcon ( QMessageBox : : Question ) ;
response . setWindowModality ( Qt : : WindowModal ) ;
int ret = response . exec ( ) ;
2014-12-28 18:22:46 +00:00
if ( ret = = QMessageBox : : Accepted )
2024-03-16 09:02:54 +00:00
upgradeFirmware ( filename ) ;
2014-12-27 16:31:51 +00:00
}
2014-05-29 15:54:19 +00:00
}
2024-03-16 09:02:54 +00:00
void OstcFirmwareCheck : : upgradeFirmware ( const QString & filename )
2014-12-28 18:22:46 +00:00
{
// start download of latestFirmwareHexFile
QString saveFileName = latestFirmwareHexFile ;
saveFileName . replace ( " http://www.heinrichsweikamp.net/autofirmware/ " , " " ) ;
saveFileName . replace ( " firmware " , latestFirmwareAvailable ) ;
QFileInfo fi ( filename ) ;
2024-03-16 09:02:54 +00:00
saveFileName = fi . absolutePath ( ) . append ( QDir : : separator ( ) ) . append ( saveFileName ) ;
2014-12-28 18:22:46 +00:00
storeFirmware = QFileDialog : : getSaveFileName ( parent , tr ( " Save the downloaded firmware as " ) ,
2024-03-16 09:02:54 +00:00
saveFileName , tr ( " Firmware files " ) + " (*.hex *.bin) " ) ;
2014-12-28 18:22:46 +00:00
if ( storeFirmware . isEmpty ( ) )
return ;
2020-10-04 19:44:41 +00:00
connect ( & manager , & QNetworkAccessManager : : finished , this , & OstcFirmwareCheck : : saveOstcFirmware ) ;
2014-12-28 18:22:46 +00:00
QNetworkRequest download ( latestFirmwareHexFile ) ;
manager . get ( download ) ;
}
void OstcFirmwareCheck : : saveOstcFirmware ( QNetworkReply * reply )
{
// firmware is downloaded
// call config->startFirmwareUpdate() with that file and the device data
QByteArray firmwareData = reply - > readAll ( ) ;
QFile file ( storeFirmware ) ;
file . open ( QIODevice : : WriteOnly ) ;
file . write ( firmwareData ) ;
file . close ( ) ;
2015-01-20 21:49:56 +00:00
QProgressDialog * dialog = new QProgressDialog ( " Updating firmware " , " " , 0 , 100 ) ;
dialog - > setCancelButton ( 0 ) ;
dialog - > setAutoClose ( true ) ;
2014-12-29 04:44:31 +00:00
ConfigureDiveComputer * config = new ConfigureDiveComputer ( ) ;
2020-10-04 19:44:41 +00:00
connect ( config , & ConfigureDiveComputer : : message , dialog , & QProgressDialog : : setLabelText ) ;
connect ( config , & ConfigureDiveComputer : : error , dialog , & QProgressDialog : : setLabelText ) ;
connect ( config , & ConfigureDiveComputer : : progress , dialog , & QProgressDialog : : setValue ) ;
2015-09-12 20:37:34 +00:00
config - > dc_open ( & devData ) ;
2023-03-02 12:01:46 +00:00
config - > startFirmwareUpdate ( storeFirmware , & devData , false ) ;
2014-12-28 18:22:46 +00:00
}
2014-05-29 15:54:19 +00:00
ConfigureDiveComputerDialog : : ~ ConfigureDiveComputerDialog ( )
2015-09-10 05:30:39 +00:00
{
2015-09-12 20:37:34 +00:00
delete config ;
2015-09-10 05:30:39 +00:00
}
2018-07-26 01:40:19 +00:00
void ConfigureDiveComputerDialog : : closeEvent ( QCloseEvent * )
2014-05-29 15:54:19 +00:00
{
2015-09-12 20:37:34 +00:00
dc_close ( ) ;
2014-10-15 23:13:54 +00:00
QSettings settings ;
settings . beginGroup ( " ConfigureDiveComputerDialog " ) ;
settings . beginGroup ( " ostc3GasTable " ) ;
for ( int i = 0 ; i < ui . ostc3GasTable - > columnCount ( ) ; i + + )
settings . setValue ( QString ( " colwidth%1 " ) . arg ( i ) , ui . ostc3GasTable - > columnWidth ( i ) ) ;
settings . endGroup ( ) ;
settings . beginGroup ( " ostc3DilTable " ) ;
for ( int i = 0 ; i < ui . ostc3DilTable - > columnCount ( ) ; i + + )
settings . setValue ( QString ( " colwidth%1 " ) . arg ( i ) , ui . ostc3DilTable - > columnWidth ( i ) ) ;
settings . endGroup ( ) ;
settings . beginGroup ( " ostc3SetPointTable " ) ;
for ( int i = 0 ; i < ui . ostc3SetPointTable - > columnCount ( ) ; i + + )
settings . setValue ( QString ( " colwidth%1 " ) . arg ( i ) , ui . ostc3SetPointTable - > columnWidth ( i ) ) ;
settings . endGroup ( ) ;
2014-10-27 20:54:57 +00:00
settings . beginGroup ( " ostcGasTable " ) ;
for ( int i = 0 ; i < ui . ostcGasTable - > columnCount ( ) ; i + + )
settings . setValue ( QString ( " colwidth%1 " ) . arg ( i ) , ui . ostcGasTable - > columnWidth ( i ) ) ;
settings . endGroup ( ) ;
settings . beginGroup ( " ostcDilTable " ) ;
for ( int i = 0 ; i < ui . ostcDilTable - > columnCount ( ) ; i + + )
settings . setValue ( QString ( " colwidth%1 " ) . arg ( i ) , ui . ostcDilTable - > columnWidth ( i ) ) ;
settings . endGroup ( ) ;
settings . beginGroup ( " ostcSetPointTable " ) ;
for ( int i = 0 ; i < ui . ostcSetPointTable - > columnCount ( ) ; i + + )
settings . setValue ( QString ( " colwidth%1 " ) . arg ( i ) , ui . ostcSetPointTable - > columnWidth ( i ) ) ;
settings . endGroup ( ) ;
2014-10-15 23:13:54 +00:00
settings . endGroup ( ) ;
2014-05-29 15:54:19 +00:00
}
2014-05-29 16:16:34 +00:00
2014-06-11 08:47:25 +00:00
static void fillDeviceList ( const char * name , void * data )
{
QComboBox * comboBox = ( QComboBox * ) data ;
comboBox - > addItem ( name ) ;
}
2018-08-27 17:32:14 +00:00
void ConfigureDiveComputerDialog : : fill_device_list ( unsigned int transport )
2014-06-11 08:47:25 +00:00
{
int deviceIndex ;
2023-06-12 02:27:02 +00:00
QString device = ui . device - > currentText ( ) ;
2014-10-15 23:13:53 +00:00
ui . device - > clear ( ) ;
2018-08-27 17:32:14 +00:00
deviceIndex = enumerate_devices ( fillDeviceList , ui . device , transport ) ;
2014-06-11 08:47:25 +00:00
if ( deviceIndex > = 0 )
2014-10-15 23:13:53 +00:00
ui . device - > setCurrentIndex ( deviceIndex ) ;
2023-06-12 02:27:02 +00:00
else
ui . device - > setCurrentText ( device ) ;
2014-06-11 08:47:25 +00:00
}
2014-06-10 16:19:28 +00:00
void ConfigureDiveComputerDialog : : populateDeviceDetails ( )
2014-10-12 14:51:30 +00:00
{
2014-12-29 04:56:58 +00:00
switch ( ui . dcStackedWidget - > currentIndex ( ) ) {
2014-10-12 14:51:30 +00:00
case 0 :
2018-03-03 13:29:51 +00:00
populateDeviceDetailsOSTC ( ) ;
2014-10-12 14:51:30 +00:00
break ;
case 1 :
2018-03-03 13:29:51 +00:00
populateDeviceDetailsOSTC3 ( ) ;
2014-10-12 14:51:30 +00:00
break ;
2014-10-27 20:54:57 +00:00
case 2 :
2018-03-03 13:29:51 +00:00
populateDeviceDetailsOSTC4 ( ) ;
2014-10-27 20:54:57 +00:00
break ;
2017-04-26 18:49:12 +00:00
case 3 :
2018-03-03 13:29:51 +00:00
populateDeviceDetailsSuuntoVyper ( ) ;
2017-04-26 18:49:12 +00:00
break ;
2014-10-12 14:51:30 +00:00
}
}
2015-09-10 22:13:57 +00:00
# define GET_INT_FROM(_field, _default) ((_field) != NULL) ? (_field)->data(Qt::EditRole).toInt() : (_default)
2014-10-14 18:21:04 +00:00
2014-10-12 14:51:30 +00:00
void ConfigureDiveComputerDialog : : populateDeviceDetailsOSTC3 ( )
2014-06-10 16:19:28 +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 . customText = ui . customTextLlineEdit - > text ( ) ;
deviceDetails . diveMode = ui . diveModeComboBox - > currentIndex ( ) ;
deviceDetails . saturation = ui . saturationSpinBox - > value ( ) ;
deviceDetails . desaturation = ui . desaturationSpinBox - > value ( ) ;
deviceDetails . lastDeco = ui . lastDecoSpinBox - > value ( ) ;
deviceDetails . brightness = ui . brightnessComboBox - > currentIndex ( ) ;
deviceDetails . units = ui . unitsComboBox - > currentIndex ( ) ;
deviceDetails . samplingRate = ui . samplingRateComboBox - > currentIndex ( ) ;
deviceDetails . salinity = ui . salinitySpinBox - > value ( ) ;
deviceDetails . diveModeColor = ui . diveModeColour - > currentIndex ( ) ;
deviceDetails . language = ui . languageComboBox - > currentIndex ( ) ;
deviceDetails . dateFormat = ui . dateFormatComboBox - > currentIndex ( ) ;
deviceDetails . compassGain = ui . compassGainComboBox - > currentIndex ( ) ;
deviceDetails . syncTime = ui . dateTimeSyncCheckBox - > isChecked ( ) ;
deviceDetails . safetyStop = ui . safetyStopCheckBox - > isChecked ( ) ;
deviceDetails . gfHigh = ui . gfHighSpinBox - > value ( ) ;
deviceDetails . gfLow = ui . gfLowSpinBox - > value ( ) ;
deviceDetails . pressureSensorOffset = ui . pressureSensorOffsetSpinBox - > value ( ) ;
deviceDetails . ppO2Min = ui . ppO2MinSpinBox - > value ( ) ;
deviceDetails . ppO2Max = ui . ppO2MaxSpinBox - > value ( ) ;
deviceDetails . futureTTS = ui . futureTTSSpinBox - > value ( ) ;
deviceDetails . ccrMode = ui . ccrModeComboBox - > currentIndex ( ) ;
deviceDetails . decoType = ui . decoTypeComboBox - > currentIndex ( ) ;
deviceDetails . aGFSelectable = ui . aGFSelectableCheckBox - > isChecked ( ) ;
deviceDetails . aGFHigh = ui . aGFHighSpinBox - > value ( ) ;
deviceDetails . aGFLow = ui . aGFLowSpinBox - > value ( ) ;
deviceDetails . calibrationGas = ui . calibrationGasSpinBox - > value ( ) ;
deviceDetails . flipScreen = ui . flipScreenCheckBox - > isChecked ( ) ;
deviceDetails . leftButtonSensitivity = ui . leftButtonSensitivity - > value ( ) ;
deviceDetails . rightButtonSensitivity = ui . rightButtonSensitivity - > value ( ) ;
deviceDetails . bottomGasConsumption = ui . bottomGasConsumption - > value ( ) ;
deviceDetails . decoGasConsumption = ui . decoGasConsumption - > value ( ) ;
deviceDetails . modWarning = ui . modWarning - > isChecked ( ) ;
deviceDetails . dynamicAscendRate = ui . dynamicAscendRate - > isChecked ( ) ;
deviceDetails . graphicalSpeedIndicator = ui . graphicalSpeedIndicator - > isChecked ( ) ;
deviceDetails . alwaysShowppO2 = ui . alwaysShowppO2 - > isChecked ( ) ;
deviceDetails . tempSensorOffset = lrint ( ui . tempSensorOffsetDoubleSpinBox - > value ( ) * 10 ) ;
deviceDetails . safetyStopLength = ui . safetyStopLengthSpinBox - > value ( ) ;
deviceDetails . safetyStopStartDepth = lrint ( ui . safetyStopStartDepthDoubleSpinBox - > value ( ) * 10 ) ;
deviceDetails . safetyStopEndDepth = lrint ( ui . safetyStopEndDepthDoubleSpinBox - > value ( ) * 10 ) ;
deviceDetails . safetyStopResetDepth = lrint ( ui . safetyStopResetDepthDoubleSpinBox - > value ( ) * 10 ) ;
2014-06-21 06:14:55 +00:00
//set gas values
gas gas1 ;
gas gas2 ;
gas gas3 ;
gas gas4 ;
gas gas5 ;
2014-10-15 23:13:53 +00:00
gas1 . oxygen = GET_INT_FROM ( ui . ostc3GasTable - > item ( 0 , 1 ) , 21 ) ;
gas1 . helium = GET_INT_FROM ( ui . ostc3GasTable - > item ( 0 , 2 ) , 0 ) ;
gas1 . type = GET_INT_FROM ( ui . ostc3GasTable - > item ( 0 , 3 ) , 0 ) ;
gas1 . depth = GET_INT_FROM ( ui . ostc3GasTable - > item ( 0 , 4 ) , 0 ) ;
2014-06-21 06:14:55 +00:00
2014-10-15 23:13:53 +00:00
gas2 . oxygen = GET_INT_FROM ( ui . ostc3GasTable - > item ( 1 , 1 ) , 21 ) ;
gas2 . helium = GET_INT_FROM ( ui . ostc3GasTable - > item ( 1 , 2 ) , 0 ) ;
gas2 . type = GET_INT_FROM ( ui . ostc3GasTable - > item ( 1 , 3 ) , 0 ) ;
gas2 . depth = GET_INT_FROM ( ui . ostc3GasTable - > item ( 1 , 4 ) , 0 ) ;
2014-06-21 06:14:55 +00:00
2014-10-15 23:13:53 +00:00
gas3 . oxygen = GET_INT_FROM ( ui . ostc3GasTable - > item ( 2 , 1 ) , 21 ) ;
gas3 . helium = GET_INT_FROM ( ui . ostc3GasTable - > item ( 2 , 2 ) , 0 ) ;
gas3 . type = GET_INT_FROM ( ui . ostc3GasTable - > item ( 2 , 3 ) , 0 ) ;
gas3 . depth = GET_INT_FROM ( ui . ostc3GasTable - > item ( 2 , 4 ) , 0 ) ;
2014-06-21 06:14:55 +00:00
2014-10-15 23:13:53 +00:00
gas4 . oxygen = GET_INT_FROM ( ui . ostc3GasTable - > item ( 3 , 1 ) , 21 ) ;
gas4 . helium = GET_INT_FROM ( ui . ostc3GasTable - > item ( 3 , 2 ) , 0 ) ;
gas4 . type = GET_INT_FROM ( ui . ostc3GasTable - > item ( 3 , 3 ) , 0 ) ;
gas4 . depth = GET_INT_FROM ( ui . ostc3GasTable - > item ( 3 , 4 ) , 0 ) ;
2014-06-21 06:14:55 +00:00
2014-10-15 23:13:53 +00:00
gas5 . oxygen = GET_INT_FROM ( ui . ostc3GasTable - > item ( 4 , 1 ) , 21 ) ;
gas5 . helium = GET_INT_FROM ( ui . ostc3GasTable - > item ( 4 , 2 ) , 0 ) ;
gas5 . type = GET_INT_FROM ( ui . ostc3GasTable - > item ( 4 , 3 ) , 0 ) ;
gas5 . depth = GET_INT_FROM ( ui . ostc3GasTable - > item ( 4 , 4 ) , 0 ) ;
2014-06-21 06:14:55 +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 . gas1 = gas1 ;
deviceDetails . gas2 = gas2 ;
deviceDetails . gas3 = gas3 ;
deviceDetails . gas4 = gas4 ;
deviceDetails . gas5 = gas5 ;
2014-06-21 06:53:05 +00:00
//set dil values
gas dil1 ;
gas dil2 ;
gas dil3 ;
gas dil4 ;
gas dil5 ;
2014-10-15 23:13:53 +00:00
dil1 . oxygen = GET_INT_FROM ( ui . ostc3DilTable - > item ( 0 , 1 ) , 21 ) ;
dil1 . helium = GET_INT_FROM ( ui . ostc3DilTable - > item ( 0 , 2 ) , 0 ) ;
dil1 . type = GET_INT_FROM ( ui . ostc3DilTable - > item ( 0 , 3 ) , 0 ) ;
dil1 . depth = GET_INT_FROM ( ui . ostc3DilTable - > item ( 0 , 4 ) , 0 ) ;
2014-06-21 06:53:05 +00:00
2014-10-15 23:13:53 +00:00
dil2 . oxygen = GET_INT_FROM ( ui . ostc3DilTable - > item ( 1 , 1 ) , 21 ) ;
dil2 . helium = GET_INT_FROM ( ui . ostc3DilTable - > item ( 1 , 2 ) , 0 ) ;
dil2 . type = GET_INT_FROM ( ui . ostc3DilTable - > item ( 1 , 3 ) , 0 ) ;
2014-12-29 04:56:58 +00:00
dil2 . depth = GET_INT_FROM ( ui . ostc3DilTable - > item ( 1 , 4 ) , 0 ) ;
2014-06-21 06:53:05 +00:00
2014-10-15 23:13:53 +00:00
dil3 . oxygen = GET_INT_FROM ( ui . ostc3DilTable - > item ( 2 , 1 ) , 21 ) ;
dil3 . helium = GET_INT_FROM ( ui . ostc3DilTable - > item ( 2 , 2 ) , 0 ) ;
dil3 . type = GET_INT_FROM ( ui . ostc3DilTable - > item ( 2 , 3 ) , 0 ) ;
dil3 . depth = GET_INT_FROM ( ui . ostc3DilTable - > item ( 2 , 4 ) , 0 ) ;
2014-06-21 06:53:05 +00:00
2014-10-15 23:13:53 +00:00
dil4 . oxygen = GET_INT_FROM ( ui . ostc3DilTable - > item ( 3 , 1 ) , 21 ) ;
dil4 . helium = GET_INT_FROM ( ui . ostc3DilTable - > item ( 3 , 2 ) , 0 ) ;
dil4 . type = GET_INT_FROM ( ui . ostc3DilTable - > item ( 3 , 3 ) , 0 ) ;
dil4 . depth = GET_INT_FROM ( ui . ostc3DilTable - > item ( 3 , 4 ) , 0 ) ;
2014-06-21 06:53:05 +00:00
2014-10-15 23:13:53 +00:00
dil5 . oxygen = GET_INT_FROM ( ui . ostc3DilTable - > item ( 4 , 1 ) , 21 ) ;
dil5 . helium = GET_INT_FROM ( ui . ostc3DilTable - > item ( 4 , 2 ) , 0 ) ;
dil5 . type = GET_INT_FROM ( ui . ostc3DilTable - > item ( 4 , 3 ) , 0 ) ;
dil5 . depth = GET_INT_FROM ( ui . ostc3DilTable - > item ( 4 , 4 ) , 0 ) ;
2014-06-21 06:53:05 +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 . dil1 = dil1 ;
deviceDetails . dil2 = dil2 ;
deviceDetails . dil3 = dil3 ;
deviceDetails . dil4 = dil4 ;
deviceDetails . dil5 = dil5 ;
2014-06-21 07:22:47 +00:00
2017-03-06 12:36:42 +00:00
//set setpoint details
2014-06-21 07:22:47 +00:00
setpoint sp1 ;
setpoint sp2 ;
setpoint sp3 ;
setpoint sp4 ;
setpoint sp5 ;
2014-10-15 23:13:53 +00:00
sp1 . sp = GET_INT_FROM ( ui . ostc3SetPointTable - > item ( 0 , 1 ) , 70 ) ;
sp1 . depth = GET_INT_FROM ( ui . ostc3SetPointTable - > item ( 0 , 2 ) , 0 ) ;
2014-06-21 07:22:47 +00:00
2014-10-15 23:13:53 +00:00
sp2 . sp = GET_INT_FROM ( ui . ostc3SetPointTable - > item ( 1 , 1 ) , 90 ) ;
sp2 . depth = GET_INT_FROM ( ui . ostc3SetPointTable - > item ( 1 , 2 ) , 20 ) ;
2014-06-21 07:22:47 +00:00
2014-10-15 23:13:53 +00:00
sp3 . sp = GET_INT_FROM ( ui . ostc3SetPointTable - > item ( 2 , 1 ) , 100 ) ;
sp3 . depth = GET_INT_FROM ( ui . ostc3SetPointTable - > item ( 2 , 2 ) , 33 ) ;
2014-06-21 07:22:47 +00:00
2014-10-15 23:13:53 +00:00
sp4 . sp = GET_INT_FROM ( ui . ostc3SetPointTable - > item ( 3 , 1 ) , 120 ) ;
sp4 . depth = GET_INT_FROM ( ui . ostc3SetPointTable - > item ( 3 , 2 ) , 50 ) ;
2014-06-21 07:22:47 +00:00
2014-10-15 23:13:53 +00:00
sp5 . sp = GET_INT_FROM ( ui . ostc3SetPointTable - > item ( 4 , 1 ) , 140 ) ;
sp5 . depth = GET_INT_FROM ( ui . ostc3SetPointTable - > item ( 4 , 2 ) , 70 ) ;
2014-10-10 05:34:13 +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 . sp1 = sp1 ;
deviceDetails . sp2 = sp2 ;
deviceDetails . sp3 = sp3 ;
deviceDetails . sp4 = sp4 ;
deviceDetails . sp5 = sp5 ;
2014-06-10 16:19:28 +00:00
}
2014-10-27 20:54:57 +00:00
void ConfigureDiveComputerDialog : : populateDeviceDetailsOSTC ( )
{
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 . customText = ui . customTextLlineEdit_3 - > text ( ) ;
deviceDetails . saturation = ui . saturationSpinBox_3 - > value ( ) ;
deviceDetails . desaturation = ui . desaturationSpinBox_3 - > value ( ) ;
deviceDetails . lastDeco = ui . lastDecoSpinBox_3 - > value ( ) ;
deviceDetails . samplingRate = ui . samplingRateSpinBox_3 - > value ( ) ;
deviceDetails . salinity = lrint ( ui . salinityDoubleSpinBox_3 - > value ( ) * 100 ) ;
deviceDetails . dateFormat = ui . dateFormatComboBox_3 - > currentIndex ( ) ;
deviceDetails . syncTime = ui . dateTimeSyncCheckBox_3 - > isChecked ( ) ;
deviceDetails . safetyStop = ui . safetyStopCheckBox_3 - > isChecked ( ) ;
deviceDetails . gfHigh = ui . gfHighSpinBox_3 - > value ( ) ;
deviceDetails . gfLow = ui . gfLowSpinBox_3 - > value ( ) ;
deviceDetails . ppO2Min = ui . ppO2MinSpinBox_3 - > value ( ) ;
deviceDetails . ppO2Max = ui . ppO2MaxSpinBox_3 - > value ( ) ;
deviceDetails . futureTTS = ui . futureTTSSpinBox_3 - > value ( ) ;
deviceDetails . decoType = ui . decoTypeComboBox_3 - > currentIndex ( ) ;
deviceDetails . aGFSelectable = ui . aGFSelectableCheckBox_3 - > isChecked ( ) ;
deviceDetails . aGFHigh = ui . aGFHighSpinBox_3 - > value ( ) ;
deviceDetails . aGFLow = ui . aGFLowSpinBox_3 - > value ( ) ;
deviceDetails . bottomGasConsumption = ui . bottomGasConsumption_3 - > value ( ) ;
deviceDetails . decoGasConsumption = ui . decoGasConsumption_3 - > value ( ) ;
deviceDetails . graphicalSpeedIndicator = ui . graphicalSpeedIndicator_3 - > isChecked ( ) ;
deviceDetails . safetyStopLength = ui . safetyStopLengthSpinBox_3 - > value ( ) ;
deviceDetails . safetyStopStartDepth = lrint ( ui . safetyStopStartDepthDoubleSpinBox_3 - > value ( ) * 10 ) ;
deviceDetails . safetyStopEndDepth = lrint ( ui . safetyStopEndDepthDoubleSpinBox_3 - > value ( ) * 10 ) ;
deviceDetails . safetyStopResetDepth = lrint ( ui . safetyStopResetDepthDoubleSpinBox_3 - > value ( ) * 10 ) ;
2014-10-27 20:54:57 +00:00
//set gas values
gas gas1 ;
gas gas2 ;
gas gas3 ;
gas gas4 ;
gas gas5 ;
gas1 . oxygen = GET_INT_FROM ( ui . ostcGasTable - > item ( 0 , 1 ) , 21 ) ;
gas1 . helium = GET_INT_FROM ( ui . ostcGasTable - > item ( 0 , 2 ) , 0 ) ;
gas1 . type = GET_INT_FROM ( ui . ostcGasTable - > item ( 0 , 3 ) , 0 ) ;
gas1 . depth = GET_INT_FROM ( ui . ostcGasTable - > item ( 0 , 4 ) , 0 ) ;
gas2 . oxygen = GET_INT_FROM ( ui . ostcGasTable - > item ( 1 , 1 ) , 21 ) ;
gas2 . helium = GET_INT_FROM ( ui . ostcGasTable - > item ( 1 , 2 ) , 0 ) ;
gas2 . type = GET_INT_FROM ( ui . ostcGasTable - > item ( 1 , 3 ) , 0 ) ;
gas2 . depth = GET_INT_FROM ( ui . ostcGasTable - > item ( 1 , 4 ) , 0 ) ;
gas3 . oxygen = GET_INT_FROM ( ui . ostcGasTable - > item ( 2 , 1 ) , 21 ) ;
gas3 . helium = GET_INT_FROM ( ui . ostcGasTable - > item ( 2 , 2 ) , 0 ) ;
gas3 . type = GET_INT_FROM ( ui . ostcGasTable - > item ( 2 , 3 ) , 0 ) ;
gas3 . depth = GET_INT_FROM ( ui . ostcGasTable - > item ( 2 , 4 ) , 0 ) ;
gas4 . oxygen = GET_INT_FROM ( ui . ostcGasTable - > item ( 3 , 1 ) , 21 ) ;
gas4 . helium = GET_INT_FROM ( ui . ostcGasTable - > item ( 3 , 2 ) , 0 ) ;
gas4 . type = GET_INT_FROM ( ui . ostcGasTable - > item ( 3 , 3 ) , 0 ) ;
gas4 . depth = GET_INT_FROM ( ui . ostcGasTable - > item ( 3 , 4 ) , 0 ) ;
gas5 . oxygen = GET_INT_FROM ( ui . ostcGasTable - > item ( 4 , 1 ) , 21 ) ;
gas5 . helium = GET_INT_FROM ( ui . ostcGasTable - > item ( 4 , 2 ) , 0 ) ;
gas5 . type = GET_INT_FROM ( ui . ostcGasTable - > item ( 4 , 3 ) , 0 ) ;
gas5 . depth = GET_INT_FROM ( ui . ostcGasTable - > item ( 4 , 4 ) , 0 ) ;
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 . gas1 = gas1 ;
deviceDetails . gas2 = gas2 ;
deviceDetails . gas3 = gas3 ;
deviceDetails . gas4 = gas4 ;
deviceDetails . gas5 = gas5 ;
2014-10-27 20:54:57 +00:00
//set dil values
gas dil1 ;
gas dil2 ;
gas dil3 ;
gas dil4 ;
gas dil5 ;
dil1 . oxygen = GET_INT_FROM ( ui . ostcDilTable - > item ( 0 , 1 ) , 21 ) ;
dil1 . helium = GET_INT_FROM ( ui . ostcDilTable - > item ( 0 , 2 ) , 0 ) ;
dil1 . type = GET_INT_FROM ( ui . ostcDilTable - > item ( 0 , 3 ) , 0 ) ;
dil1 . depth = GET_INT_FROM ( ui . ostcDilTable - > item ( 0 , 4 ) , 0 ) ;
dil2 . oxygen = GET_INT_FROM ( ui . ostcDilTable - > item ( 1 , 1 ) , 21 ) ;
dil2 . helium = GET_INT_FROM ( ui . ostcDilTable - > item ( 1 , 2 ) , 0 ) ;
dil2 . type = GET_INT_FROM ( ui . ostcDilTable - > item ( 1 , 3 ) , 0 ) ;
2014-12-29 04:56:58 +00:00
dil2 . depth = GET_INT_FROM ( ui . ostcDilTable - > item ( 1 , 4 ) , 0 ) ;
2014-10-27 20:54:57 +00:00
dil3 . oxygen = GET_INT_FROM ( ui . ostcDilTable - > item ( 2 , 1 ) , 21 ) ;
dil3 . helium = GET_INT_FROM ( ui . ostcDilTable - > item ( 2 , 2 ) , 0 ) ;
dil3 . type = GET_INT_FROM ( ui . ostcDilTable - > item ( 2 , 3 ) , 0 ) ;
dil3 . depth = GET_INT_FROM ( ui . ostcDilTable - > item ( 2 , 4 ) , 0 ) ;
dil4 . oxygen = GET_INT_FROM ( ui . ostcDilTable - > item ( 3 , 1 ) , 21 ) ;
dil4 . helium = GET_INT_FROM ( ui . ostcDilTable - > item ( 3 , 2 ) , 0 ) ;
dil4 . type = GET_INT_FROM ( ui . ostcDilTable - > item ( 3 , 3 ) , 0 ) ;
dil4 . depth = GET_INT_FROM ( ui . ostcDilTable - > item ( 3 , 4 ) , 0 ) ;
dil5 . oxygen = GET_INT_FROM ( ui . ostcDilTable - > item ( 4 , 1 ) , 21 ) ;
dil5 . helium = GET_INT_FROM ( ui . ostcDilTable - > item ( 4 , 2 ) , 0 ) ;
dil5 . type = GET_INT_FROM ( ui . ostcDilTable - > item ( 4 , 3 ) , 0 ) ;
dil5 . depth = GET_INT_FROM ( ui . ostcDilTable - > item ( 4 , 4 ) , 0 ) ;
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 . dil1 = dil1 ;
deviceDetails . dil2 = dil2 ;
deviceDetails . dil3 = dil3 ;
deviceDetails . dil4 = dil4 ;
deviceDetails . dil5 = dil5 ;
2014-10-27 20:54:57 +00:00
2017-03-06 12:36:42 +00:00
//set setpoint details
2014-10-27 20:54:57 +00:00
setpoint sp1 ;
setpoint sp2 ;
setpoint sp3 ;
setpoint sp4 ;
setpoint sp5 ;
sp1 . sp = GET_INT_FROM ( ui . ostcSetPointTable - > item ( 0 , 1 ) , 70 ) ;
sp1 . depth = GET_INT_FROM ( ui . ostcSetPointTable - > item ( 0 , 2 ) , 0 ) ;
sp2 . sp = GET_INT_FROM ( ui . ostcSetPointTable - > item ( 1 , 1 ) , 90 ) ;
sp2 . depth = GET_INT_FROM ( ui . ostcSetPointTable - > item ( 1 , 2 ) , 20 ) ;
sp3 . sp = GET_INT_FROM ( ui . ostcSetPointTable - > item ( 2 , 1 ) , 100 ) ;
sp3 . depth = GET_INT_FROM ( ui . ostcSetPointTable - > item ( 2 , 2 ) , 33 ) ;
sp4 . sp = GET_INT_FROM ( ui . ostcSetPointTable - > item ( 3 , 1 ) , 120 ) ;
sp4 . depth = GET_INT_FROM ( ui . ostcSetPointTable - > item ( 3 , 2 ) , 50 ) ;
sp5 . sp = GET_INT_FROM ( ui . ostcSetPointTable - > item ( 4 , 1 ) , 140 ) ;
sp5 . depth = GET_INT_FROM ( ui . ostcSetPointTable - > item ( 4 , 2 ) , 70 ) ;
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 . sp1 = sp1 ;
deviceDetails . sp2 = sp2 ;
deviceDetails . sp3 = sp3 ;
deviceDetails . sp4 = sp4 ;
deviceDetails . sp5 = sp5 ;
2014-10-27 20:54:57 +00:00
}
2014-10-12 14:51:30 +00:00
void ConfigureDiveComputerDialog : : populateDeviceDetailsSuuntoVyper ( )
{
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 . customText = ui . customTextLlineEdit_1 - > text ( ) ;
deviceDetails . samplingRate = ui . samplingRateComboBox_1 - > currentIndex ( ) = = 3 ? 60 : ( ui . samplingRateComboBox_1 - > currentIndex ( ) + 1 ) * 10 ;
deviceDetails . altitude = ui . altitudeRangeComboBox - > currentIndex ( ) ;
deviceDetails . personalSafety = ui . personalSafetyComboBox - > currentIndex ( ) ;
deviceDetails . timeFormat = ui . timeFormatComboBox - > currentIndex ( ) ;
deviceDetails . units = ui . unitsComboBox_1 - > currentIndex ( ) ;
deviceDetails . diveMode = ui . diveModeComboBox_1 - > currentIndex ( ) ;
deviceDetails . lightEnabled = ui . lightCheckBox - > isChecked ( ) ;
deviceDetails . light = ui . lightSpinBox - > value ( ) ;
deviceDetails . alarmDepthEnabled = ui . alarmDepthCheckBox - > isChecked ( ) ;
deviceDetails . alarmDepth = units_to_depth ( ui . alarmDepthDoubleSpinBox - > value ( ) ) . mm ;
deviceDetails . alarmTimeEnabled = ui . alarmTimeCheckBox - > isChecked ( ) ;
deviceDetails . alarmTime = ui . alarmTimeSpinBox - > value ( ) ;
2014-10-12 14:51:30 +00:00
}
2017-04-26 18:49:12 +00:00
void ConfigureDiveComputerDialog : : populateDeviceDetailsOSTC4 ( )
{
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 . customText = ui . customTextLlineEdit_4 - > text ( ) ;
deviceDetails . diveMode = ui . diveModeComboBox_4 - > currentIndex ( ) ;
deviceDetails . lastDeco = ui . lastDecoSpinBox_4 - > value ( ) ;
deviceDetails . brightness = ui . brightnessComboBox_4 - > currentIndex ( ) ;
deviceDetails . units = ui . unitsComboBox_4 - > currentIndex ( ) ;
deviceDetails . salinity = ui . salinitySpinBox_4 - > value ( ) ;
deviceDetails . diveModeColor = ui . diveModeColour_4 - > currentIndex ( ) ;
deviceDetails . language = ui . languageComboBox_4 - > currentIndex ( ) ;
deviceDetails . dateFormat = ui . dateFormatComboBox_4 - > currentIndex ( ) ;
deviceDetails . syncTime = ui . dateTimeSyncCheckBox_4 - > isChecked ( ) ;
deviceDetails . safetyStop = ui . safetyStopCheckBox_4 - > isChecked ( ) ;
deviceDetails . gfHigh = ui . gfHighSpinBox_4 - > value ( ) ;
deviceDetails . gfLow = ui . gfLowSpinBox_4 - > value ( ) ;
deviceDetails . pressureSensorOffset = ui . pressureSensorOffsetSpinBox_4 - > value ( ) ;
deviceDetails . ppO2Min = ui . ppO2MinSpinBox_4 - > value ( ) ;
deviceDetails . ppO2Max = ui . ppO2MaxSpinBox_4 - > value ( ) ;
deviceDetails . futureTTS = ui . futureTTSSpinBox_4 - > value ( ) ;
deviceDetails . ccrMode = ui . ccrModeComboBox_4 - > currentIndex ( ) ;
deviceDetails . decoType = ui . decoTypeComboBox_4 - > currentIndex ( ) ;
deviceDetails . aGFHigh = ui . aGFHighSpinBox_4 - > value ( ) ;
deviceDetails . aGFLow = ui . aGFLowSpinBox_4 - > value ( ) ;
deviceDetails . vpmConservatism = ui . vpmConservatismSpinBox - > value ( ) ;
deviceDetails . setPointFallback = ui . setPointFallbackCheckBox_4 - > isChecked ( ) ;
deviceDetails . buttonSensitivity = ui . buttonSensitivity_4 - > value ( ) ;
deviceDetails . bottomGasConsumption = ui . bottomGasConsumption_4 - > value ( ) ;
deviceDetails . decoGasConsumption = ui . decoGasConsumption_4 - > value ( ) ;
deviceDetails . travelGasConsumption = ui . travelGasConsumption_4 - > value ( ) ;
deviceDetails . alwaysShowppO2 = ui . alwaysShowppO2_4 - > isChecked ( ) ;
deviceDetails . tempSensorOffset = lrint ( ui . tempSensorOffsetDoubleSpinBox_4 - > value ( ) * 10 ) ;
deviceDetails . safetyStopLength = ui . safetyStopLengthSpinBox_4 - > value ( ) ;
deviceDetails . safetyStopStartDepth = lrint ( ui . safetyStopStartDepthDoubleSpinBox_4 - > value ( ) * 10 ) ;
2017-04-27 18:35:02 +00:00
//set gas values
gas gas1 ;
gas gas2 ;
gas gas3 ;
gas gas4 ;
gas gas5 ;
gas1 . oxygen = GET_INT_FROM ( ui . ostc4GasTable - > item ( 0 , 1 ) , 21 ) ;
gas1 . helium = GET_INT_FROM ( ui . ostc4GasTable - > item ( 0 , 2 ) , 0 ) ;
gas1 . type = GET_INT_FROM ( ui . ostc4GasTable - > item ( 0 , 3 ) , 0 ) ;
gas1 . depth = GET_INT_FROM ( ui . ostc4GasTable - > item ( 0 , 4 ) , 0 ) ;
gas2 . oxygen = GET_INT_FROM ( ui . ostc4GasTable - > item ( 1 , 1 ) , 21 ) ;
gas2 . helium = GET_INT_FROM ( ui . ostc4GasTable - > item ( 1 , 2 ) , 0 ) ;
gas2 . type = GET_INT_FROM ( ui . ostc4GasTable - > item ( 1 , 3 ) , 0 ) ;
gas2 . depth = GET_INT_FROM ( ui . ostc4GasTable - > item ( 1 , 4 ) , 0 ) ;
gas3 . oxygen = GET_INT_FROM ( ui . ostc4GasTable - > item ( 2 , 1 ) , 21 ) ;
gas3 . helium = GET_INT_FROM ( ui . ostc4GasTable - > item ( 2 , 2 ) , 0 ) ;
gas3 . type = GET_INT_FROM ( ui . ostc4GasTable - > item ( 2 , 3 ) , 0 ) ;
gas3 . depth = GET_INT_FROM ( ui . ostc4GasTable - > item ( 2 , 4 ) , 0 ) ;
gas4 . oxygen = GET_INT_FROM ( ui . ostc4GasTable - > item ( 3 , 1 ) , 21 ) ;
gas4 . helium = GET_INT_FROM ( ui . ostc4GasTable - > item ( 3 , 2 ) , 0 ) ;
gas4 . type = GET_INT_FROM ( ui . ostc4GasTable - > item ( 3 , 3 ) , 0 ) ;
gas4 . depth = GET_INT_FROM ( ui . ostc4GasTable - > item ( 3 , 4 ) , 0 ) ;
gas5 . oxygen = GET_INT_FROM ( ui . ostc4GasTable - > item ( 4 , 1 ) , 21 ) ;
gas5 . helium = GET_INT_FROM ( ui . ostc4GasTable - > item ( 4 , 2 ) , 0 ) ;
gas5 . type = GET_INT_FROM ( ui . ostc4GasTable - > item ( 4 , 3 ) , 0 ) ;
gas5 . depth = GET_INT_FROM ( ui . ostc4GasTable - > item ( 4 , 4 ) , 0 ) ;
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 . gas1 = gas1 ;
deviceDetails . gas2 = gas2 ;
deviceDetails . gas3 = gas3 ;
deviceDetails . gas4 = gas4 ;
deviceDetails . gas5 = gas5 ;
2017-04-27 18:35:02 +00:00
//set dil values
gas dil1 ;
gas dil2 ;
gas dil3 ;
gas dil4 ;
gas dil5 ;
dil1 . oxygen = GET_INT_FROM ( ui . ostc4DilTable - > item ( 0 , 1 ) , 21 ) ;
dil1 . helium = GET_INT_FROM ( ui . ostc4DilTable - > item ( 0 , 2 ) , 0 ) ;
dil1 . type = GET_INT_FROM ( ui . ostc4DilTable - > item ( 0 , 3 ) , 0 ) ;
dil1 . depth = GET_INT_FROM ( ui . ostc4DilTable - > item ( 0 , 4 ) , 0 ) ;
dil2 . oxygen = GET_INT_FROM ( ui . ostc4DilTable - > item ( 1 , 1 ) , 21 ) ;
dil2 . helium = GET_INT_FROM ( ui . ostc4DilTable - > item ( 1 , 2 ) , 0 ) ;
dil2 . type = GET_INT_FROM ( ui . ostc4DilTable - > item ( 1 , 3 ) , 0 ) ;
dil2 . depth = GET_INT_FROM ( ui . ostc4DilTable - > item ( 1 , 4 ) , 0 ) ;
dil3 . oxygen = GET_INT_FROM ( ui . ostc4DilTable - > item ( 2 , 1 ) , 21 ) ;
dil3 . helium = GET_INT_FROM ( ui . ostc4DilTable - > item ( 2 , 2 ) , 0 ) ;
dil3 . type = GET_INT_FROM ( ui . ostc4DilTable - > item ( 2 , 4 ) , 0 ) ;
dil3 . depth = GET_INT_FROM ( ui . ostc4DilTable - > item ( 2 , 4 ) , 0 ) ;
dil4 . oxygen = GET_INT_FROM ( ui . ostc4DilTable - > item ( 3 , 1 ) , 21 ) ;
dil4 . helium = GET_INT_FROM ( ui . ostc4DilTable - > item ( 3 , 2 ) , 0 ) ;
dil4 . type = GET_INT_FROM ( ui . ostc4DilTable - > item ( 3 , 3 ) , 0 ) ;
dil4 . depth = GET_INT_FROM ( ui . ostc4DilTable - > item ( 3 , 4 ) , 0 ) ;
dil5 . oxygen = GET_INT_FROM ( ui . ostc4DilTable - > item ( 4 , 1 ) , 21 ) ;
dil5 . helium = GET_INT_FROM ( ui . ostc4DilTable - > item ( 4 , 2 ) , 0 ) ;
dil5 . type = GET_INT_FROM ( ui . ostc4DilTable - > item ( 4 , 3 ) , 0 ) ;
dil5 . depth = GET_INT_FROM ( ui . ostc4DilTable - > item ( 4 , 4 ) , 0 ) ;
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 . dil1 = dil1 ;
deviceDetails . dil2 = dil2 ;
deviceDetails . dil3 = dil3 ;
deviceDetails . dil4 = dil4 ;
deviceDetails . dil5 = dil5 ;
2017-04-27 18:35:02 +00:00
//set setpoint details
setpoint sp1 ;
setpoint sp2 ;
setpoint sp3 ;
setpoint sp4 ;
setpoint sp5 ;
sp1 . sp = GET_INT_FROM ( ui . ostc4SetPointTable - > item ( 0 , 1 ) , 70 ) ;
sp1 . depth = GET_INT_FROM ( ui . ostc4SetPointTable - > item ( 0 , 2 ) , 0 ) ;
sp2 . sp = GET_INT_FROM ( ui . ostc4SetPointTable - > item ( 1 , 1 ) , 90 ) ;
sp2 . depth = GET_INT_FROM ( ui . ostc4SetPointTable - > item ( 1 , 2 ) , 20 ) ;
sp3 . sp = GET_INT_FROM ( ui . ostc4SetPointTable - > item ( 2 , 1 ) , 100 ) ;
sp3 . depth = GET_INT_FROM ( ui . ostc4SetPointTable - > item ( 2 , 2 ) , 44 ) ;
sp4 . sp = GET_INT_FROM ( ui . ostc4SetPointTable - > item ( 3 , 1 ) , 120 ) ;
sp4 . depth = GET_INT_FROM ( ui . ostc4SetPointTable - > item ( 3 , 2 ) , 50 ) ;
sp5 . sp = GET_INT_FROM ( ui . ostc4SetPointTable - > item ( 4 , 1 ) , 140 ) ;
sp5 . depth = GET_INT_FROM ( ui . ostc4SetPointTable - > item ( 4 , 2 ) , 70 ) ;
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 . sp1 = sp1 ;
deviceDetails . sp2 = sp2 ;
deviceDetails . sp3 = sp3 ;
deviceDetails . sp4 = sp4 ;
deviceDetails . sp5 = sp5 ;
2017-04-26 18:49:12 +00:00
}
2014-05-30 06:56:27 +00:00
void ConfigureDiveComputerDialog : : readSettings ( )
{
2015-01-20 21:40:50 +00:00
ui . progressBar - > setValue ( 0 ) ;
ui . progressBar - > setFormat ( " %p% " ) ;
ui . progressBar - > setTextVisible ( true ) ;
2015-09-24 22:59:05 +00:00
// Fw update is no longer a option, needs to be done on a untouched device
ui . updateFirmwareButton - > setEnabled ( false ) ;
2023-03-02 12:01:46 +00:00
ui . forceUpdateFirmware - > setEnabled ( false ) ;
2014-05-30 06:56:27 +00:00
2014-06-10 15:25:25 +00:00
config - > readSettings ( & device_data ) ;
2014-05-30 06:56:27 +00:00
}
2014-10-17 22:33:47 +00:00
void ConfigureDiveComputerDialog : : resetSettings ( )
{
2015-01-20 21:40:50 +00:00
ui . progressBar - > setValue ( 0 ) ;
ui . progressBar - > setFormat ( " %p% " ) ;
ui . progressBar - > setTextVisible ( true ) ;
2014-10-17 22:33:47 +00:00
config - > resetSettings ( & device_data ) ;
}
2014-05-30 06:56:27 +00:00
void ConfigureDiveComputerDialog : : configMessage ( QString msg )
{
2015-01-20 21:40:50 +00:00
ui . progressBar - > setFormat ( msg ) ;
2014-05-30 06:56:27 +00:00
}
void ConfigureDiveComputerDialog : : configError ( QString err )
{
2018-03-03 13:34:31 +00:00
ui . progressBar - > setFormat ( tr ( " Error " ) + " : " + err ) ;
2014-05-30 06:56:27 +00:00
}
void ConfigureDiveComputerDialog : : getDeviceData ( )
{
2017-11-24 17:04:28 +00:00
QString device = ui . device - > currentText ( ) ;
2023-06-12 02:27:02 +00:00
# ifdef BT_SUPPORT
if ( isBluetoothAddress ( device ) ) {
QString name ;
device = copy_qstring ( extractBluetoothNameAddress ( device , name ) ) ;
device_data . btname = copy_qstring ( name ) ;
device_data . bluetooth_mode = true ;
} else
2017-11-24 17:04:28 +00:00
# endif
2023-06-12 02:27:02 +00:00
{
device_data . bluetooth_mode = false ;
}
2018-02-28 22:37:09 +00:00
device_data . devname = copy_qstring ( device ) ;
2014-05-30 06:56:27 +00:00
2023-06-18 01:57:56 +00:00
const DiveComputerEntry selectedDiveComputer = supportedDiveComputers [ ui . DiveComputerList - > currentRow ( ) ] ;
QString vendor = selectedDiveComputer . vendor ;
QString product = selectedDiveComputer . product ;
2023-06-12 02:27:02 +00:00
device_data . vendor = copy_qstring ( vendor ) ;
device_data . product = copy_qstring ( product ) ;
device_data . descriptor = descriptorLookup . value ( vendor . toLower ( ) + product . toLower ( ) ) ;
Re-do the libdivecomputer fingerprint save/load code
This tries to make our fingerprinting code work better, by avoiding
using the "deviceid" field that has always been unreliable because we've
calculated it multiple different ways, and even for the same version of
subsurface, it ends up changing in the middle (ie we calculate one value
initially, then re-calculate it when we have a proper serial number
string).
So instead, the fingerprinting code will look up and save the
fingerprint file using purely "stable" information that is available
early during the download:
- the device model name (which is a string with vendor and product name
separated by a space)
- the DC_EVENT_DEVINFO 32-bit 'serial' number (which is not necessarily
a real serial number at all, but hopefully at least a unique number
for the particular product)
but because the model name is not necessarily a good filename (think
slashes and other possibly invalid characters), we hash that model name
and use the resulting hex number in the fingerprint file name.
This way the fingerprint file is unambiguous at load and save time, and
depends purely on libdivecomputer data.
But because we also need to verify that we have the actual _dive_
associated with that fingerprint, we also need to save the final
deviceid and diveid when saving the fingerprint file, so that when we
load it again we can look up the dive and verify that we have it before
we use the fingerprint data.
To do that, the fingerprint file itself contains not just the
fingerprint data from libdivecomputer, but the last 8 bytes of the file
are the (subsurface) deviceid and the diveid of the dive that is
associated with the fingerprint.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2021-09-19 01:52:50 +00:00
device_data . diveid = 0 ;
memset ( & device_data . devinfo , 0 , sizeof ( device_data . devinfo ) ) ;
2014-05-30 06:56:27 +00:00
}
2023-06-12 02:27:02 +00:00
void ConfigureDiveComputerDialog : : on_close_clicked ( )
2014-05-30 06:56:27 +00:00
{
this - > close ( ) ;
}
2014-05-30 07:49:58 +00:00
2014-06-10 12:03:26 +00:00
void ConfigureDiveComputerDialog : : on_saveSettingsPushButton_clicked ( )
2014-05-30 07:49:58 +00:00
{
2015-01-20 21:40:50 +00:00
ui . progressBar - > setValue ( 0 ) ;
ui . progressBar - > setFormat ( " %p% " ) ;
ui . progressBar - > setTextVisible ( true ) ;
2014-06-10 16:19:28 +00:00
populateDeviceDetails ( ) ;
2014-06-10 15:25:25 +00:00
config - > saveDeviceDetails ( deviceDetails , & device_data ) ;
}
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 ConfigureDiveComputerDialog : : deviceDetailsReceived ( DeviceDetails newDeviceDetails )
2014-06-10 15:25:25 +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 = std : : move ( newDeviceDetails ) ;
2014-06-10 15:25:25 +00:00
reloadValues ( ) ;
}
void ConfigureDiveComputerDialog : : reloadValues ( )
2014-10-12 14:51:30 +00:00
{
2014-10-15 23:13:51 +00:00
// Enable the buttons to do operations on this data
2014-10-15 23:13:53 +00:00
ui . saveSettingsPushButton - > setEnabled ( true ) ;
ui . backupButton - > setEnabled ( true ) ;
2014-10-15 23:13:51 +00:00
2014-12-29 04:56:58 +00:00
switch ( ui . dcStackedWidget - > currentIndex ( ) ) {
2014-10-12 14:51:30 +00:00
case 0 :
2018-03-03 13:29:51 +00:00
reloadValuesOSTC ( ) ;
2014-10-12 14:51:30 +00:00
break ;
case 1 :
2018-03-03 13:29:51 +00:00
reloadValuesOSTC3 ( ) ;
2014-10-12 14:51:30 +00:00
break ;
2014-10-27 20:54:57 +00:00
case 2 :
2018-03-03 13:29:51 +00:00
reloadValuesOSTC4 ( ) ;
2014-10-27 20:54:57 +00:00
break ;
2017-04-26 18:49:12 +00:00
case 3 :
2018-03-03 13:29:51 +00:00
reloadValuesSuuntoVyper ( ) ;
2017-04-26 18:49:12 +00:00
break ;
2014-10-12 14:51:30 +00:00
}
}
void ConfigureDiveComputerDialog : : reloadValuesOSTC3 ( )
2014-06-10 15:25:25 +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
ui . serialNoLineEdit - > setText ( deviceDetails . serialNo ) ;
ui . firmwareVersionLineEdit - > setText ( deviceDetails . firmwareVersion ) ;
ui . customTextLlineEdit - > setText ( deviceDetails . customText ) ;
ui . modelLineEdit - > setText ( deviceDetails . model ) ;
ui . diveModeComboBox - > setCurrentIndex ( deviceDetails . diveMode ) ;
ui . saturationSpinBox - > setValue ( deviceDetails . saturation ) ;
ui . desaturationSpinBox - > setValue ( deviceDetails . desaturation ) ;
ui . lastDecoSpinBox - > setValue ( deviceDetails . lastDeco ) ;
ui . brightnessComboBox - > setCurrentIndex ( deviceDetails . brightness ) ;
ui . unitsComboBox - > setCurrentIndex ( deviceDetails . units ) ;
ui . samplingRateComboBox - > setCurrentIndex ( deviceDetails . samplingRate ) ;
ui . salinitySpinBox - > setValue ( deviceDetails . salinity ) ;
ui . diveModeColour - > setCurrentIndex ( deviceDetails . diveModeColor ) ;
ui . languageComboBox - > setCurrentIndex ( deviceDetails . language ) ;
ui . dateFormatComboBox - > setCurrentIndex ( deviceDetails . dateFormat ) ;
ui . compassGainComboBox - > setCurrentIndex ( deviceDetails . compassGain ) ;
ui . safetyStopCheckBox - > setChecked ( deviceDetails . safetyStop ) ;
ui . gfHighSpinBox - > setValue ( deviceDetails . gfHigh ) ;
ui . gfLowSpinBox - > setValue ( deviceDetails . gfLow ) ;
ui . pressureSensorOffsetSpinBox - > setValue ( deviceDetails . pressureSensorOffset ) ;
ui . ppO2MinSpinBox - > setValue ( deviceDetails . ppO2Min ) ;
ui . ppO2MaxSpinBox - > setValue ( deviceDetails . ppO2Max ) ;
ui . futureTTSSpinBox - > setValue ( deviceDetails . futureTTS ) ;
ui . ccrModeComboBox - > setCurrentIndex ( deviceDetails . ccrMode ) ;
ui . decoTypeComboBox - > setCurrentIndex ( deviceDetails . decoType ) ;
ui . aGFSelectableCheckBox - > setChecked ( deviceDetails . aGFSelectable ) ;
ui . aGFHighSpinBox - > setValue ( deviceDetails . aGFHigh ) ;
ui . aGFLowSpinBox - > setValue ( deviceDetails . aGFLow ) ;
ui . calibrationGasSpinBox - > setValue ( deviceDetails . calibrationGas ) ;
ui . flipScreenCheckBox - > setChecked ( deviceDetails . flipScreen ) ;
ui . leftButtonSensitivity - > setValue ( deviceDetails . leftButtonSensitivity ) ;
ui . rightButtonSensitivity - > setValue ( deviceDetails . rightButtonSensitivity ) ;
ui . bottomGasConsumption - > setValue ( deviceDetails . bottomGasConsumption ) ;
ui . decoGasConsumption - > setValue ( deviceDetails . decoGasConsumption ) ;
ui . modWarning - > setChecked ( deviceDetails . modWarning ) ;
ui . dynamicAscendRate - > setChecked ( deviceDetails . dynamicAscendRate ) ;
ui . graphicalSpeedIndicator - > setChecked ( deviceDetails . graphicalSpeedIndicator ) ;
ui . alwaysShowppO2 - > setChecked ( deviceDetails . alwaysShowppO2 ) ;
ui . tempSensorOffsetDoubleSpinBox - > setValue ( ( double ) deviceDetails . tempSensorOffset / 10.0 ) ;
ui . safetyStopLengthSpinBox - > setValue ( deviceDetails . safetyStopLength ) ;
ui . safetyStopStartDepthDoubleSpinBox - > setValue ( deviceDetails . safetyStopStartDepth / 10.0 ) ;
ui . safetyStopEndDepthDoubleSpinBox - > setValue ( deviceDetails . safetyStopEndDepth / 10.0 ) ;
ui . safetyStopResetDepthDoubleSpinBox - > setValue ( deviceDetails . safetyStopResetDepth / 10.0 ) ;
2014-06-20 04:51:32 +00:00
//load gas 1 values
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
ui . ostc3GasTable - > setItem ( 0 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas1 . oxygen ) ) ) ;
ui . ostc3GasTable - > setItem ( 0 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas1 . helium ) ) ) ;
ui . ostc3GasTable - > setItem ( 0 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas1 . type ) ) ) ;
ui . ostc3GasTable - > setItem ( 0 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas1 . depth ) ) ) ;
2014-06-21 05:46:57 +00:00
//load gas 2 values
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
ui . ostc3GasTable - > setItem ( 1 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas2 . oxygen ) ) ) ;
ui . ostc3GasTable - > setItem ( 1 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas2 . helium ) ) ) ;
ui . ostc3GasTable - > setItem ( 1 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas2 . type ) ) ) ;
ui . ostc3GasTable - > setItem ( 1 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas2 . depth ) ) ) ;
2014-06-21 05:46:57 +00:00
//load gas 3 values
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
ui . ostc3GasTable - > setItem ( 2 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas3 . oxygen ) ) ) ;
ui . ostc3GasTable - > setItem ( 2 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas3 . helium ) ) ) ;
ui . ostc3GasTable - > setItem ( 2 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas3 . type ) ) ) ;
ui . ostc3GasTable - > setItem ( 2 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas3 . depth ) ) ) ;
2014-06-21 05:46:57 +00:00
//load gas 4 values
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
ui . ostc3GasTable - > setItem ( 3 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas4 . oxygen ) ) ) ;
ui . ostc3GasTable - > setItem ( 3 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas4 . helium ) ) ) ;
ui . ostc3GasTable - > setItem ( 3 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas4 . type ) ) ) ;
ui . ostc3GasTable - > setItem ( 3 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas4 . depth ) ) ) ;
2014-06-21 05:46:57 +00:00
//load gas 5 values
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
ui . ostc3GasTable - > setItem ( 4 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas5 . oxygen ) ) ) ;
ui . ostc3GasTable - > setItem ( 4 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas5 . helium ) ) ) ;
ui . ostc3GasTable - > setItem ( 4 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas5 . type ) ) ) ;
ui . ostc3GasTable - > setItem ( 4 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas5 . depth ) ) ) ;
2014-06-21 06:53:05 +00:00
//load dil 1 values
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
ui . ostc3DilTable - > setItem ( 0 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil1 . oxygen ) ) ) ;
ui . ostc3DilTable - > setItem ( 0 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil1 . helium ) ) ) ;
ui . ostc3DilTable - > setItem ( 0 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil1 . type ) ) ) ;
ui . ostc3DilTable - > setItem ( 0 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil1 . depth ) ) ) ;
2014-06-21 06:53:05 +00:00
//load dil 2 values
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
ui . ostc3DilTable - > setItem ( 1 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil2 . oxygen ) ) ) ;
ui . ostc3DilTable - > setItem ( 1 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil2 . helium ) ) ) ;
ui . ostc3DilTable - > setItem ( 1 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil2 . type ) ) ) ;
ui . ostc3DilTable - > setItem ( 1 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil2 . depth ) ) ) ;
2014-06-21 06:53:05 +00:00
//load dil 3 values
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
ui . ostc3DilTable - > setItem ( 2 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil3 . oxygen ) ) ) ;
ui . ostc3DilTable - > setItem ( 2 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil3 . helium ) ) ) ;
ui . ostc3DilTable - > setItem ( 2 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil3 . type ) ) ) ;
ui . ostc3DilTable - > setItem ( 2 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil3 . depth ) ) ) ;
2014-06-21 06:53:05 +00:00
//load dil 4 values
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
ui . ostc3DilTable - > setItem ( 3 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil4 . oxygen ) ) ) ;
ui . ostc3DilTable - > setItem ( 3 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil4 . helium ) ) ) ;
ui . ostc3DilTable - > setItem ( 3 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil4 . type ) ) ) ;
ui . ostc3DilTable - > setItem ( 3 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil4 . depth ) ) ) ;
2014-06-21 06:53:05 +00:00
//load dil 5 values
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
ui . ostc3DilTable - > setItem ( 4 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil5 . oxygen ) ) ) ;
ui . ostc3DilTable - > setItem ( 4 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil5 . helium ) ) ) ;
ui . ostc3DilTable - > setItem ( 4 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil5 . type ) ) ) ;
ui . ostc3DilTable - > setItem ( 4 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil5 . depth ) ) ) ;
2014-06-21 07:22:47 +00:00
2017-03-06 12:36:42 +00:00
//load setpoint 1 values
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
ui . ostc3SetPointTable - > setItem ( 0 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp1 . sp ) ) ) ;
ui . ostc3SetPointTable - > setItem ( 0 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp1 . depth ) ) ) ;
2014-06-21 07:22:47 +00:00
2017-03-06 12:36:42 +00:00
//load setpoint 2 values
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
ui . ostc3SetPointTable - > setItem ( 1 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp2 . sp ) ) ) ;
ui . ostc3SetPointTable - > setItem ( 1 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp2 . depth ) ) ) ;
2014-06-21 07:22:47 +00:00
2017-03-06 12:36:42 +00:00
//load setpoint 3 values
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
ui . ostc3SetPointTable - > setItem ( 2 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp3 . sp ) ) ) ;
ui . ostc3SetPointTable - > setItem ( 2 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp3 . depth ) ) ) ;
2014-06-21 07:22:47 +00:00
2017-03-06 12:36:42 +00:00
//load setpoint 4 values
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
ui . ostc3SetPointTable - > setItem ( 3 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp4 . sp ) ) ) ;
ui . ostc3SetPointTable - > setItem ( 3 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp4 . depth ) ) ) ;
2014-06-21 07:22:47 +00:00
2017-03-06 12:36:42 +00:00
//load setpoint 5 values
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
ui . ostc3SetPointTable - > setItem ( 4 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp5 . sp ) ) ) ;
ui . ostc3SetPointTable - > setItem ( 4 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp5 . depth ) ) ) ;
2014-05-30 07:49:58 +00:00
}
2014-06-07 18:56:44 +00:00
2014-10-27 20:54:57 +00:00
void ConfigureDiveComputerDialog : : reloadValuesOSTC ( )
{
2014-12-29 04:56:58 +00:00
/*
2014-10-27 20:54:58 +00:00
# Not in OSTC
setBrightness
setCalibrationGas
setCompassGain
setDiveMode - Bult into setDecoType
setDiveModeColor - Lots of different colors
setFlipScreen
setLanguage
setPressureSensorOffset
setUnits
setSetPointFallback
setCcrMode
# Not in OSTC3
setNumberOfDives
*/
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
ui . serialNoLineEdit_3 - > setText ( deviceDetails . serialNo ) ;
ui . firmwareVersionLineEdit_3 - > setText ( deviceDetails . firmwareVersion ) ;
ui . customTextLlineEdit_3 - > setText ( deviceDetails . customText ) ;
ui . saturationSpinBox_3 - > setValue ( deviceDetails . saturation ) ;
ui . desaturationSpinBox_3 - > setValue ( deviceDetails . desaturation ) ;
ui . lastDecoSpinBox_3 - > setValue ( deviceDetails . lastDeco ) ;
ui . samplingRateSpinBox_3 - > setValue ( deviceDetails . samplingRate ) ;
ui . salinityDoubleSpinBox_3 - > setValue ( ( double ) deviceDetails . salinity / 100.0 ) ;
ui . dateFormatComboBox_3 - > setCurrentIndex ( deviceDetails . dateFormat ) ;
ui . safetyStopCheckBox_3 - > setChecked ( deviceDetails . safetyStop ) ;
ui . gfHighSpinBox_3 - > setValue ( deviceDetails . gfHigh ) ;
ui . gfLowSpinBox_3 - > setValue ( deviceDetails . gfLow ) ;
ui . ppO2MinSpinBox_3 - > setValue ( deviceDetails . ppO2Min ) ;
ui . ppO2MaxSpinBox_3 - > setValue ( deviceDetails . ppO2Max ) ;
ui . futureTTSSpinBox_3 - > setValue ( deviceDetails . futureTTS ) ;
ui . decoTypeComboBox_3 - > setCurrentIndex ( deviceDetails . decoType ) ;
ui . aGFSelectableCheckBox_3 - > setChecked ( deviceDetails . aGFSelectable ) ;
ui . aGFHighSpinBox_3 - > setValue ( deviceDetails . aGFHigh ) ;
ui . aGFLowSpinBox_3 - > setValue ( deviceDetails . aGFLow ) ;
ui . numberOfDivesSpinBox_3 - > setValue ( deviceDetails . numberOfDives ) ;
ui . bottomGasConsumption_3 - > setValue ( deviceDetails . bottomGasConsumption ) ;
ui . decoGasConsumption_3 - > setValue ( deviceDetails . decoGasConsumption ) ;
ui . graphicalSpeedIndicator_3 - > setChecked ( deviceDetails . graphicalSpeedIndicator ) ;
ui . safetyStopLengthSpinBox_3 - > setValue ( deviceDetails . safetyStopLength ) ;
ui . safetyStopStartDepthDoubleSpinBox_3 - > setValue ( deviceDetails . safetyStopStartDepth / 10.0 ) ;
ui . safetyStopEndDepthDoubleSpinBox_3 - > setValue ( deviceDetails . safetyStopEndDepth / 10.0 ) ;
ui . safetyStopResetDepthDoubleSpinBox_3 - > setValue ( deviceDetails . safetyStopResetDepth / 10.0 ) ;
2014-10-27 20:54:57 +00:00
//load gas 1 values
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
ui . ostcGasTable - > setItem ( 0 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas1 . oxygen ) ) ) ;
ui . ostcGasTable - > setItem ( 0 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas1 . helium ) ) ) ;
ui . ostcGasTable - > setItem ( 0 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas1 . type ) ) ) ;
ui . ostcGasTable - > setItem ( 0 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas1 . depth ) ) ) ;
2014-10-27 20:54:57 +00:00
//load gas 2 values
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
ui . ostcGasTable - > setItem ( 1 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas2 . oxygen ) ) ) ;
ui . ostcGasTable - > setItem ( 1 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas2 . helium ) ) ) ;
ui . ostcGasTable - > setItem ( 1 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas2 . type ) ) ) ;
ui . ostcGasTable - > setItem ( 1 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas2 . depth ) ) ) ;
2014-10-27 20:54:57 +00:00
//load gas 3 values
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
ui . ostcGasTable - > setItem ( 2 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas3 . oxygen ) ) ) ;
ui . ostcGasTable - > setItem ( 2 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas3 . helium ) ) ) ;
ui . ostcGasTable - > setItem ( 2 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas3 . type ) ) ) ;
ui . ostcGasTable - > setItem ( 2 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas3 . depth ) ) ) ;
2014-10-27 20:54:57 +00:00
//load gas 4 values
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
ui . ostcGasTable - > setItem ( 3 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas4 . oxygen ) ) ) ;
ui . ostcGasTable - > setItem ( 3 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas4 . helium ) ) ) ;
ui . ostcGasTable - > setItem ( 3 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas4 . type ) ) ) ;
ui . ostcGasTable - > setItem ( 3 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas4 . depth ) ) ) ;
2014-10-27 20:54:57 +00:00
//load gas 5 values
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
ui . ostcGasTable - > setItem ( 4 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas5 . oxygen ) ) ) ;
ui . ostcGasTable - > setItem ( 4 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas5 . helium ) ) ) ;
ui . ostcGasTable - > setItem ( 4 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas5 . type ) ) ) ;
ui . ostcGasTable - > setItem ( 4 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas5 . depth ) ) ) ;
2014-10-27 20:54:57 +00:00
//load dil 1 values
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
ui . ostcDilTable - > setItem ( 0 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil1 . oxygen ) ) ) ;
ui . ostcDilTable - > setItem ( 0 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil1 . helium ) ) ) ;
ui . ostcDilTable - > setItem ( 0 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil1 . type ) ) ) ;
ui . ostcDilTable - > setItem ( 0 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil1 . depth ) ) ) ;
2014-10-27 20:54:57 +00:00
//load dil 2 values
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
ui . ostcDilTable - > setItem ( 1 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil2 . oxygen ) ) ) ;
ui . ostcDilTable - > setItem ( 1 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil2 . helium ) ) ) ;
ui . ostcDilTable - > setItem ( 1 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil2 . type ) ) ) ;
ui . ostcDilTable - > setItem ( 1 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil2 . depth ) ) ) ;
2014-10-27 20:54:57 +00:00
//load dil 3 values
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
ui . ostcDilTable - > setItem ( 2 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil3 . oxygen ) ) ) ;
ui . ostcDilTable - > setItem ( 2 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil3 . helium ) ) ) ;
ui . ostcDilTable - > setItem ( 2 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil3 . type ) ) ) ;
ui . ostcDilTable - > setItem ( 2 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil3 . depth ) ) ) ;
2014-10-27 20:54:57 +00:00
//load dil 4 values
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
ui . ostcDilTable - > setItem ( 3 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil4 . oxygen ) ) ) ;
ui . ostcDilTable - > setItem ( 3 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil4 . helium ) ) ) ;
ui . ostcDilTable - > setItem ( 3 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil4 . type ) ) ) ;
ui . ostcDilTable - > setItem ( 3 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil4 . depth ) ) ) ;
2014-10-27 20:54:57 +00:00
//load dil 5 values
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
ui . ostcDilTable - > setItem ( 4 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil5 . oxygen ) ) ) ;
ui . ostcDilTable - > setItem ( 4 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil5 . helium ) ) ) ;
ui . ostcDilTable - > setItem ( 4 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil5 . type ) ) ) ;
ui . ostcDilTable - > setItem ( 4 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil5 . depth ) ) ) ;
2014-10-27 20:54:57 +00:00
2017-03-06 12:36:42 +00:00
//load setpoint 1 values
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
ui . ostcSetPointTable - > setItem ( 0 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp1 . sp ) ) ) ;
ui . ostcSetPointTable - > setItem ( 0 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp1 . depth ) ) ) ;
2014-10-27 20:54:57 +00:00
2017-03-06 12:36:42 +00:00
//load setpoint 2 values
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
ui . ostcSetPointTable - > setItem ( 1 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp2 . sp ) ) ) ;
ui . ostcSetPointTable - > setItem ( 1 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp2 . depth ) ) ) ;
2014-10-27 20:54:57 +00:00
2017-03-06 12:36:42 +00:00
//load setpoint 3 values
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
ui . ostcSetPointTable - > setItem ( 2 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp3 . sp ) ) ) ;
ui . ostcSetPointTable - > setItem ( 2 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp3 . depth ) ) ) ;
2014-10-27 20:54:57 +00:00
2017-03-06 12:36:42 +00:00
//load setpoint 4 values
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
ui . ostcSetPointTable - > setItem ( 3 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp4 . sp ) ) ) ;
ui . ostcSetPointTable - > setItem ( 3 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp4 . depth ) ) ) ;
2014-10-27 20:54:57 +00:00
2017-03-06 12:36:42 +00:00
//load setpoint 5 values
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
ui . ostcSetPointTable - > setItem ( 4 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp5 . sp ) ) ) ;
ui . ostcSetPointTable - > setItem ( 4 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp5 . depth ) ) ) ;
2014-10-27 20:54:57 +00:00
}
2014-10-12 14:51:30 +00:00
void ConfigureDiveComputerDialog : : reloadValuesSuuntoVyper ( )
{
const char * depth_unit ;
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
ui . maxDepthDoubleSpinBox - > setValue ( get_depth_units ( deviceDetails . maxDepth , NULL , & depth_unit ) ) ;
2014-10-15 23:13:53 +00:00
ui . maxDepthDoubleSpinBox - > setSuffix ( depth_unit ) ;
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
ui . totalTimeSpinBox - > setValue ( deviceDetails . totalTime ) ;
ui . numberOfDivesSpinBox - > setValue ( deviceDetails . numberOfDives ) ;
ui . modelLineEdit_1 - > setText ( deviceDetails . model ) ;
ui . firmwareVersionLineEdit_1 - > setText ( deviceDetails . firmwareVersion ) ;
ui . serialNoLineEdit_1 - > setText ( deviceDetails . serialNo ) ;
ui . customTextLlineEdit_1 - > setText ( deviceDetails . customText ) ;
ui . samplingRateComboBox_1 - > setCurrentIndex ( deviceDetails . samplingRate = = 60 ? 3 : ( deviceDetails . samplingRate / 10 ) - 1 ) ;
ui . altitudeRangeComboBox - > setCurrentIndex ( deviceDetails . altitude ) ;
ui . personalSafetyComboBox - > setCurrentIndex ( deviceDetails . personalSafety ) ;
ui . timeFormatComboBox - > setCurrentIndex ( deviceDetails . timeFormat ) ;
ui . unitsComboBox_1 - > setCurrentIndex ( deviceDetails . units ) ;
ui . diveModeComboBox_1 - > setCurrentIndex ( deviceDetails . diveMode ) ;
ui . lightCheckBox - > setChecked ( deviceDetails . lightEnabled ) ;
ui . lightSpinBox - > setValue ( deviceDetails . light ) ;
ui . alarmDepthCheckBox - > setChecked ( deviceDetails . alarmDepthEnabled ) ;
ui . alarmDepthDoubleSpinBox - > setValue ( get_depth_units ( deviceDetails . alarmDepth , NULL , & depth_unit ) ) ;
2014-10-15 23:13:53 +00:00
ui . alarmDepthDoubleSpinBox - > setSuffix ( depth_unit ) ;
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
ui . alarmTimeCheckBox - > setChecked ( deviceDetails . alarmTimeEnabled ) ;
ui . alarmTimeSpinBox - > setValue ( deviceDetails . alarmTime ) ;
2014-10-12 14:51:30 +00:00
}
2014-06-10 16:19:28 +00:00
2017-04-26 18:49:12 +00:00
void ConfigureDiveComputerDialog : : reloadValuesOSTC4 ( )
{
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
ui . serialNoLineEdit_4 - > setText ( deviceDetails . serialNo ) ;
ui . firmwareVersionLineEdit_4 - > setText ( deviceDetails . firmwareVersion ) ;
ui . customTextLlineEdit_4 - > setText ( deviceDetails . customText ) ;
ui . modelLineEdit_4 - > setText ( deviceDetails . model ) ;
ui . diveModeComboBox_4 - > setCurrentIndex ( deviceDetails . diveMode ) ;
ui . lastDecoSpinBox_4 - > setValue ( deviceDetails . lastDeco ) ;
ui . brightnessComboBox_4 - > setCurrentIndex ( deviceDetails . brightness ) ;
ui . unitsComboBox_4 - > setCurrentIndex ( deviceDetails . units ) ;
ui . salinitySpinBox_4 - > setValue ( deviceDetails . salinity ) ;
ui . diveModeColour_4 - > setCurrentIndex ( deviceDetails . diveModeColor ) ;
ui . languageComboBox_4 - > setCurrentIndex ( deviceDetails . language ) ;
ui . dateFormatComboBox_4 - > setCurrentIndex ( deviceDetails . dateFormat ) ;
ui . safetyStopCheckBox_4 - > setChecked ( deviceDetails . safetyStop ) ;
ui . gfHighSpinBox_4 - > setValue ( deviceDetails . gfHigh ) ;
ui . gfLowSpinBox_4 - > setValue ( deviceDetails . gfLow ) ;
ui . pressureSensorOffsetSpinBox_4 - > setValue ( deviceDetails . pressureSensorOffset ) ;
ui . ppO2MinSpinBox_4 - > setValue ( deviceDetails . ppO2Min ) ;
ui . ppO2MaxSpinBox_4 - > setValue ( deviceDetails . ppO2Max ) ;
ui . futureTTSSpinBox_4 - > setValue ( deviceDetails . futureTTS ) ;
ui . ccrModeComboBox_4 - > setCurrentIndex ( deviceDetails . ccrMode ) ;
ui . decoTypeComboBox_4 - > setCurrentIndex ( deviceDetails . decoType ) ;
ui . aGFHighSpinBox_4 - > setValue ( deviceDetails . aGFHigh ) ;
ui . aGFLowSpinBox_4 - > setValue ( deviceDetails . aGFLow ) ;
ui . vpmConservatismSpinBox - > setValue ( deviceDetails . vpmConservatism ) ;
ui . setPointFallbackCheckBox_4 - > setChecked ( deviceDetails . setPointFallback ) ;
ui . buttonSensitivity_4 - > setValue ( deviceDetails . buttonSensitivity ) ;
ui . bottomGasConsumption_4 - > setValue ( deviceDetails . bottomGasConsumption ) ;
ui . decoGasConsumption_4 - > setValue ( deviceDetails . decoGasConsumption ) ;
ui . travelGasConsumption_4 - > setValue ( deviceDetails . travelGasConsumption ) ;
ui . alwaysShowppO2_4 - > setChecked ( deviceDetails . alwaysShowppO2 ) ;
ui . tempSensorOffsetDoubleSpinBox_4 - > setValue ( ( double ) deviceDetails . tempSensorOffset / 10.0 ) ;
ui . safetyStopLengthSpinBox_4 - > setValue ( deviceDetails . safetyStopLength ) ;
ui . safetyStopStartDepthDoubleSpinBox_4 - > setValue ( deviceDetails . safetyStopStartDepth / 10.0 ) ;
2017-04-27 18:35:02 +00:00
//load gas 1 values
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
ui . ostc4GasTable - > setItem ( 0 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas1 . oxygen ) ) ) ;
ui . ostc4GasTable - > setItem ( 0 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas1 . helium ) ) ) ;
ui . ostc4GasTable - > setItem ( 0 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas1 . type ) ) ) ;
ui . ostc4GasTable - > setItem ( 0 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas1 . depth ) ) ) ;
2017-04-27 18:35:02 +00:00
//load gas 2 values
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
ui . ostc4GasTable - > setItem ( 1 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas2 . oxygen ) ) ) ;
ui . ostc4GasTable - > setItem ( 1 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas2 . helium ) ) ) ;
ui . ostc4GasTable - > setItem ( 1 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas2 . type ) ) ) ;
ui . ostc4GasTable - > setItem ( 1 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas2 . depth ) ) ) ;
2017-04-27 18:35:02 +00:00
//load gas 3 values
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
ui . ostc4GasTable - > setItem ( 2 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas3 . oxygen ) ) ) ;
ui . ostc4GasTable - > setItem ( 2 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas3 . helium ) ) ) ;
ui . ostc4GasTable - > setItem ( 2 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas3 . type ) ) ) ;
ui . ostc4GasTable - > setItem ( 2 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas3 . depth ) ) ) ;
2017-04-27 18:35:02 +00:00
//load gas 4 values
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
ui . ostc4GasTable - > setItem ( 3 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas4 . oxygen ) ) ) ;
ui . ostc4GasTable - > setItem ( 3 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas4 . helium ) ) ) ;
ui . ostc4GasTable - > setItem ( 3 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas4 . type ) ) ) ;
ui . ostc4GasTable - > setItem ( 3 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas4 . depth ) ) ) ;
2017-04-27 18:35:02 +00:00
//load gas 5 values
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
ui . ostc4GasTable - > setItem ( 4 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas5 . oxygen ) ) ) ;
ui . ostc4GasTable - > setItem ( 4 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas5 . helium ) ) ) ;
ui . ostc4GasTable - > setItem ( 4 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas5 . type ) ) ) ;
ui . ostc4GasTable - > setItem ( 4 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . gas5 . depth ) ) ) ;
2017-04-27 18:35:02 +00:00
//load dil 1 values
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
ui . ostc4DilTable - > setItem ( 0 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil1 . oxygen ) ) ) ;
ui . ostc4DilTable - > setItem ( 0 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil1 . helium ) ) ) ;
ui . ostc4DilTable - > setItem ( 0 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil1 . type ) ) ) ;
ui . ostc4DilTable - > setItem ( 0 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil1 . depth ) ) ) ;
2017-04-27 18:35:02 +00:00
//load dil 2 values
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
ui . ostc4DilTable - > setItem ( 1 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil2 . oxygen ) ) ) ;
ui . ostc4DilTable - > setItem ( 1 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil2 . helium ) ) ) ;
ui . ostc4DilTable - > setItem ( 1 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil2 . type ) ) ) ;
ui . ostc4DilTable - > setItem ( 1 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil2 . depth ) ) ) ;
2017-04-27 18:35:02 +00:00
//load dil 3 values
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
ui . ostc4DilTable - > setItem ( 2 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil3 . oxygen ) ) ) ;
ui . ostc4DilTable - > setItem ( 2 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil3 . helium ) ) ) ;
ui . ostc4DilTable - > setItem ( 2 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil3 . type ) ) ) ;
ui . ostc4DilTable - > setItem ( 2 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil3 . depth ) ) ) ;
2017-04-27 18:35:02 +00:00
//load dil 4 values
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
ui . ostc4DilTable - > setItem ( 3 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil4 . oxygen ) ) ) ;
ui . ostc4DilTable - > setItem ( 3 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil4 . helium ) ) ) ;
ui . ostc4DilTable - > setItem ( 3 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil4 . type ) ) ) ;
ui . ostc4DilTable - > setItem ( 3 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil4 . depth ) ) ) ;
2017-04-27 18:35:02 +00:00
//load dil 5 values
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
ui . ostc4DilTable - > setItem ( 4 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil5 . oxygen ) ) ) ;
ui . ostc4DilTable - > setItem ( 4 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil5 . helium ) ) ) ;
ui . ostc4DilTable - > setItem ( 4 , 3 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil5 . type ) ) ) ;
ui . ostc4DilTable - > setItem ( 4 , 4 , new QTableWidgetItem ( QString : : number ( deviceDetails . dil5 . depth ) ) ) ;
2017-04-27 18:35:02 +00:00
//load setpoint 1 values
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
ui . ostc4SetPointTable - > setItem ( 0 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp1 . sp ) ) ) ;
ui . ostc4SetPointTable - > setItem ( 0 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp1 . depth ) ) ) ;
2017-04-27 18:35:02 +00:00
//load setpoint 2 values
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
ui . ostc4SetPointTable - > setItem ( 1 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp2 . sp ) ) ) ;
ui . ostc4SetPointTable - > setItem ( 1 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp2 . depth ) ) ) ;
2017-04-27 18:35:02 +00:00
//load setpoint 4 values
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
ui . ostc4SetPointTable - > setItem ( 2 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp3 . sp ) ) ) ;
ui . ostc4SetPointTable - > setItem ( 2 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp3 . depth ) ) ) ;
2017-04-27 18:35:02 +00:00
//load setpoint 4 values
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
ui . ostc4SetPointTable - > setItem ( 3 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp4 . sp ) ) ) ;
ui . ostc4SetPointTable - > setItem ( 3 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp4 . depth ) ) ) ;
2017-04-27 18:35:02 +00:00
//load setpoint 5 values
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
ui . ostc4SetPointTable - > setItem ( 4 , 1 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp5 . sp ) ) ) ;
ui . ostc4SetPointTable - > setItem ( 4 , 2 , new QTableWidgetItem ( QString : : number ( deviceDetails . sp5 . depth ) ) ) ;
2017-04-26 18:49:12 +00:00
}
2014-06-10 16:19:28 +00:00
void ConfigureDiveComputerDialog : : on_backupButton_clicked ( )
{
QFileInfo fi ( filename ) ;
filename = fi . absolutePath ( ) . append ( QDir : : separator ( ) ) . append ( " Backup.xml " ) ;
2014-09-11 21:56:35 +00:00
QString backupPath = QFileDialog : : getSaveFileName ( this , tr ( " Backup dive computer settings " ) ,
2017-10-27 12:52:27 +00:00
filename , tr ( " Backup files " ) + " (*.xml) " ) ;
2014-06-10 16:19:28 +00:00
if ( ! backupPath . isEmpty ( ) ) {
populateDeviceDetails ( ) ;
2014-07-31 15:51:38 +00:00
if ( ! config - > saveXMLBackup ( backupPath , deviceDetails , & device_data ) ) {
2014-09-11 21:56:35 +00:00
QMessageBox : : critical ( this , tr ( " XML backup error " ) ,
2014-06-11 06:37:27 +00:00
tr ( " An error occurred while saving the backup file. \n %1 " )
2014-12-29 04:56:58 +00:00
. arg ( config - > lastError ) ) ;
2014-06-10 16:19:28 +00:00
} else {
QMessageBox : : information ( this , tr ( " Backup succeeded " ) ,
tr ( " Your settings have been saved to: %1 " )
2014-12-29 04:56:58 +00:00
. arg ( backupPath ) ) ;
2014-06-10 16:19:28 +00:00
}
}
}
2014-06-11 06:37:27 +00:00
void ConfigureDiveComputerDialog : : on_restoreBackupButton_clicked ( )
{
QFileInfo fi ( filename ) ;
filename = fi . absolutePath ( ) . append ( QDir : : separator ( ) ) . append ( " Backup.xml " ) ;
2014-09-11 21:56:35 +00:00
QString restorePath = QFileDialog : : getOpenFileName ( this , tr ( " Restore dive computer settings " ) ,
2017-10-27 12:52:27 +00:00
filename , tr ( " Backup files " ) + " (*.xml) " ) ;
2014-06-11 06:37:27 +00:00
if ( ! restorePath . isEmpty ( ) ) {
2015-09-24 22:59:05 +00:00
// Fw update is no longer a option, needs to be done on a untouched device
ui . updateFirmwareButton - > setEnabled ( false ) ;
2023-03-02 12:01:46 +00:00
ui . forceUpdateFirmware - > setEnabled ( false ) ;
2014-07-31 15:51:38 +00:00
if ( ! config - > restoreXMLBackup ( restorePath , deviceDetails ) ) {
2014-09-11 21:56:35 +00:00
QMessageBox : : critical ( this , tr ( " XML restore error " ) ,
2014-06-11 06:37:27 +00:00
tr ( " An error occurred while restoring the backup file. \n %1 " )
2014-12-29 04:56:58 +00:00
. arg ( config - > lastError ) ) ;
2014-06-11 06:37:27 +00:00
} else {
reloadValues ( ) ;
QMessageBox : : information ( this , tr ( " Restore succeeded " ) ,
2014-12-29 04:56:58 +00:00
tr ( " Your settings have been restored successfully. " ) ) ;
2014-06-11 06:37:27 +00:00
}
}
}
2014-06-11 08:47:25 +00:00
2014-06-23 15:16:27 +00:00
void ConfigureDiveComputerDialog : : on_updateFirmwareButton_clicked ( )
{
QFileInfo fi ( filename ) ;
filename = fi . absolutePath ( ) ;
QString firmwarePath = QFileDialog : : getOpenFileName ( this , tr ( " Select firmware file " ) ,
2017-10-27 12:52:27 +00:00
filename , tr ( " All files " ) + " (*.*) " ) ;
2014-06-23 15:16:27 +00:00
if ( ! firmwarePath . isEmpty ( ) ) {
2015-01-20 21:40:50 +00:00
ui . progressBar - > setValue ( 0 ) ;
ui . progressBar - > setFormat ( " %p% " ) ;
ui . progressBar - > setTextVisible ( true ) ;
2023-03-02 12:01:46 +00:00
config - > startFirmwareUpdate ( firmwarePath , & device_data , ui . forceUpdateFirmware - > isChecked ( ) ) ;
2014-06-23 15:16:27 +00:00
}
}
2014-07-16 09:04:54 +00:00
2014-12-28 18:22:46 +00:00
2014-07-16 09:04:54 +00:00
void ConfigureDiveComputerDialog : : on_DiveComputerList_currentRowChanged ( int currentRow )
{
2023-06-13 03:32:27 +00:00
unsigned int transport = supportedDiveComputers [ currentRow ] . transport ;
2023-06-18 01:57:56 +00:00
if ( transport = = DC_TRANSPORT_BLUETOOTH )
2023-06-12 02:27:02 +00:00
ui . connectBluetoothButton - > setEnabled ( true ) ;
2023-06-18 01:57:56 +00:00
else
ui . connectBluetoothButton - > setEnabled ( false ) ;
2023-06-12 02:27:02 +00:00
fill_device_list ( transport ) ;
2014-07-16 09:04:54 +00:00
}
2015-05-27 19:19:13 +00:00
void ConfigureDiveComputerDialog : : checkLogFile ( int state )
{
ui . chooseLogFile - > setEnabled ( state = = Qt : : Checked ) ;
device_data . libdc_log = ( state = = Qt : : Checked ) ;
if ( state = = Qt : : Checked & & logFile . isEmpty ( ) ) {
pickLogFile ( ) ;
}
}
void ConfigureDiveComputerDialog : : pickLogFile ( )
{
QFileInfo fi ( filename ) ;
filename = fi . absolutePath ( ) . append ( QDir : : separator ( ) ) . append ( " subsurface.log " ) ;
2017-02-20 07:15:18 +00:00
logFile = QFileDialog : : getSaveFileName ( this , tr ( " Choose file for dive computer download logfile " ) ,
2017-10-27 12:52:27 +00:00
filename , tr ( " Log files " ) + " (*.log) " ) ;
2024-03-16 09:29:05 +00:00
if ( ! logFile . isEmpty ( ) )
logfile_name = logFile . toStdString ( ) ;
2015-05-27 19:19:13 +00:00
}
2015-09-12 20:37:34 +00:00
2015-09-12 20:37:35 +00:00
# ifdef BT_SUPPORT
void ConfigureDiveComputerDialog : : selectRemoteBluetoothDevice ( )
{
if ( ! btDeviceSelectionDialog ) {
btDeviceSelectionDialog = new BtDeviceSelectionDialog ( this ) ;
connect ( btDeviceSelectionDialog , SIGNAL ( finished ( int ) ) ,
this , SLOT ( bluetoothSelectionDialogIsFinished ( int ) ) ) ;
}
btDeviceSelectionDialog - > show ( ) ;
}
void ConfigureDiveComputerDialog : : bluetoothSelectionDialogIsFinished ( int result )
{
if ( result = = QDialog : : Accepted ) {
2023-06-12 02:27:02 +00:00
ui . device - > setEditText ( btDeviceSelectionDialog - > getSelectedDeviceText ( ) ) ;
2018-03-03 13:34:31 +00:00
ui . progressBar - > setFormat ( tr ( " Connecting to device... " ) ) ;
2023-06-12 02:27:02 +00:00
2015-09-12 20:37:35 +00:00
dc_open ( ) ;
}
}
# endif
2015-09-12 20:37:34 +00:00
void ConfigureDiveComputerDialog : : dc_open ( )
{
getDeviceData ( ) ;
QString err = config - > dc_open ( & device_data ) ;
if ( err ! = " " )
return ui . progressBar - > setFormat ( err ) ;
ui . retrieveDetails - > setEnabled ( true ) ;
ui . resetButton - > setEnabled ( true ) ;
2017-07-28 21:49:14 +00:00
ui . resetButton_4 - > setEnabled ( true ) ;
2015-09-12 20:37:34 +00:00
ui . disconnectButton - > setEnabled ( true ) ;
ui . restoreBackupButton - > setEnabled ( true ) ;
ui . connectButton - > setEnabled ( false ) ;
2023-06-12 02:27:02 +00:00
ui . connectBluetoothButton - > setEnabled ( false ) ;
2015-09-12 20:37:34 +00:00
ui . DiveComputerList - > setEnabled ( false ) ;
ui . logToFile - > setEnabled ( false ) ;
2023-06-12 02:27:02 +00:00
2023-06-18 01:57:56 +00:00
const DiveComputerEntry selectedDiveComputer = supportedDiveComputers [ ui . DiveComputerList - > currentRow ( ) ] ;
ui . updateFirmwareButton - > setEnabled ( selectedDiveComputer . fwUpgradePossible ) ;
2023-07-11 11:57:16 +00:00
ui . forceUpdateFirmware - > setEnabled ( selectedDiveComputer . forcedFirmwareUpgradeSupported ) ;
2023-06-12 02:27:02 +00:00
2018-03-03 13:34:31 +00:00
ui . progressBar - > setFormat ( tr ( " Connected to device " ) ) ;
2023-06-12 02:27:02 +00:00
qPrefDiveComputer : : set_device ( device_data . devname ) ;
qPrefDiveComputer : : set_device_name ( device_data . btname ) ;
qPrefDiveComputer : : set_vendor ( device_data . vendor ) ;
qPrefDiveComputer : : set_product ( device_data . product ) ;
2015-09-12 20:37:34 +00:00
}
void ConfigureDiveComputerDialog : : dc_close ( )
{
config - > dc_close ( & device_data ) ;
ui . retrieveDetails - > setEnabled ( false ) ;
ui . resetButton - > setEnabled ( false ) ;
2017-07-28 21:49:14 +00:00
ui . resetButton_4 - > setEnabled ( false ) ;
2015-09-12 20:37:34 +00:00
ui . disconnectButton - > setEnabled ( false ) ;
ui . connectButton - > setEnabled ( true ) ;
2023-06-12 02:27:02 +00:00
ui . connectBluetoothButton - > setEnabled ( true ) ;
2015-09-12 20:37:34 +00:00
ui . backupButton - > setEnabled ( false ) ;
ui . saveSettingsPushButton - > setEnabled ( false ) ;
ui . restoreBackupButton - > setEnabled ( false ) ;
ui . DiveComputerList - > setEnabled ( true ) ;
ui . logToFile - > setEnabled ( true ) ;
ui . updateFirmwareButton - > setEnabled ( false ) ;
2023-03-02 12:01:46 +00:00
ui . forceUpdateFirmware - > setEnabled ( false ) ;
2018-03-03 13:34:31 +00:00
ui . progressBar - > setFormat ( tr ( " Disconnected from device " ) ) ;
2015-09-24 22:59:06 +00:00
ui . progressBar - > setValue ( 0 ) ;
2015-09-12 20:37:34 +00:00
}