translations and option definitions

Neil Williams linux at codehelp.co.uk
Sun Sep 4 08:03:54 EDT 2005


On Saturday 03 September 2005 11:43 pm, Derek Atkins wrote:
> Quoting Neil Williams <linux at codehelp.co.uk>:
> > I'm working on the code now. If it goes as planned, 

It does work. Here's sample cashutil output:

option name=file_compression
option desc=Compress output files?
option tip =GnuCash can save data files with compression. Enable this option 
to compress your data file.
option value=FALSE
option type=string

option name=file_retention_days
option desc=Number of days to retain old files
option tip =GnuCash keeps backups of old files, this setting dictates how long 
each is kept
option value=0
option type=gint64

Desc and Tip are marked in gnc-backend-file.c using _("") syntax so will be 
translated.

Let me know if those desc/tip strings should be tweaked.

An example of the API for the GUI:

	KvpFrame *backend_config;
	QofBackend *be;

	be = qof_book_get_backend(context->book);
	backend_config = qof_backend_get_config(be);
	if(backend_config) {
		qof_backend_option_foreach(backend_config, 
			print_config_cb, context);
	}

print_config_cb in CashUtil is a test routine:
static void
print_config_cb (QofBackendOption *option, gpointer data);

Then just use a switch for each type of KvpValue and cast from the gpointer.
e.g.
	switch(option->type) {
		case KVP_TYPE_GINT64   : {
			fprintf (stdout, "option value=%" G_GINT64_FORMAT,
				*(gint64*)option->value);
			fprintf (stdout, "\noption type=%s\n", QOF_TYPE_INT64);
			break;
		}

I thought about making 'value' a KvpValue but kvp_value_new_string etc. are 
meant to be private constructors - I reckoned it would be easier to not 
expect the backend and the UI to create temporary KvpValues of their own 
(with or without temporary frames) when a gpointer cast would work instead.

There's not much for the frame to do except keep the option instances 
together, but it does restrict the option->type nicely compared to the 
problems of a GList. Plus the numerical KvpValueType enum is easier and 
quicker to handle via a switch() than the char* QOF_TYPE's are using 
if(0 == safe_strcmp())

(note how I use the QOF_TYPE in the dummy routine as a shortcut to printing 
the type as a string. :-))

> > the XML will be 
> > dropped.

> Ahh... That information had been lost along the way...  Or not stated.

Lost in the depths of an overly long email (again). :-))

Subject: Re: option definition
Date: Sat, 3 Sep 2005 20:13:10 +0100
Message-Id: <200509032013.14665.linux at codehelp.co.uk>
> > Maybe we should ditch the XML altogether and rely only on the KvpFrame and 
> > some API method of determining which keys are present?

> And yes, we probably should have a KVP_TYPE_BOOLEAN.  I don't know why
> we don't.

I'll use a non-translatable string for now, get this commit finally in place, 
get some other CashUtil stuff finished and look at KVP_TYPE_BOOLEAN later. We 
can workaround it in the meantime.

-- 

Neil Williams
=============
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://lists.gnucash.org/pipermail/gnucash-devel/attachments/20050904/ee4ed24f/attachment.bin


More information about the gnucash-devel mailing list