Files
2013-02-04 15:51:04 +01:00

148 lines
4.0 KiB
Lua

-- UserPreferences: User Preferences "Module"
-- Written by AJ Kelly of KKI Labs / Version 2.11-ssc
-- (modified slightly for Cerulean Skies 2's disregard of the name of the
-- themeinfo variable lol :p)
--[[
the first released version was broken.
this version aims to be simpler, and therefore work.
[changelog]
v2.11-ssc
Remove EnvUtils references; we have it in sm-ssc.
v2.1-ssc
sm-ssc version of UserPrefs. We can now assume players have certain
functionality, like RageFile:GetError().
v2.1
Added type specific GetUserPref functions.
[usage]
First, edit PrefPath to match your theme.
If you use ThemeInfo, then you shouldn't have to edit this.
If you're not using ThemeInfo, then you can replace
".. themeInfo.Name .." with the theme's folder name.
ThemeInfo is documented at http://kki.ajworld.net/wiki/ThemeInfo.lua
After that's set up, read the docs.
]]
local PrefPath = "Save/UserPrefs/".. THEME:GetThemeDisplayName() .."/"
--[[ begin internal stuff; no need to edit below this line. ]]
-- Local internal function to write envs. ___Not for themer use.___
local function WriteEnv(envName,envValue)
return setenv(envName,envValue)
end
function ReadPrefFromFile(name)
local f = RageFileUtil.CreateRageFile()
local fullFilename = PrefPath..name..".cfg"
local option
if f:Open(fullFilename,1) then
option = tostring( f:Read() )
WriteEnv(name,option)
f:destroy()
return option
else
local fError = f:GetError()
Trace( "[FileUtils] Error reading ".. fullFilename ..": ".. fError )
f:ClearError()
f:destroy()
return nil
end
end
function WritePrefToFile(name,value)
local f = RageFileUtil.CreateRageFile()
local fullFilename = PrefPath..name..".cfg"
if f:Open(fullFilename, 2) then
f:Write( tostring(value) )
WriteEnv(name,value)
else
local fError = f:GetError()
Trace( "[FileUtils] Error writing to ".. fullFilename ..": ".. fError )
f:ClearError()
f:destroy()
return false
end
f:destroy()
return true
end
--[[ end internal functions; still don't edit below this line ]]
function GetUserPref(name)
return ReadPrefFromFile(name)
end
function SetUserPref(name,value)
return WritePrefToFile(name,value)
end
--[[ type specific, for when you want to be lazy ]]
-- XXX: make set funcs, since I hate dealing with colors and I know
-- other themers would too.
-- GetUserPrefB: boolean
function GetUserPrefB(name)
-- this one is a bit trickier.
local pref = ReadPrefFromFile(name)
if type(pref) == "string" then
pref = string.lower(pref)
if pref == "true" or cmp == "t" then
return true
elseif pref == "false" or cmp == "f" then
return false
else
Trace("Error in GetUserPrefB(".. name ..") converting from string" )
return false
end
elseif type(pref) == "number" then
-- both 0 and -1 are false; if you want to change this,
-- feel free to remove "or pref == -1".
if pref == 0 or pref == -1 then
else
return true
end
end
end
-- GetUserPrefC: color
function GetUserPrefC(name)
-- XXX: make sure it's grabbing a string that can be turned into a color
-- and also possibly handle HSV values too.
return color( ReadPrefFromFile(name) )
end
-- GetUserPrefN: numbers (integers, floats)
function GetUserPrefN(name)
return tonumber( ReadPrefFromFile(name) )
end
--[[
Copyright © 2008-2009 AJ Kelly/KKI Labs
All rights reserved.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
]]