This patch disables/enables the DC device node based on what type of
transport the selected DC uses. According to Jef, libdivecomputer uses the
device node only if the serial transport is being used. For USB and IrDA,
direct communication with the device is used and so the field is not
relevant.

Benjamin
From 508e3696dd38c66be806a9cf97a57b0f6ad49fd4 Mon Sep 17 00:00:00 2001
From: Benjamin Fogel <nyst...@gmail.com>
Date: Fri, 27 Dec 2013 12:42:49 +0200
Subject: [PATCH] Disable DC device node if it is not used.

The only time the device node field is used is if the selected DC
uses a serial transport type. IrDA and USB type transports do not
use the device node.

Signed-off-by: Benjamin Fogel <nyst...@gmail.com>
---
 qt-ui/downloadfromdivecomputer.cpp | 17 +++++++++++++++++
 qt-ui/downloadfromdivecomputer.h   |  1 +
 2 files changed, 18 insertions(+)

diff --git a/qt-ui/downloadfromdivecomputer.cpp b/qt-ui/downloadfromdivecomputer.cpp
index 57415fa..b7eb520 100644
--- a/qt-ui/downloadfromdivecomputer.cpp
+++ b/qt-ui/downloadfromdivecomputer.cpp
@@ -70,6 +70,7 @@ DownloadFromDCWidget::DownloadFromDCWidget(QWidget* parent, Qt::WindowFlags f) :
 		if (default_dive_computer_product)
 			ui.product->setCurrentIndex(ui.product->findText(default_dive_computer_product));
 	}
+	connect(ui.product, SIGNAL(currentIndexChanged(int)), this, SLOT(on_product_currentIndexChanged()), Qt::UniqueConnection);
 	if (default_dive_computer_device)
 		ui.device->setEditText(default_dive_computer_device);
 
@@ -168,6 +169,22 @@ void DownloadFromDCWidget::on_vendor_currentIndexChanged(const QString& vendor)
 	//currentModel->deleteLater();
 }
 
+void DownloadFromDCWidget::on_product_currentIndexChanged()
+{
+	// Set up the DC descriptor
+	dc_descriptor_t *descriptor = NULL;
+	descriptor = descriptorLookup[ui.vendor->currentText() + ui.product->currentText()];
+
+	// call dc_descriptor_get_transport to see if the dc_transport_t is DC_TRANSPORT_SERIAL
+	if (dc_descriptor_get_transport(descriptor) == DC_TRANSPORT_SERIAL) {
+		// if the dc_transport_t is DC_TRANSPORT_SERIAL, then enable the device node box.
+		ui.device->setEnabled(true);
+	} else {
+		// otherwise disable the device node box
+		ui.device->setEnabled(false);
+	}
+}
+
 void DownloadFromDCWidget::fill_computer_list()
 {
 	dc_iterator_t *iterator = NULL;
diff --git a/qt-ui/downloadfromdivecomputer.h b/qt-ui/downloadfromdivecomputer.h
index 943a1aa..cb02cfc 100644
--- a/qt-ui/downloadfromdivecomputer.h
+++ b/qt-ui/downloadfromdivecomputer.h
@@ -40,6 +40,7 @@ public slots:
 	void on_ok_clicked();
 	void on_cancel_clicked();
 	void on_vendor_currentIndexChanged(const QString& vendor);
+    void on_product_currentIndexChanged();
 
 	void onDownloadThreadFinished();
 	void updateProgressBar();
-- 
1.8.4.2

_______________________________________________
subsurface mailing list
subsurface@hohndel.org
http://lists.hohndel.org/cgi-bin/mailman/listinfo/subsurface

Reply via email to