[aravis] viewer: make control widgets insensitive when feature is not available.



commit 6e5be2787c1718162cead3781e3fdf89d4c3b7f8
Author: Emmanuel Pacaud <emmanuel gnome org>
Date:   Mon Jun 18 11:28:14 2012 +0200

    viewer: make control widgets insensitive when feature is not available.

 docs/reference/aravis/aravis-sections.txt |    4 ++
 src/arvcamera.c                           |   59 +++++++++++++++++++++++++++++
 src/arvcamera.h                           |    6 +++
 viewer/arvviewer.c                        |   20 ++++++++++
 4 files changed, 89 insertions(+), 0 deletions(-)
---
diff --git a/docs/reference/aravis/aravis-sections.txt b/docs/reference/aravis/aravis-sections.txt
index a8b908d..157c5de 100644
--- a/docs/reference/aravis/aravis-sections.txt
+++ b/docs/reference/aravis/aravis-sections.txt
@@ -32,11 +32,15 @@ arv_camera_set_trigger
 arv_camera_set_trigger_source
 arv_camera_get_trigger_source
 arv_camera_software_trigger
+arv_camera_is_exposure_time_available
+arv_camera_is_exposure_auto_available
 arv_camera_set_exposure_time
 arv_camera_get_exposure_time
 arv_camera_get_exposure_time_bounds
 arv_camera_set_exposure_time_auto
 arv_camera_get_exposure_time_auto
+arv_camera_is_gain_available
+arv_camera_is_gain_auto_available
 arv_camera_set_gain
 arv_camera_get_gain
 arv_camera_get_gain_bounds
diff --git a/src/arvcamera.c b/src/arvcamera.c
index 0ba6e43..beabb3b 100644
--- a/src/arvcamera.c
+++ b/src/arvcamera.c
@@ -853,6 +853,65 @@ arv_camera_get_device (ArvCamera *camera)
 }
 
 /**
+ * arv_camera_is_exposure_time_available:
+ * @camera: a #ArvCamera
+ * Returns: TRUE if Exposure Time feature is available.
+ */
+
+gboolean
+arv_camera_is_exposure_time_available (ArvCamera *camera)
+{
+	g_return_val_if_fail (ARV_IS_CAMERA (camera), FALSE);
+
+	return arv_device_get_feature (camera->priv->device, "ExposureTimeAbs") != NULL;
+}
+
+/**
+ * arv_camera_is_exposure_auto_available:
+ * @camera: a #ArvCamera
+ * Returns: TRUE if Exposure Auto feature is available.
+ */
+
+gboolean
+arv_camera_is_exposure_auto_available (ArvCamera *camera)
+{
+	g_return_val_if_fail (ARV_IS_CAMERA (camera), FALSE);
+
+	return arv_device_get_feature (camera->priv->device, "ExposureAuto") != NULL;
+}
+
+/**
+ * arv_camera_is_gain_available:
+ * @camera: a #ArvCamera
+ * Returns: TRUE if Gain feature is available.
+ */
+
+gboolean
+arv_camera_is_gain_available (ArvCamera *camera)
+{
+	g_return_val_if_fail (ARV_IS_CAMERA (camera), FALSE);
+
+	if (camera->priv->use_gain_raw)
+		return arv_device_get_feature (camera->priv->device, "GainRaw") != NULL;
+
+	return arv_device_get_feature (camera->priv->device, "Gain") != NULL;
+}
+
+/**
+ * arv_camera_is_gain_auto_available:
+ * @camera: a #ArvCamera
+ * Returns: TRUE if Gain feature is available.
+ */
+
+gboolean
+arv_camera_is_gain_auto_available (ArvCamera *camera)
+{
+	g_return_val_if_fail (ARV_IS_CAMERA (camera), FALSE);
+
+	return arv_device_get_feature (camera->priv->device, "GainAuto") != NULL;
+}
+
+/**
  * arv_camera_new:
  * @name: (allow-none): name of the camera.
  *
diff --git a/src/arvcamera.h b/src/arvcamera.h
index 1b9e753..770ef2d 100644
--- a/src/arvcamera.h
+++ b/src/arvcamera.h
@@ -92,6 +92,9 @@ const char *	arv_camera_get_trigger_source		(ArvCamera *camera);
 
 void 		arv_camera_software_trigger 		(ArvCamera *camera);
 
+gboolean 	arv_camera_is_exposure_time_available	(ArvCamera *camera);
+gboolean 	arv_camera_is_exposure_auto_available	(ArvCamera *camera);
+
 void 		arv_camera_set_exposure_time 		(ArvCamera *camera, double exposure_time_us);
 double 		arv_camera_get_exposure_time 		(ArvCamera *camera);
 void		arv_camera_get_exposure_time_bounds	(ArvCamera *camera, double *min, double *max);
@@ -100,6 +103,9 @@ ArvAuto		arv_camera_get_exposure_time_auto	(ArvCamera *camera);
 
 /* Analog control */
 
