> On Nov 5, 2016, at 6:09 AM, Geert Janssens <geert.gnuc...@kobaltwit.be> wrote:
> 
> 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 <mailto: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 ?

That would be an excellent wiki article...

Regards,
John Ralls


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

Reply via email to