gnome-scan r696 - in trunk: . modules/gsane
- From: bersace svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-scan r696 - in trunk: . modules/gsane
- Date: Mon, 15 Dec 2008 19:53:14 +0000 (UTC)
Author: bersace
Date: Mon Dec 15 19:53:14 2008
New Revision: 696
URL: http://svn.gnome.org/viewvc/gnome-scan?rev=696&view=rev
Log:
Added double enum support.
Modified:
trunk/ChangeLog
trunk/modules/gsane/gsane-option-handler-generic.c
trunk/modules/gsane/gsane-option-handler.c
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 Mon Dec 15 19:53:14 2008
@@ -181,10 +181,9 @@
}
}
-static void
-gsane_option_handler_generic_handle_int_list_option(GSaneOptionHandler *handler, SANE_Int n, const SANE_Option_Descriptor*desc, const gchar* group)
+static GSList*
+gsane_option_handler_generic_enum_list_int_values(GSaneOptionHandler *handler, SANE_Int n, const SANE_Option_Descriptor*desc, const gchar* group)
{
- GSaneOptionHandlerGeneric* self = GSANE_OPTION_HANDLER_GENERIC(handler);
GSList *list = NULL;
gint count = desc->constraint.word_list[0];
gint i, intval;
@@ -205,19 +204,40 @@
gnome_scan_enum_value_init(evalue, value, g_strdup_printf("%i", intval), NULL);
list = g_slist_append(list, evalue);
}
+ g_free(values);
+ return list;
+}
- /* retrieve default value */
- evalue = gsane_option_handler_get_enum(handler, desc, n, list, NULL);
- /* instanciate value */
- self->priv->option = GNOME_SCAN_OPTION(gnome_scan_option_enum_new(desc->name, S_(desc->title), S_(desc->desc), group, SANE_GETTEXT_PACKAGE,
- evalue, list, GNOME_SCAN_OPTION_HINT_SECONDARY));
+static GSList*
+gsane_option_handler_generic_enum_list_double_values(GSaneOptionHandler *handler, SANE_Int n, const SANE_Option_Descriptor*desc, const gchar* group)
+{
+ GSList *list = NULL;
+ gint count = desc->constraint.word_list[0];
+ gint i;
+ gdouble doubleval;
+ GValue *value, *values = g_new0(GValue, count);
+ GnomeScanEnumValue *evalue, *evalues = g_new0(GnomeScanEnumValue, count);
+
+ for(i = 0; i < count; i++) {
+ value = values + i;
+ evalue = evalues + i;
+ doubleval = SANE_UNFIX(desc->constraint.word_list[i+1]);
+ g_value_init(value, G_TYPE_DOUBLE);
+ g_value_set_double(value, doubleval);
+ gnome_scan_enum_value_init(evalue, value, g_strdup_printf("%.2f", doubleval), NULL);
+ list = g_slist_append(list, evalue);
+ }
g_free(values);
+ return list;
}
+
static void
gsane_option_handler_generic_handle_list_option(GSaneOptionHandler *handler, SANE_Int n, const SANE_Option_Descriptor*desc, const gchar* group)
{
GSaneOptionHandlerGeneric* self = GSANE_OPTION_HANDLER_GENERIC(handler);
+ GSList *values = NULL;
+ GnomeScanEnumValue* default_value;
gint array_length;
switch(desc->type) {
@@ -226,16 +246,26 @@
if (array_length > 1)
g_debug("Ignoring int enum array option %s", desc->name);
else
- gsane_option_handler_generic_handle_int_list_option(handler, n, desc, group);
+ values = gsane_option_handler_generic_enum_list_int_values(handler, n, desc, group);
+ break;
+ case SANE_TYPE_FIXED:
+ array_length = desc->size/sizeof(SANE_Fixed);
+ if (array_length > 1)
+ g_debug("Ignoring double enum array option %s", desc->name);
+ else
+ values = gsane_option_handler_generic_enum_list_double_values(handler, n, desc, group);
break;
default:
g_debug("\toption %d : <unhandled> %s", n, desc->name);
break;
}
- if (!self->priv->option)
+ if (!values)
return;
+ default_value = gsane_option_handler_get_enum(handler, desc, n, values, NULL);
+ self->priv->option = GNOME_SCAN_OPTION(gnome_scan_option_enum_new(desc->name, S_(desc->title), S_(desc->desc), group, SANE_GETTEXT_PACKAGE,
+ default_value, values, GNOME_SCAN_OPTION_HINT_SECONDARY));
g_signal_connect_swapped(self->priv->option, "notify::value", G_CALLBACK(gsane_option_handler_generic_enum_option_value_changed), self);
}
Modified: trunk/modules/gsane/gsane-option-handler.c
==============================================================================
--- trunk/modules/gsane/gsane-option-handler.c (original)
+++ trunk/modules/gsane/gsane-option-handler.c Mon Dec 15 19:53:14 2008
@@ -212,24 +212,28 @@
GnomeScanEnumValue*
gsane_option_handler_get_enum(GSaneOptionHandler *self, const SANE_Option_Descriptor* desc, SANE_Int index, GSList* values, GError **error)
{
- gint intval, testval;
+ gint intval;
+ gdouble doubleval;
GSList* iter;
GnomeScanEnumValue* evalue;
- GValue *value;
switch(desc->type) {
case SANE_TYPE_INT:
intval = gsane_option_handler_get_int(self, desc, index, error);
for (iter = values; iter; iter = iter->next) {
evalue = iter->data;
- value = evalue->value;
- testval = g_value_get_int(value);
- if (testval == intval) {
+ if (g_value_get_int(evalue->value) == intval)
return evalue;
- }
}
return values->data;
break;
+ case SANE_TYPE_FIXED:
+ doubleval = gsane_option_handler_get_double(self, desc, index, error);
+ for (iter = values; iter; iter = iter->next) {
+ evalue = iter->data;
+ if (g_value_get_double(evalue->value) == doubleval)
+ return evalue;
+ }
default:
break;
}
@@ -240,6 +244,16 @@
void
gsane_option_handler_set_enum(GSaneOptionHandler *self, const SANE_Option_Descriptor* desc, SANE_Int index, GnomeScanEnumValue* value, GError **error)
{
+ switch(desc->type) {
+ case SANE_TYPE_INT:
+ gsane_option_handler_set_int(self, desc, index, g_value_get_double(value->value), error);
+ break;
+ case SANE_TYPE_FIXED:
+ gsane_option_handler_set_double(self, desc, index, g_value_get_double(value->value), error);
+ break;
+ default:
+ break;
+ }
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]