+gboolean 	arv_camera_is_gain_available		(ArvCamera *camera);
+gboolean 	arv_camera_is_gain_auto_available	(ArvCamera *camera);
+
 void 		arv_camera_set_gain	 	(ArvCamera *camera, double gain);
 double 		arv_camera_get_gain 		(ArvCamera *camera);
 void		arv_camera_get_gain_bounds	(ArvCamera *camera, double *min, double *max);
diff --git a/viewer/arvviewer.c b/viewer/arvviewer.c
index b52397e..3c43aa8 100644
--- a/viewer/arvviewer.c
+++ b/viewer/arvviewer.c
@@ -403,6 +403,10 @@ arv_viewer_select_camera_cb (GtkComboBox *combo_box, ArvViewer *viewer)
 	double gain_min, gain_max;
 	gboolean auto_gain, auto_exposure;
 	const char *caps_string;
+	gboolean is_exposure_available;
+	gboolean is_exposure_auto_available;
+	gboolean is_gain_available;
+	gboolean is_gain_auto_available;
 
 	g_return_if_fail (viewer != NULL);
 
@@ -450,6 +454,11 @@ arv_viewer_select_camera_cb (GtkComboBox *combo_box, ArvViewer *viewer)
 	auto_gain = arv_camera_get_gain_auto (viewer->camera) != ARV_AUTO_OFF;
 	auto_exposure = arv_camera_get_gain_auto (viewer->camera) != ARV_AUTO_OFF;
 
+	is_exposure_available = arv_camera_is_exposure_time_available (viewer->camera);
+	is_exposure_auto_available = arv_camera_is_exposure_auto_available (viewer->camera);
+	is_gain_available = arv_camera_is_gain_available (viewer->camera);
+	is_gain_auto_available = arv_camera_is_gain_auto_available (viewer->camera);
+
 	g_signal_handler_block (viewer->gain_hscale, viewer->gain_hscale_changed);
 	g_signal_handler_block (viewer->gain_spin_button, viewer->gain_spin_changed);
 	g_signal_handler_block (viewer->exposure_hscale, viewer->exposure_hscale_changed);
@@ -468,6 +477,12 @@ arv_viewer_select_camera_cb (GtkComboBox *combo_box, ArvViewer *viewer)
 	gtk_entry_set_text (GTK_ENTRY (viewer->frame_rate_entry), string);
 	g_free (string);
 
+	gtk_widget_set_sensitive (viewer->gain_hscale, is_gain_available);
+	gtk_widget_set_sensitive (viewer->gain_spin_button, is_gain_available);
+
+	gtk_widget_set_sensitive (viewer->exposure_hscale, is_exposure_available);
+	gtk_widget_set_sensitive (viewer->exposure_spin_button, is_exposure_available);
+
 	g_signal_handler_unblock (viewer->gain_hscale, viewer->gain_hscale_changed);
 	g_signal_handler_unblock (viewer->gain_spin_button, viewer->gain_spin_changed);
 	g_signal_handler_unblock (viewer->exposure_hscale, viewer->exposure_hscale_changed);
@@ -481,8 +496,13 @@ arv_viewer_select_camera_cb (GtkComboBox *combo_box, ArvViewer *viewer)
 
 	g_signal_handler_block (viewer->auto_gain_toggle, viewer->auto_gain_clicked);
 	g_signal_handler_block (viewer->auto_exposure_toggle, viewer->auto_exposure_clicked);
+	
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (viewer->auto_gain_toggle), auto_gain);
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (viewer->auto_exposure_toggle), auto_exposure);
+
+	gtk_widget_set_sensitive (viewer->auto_gain_toggle, is_gain_auto_available);
+	gtk_widget_set_sensitive (viewer->auto_exposure_toggle, is_exposure_auto_available);
+
 	g_signal_handler_unblock (viewer->auto_gain_toggle, viewer->auto_gain_clicked);
 	g_signal_handler_unblock (viewer->auto_exposure_toggle, viewer->auto_exposure_clicked);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]