New Masked Calender for GnuCash

John Ralls jralls at
Sun Nov 6 22:42:14 EST 2016

> On Nov 6, 2016, at 6:23 PM, Amin Aghabeiki <amin.aghabeiki at> wrote:
> yep , its fantastic guide  , thanks a late Geert

And I'm not Geert, which is why you should always copy the list on all replies. ;-)

John Ralls

> Regards
> Amin
> On 11/6/16, John Ralls <jralls at> wrote:
>>> On Nov 5, 2016, at 6:09 AM, Geert Janssens <geert.gnucash at>
>>> wrote:
>>> On Friday 04 November 2016 08:08:46 John Ralls wrote:
>>>>> On Nov 3, 2016, at 8:39 PM, Amin Aghabeiki
>>>>> <amin.aghabeiki at <mailto:amin.aghabeiki at>> 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/ 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/	
>>> 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 ?
>> That would be an excellent wiki article...
>> Regards,
>> John Ralls

More information about the gnucash-devel mailing list