Sorry I forgot to check my PM. Was the current example in the wiki not enough? The easiest way is really to register your app with REGAPP_LoadPrefs, TRUE, get the prefs dictionary object via GetApplicationAttrs(), and then manipulate the settings via the respective getter functions - DictGetBoolForKey(), DictGetIntegerForKey() etc. Values are set using DictSetObjectForKey(). Saving to the XML file is done through WritePrefs().
What Javier is suggesting is an alternative: you allocate your own prefs dictionary through PrefsDictionary() and then ReadPrefs() into it. The rest is pretty much the same.
Code: Select all
int load_settings(uint32 appID)
{
PrefsObject *prefsObj = NULL;
// Obtain the prefs dictionary.
IApplication->GetApplicationAttrs(appID, APPATTR_MainPrefsDict, &prefsObj, TAG_DONE);
if ( prefsObj )
{
// Load prefs (or use defaults).
settings.width = IPrefsObjects->DictGetIntegerForKey(prefsObj, PREFSKEY_WINWIDTH, WINWIDTH_DEFAULT);
settings.height = IPrefsObjects->DictGetIntegerForKey(prefsObj, PREFSKEY_WINHEIGHT, WINHEIGHT_DEFAULT);
settings.histlen = IPrefsObjects->DictGetIntegerForKey(prefsObj, PREFSKEY_HISTLEN, HISTLEN_DEFAULT);
settings.lingmode = IPrefsObjects->DictGetBoolForKey(prefsObj, PREFSKEY_LINGMODE, LINGMODE_DEFAULT);
settings.fulldesc = IPrefsObjects->DictGetBoolForKey(prefsObj, PREFSKEY_FULLDESC, FULLDESC_DEFAULT);
settings.unfold = IPrefsObjects->DictGetBoolForKey(prefsObj, PREFSKEY_UNFOLD, UNFOLD_DEFAULT);
settings.dclick = IPrefsObjects->DictGetBoolForKey(prefsObj, PREFSKEY_DCLICK, DCLICK_DEFAULT);
settings.showfreq = IPrefsObjects->DictGetBoolForKey(prefsObj, PREFSKEY_SHOWFREQ, SHOWFREQ_DEFAULT);
settings.escquit = IPrefsObjects->DictGetBoolForKey(prefsObj, PREFSKEY_ESCQUIT, ESCQUIT_DEFAULT);
settings.helptips = IPrefsObjects->DictGetBoolForKey(prefsObj, PREFSKEY_HELPTIPS, HELPTIPS_DEFAULT);
return RETURN_OK;
}
else return RETURN_FAIL;
}
int save_settings(uint32 appID)
{
PrefsObject *prefsObj = NULL;
int retValue = RETURN_FAIL;
// Obtain the prefs dictionary.
IApplication->GetApplicationAttrs(appID, APPATTR_MainPrefsDict, &prefsObj, TAG_DONE);
if ( prefsObj )
{
IPrefsObjects->DictSetObjectForKey(prefsObj, IPrefsObjects->PrefsNumber(NULL, NULL,
ALPONUM_AllocSetLong, settings.width,
TAG_DONE), PREFSKEY_WINWIDTH);
IPrefsObjects->DictSetObjectForKey(prefsObj, IPrefsObjects->PrefsNumber(NULL, NULL,
ALPONUM_AllocSetLong, settings.height,
TAG_DONE), PREFSKEY_WINHEIGHT);
IPrefsObjects->DictSetObjectForKey(prefsObj, IPrefsObjects->PrefsNumber(NULL, NULL,
ALPONUM_AllocSetLong, settings.histlen,
TAG_DONE), PREFSKEY_HISTLEN);
IPrefsObjects->DictSetObjectForKey(prefsObj, IPrefsObjects->PrefsNumber(NULL, NULL,
ALPONUM_AllocSetBool, settings.lingmode,
TAG_DONE), PREFSKEY_LINGMODE);
IPrefsObjects->DictSetObjectForKey(prefsObj, IPrefsObjects->PrefsNumber(NULL, NULL,
ALPONUM_AllocSetBool, settings.fulldesc,
TAG_DONE), PREFSKEY_FULLDESC);
IPrefsObjects->DictSetObjectForKey(prefsObj, IPrefsObjects->PrefsNumber(NULL, NULL,
ALPONUM_AllocSetBool, settings.unfold,
TAG_DONE), PREFSKEY_UNFOLD);
IPrefsObjects->DictSetObjectForKey(prefsObj, IPrefsObjects->PrefsNumber(NULL, NULL,
ALPONUM_AllocSetBool, settings.dclick,
TAG_DONE), PREFSKEY_DCLICK);
IPrefsObjects->DictSetObjectForKey(prefsObj, IPrefsObjects->PrefsNumber(NULL, NULL,
ALPONUM_AllocSetBool, settings.showfreq,
TAG_DONE), PREFSKEY_SHOWFREQ);
IPrefsObjects->DictSetObjectForKey(prefsObj, IPrefsObjects->PrefsNumber(NULL, NULL,
ALPONUM_AllocSetBool, settings.escquit,
TAG_DONE), PREFSKEY_ESCQUIT);
IPrefsObjects->DictSetObjectForKey(prefsObj, IPrefsObjects->PrefsNumber(NULL, NULL,
ALPONUM_AllocSetBool, settings.helptips,
TAG_DONE), PREFSKEY_HELPTIPS);
IPrefsObjects->DictSetObjectForKey(prefsObj, IPrefsObjects->PrefsString(NULL, NULL,
ALPOSTR_AllocSetString, settings.homepage,
TAG_DONE), PREFSKEY_HOMEPAGE);
IPrefsObjects->DictSetObjectForKey(prefsObj, IPrefsObjects->PrefsString(NULL, NULL,
ALPOSTR_AllocSetString, settings.docfile,
TAG_DONE), PREFSKEY_DOCFILE);
// Write preferences.
if ( IPrefsObjects->WritePrefs(prefsObj,
WRITEPREFS_AppID, appID,
WRITEPREFS_WriteENVARC, TRUE,
TAG_DONE) == 0 ) retValue = RETURN_OK;
}
return retValue;
}