Код:
--------------------------------------------------------------------------------
-- Text caches
--------------------------------------------------------------------------------
local ews = common.GetEmptyWString()
function GetEWs() return ews end
--------------------------------------------------------------------------------
local _textGroups = {}
local _textCache = {}
local _textStateGroups = {}
local _textStateCache = {}
--------------------------------------------------------------------------------
local function GetGroupText( group, groupCache, sysName, optional )
local result = groupCache[ sysName ]
if result == nil then
result = group:HasText( sysName ) and group:GetText( sysName )
groupCache[ sysName ] = result
end
if result == false and not optional then
assert( false, "Non-existent text requested: " .. tostring( sysName ) )
end
return result
end
--------------------------------------------------------------------------------
-- Получить текст sysName из текстовой группы аддона sysGroup (группа должна существовать)
-- Если задан optional то при отсутствии текста вернется false, иначе будет вызван assert
function GetAddonText( sysGroup, sysName, optional )
local group = _textGroups[ sysGroup ]
if not group then
group = common.GetAddonRelatedTextGroup( sysGroup )
_textGroups[ sysGroup ] = group
_textCache[ sysGroup ] = {}
end
return GetGroupText( group, _textCache[ sysGroup ], sysName, optional )
end
--------------------------------------------------------------------------------
-- Получить текст sysName из текстовой группы стейта sysGroup (группа должна существовать)
-- Если задан optional то при отсутствии текста вернется false, иначе будет вызван assert
function GetStateText( sysGroup, sysName, optional )
local group = _textStateGroups[ sysGroup ]
if not group then
group = common.GetStateRelatedTextGroup( sysGroup )
_textStateGroups[ sysGroup ] = group
_textStateCache[ sysGroup ] = {}
end
return GetGroupText( group, _textStateCache[ sysGroup ], sysName, optional )
end
--------------------------------------------------------------------------------
-- Texture caches
--------------------------------------------------------------------------------
local _textureGroups = {}
local _textureCache = {}
local _textureStateGroups = {}
local _textureStateCache = {}
--------------------------------------------------------------------------------
local function GetGroupTexture( group, groupCache, sysName, optional )
local result = groupCache[ sysName ]
if result == nil then
result = group:HasTexture( sysName ) and group:GetTexture( sysName )
groupCache[ sysName ] = result
end
if result == false and not optional then
assert( false, "Non-existent texture requested: " .. tostring( sysName ) )
end
return result
end
--------------------------------------------------------------------------------
-- Получить текстуру sysName из текстурной группы аддона sysGroup (группа должна существовать)
-- Если задан optional то при отсутствии текстуры вернется false, иначе будет вызван assert
function GetAddonTexture( sysGroup, sysName, optional )
local group = _textureGroups[ sysGroup ]
if not group then
group = common.GetAddonRelatedTextureGroup( sysGroup )
_textureGroups[ sysGroup ] = group
_textureCache[ sysGroup ] = {}
end
return GetGroupTexture( group, _textureCache[ sysGroup ], sysName, optional )
end
--------------------------------------------------------------------------------
-- Получить текстуру sysName из текстурной группы стейта sysGroup (группа должна существовать)
-- Если задан optional то при отсутствии текстуры вернется false, иначе будет вызван assert
function GetStateTexture( sysGroup, sysName, optional )
local group = _textureStateGroups[ sysGroup ]
if not group then
group = common.GetStateRelatedTextureGroup( sysGroup )
_textureStateGroups[ sysGroup ] = group
_textureStateCache[ sysGroup ] = {}
end
return GetGroupTexture( group, _textureStateCache[ sysGroup ], sysName, optional )
end
--------------------------------------------------------------------------------
-- BONUS: Old API convert
--------------------------------------------------------------------------------
-- Неименованные группы тестов и текстур в UIAddon должны быть преобразованы в именованные с данным именем
-- Стейтовые неименованные группы преобразованы в именованные с именем "Common"
-- Имя должно быть уникальным в рамках набора групп одного типа в одном аддоне
--------------------------------------------------------------------------------
local DEFAULT_GROUP_NAME = "Common"
local DEFAULT_STATE_GROUP_NAME = "Common"
--------------------------------------------------------------------------------
--[[
Например
<texts href="Texts/RelatedTexts.(UIRelatedTexts).xdb" />
<textsGroups>
<Item>
<groupName>Headers</groupName>
<texts href="Texts/Headers/Headers.(UIRelatedTexts).xdb" />
</Item>
</textsGroups>
<textures href="Textures/RelatedTextures.(UIRelatedTextures).xdb" />
конвертится в
<textsGroups>
<Item>
<groupName>Common</groupName>
<texts href="Texts/RelatedTexts.(UIRelatedTexts).xdb" />
</Item>
<Item>
<groupName>Headers</groupName>
<texts href="Texts/Headers/Headers.(UIRelatedTexts).xdb" />
</Item>
</textsGroups>
<texturesGroups>
<Item>
<groupName>Common</groupName>
<textures href="Textures/RelatedTextures.(UIRelatedTextures).xdb" />
</Item>
</texturesGroups>
]]
--------------------------------------------------------------------------------
function common.GetAddonRelatedText( sysName )
return GetAddonText( DEFAULT_GROUP_NAME, sysName, false )
end
--------------------------------------------------------------------------------
function common.GetAddonRelatedGroupText( sysGroup, sysName )
return GetAddonText( sysGroup, sysName, false )
end
--------------------------------------------------------------------------------
function common.GetStateRelatedText( sysName )
return GetStateText( DEFAULT_STATE_GROUP_NAME, sysName, false )
end
--------------------------------------------------------------------------------
function common.GetStateRelatedGroupText( sysGroup, sysName )
return GetStateText( sysGroup, sysName, false )
end
--------------------------------------------------------------------------------
function common.GetAddonRelatedTexture( sysName )
return GetAddonTexture( DEFAULT_GROUP_NAME, sysName, false )
end
--------------------------------------------------------------------------------
function common.GetAddonRelatedGroupTexture( sysGroup, sysName )
return GetAddonTexture( sysGroup, sysName, false )
end
--------------------------------------------------------------------------------
function common.GetStateRelatedTexture( sysName )
return GetStateTexture( DEFAULT_STATE_GROUP_NAME, sysName, false )
end
--------------------------------------------------------------------------------
function common.GetStateRelatedGroupTexture( sysGroup, sysName )
return GetStateTexture( sysGroup, sysName, false )
end
--------------------------------------------------------------------------------