On Friday 04 November 2016 08:08:46 John Ralls wrote:
> > On Nov 3, 2016, at 8:39 PM, Amin Aghabeiki
> > <amin.aghabe...@gmail.com> wrote:
> > 
> > Hi John
> > 
> > I plane to change check box for calendar to combo box but its really
> > complicated there is any guide  to add combo box in preference?

Which check box are you referring to here ?
> 
> Amin,
> 
> No, I've never worked with the preferences dialog. Perhaps Geert can
> offer some help.
> 
> Regards,
> John Ralls

Hmm, it's been a while. Let's see what I remember...

I assume you want to add a combobox in which the user can select the calendar 
widget to use 
(Gregorian vs Jalali).

There are several examples you can follow in the preferences already. The 
date-format 
combobox is probably a good start.

First you should define your combobox in the glade interface file (src/gnome-
utils/gtkbuilder/dialog-preferences.glade). Note the name needs a particular 
format, which I'll 
get back to later.

Each combobox needs a model, which you can also define in the same glade file. 
For the date-
format combobox this is a gtkliststore with the name  "date-formats". You'll 
need to define one 
similar for your combobox.

Next, all settings you see in the preferences dialog are stored in gsettings. 
Gsettings uses xml 
configuration files to define its settings. You'll need to create the schema 
for your specific 
preference. The schema are stored in gsettings subdirectories in various places 
of the code. The 
other date-time related settings are defined in
src/gnome/gsettings/org.gnucash.gschema.xml.in.in       
Again you can follow the example of the date-format preference. You will need 
to add a key to 
the general schema for your preference. It will store an integer value which is 
the selected line 
number in the combobox' liststore (though 0-based). This sounds more 
complicated than it is 
really. If you offer the user two options in your combobox, like this:
Gregorian calendar
Jalali calendar
and the user selects "Jalali calendar", the value to store in the preference 
will be 1. Otherwise it 
will be 0. Note that I believe 0 should be the default to avoid unexpected 
changes to existing 
users.

And now for a crucial part: the name of your combobox in the glade file should 
be the gsettings 
path of your preference prefixed with "pref/". For the date-format preference 
for example this 
becomes:
pref/general/date-format
The combobox called that way will be tied automatically to the date-format 
gsettings 
preference in the general section in gsettings. This part is crucial. If the 
name of the widget is 
not correctly matched to the gsettings key, your preference will not work.

Lastly, due to the way gtkbuilder works, you'll have to explicitly tell gnucash 
to load the liststore 
you have defined for your combobox. It will load the combobox automatically, 
but not the 
liststore. This needs one more line in src/gnome-utils/dialog-preferences.c 
around line 1084.

After all that is done, your preference should just work.

For readability you should add a #define for the key of your preference in your 
own code, 
starting with "GNC_PREF_" and use that in combination with 
GNC_PREFS_GROUP_GENERAL in 
your calls to gnc_prefs_get_int to query the value of the new preference.

Finally, you may want to listen for changes in your new preference in order to 
update date/time 
widgets on open registers, report-option dialogs and anywhere else you are 
offering the jalali 
calendar as alternative. You can register callbacks to your preference via 
"gnc_prefs_register_cb"

Is that sufficient to get you going ?

Regards,

Geert
_______________________________________________
gnucash-devel mailing list
gnucash-devel@gnucash.org
https://lists.gnucash.org/mailman/listinfo/gnucash-devel

Reply via email to