; docformat = 'rst'
;+
; Class responsible for storing and retrieving preferences.
;
; :Properties:
; author_name
; short name of the author
; app_name
; short name of the application
; author_description
; full name of the author
; app_description
; full name of the application
; app_directory
; location of the directory for the application using these preferences
;-
;+
; Save the value of a preference.
;
; :Params:
; prefname : in, required, type=string
; case-insensitive name of preference to retrieve
; prefvalue : in, required, type=any
; value of the preference
;-
pro mgffprefs::set, prefname, prefvalue
compile_opt strictarr
on_error, 2
filename = filepath(strlowcase(prefname) + '.sav', root=self.appdir)
save, prefvalue, filename=filename
end
;+
; Retrieve the value of a preference.
;
; :Returns:
; preference value
;
; :Params:
; prefname : in, required, type=string
; case-insensitive name of preference to retrieve
;
; :Keywords:
; found : out, optional, type=boolean
; set to a named variable to return whether the preference was found
; default : in, optional, type=any
; default value to use if no preference value is found for the given
; preference name
; names : in, optional, type=boolean
; set to return a list of the preference names instead of a
; value
;-
function mgffprefs::get, prefname, found=found, default=default, names=names
compile_opt strictarr
catch, error
if (error ne 0L) then begin
catch, /cancel
return, n_elements(default) gt 0L ? default : -1L
endif
if (keyword_set(names)) then begin
searchPattern = filepath('*.sav', root=self.appdir)
files = file_search(searchPattern, count=count)
found = count gt 0L
return, found ? file_basename(files, '.sav') : -1L
endif
found = 0B
filename = filepath(strlowcase(prefname) + '.sav', root=self.appdir)
if (~file_test(filename)) then return, n_elements(default) gt 0L ? default : -1L
restore, filename=filename
found = 1B
return, prefvalue
end
;+
; Returns directory for application data.
;
; :Returns:
; string
;
; :Params:
; authorName : in, required, type=string
; short name of the author
; appName : in, required, type=string
; short application name
;
; :Keywords:
; author_description : in, optional, type=string
; full name of the author
; app_description : in, optional, type=string
; full name of the application
;-
function mgffprefs::_getAppDir, authorName, appName, $
author_description=authorDescription, $
app_description=appDescription
compile_opt strictarr
readmeVersion = 1
_authorDescription = n_elements(authorDescription) eq 0L $
? authorName $
: authorDescription
_appDescription = n_elements(appDescription) eq 0L $
? appName $
: appDescription
readmeText = ['This is the user configuration directory for ' + _appDescription, $
'by ' + _authorDescription + '.']
configDir = app_user_dir(authorName, _authorDescription, $
appName, _appDescription, $
readmeText, readmeVersion)
return, configDir
end
;+
; Get properties.
;-
pro mgffprefs::getProperty, app_directory=appDirectory
compile_opt strictarr
if (arg_present(appDirectory)) then appDirectory = self.appdir
end
;+
; Free resources.
;-
pro mgffprefs::cleanup
compile_opt strictarr
end
;+
; Initialize a prefs object.
;
; :Returns:
; 1 for success, 0 for failure
;
; :Keywords:
; author_name : in, required, type=string
; short name of the author
; app_name : in, required, type=string
; short name of the application
; author_description : in, optional, type=string
; full name of the author
; app_description : in, optional, type=string
; full name of the application
;-
function mgffprefs::init, author_name=authorName, app_name=appName, $
author_description=authorDescription, $
app_description=appDescription
compile_opt strictarr
on_error, 2
if (n_elements(authorName) eq 0L || n_elements(appName) eq 0L) then begin
message, 'Author and application name required'
endif
self.appdir = self->_getAppDir(authorName, appName, $
author_description=authorDescription, $
app_description=appDescription)
return, 1
end
;+
; Define instance variables.
;
; :Fields:
; appdir
; directory to place preference files
;-
pro mgffprefs__define
compile_opt strictarr
define = { MGffPrefs, $
appdir: '' $
}
end