78 lines
1.9 KiB
Lua
78 lines
1.9 KiB
Lua
|
Skins = { }
|
||
|
|
||
|
-- private variables
|
||
|
local defaultSkinName = 'Default'
|
||
|
local installedSkins
|
||
|
local currentSkin
|
||
|
local skinComboBox
|
||
|
|
||
|
-- private functions
|
||
|
local function onSkinComboBoxOptionChange(self, optionText, optionData)
|
||
|
if Skins.setSkin(optionText) then
|
||
|
Settings.set('skin', optionText)
|
||
|
reloadModules()
|
||
|
end
|
||
|
end
|
||
|
|
||
|
-- public functions
|
||
|
function Skins.init()
|
||
|
installedSkins = {}
|
||
|
|
||
|
Skins.installSkins('skins')
|
||
|
|
||
|
local userSkinName = Settings.get('skin')
|
||
|
if userSkinName and Skins.setSkin(userSkinName) then
|
||
|
info('Using configured skin: ' .. userSkinName)
|
||
|
else
|
||
|
info('Using default skin: ' .. defaultSkinName)
|
||
|
Skins.setSkin(defaultSkinName)
|
||
|
Settings.set('skin', defaultSkinName)
|
||
|
end
|
||
|
|
||
|
addEvent( function()
|
||
|
skinComboBox = createWidget('ComboBox', rootWidget:recursiveGetChildById('rightButtonsPanel'))
|
||
|
for key,value in pairs(installedSkins) do
|
||
|
skinComboBox:addOption(value.name)
|
||
|
end
|
||
|
skinComboBox:setCurrentOption(currentSkin.name)
|
||
|
skinComboBox.onOptionChange = onSkinComboBoxOptionChange
|
||
|
end, false)
|
||
|
end
|
||
|
|
||
|
function Skins.terminate()
|
||
|
installedSkins = nil
|
||
|
currentSkin = nil
|
||
|
skinComboBox = nil
|
||
|
end
|
||
|
|
||
|
function Skins.installSkin(skin)
|
||
|
if not skin or not skin.name or not skin.styles then
|
||
|
error('Unable to install skin.')
|
||
|
return false
|
||
|
end
|
||
|
|
||
|
installedSkins[skin.name] = skin
|
||
|
-- todo: maybe combine styles if skin already exists
|
||
|
return true
|
||
|
end
|
||
|
|
||
|
function Skins.installSkins(directory)
|
||
|
dofiles(directory)
|
||
|
end
|
||
|
|
||
|
function Skins.setSkin(name)
|
||
|
local skin = installedSkins[name]
|
||
|
if not skin then
|
||
|
warning("Skin " .. name .. ' does not exist.')
|
||
|
return false
|
||
|
end
|
||
|
|
||
|
--g_ui.clearStyles() -- this is crashing
|
||
|
for i=1,#skin.styles do
|
||
|
g_ui.importStyle('skins/' .. string.lower(name) .. '/' .. skin.styles[i])
|
||
|
end
|
||
|
|
||
|
currentSkin = skin
|
||
|
return true
|
||
|
end
|