gnome-scan r732 - in trunk: . modules/gsane



Author: bersace
Date: Sun Dec 21 18:45:12 2008
New Revision: 732
URL: http://svn.gnome.org/viewvc/gnome-scan?rev=732&view=rev

Log:
Added macro for named option handler.

Modified:
   trunk/ChangeLog
   trunk/modules/gsane/gsane-option-handler.h

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 21 18:45:12 2008
@@ -38,14 +38,16 @@
 typedef struct _GSaneOptionHandler GSaneOptionHandler;
 typedef struct _GSaneOptionHandlerPrivate GSaneOptionHandlerPrivate;
 
+typedef void (*GSaneOptionHandlerFunc)  (GSaneOptionHandler*self, const SANE_Option_Descriptor*desc, SANE_Int n, const gchar* group);
+
 struct _GSaneOptionHandlerClass
 {
-	GTypeClass	parent_class;
-	void		(*handle_option) (GSaneOptionHandler*self, const SANE_Option_Descriptor*desc, SANE_Int n, const gchar* group);
-	void		(*reload_options) (GSaneOptionHandler*self);
+	GTypeClass		parent_class;
+	GSaneOptionHandlerFunc	handle_option;
+	void			(*reload_options) (GSaneOptionHandler*self);
 	/* Whether the scanner must have a unique instance of the
 	   option handler */
-	gboolean	unique;
+	gboolean		unique;
 };
 
 struct _GSaneOptionHandler
@@ -57,11 +59,38 @@
 	GSaneOptionHandlerPrivate* priv;
 };
 
-/* option utils */
+/* OPTION UTILS */
 GnomeScanOptionHint gsane_option_hint(const SANE_Option_Descriptor*desc);
 GnomeScanUnit gsane_option_unit(const SANE_Option_Descriptor* desc);
 
-/* option handler methods */
+
+/* FACILITY FOR NAMED OPTION HANDLING */
+
+/* Define private structs fields to handle a named SANE option  */
+#define GSANE_OPTION_HANDLER_DEFINE_OPTION(name)			\
+	const SANE_Option_Descriptor* name##_desc;			\
+	SANE_Int name##_index;
+
+/* Define class struct field to handle a named SANE option. */
+#define	GSANE_OPTION_HANDLER_CLASS_DEFINE_HANDLER(name)			\
+	GSaneOptionHandlerFunc handle_##name;
+
+/* Install a named SANE option handler in the class. Requires
+   gsane_option_handler_handler_<oname> to be declared. See
+   GSANE_OPTION_HANDLER_DEFINE_OPTION and
+   GSANE_OPTION_HANDLER_CLASS_DEFINE_HANDLER. */
+#define GSANE_OPTION_HANDLER_CLASS_INSTALL_OPTION(klass, oname)		klass->handle_##oname = gsane_option_handler_handle_##oname;
+
+/* If SANE option desc match oname, desc and n are saved in self->priv
+   and named option handler is called. */
+#define GSANE_OPTION_HANDLER_MATCH_OPTION(self, klass, oname, desc, n, group)		if (g_str_equal(#oname, desc->name)) { \
+		self->priv->oname##_desc = desc;			\
+		self->priv->oname##_index = n;				\
+		klass->handle_##oname(GSANE_OPTION_HANDLER(self), desc, n, group); \
+	}
+
+
+/* OPTION HANDLER METHODS */
 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, const SANE_Option_Descriptor* desc, SANE_Int n, const gchar*group);



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