gnome-scan r673 - in trunk: . modules/gsane
- From: bersace svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-scan r673 - in trunk: . modules/gsane
- Date: Sun, 14 Dec 2008 13:28:38 +0000 (UTC)
Author: bersace
Date: Sun Dec 14 13:28:38 2008
New Revision: 673
URL: http://svn.gnome.org/viewvc/gnome-scan?rev=673&view=rev
Log:
Set/Get SANE option value.
Modified:
trunk/ChangeLog
trunk/modules/gsane/gsane-option-handler-generic.c
trunk/modules/gsane/gsane-option-handler.c
trunk/modules/gsane/gsane-option-handler.h
Modified: trunk/modules/gsane/gsane-option-handler-generic.c
==============================================================================
--- trunk/modules/gsane/gsane-option-handler-generic.c (original)
+++ trunk/modules/gsane/gsane-option-handler-generic.c Sun Dec 14 13:28:38 2008
@@ -27,29 +27,38 @@
struct _GSaneOptionHandlerGenericPrivate
{
- SANE_Int n;
+ SANE_Int index;
const SANE_Option_Descriptor* desc;
- const gchar* group;
- GnomeScanOption* option;
+ GnomeScanOption* option;
};
static GSaneOptionHandlerClass*gsane_option_handler_generic_parent_class = NULL;
static void
+gsane_option_handler_generic_bool_option_value_changed(GSaneOptionHandlerGeneric* self, GParamSpec* pspec, GObject* option)
+{
+ gboolean value;
+ g_object_get(option, "value", &value, NULL);
+ gsane_option_handler_set_bool(GSANE_OPTION_HANDLER(self), self->priv->desc, self->priv->index, value, NULL);
+}
+
+static void
gsane_option_handler_generic_handle_option(GSaneOptionHandler *handler, SANE_Int n, const SANE_Option_Descriptor*desc, const gchar* group)
{
GSaneOptionHandlerGeneric* self = GSANE_OPTION_HANDLER_GENERIC(handler);
- self->priv->n = n;
+ gboolean boolval;
+ self->priv->index = n;
self->priv->desc = desc;
- self->priv->group = group;
- static gboolean monitor = FALSE;
/* don't trust SANE test backend */
GnomeScanOptionHint hint = GNOME_SCAN_OPTION_HINT_SECONDARY;
switch(desc->type) {
case SANE_TYPE_BOOL:
- self->priv->option = GNOME_SCAN_OPTION(gnome_scan_option_bool_new(desc->name, desc->title, desc->desc, group, SANE_GETTEXT_PACKAGE, FALSE, hint));
+ boolval = gsane_option_handler_get_bool(GSANE_OPTION_HANDLER(self), desc, n, NULL);
+ self->priv->option = GNOME_SCAN_OPTION(gnome_scan_option_bool_new(desc->name, desc->title, desc->desc, group, SANE_GETTEXT_PACKAGE, boolval, hint));
+ g_signal_connect_swapped(self->priv->option, "notify::value", G_CALLBACK(gsane_option_handler_generic_bool_option_value_changed), self);
+ g_debug("\toption %d : boolean %s = %s", n, desc->name, GSANE_BOOLEAN_TO_STRING(boolval));
break;
default:
break;
@@ -58,7 +67,8 @@
if (!self->priv->option)
return;
- /* register callbacks */
+ /* common */
+ g_object_set(self->priv->option, "active", SANE_OPTION_IS_ACTIVE(desc->cap), NULL);
/* install option */
gnome_scan_node_install_option(GNOME_SCAN_NODE(handler->scanner), self->priv->option);
Modified: trunk/modules/gsane/gsane-option-handler.c
==============================================================================
--- trunk/modules/gsane/gsane-option-handler.c (original)
+++ trunk/modules/gsane/gsane-option-handler.c Sun Dec 14 13:28:38 2008
@@ -20,6 +20,7 @@
*/
#include "gsane-option-handler.h"
+#include "gsane-common.h"
#define GSANE_OPTION_HANDLER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), GSANE_TYPE_OPTION_HANDLER, GSaneOptionHandlerPrivate))
@@ -67,6 +68,54 @@
GSANE_OPTION_HANDLER_GET_CLASS(self)->handle_option(self, n, desc, group);
}
+static void
+gsane_option_handler_control_option(GSaneOptionHandler*self, const SANE_Option_Descriptor* desc, SANE_Int index, SANE_Action action, gpointer data, GError**error)
+{
+ SANE_Status status;
+ SANE_Int flags = 0;
+
+ if (!SANE_OPTION_IS_ACTIVE(desc->cap)) {
+ g_propagate_error(error, g_error_new(GSANE_ERROR, GSANE_ERROR_OPTION_INACTIVE,
+ "Option %s is inactive", desc->name));
+ return;
+ }
+
+ if (action == SANE_ACTION_SET_VALUE && !SANE_OPTION_IS_SETTABLE(desc->cap)) {
+ g_propagate_error(error, g_error_new(GSANE_ERROR, GSANE_ERROR_OPTION_READONLY,
+ "Unable to set readonly option %s", desc->name));
+ return;
+ }
+
+ status = sane_control_option(self->priv->handle, index, action, data, &flags);
+
+ if (status != SANE_STATUS_GOOD) {
+ gsane_propagate_prefixed_status(error, status,
+ "%s(%s)", GSANE_ACTION_TO_STRING(action), desc->name);
+ return;
+ }
+
+ if (flags & SANE_INFO_INEXACT)
+ g_debug("Value inexact");
+ if (flags & SANE_INFO_RELOAD_OPTIONS)
+ g_debug("Reload options");
+ if (flags & SANE_INFO_RELOAD_PARAMS)
+ g_debug("Reload params");
+}
+
+gboolean
+gsane_option_handler_get_bool(GSaneOptionHandler *self, const SANE_Option_Descriptor* desc, SANE_Int index, GError**error)
+{
+ gboolean value = FALSE;
+ gsane_option_handler_control_option(self, desc, index, SANE_ACTION_GET_VALUE, &value, error);
+ return value;
+}
+
+void
+gsane_option_handler_set_bool(GSaneOptionHandler *self, const SANE_Option_Descriptor* desc, SANE_Int index, gboolean value, GError**error)
+{
+ gsane_option_handler_control_option(self, desc, index, SANE_ACTION_SET_VALUE, &value, error);
+}
+
/* GType instance boiler plate code */
void
Modified: trunk/modules/gsane/gsane-option-handler.h
==============================================================================
--- trunk/modules/gsane/gsane-option-handler.h (original)
+++ trunk/modules/gsane/gsane-option-handler.h Sun Dec 14 13:28:38 2008
@@ -63,6 +63,8 @@
GSaneOptionHandler* gsane_option_handler_new(GType type, GnomeScanScanner *scanner, SANE_Handle handle);
void gsane_option_handler_destroy(GSaneOptionHandler *self);
void gsane_option_handler_handle_option(GSaneOptionHandler *self, SANE_Int n, const SANE_Option_Descriptor* desc, const gchar*group);
+gboolean gsane_option_handler_get_bool(GSaneOptionHandler *self, const SANE_Option_Descriptor* desc, SANE_Int index, GError **error);
+void gsane_option_handler_set_bool(GSaneOptionHandler *self, const SANE_Option_Descriptor* desc, SANE_Int index, gboolean value, GError **error);
GType gsane_option_handler_get_type(void) G_GNUC_CONST;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]