Updating the BuildMenu() and the language system
This commit is contained in:
+61
-37
@@ -1,6 +1,6 @@
|
||||
|
||||
|
||||
local dversion = 374
|
||||
local dversion = 375
|
||||
local major, minor = "DetailsFramework-1.0", dversion
|
||||
local DF, oldminor = LibStub:NewLibrary(major, minor)
|
||||
|
||||
@@ -1355,6 +1355,16 @@ end
|
||||
end
|
||||
end
|
||||
|
||||
local formatOptionNameWithColon = function(text, useColon)
|
||||
if (text) then
|
||||
if (useColon) then
|
||||
text = text .. ":"
|
||||
else
|
||||
return text
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local disable_on_combat = {}
|
||||
|
||||
local getMenuWidgetVolative = function(parent, widgetType, indexTable)
|
||||
@@ -1571,7 +1581,7 @@ end
|
||||
dropdown._get = widgetTable.get
|
||||
dropdown.widget_type = "select"
|
||||
|
||||
dropdown.hasLabel.text = (languageTable and languageTable[widgetTable.namePhraseId]) or (widgetTable.name .. (useColon and ": " or "")) or (widgetTable.namePhraseId) or ""
|
||||
dropdown.hasLabel.text = (languageTable and languageTable[widgetTable.namePhraseId]) or formatOptionNameWithColon(widgetTable.name, useColon) or widgetTable.namePhraseId or ""
|
||||
|
||||
dropdown.hasLabel:SetTemplate(widgetTable.text_template or textTemplate)
|
||||
dropdown:ClearAllPoints()
|
||||
@@ -1632,7 +1642,7 @@ end
|
||||
switch:SetHeight(widgetTable.height)
|
||||
end
|
||||
|
||||
switch.hasLabel.text = (languageTable and languageTable[widgetTable.namePhraseId]) or (widgetTable.name .. (useColon and ": " or "")) or (widgetTable.namePhraseId) or ""
|
||||
switch.hasLabel.text = (languageTable and languageTable[widgetTable.namePhraseId]) or formatOptionNameWithColon(widgetTable.name, useColon) or widgetTable.namePhraseId or ""
|
||||
switch.hasLabel:SetTemplate(widgetTable.text_template or textTemplate)
|
||||
|
||||
switch:ClearAllPoints()
|
||||
@@ -1695,7 +1705,7 @@ end
|
||||
end
|
||||
end
|
||||
|
||||
slider.hasLabel.text = (languageTable and languageTable[widgetTable.namePhraseId]) or (widgetTable.name .. (useColon and ": " or "")) or (widgetTable.namePhraseId) or ""
|
||||
slider.hasLabel.text = (languageTable and languageTable[widgetTable.namePhraseId]) or formatOptionNameWithColon(widgetTable.name, useColon) or widgetTable.namePhraseId or ""
|
||||
slider.hasLabel:SetTemplate(widgetTable.text_template or textTemplate)
|
||||
|
||||
slider:SetPoint("left", slider.hasLabel, "right", 2)
|
||||
@@ -1742,7 +1752,7 @@ end
|
||||
end
|
||||
|
||||
local label = colorpick.hasLabel
|
||||
label.text = (languageTable and languageTable[widgetTable.namePhraseId]) or (widgetTable.name .. (useColon and ": " or "")) or (widgetTable.namePhraseId) or ""
|
||||
label.text = (languageTable and languageTable[widgetTable.namePhraseId]) or formatOptionNameWithColon(widgetTable.name, useColon) or widgetTable.namePhraseId or ""
|
||||
label:SetTemplate(widgetTable.text_template or textTemplate)
|
||||
|
||||
if (widgetTable.boxfirst or useBoxFirstOnAllWidgets) then
|
||||
@@ -1832,7 +1842,7 @@ end
|
||||
textentry:SetHook("OnEnterPressed", widgetTable.func or widgetTable.set)
|
||||
textentry:SetHook("OnEditFocusLost", widgetTable.func or widgetTable.set)
|
||||
|
||||
textentry.hasLabel.text = (languageTable and languageTable[widgetTable.namePhraseId]) or (widgetTable.name .. (useColon and ": " or "")) or (widgetTable.namePhraseId) or ""
|
||||
textentry.hasLabel.text = (languageTable and languageTable[widgetTable.namePhraseId]) or formatOptionNameWithColon(widgetTable.name, useColon) or widgetTable.namePhraseId or ""
|
||||
textentry.hasLabel:SetTemplate(widgetTable.text_template or textTemplate)
|
||||
textentry:SetPoint("left", textentry.hasLabel, "right", 2)
|
||||
textentry.hasLabel:SetPoint(currentXOffset, currentYOffset)
|
||||
@@ -1968,7 +1978,9 @@ end
|
||||
|
||||
elseif (widgetTable.type == "select") then
|
||||
local dropdown = DF:NewDropDown(parent, nil, "$parentWidget" .. index, nil, 140, 18, widgetTable.values, widgetTable.get(), dropdownTemplate)
|
||||
dropdown.tooltip = widgetTable.desc
|
||||
|
||||
DetailsFramework.Language.RegisterTableKeyWithDefault(languageAddonId, dropdown, "tooltip", widgetTable.descPhraseId, widgetTable.desc)
|
||||
|
||||
dropdown._get = widgetTable.get
|
||||
dropdown.widget_type = "select"
|
||||
|
||||
@@ -2008,7 +2020,7 @@ end
|
||||
elseif (widgetTable.type == "toggle") then
|
||||
local switch = DF:NewSwitch(parent, nil, "$parentWidget" .. index, nil, 60, 20, nil, nil, widgetTable.get(), nil, nil, nil, nil, switchTemplate)
|
||||
|
||||
DetailsFramework.Language.RegisterTableKeyWithDefaultt(languageAddonId, switch, "tooltip", widgetTable.descPhraseId, widgetTable.desc)
|
||||
DetailsFramework.Language.RegisterTableKeyWithDefault(languageAddonId, switch, "tooltip", widgetTable.descPhraseId, widgetTable.desc)
|
||||
|
||||
switch._get = widgetTable.get
|
||||
switch.widget_type = "toggle"
|
||||
@@ -2037,6 +2049,8 @@ end
|
||||
end
|
||||
|
||||
local label = DF:NewLabel(parent, nil, "$parentLabel" .. index, nil, "", "GameFontNormal", widgetTable.text_template or textTemplate or 12)
|
||||
DetailsFramework.Language.RegisterObjectWithDefault(languageAddonId, label.widget, widgetTable.namePhraseId, formatOptionNameWithColon(widgetTable.name, useColon))
|
||||
|
||||
if (widgetTable.boxfirst or useBoxFirstOnAllWidgets) then
|
||||
switch:SetPoint(currentXOffset, currentYOffset)
|
||||
label:SetPoint("left", switch, "right", 2)
|
||||
@@ -2053,14 +2067,6 @@ end
|
||||
end
|
||||
switch.hasLabel = label
|
||||
|
||||
if (widgetTable.namePhraseId) then
|
||||
--local name = parseWidgetNameAndDesc(languageTable, widgetTable.namePhraseId, widgetTable.descPhraseId, textToSet, "")
|
||||
DetailsFramework.Language.RegisterFontString(languageAddonId, label.widget, widgetTable.namePhraseId)
|
||||
else
|
||||
local textToSet = widgetTable.name .. (useColon and ": " or "")
|
||||
label:SetText(textToSet)
|
||||
end
|
||||
|
||||
if (widgetTable.id) then
|
||||
parent.widgetids[widgetTable.id] = switch
|
||||
end
|
||||
@@ -2080,7 +2086,9 @@ end
|
||||
elseif (widgetTable.type == "range") then
|
||||
local isDecimanls = widgetTable.usedecimals
|
||||
local slider = DF:NewSlider(parent, nil, "$parentWidget" .. index, nil, 140, 20, widgetTable.min, widgetTable.max, widgetTable.step, widgetTable.get(), isDecimanls, nil, nil, sliderTemplate)
|
||||
slider.tooltip = widgetTable.desc
|
||||
|
||||
DetailsFramework.Language.RegisterTableKeyWithDefault(languageAddonId, slider, "tooltip", widgetTable.descPhraseId, widgetTable.desc)
|
||||
|
||||
slider._get = widgetTable.get
|
||||
slider.widget_type = "range"
|
||||
slider:SetHook("OnValueChange", widgetTable.set)
|
||||
@@ -2102,7 +2110,9 @@ end
|
||||
end
|
||||
end
|
||||
|
||||
local label = DF:NewLabel(parent, nil, "$parentLabel" .. index, nil, widgetTable.name .. (useColon and ": " or ""), "GameFontNormal", widgetTable.text_template or textTemplate or 12)
|
||||
local label = DF:NewLabel(parent, nil, "$parentLabel" .. index, nil, "", "GameFontNormal", widgetTable.text_template or textTemplate or 12)
|
||||
DetailsFramework.Language.RegisterObjectWithDefault(languageAddonId, label.widget, widgetTable.namePhraseId, formatOptionNameWithColon(widgetTable.name, useColon))
|
||||
|
||||
slider:SetPoint("left", label, "right", 2)
|
||||
label:SetPoint(currentXOffset, currentYOffset)
|
||||
slider.hasLabel = label
|
||||
@@ -2125,7 +2135,9 @@ end
|
||||
|
||||
elseif (widgetTable.type == "color") then
|
||||
local colorpick = DF:NewColorPickButton(parent, "$parentWidget" .. index, nil, widgetTable.set, nil, buttonTemplate)
|
||||
colorpick.tooltip = widgetTable.desc
|
||||
|
||||
DetailsFramework.Language.RegisterTableKeyWithDefault(languageAddonId, colorpick, "tooltip", widgetTable.descPhraseId, widgetTable.desc)
|
||||
|
||||
colorpick._get = widgetTable.get
|
||||
colorpick.widget_type = "color"
|
||||
colorpick:SetSize(18, 18)
|
||||
@@ -2144,7 +2156,9 @@ end
|
||||
end
|
||||
end
|
||||
|
||||
local label = DF:NewLabel(parent, nil, "$parentLabel" .. index, nil, widgetTable.name .. (useColon and ": " or ""), "GameFontNormal", widgetTable.text_template or textTemplate or 12)
|
||||
local label = DF:NewLabel(parent, nil, "$parentLabel" .. index, nil, "", "GameFontNormal", widgetTable.text_template or textTemplate or 12)
|
||||
DetailsFramework.Language.RegisterObjectWithDefault(languageAddonId, label.widget, widgetTable.namePhraseId, formatOptionNameWithColon(widgetTable.name, useColon))
|
||||
|
||||
if (widgetTable.boxfirst or useBoxFirstOnAllWidgets) then
|
||||
label:SetPoint("left", colorpick, "right", 2)
|
||||
colorpick:SetPoint(currentXOffset, currentYOffset)
|
||||
@@ -2173,7 +2187,9 @@ end
|
||||
amountLineWidgetCreated = amountLineWidgetCreated + 1
|
||||
|
||||
elseif (widgetTable.type == "execute") then
|
||||
local button = DF:NewButton(parent, nil, "$parentWidget" .. index, nil, 120, 18, widgetTable.func, widgetTable.param1, widgetTable.param2, nil, widgetTable.name, nil, buttonTemplate, textTemplate)
|
||||
local button = DF:NewButton(parent, nil, "$parentWidget" .. index, nil, 120, 18, widgetTable.func, widgetTable.param1, widgetTable.param2, nil, "", nil, buttonTemplate, textTemplate)
|
||||
DetailsFramework.Language.RegisterObjectWithDefault(languageAddonId, button.widget, widgetTable.namePhraseId, widgetTable.name)
|
||||
|
||||
if (not buttonTemplate) then
|
||||
button:InstallCustomTexture()
|
||||
end
|
||||
@@ -2190,7 +2206,8 @@ end
|
||||
button:SetPoint(currentXOffset, currentYOffset)
|
||||
end
|
||||
|
||||
button.tooltip = widgetTable.desc
|
||||
DetailsFramework.Language.RegisterTableKeyWithDefault(languageAddonId, button, "tooltip", widgetTable.descPhraseId, widgetTable.desc)
|
||||
|
||||
button.widget_type = "execute"
|
||||
|
||||
--button icon
|
||||
@@ -2230,14 +2247,18 @@ end
|
||||
|
||||
elseif (widgetTable.type == "textentry") then
|
||||
local textentry = DF:CreateTextEntry(parent, widgetTable.func or widgetTable.set, 120, 18, nil, "$parentWidget" .. index, nil, buttonTemplate)
|
||||
textentry.tooltip = widgetTable.desc
|
||||
|
||||
DetailsFramework.Language.RegisterTableKeyWithDefault(languageAddonId, textentry, "tooltip", widgetTable.descPhraseId, widgetTable.desc)
|
||||
|
||||
textentry.text = widgetTable.get()
|
||||
textentry._get = widgetTable.get
|
||||
textentry.widget_type = "textentry"
|
||||
textentry:SetHook("OnEnterPressed", widgetTable.func or widgetTable.set)
|
||||
textentry:SetHook("OnEditFocusLost", widgetTable.func or widgetTable.set)
|
||||
|
||||
local label = DF:NewLabel(parent, nil, "$parentLabel" .. index, nil, widgetTable.name .. (useColon and ": " or ""), "GameFontNormal", widgetTable.text_template or textTemplate or 12)
|
||||
local label = DF:NewLabel(parent, nil, "$parentLabel" .. index, nil, "", "GameFontNormal", widgetTable.text_template or textTemplate or 12)
|
||||
DetailsFramework.Language.RegisterObjectWithDefault(languageAddonId, label.widget, widgetTable.namePhraseId, formatOptionNameWithColon(widgetTable.name, useColon))
|
||||
|
||||
textentry:SetPoint("left", label, "right", 2)
|
||||
label:SetPoint(currentXOffset, currentYOffset)
|
||||
textentry.hasLabel = label
|
||||
@@ -2295,15 +2316,17 @@ end
|
||||
end
|
||||
|
||||
local lock_notsafe_widgets = function()
|
||||
for _, widget in ipairs (disable_on_combat) do
|
||||
for _, widget in ipairs(disable_on_combat) do
|
||||
widget:Disable()
|
||||
end
|
||||
end
|
||||
|
||||
local unlock_notsafe_widgets = function()
|
||||
for _, widget in ipairs (disable_on_combat) do
|
||||
for _, widget in ipairs(disable_on_combat) do
|
||||
widget:Enable()
|
||||
end
|
||||
end
|
||||
|
||||
function DF.RefreshUnsafeOptionsWidgets()
|
||||
if (DF.PlayerHasCombatFlag) then
|
||||
lock_notsafe_widgets()
|
||||
@@ -2311,12 +2334,13 @@ end
|
||||
unlock_notsafe_widgets()
|
||||
end
|
||||
end
|
||||
|
||||
DF.PlayerHasCombatFlag = false
|
||||
local ProtectCombatFrame = CreateFrame ("frame")
|
||||
ProtectCombatFrame:RegisterEvent ("PLAYER_REGEN_ENABLED")
|
||||
ProtectCombatFrame:RegisterEvent ("PLAYER_REGEN_DISABLED")
|
||||
ProtectCombatFrame:RegisterEvent ("PLAYER_ENTERING_WORLD")
|
||||
ProtectCombatFrame:SetScript ("OnEvent", function (self, event)
|
||||
local ProtectCombatFrame = CreateFrame("frame")
|
||||
ProtectCombatFrame:RegisterEvent("PLAYER_REGEN_ENABLED")
|
||||
ProtectCombatFrame:RegisterEvent("PLAYER_REGEN_DISABLED")
|
||||
ProtectCombatFrame:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
ProtectCombatFrame:SetScript("OnEvent", function(self, event)
|
||||
if (event == "PLAYER_ENTERING_WORLD") then
|
||||
if (InCombatLockdown()) then
|
||||
DF.PlayerHasCombatFlag = true
|
||||
@@ -2324,23 +2348,23 @@ end
|
||||
DF.PlayerHasCombatFlag = false
|
||||
end
|
||||
DF.RefreshUnsafeOptionsWidgets()
|
||||
|
||||
|
||||
elseif (event == "PLAYER_REGEN_ENABLED") then
|
||||
DF.PlayerHasCombatFlag = false
|
||||
DF.RefreshUnsafeOptionsWidgets()
|
||||
|
||||
|
||||
elseif (event == "PLAYER_REGEN_DISABLED") then
|
||||
DF.PlayerHasCombatFlag = true
|
||||
DF.RefreshUnsafeOptionsWidgets()
|
||||
|
||||
|
||||
end
|
||||
end)
|
||||
|
||||
function DF:CreateInCombatTexture (frame)
|
||||
|
||||
function DF:CreateInCombatTexture(frame)
|
||||
if (DF.debug and not frame) then
|
||||
error ("Details! Framework: CreateInCombatTexture invalid frame on parameter 1.")
|
||||
end
|
||||
|
||||
|
||||
local in_combat_background = DF:CreateImage (frame)
|
||||
in_combat_background:SetColorTexture (.6, 0, 0, .1)
|
||||
in_combat_background:Hide()
|
||||
|
||||
+102
-75
@@ -46,20 +46,21 @@
|
||||
@addonId: an identifier, can be any table or string, will be used when getting the table with phrase translations, example: "DetailsLocalization", "Details", "PlaterLoc", _G.Plater
|
||||
@languageId: game languages: "deDE", "enUS", "esES", "esMX", "frFR", "itIT", "koKR", "ptBR", "ruRU", "zhCN", "zhTW", or any other value if 'gameLanguageOnly' is false (default)
|
||||
|
||||
DetailsFramework.Language.RegisterFontString(addonId, fontString, phraseId[, silent[, ...]])
|
||||
when setting a languageId with DetailsFramework.Language.SetCurrentLanguage(), automatically change the text of all registered FontStrings
|
||||
DetailsFramework.Language.RegisterObject(addonId, object, phraseId[, silent[, ...]])
|
||||
to be registered, the Object need to have a SetText method
|
||||
when setting a languageId with DetailsFramework.Language.SetCurrentLanguage(), automatically change the text of all registered Objects
|
||||
@addonId: an identifier, can be any table or string, will be used when getting the table with phrase translations, example: "DetailsLocalization", "Details", "PlaterLoc", _G.Plater
|
||||
@fontString: a UIObject FontString
|
||||
@object: any UIObject or table with SetText method
|
||||
@phraseId: any string to identify the a translated text, example: "My Phrase", "STRING_TEXT_LENGTH", text: "This is my phrase"
|
||||
@silent: if true won't error on invalid phrase text and instead use the phraseId as the text, it will still error on invalid addonId and fontString
|
||||
@silent: if true won't error on invalid phrase text and instead use the phraseId as the text, it will still error on invalid addonId and Object
|
||||
@vararg: arguments to pass for format(text, ...)
|
||||
|
||||
DetailsFramework.Language.UpdateFontStringArguments(addonId, fontString, ...)
|
||||
update the arguments (...) of a registered FontString, if no argument passed it'll erase the arguments previously set
|
||||
the FontString need to be already registered with DetailsFramework.Language.RegisterFontString()
|
||||
DetailsFramework.Language.UpdateObjectArguments(addonId, object, ...)
|
||||
update the arguments (...) of a registered Object, if no argument passed it'll erase the arguments previously set
|
||||
the Object need to be already registered with DetailsFramework.Language.RegisterObject()
|
||||
the font string text will be changed to update the text with the new arguments
|
||||
@addonId: an identifier, can be any table or string, will be used when getting the table with phrase translations, example: "DetailsLocalization", "Details", "PlaterLoc", _G.Plater
|
||||
@fontString: a UIObject FontString
|
||||
@object: any UIObject or table with SetText method
|
||||
@vararg: arguments to pass for format(text, ...)
|
||||
|
||||
DetailsFramework.Language.RegisterTableKey(addonId, table, key, phraseId[, silent[, ...]])
|
||||
@@ -72,13 +73,18 @@
|
||||
@vararg: arguments to pass for format(text, ...)
|
||||
|
||||
DetailsFramework.Language.UpdateTableKeyArguments(addonId, table, key, ...)
|
||||
--same as UpdateFontStringArguments() but for table keys
|
||||
same as UpdateObjectArguments() but for table keys
|
||||
@addonId: an identifier, can be any table or string, will be used when getting the table with phrase translations, example: "DetailsLocalization", "Details", "PlaterLoc", _G.Plater
|
||||
@table: a lua table
|
||||
@key: any value except nil or boolean
|
||||
@vararg: arguments to pass for format(text, ...)
|
||||
|
||||
|
||||
DetailsFramework.Language.RegisterObjectWithDefault(addonId, object, phraseId, defaultText[, ...])
|
||||
(helper function) register an object if a phraseID is valid or object:SetText(defaultText) is called
|
||||
|
||||
DetailsFramework.Language.RegisterTableKeyWithDefault(addonId, table, key, phraseId, defaultText[, ...])
|
||||
(helper function) register a tableKey if a phraseID is valid or table[key] = defaultText
|
||||
|
||||
--]=]
|
||||
|
||||
local DF = _G["DetailsFramework"]
|
||||
@@ -102,26 +108,36 @@ local supportedGameLanguages = {
|
||||
["zhTW"] = true,
|
||||
}
|
||||
|
||||
--functionCallPath
|
||||
|
||||
local functionSignature = {
|
||||
["RegisterLanguage"] = "RegisterLanguage(addonID, languageID[, gameLanguageOnly])",
|
||||
["SetCurrentLanguage"] = "SetCurrentLanguage(addonID, languageID)",
|
||||
["GetLanguageTable"] = "GetLanguageTable(addonID[, languageID])",
|
||||
["RegisterFontString"] = "RegisterFontString(addonID, fontString, phraseID[, silent[, ...]])",
|
||||
["UpdateFontStringArguments"] = "UpdateFontStringArguments(addonID, fontString, ...)",
|
||||
["RegisterTableKey"] = "RegisterTableKey(addonId, table, key, phraseId[[, silent[, ...]])",
|
||||
["GetText"] = "GetText(addonID, phraseID[, silent])",
|
||||
|
||||
["RegisterObject"] = "RegisterObject(addonID, object, phraseID[, silent[, ...]])",
|
||||
["UpdateObjectArguments"] = "UpdateObjectArguments(addonID, object, ...)",
|
||||
["RegisterTableKey"] = "RegisterTableKey(addonId, table, key, phraseId[[, silent[, ...]])",
|
||||
["UpdateTableKeyArguments"] = "UpdateTableKeyArguments(addonId, table, key, ...)",
|
||||
|
||||
["RegisterObjectWithDefault"] = "RegisterObjectWithDefault(addonId, object, phraseId, defaultText[, ...])",
|
||||
["RegisterTableKeyWithDefault"] = "RegisterTableKeyWithDefault(addonId, table, key, phraseId, defaultText[, ...])",
|
||||
}
|
||||
|
||||
local functionCallPath = {
|
||||
["RegisterLanguage"] = "DetailsFramework.Language.RegisterLanguage",
|
||||
["SetCurrentLanguage"] = "DetailsFramework.Language.SetCurrentLanguage",
|
||||
["GetLanguageTable"] = "DetailsFramework.Language.GetLanguageTable",
|
||||
["RegisterFontString"] = "DetailsFramework.Language.RegisterFontString",
|
||||
["UpdateFontStringArguments"] = "DetailsFramework.Language.UpdateFontStringArguments",
|
||||
["GetText"] = "DetailsFramework.Language.GetText",
|
||||
|
||||
["RegisterObject"] = "DetailsFramework.Language.RegisterObject",
|
||||
["UpdateObjectArguments"] = "DetailsFramework.Language.UpdateObjectArguments",
|
||||
["RegisterTableKey"] = "DetailsFramework.Language.RegisterTableKey",
|
||||
["UpdateTableKeyArguments"] = "DetailsFramework.Language.UpdateTableKeyArguments",
|
||||
|
||||
["RegisterObjectWithDefault"] = "DetailsFramework.Language.RegisterObjectWithDefault",
|
||||
["RegisterTableKeyWithDefault"] = "DetailsFramework.Language.RegisterTableKeyWithDefault",
|
||||
}
|
||||
|
||||
local errorText = {
|
||||
@@ -131,8 +147,8 @@ local errorText = {
|
||||
["NoLanguages"] = "no languages registered for addonId",
|
||||
["LanguageIDNotRegistered"] = "languageID not registered",
|
||||
["PhraseIDNotRegistered"] = "phraseID not registered",
|
||||
["FontString"] = "require a FontString on #%d argument",
|
||||
["FontStringNotRegistered"] = "FontString not registered yet",
|
||||
["InvalidObject"] = "invalid object on #%d argument, object must have SetText method and be an UIObject or table",
|
||||
["ObjectNotRegistered"] = "Object not registered yet",
|
||||
["TableKeyNotRegistered"] = "table not registered yet",
|
||||
["KeyNotRegistered"] = "key not registered yet",
|
||||
["InvalidTable"] = "require a table on #%d argument",
|
||||
@@ -162,8 +178,8 @@ local isValid_Text = function(text)
|
||||
return type(text) == "string"
|
||||
end
|
||||
|
||||
local isValid_FontString = function(fontString)
|
||||
if (type(fontString) ~= "table" or not fontString.GetObjectType or fontString:GetObjectType() ~= "FontString") then
|
||||
local isValid_Object = function(object)
|
||||
if (type(object) ~= "table" or not object.SetText) then
|
||||
return false
|
||||
end
|
||||
return true
|
||||
@@ -180,7 +196,7 @@ local getOrCreateAddonNamespace = function(addonId, languageId)
|
||||
--by default, the current language is the first registered language
|
||||
currentLanguageId = languageId,
|
||||
languages = {},
|
||||
fontStrings = {},
|
||||
registeredObjects = {},
|
||||
tableKeys = setmetatable({}, {__mode = "k"}),
|
||||
|
||||
--set when the first language table is registered
|
||||
@@ -222,8 +238,8 @@ local getTextFromLangugeTable = function(languageTable, phraseId)
|
||||
return languageTable[phraseId]
|
||||
end
|
||||
|
||||
local getRegisteredFontStrings = function(addonNamespaceTable)
|
||||
return addonNamespaceTable.fontStrings
|
||||
local getRegisteredObjects = function(addonNamespaceTable)
|
||||
return addonNamespaceTable.registeredObjects
|
||||
end
|
||||
|
||||
local getText = function(addonNamespaceTable, phraseId)
|
||||
@@ -297,7 +313,7 @@ local parseArguments = function(...)
|
||||
end
|
||||
end
|
||||
|
||||
--hold information about a localization, used by registered fontStrings and keyTables, has .phraesId, .arguments and .key (on keyTables)
|
||||
--hold information about a localization, used by registered objects and keyTables, has .phraesId, .arguments and .key (on keyTables)
|
||||
local createPhraseInfoTable = function(phraseId, key, ...)
|
||||
return {phraseId = phraseId, key = key, arguments = parseArguments(...)}
|
||||
end
|
||||
@@ -315,61 +331,61 @@ local getFormattedText = function(phraseInfoTable, text)
|
||||
end
|
||||
end
|
||||
|
||||
local updateFontStringTable_PhraseId = function(phraseInfoTable, phraseId)
|
||||
local updateObjectTable_PhraseId = function(phraseInfoTable, phraseId)
|
||||
phraseInfoTable.phraseId = phraseId
|
||||
end
|
||||
|
||||
local getFontStringPhraseInfoTable = function(addonNamespaceTable, fontString)
|
||||
return addonNamespaceTable.fontStrings[fontString]
|
||||
local getObjectPhraseInfoTable = function(addonNamespaceTable, object)
|
||||
return addonNamespaceTable.registeredObjects[object]
|
||||
end
|
||||
|
||||
local setFontString_InternalMembers = function(fontString, addonId, phraseId, arguments)
|
||||
fontString.__languageAddonId = addonId or fontString.__languageAddonId
|
||||
fontString.__languagePhraseId = phraseId or fontString.__languagePhraseId
|
||||
fontString.__languageArguments = arguments or fontString.__languageArguments
|
||||
local setObject_InternalMembers = function(object, addonId, phraseId, arguments)
|
||||
object.__languageAddonId = addonId or object.__languageAddonId
|
||||
object.__languagePhraseId = phraseId or object.__languagePhraseId
|
||||
object.__languageArguments = arguments or object.__languageArguments
|
||||
end
|
||||
|
||||
local setFontString_Text = function(fontString, phraseInfoTable, text)
|
||||
local setObject_Text = function(object, phraseInfoTable, text)
|
||||
local formattedText = getFormattedText(phraseInfoTable, text)
|
||||
fontString:SetText(formattedText)
|
||||
object:SetText(formattedText)
|
||||
end
|
||||
|
||||
--this method only exists on registered FontStrings
|
||||
local fontStringMethod_SetTextByPhraseID = function(fontString, phraseId, ...)
|
||||
local addonId = fontString.__languageAddonId
|
||||
--this method only exists on registered Objects
|
||||
local objectMethod_SetTextByPhraseID = function(object, phraseId, ...)
|
||||
local addonId = object.__languageAddonId
|
||||
local addonNamespaceTable = getAddonNamespace(addonId)
|
||||
|
||||
local phraseInfoTable = getFontStringPhraseInfoTable(addonNamespaceTable, fontString)
|
||||
updateFontStringTable_PhraseId(phraseInfoTable, phraseId)
|
||||
local phraseInfoTable = getObjectPhraseInfoTable(addonNamespaceTable, object)
|
||||
updateObjectTable_PhraseId(phraseInfoTable, phraseId)
|
||||
updatePhraseInfoArguments(phraseInfoTable, ...)
|
||||
setFontString_InternalMembers(fontString, addonId, phraseId, phraseInfoTable.arguments)
|
||||
setObject_InternalMembers(object, addonId, phraseId, phraseInfoTable.arguments)
|
||||
|
||||
local text = getText(addonNamespaceTable, phraseId)
|
||||
setFontString_Text(fontString, phraseInfoTable, text)
|
||||
setObject_Text(object, phraseInfoTable, text)
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
local registerFontString = function(addonNamespaceTable, fontString, phraseId, ...)
|
||||
local registerObject = function(addonNamespaceTable, object, phraseId, ...)
|
||||
local phraseInfoTable = createPhraseInfoTable(phraseId, nil, ...)
|
||||
addonNamespaceTable.fontStrings[fontString] = phraseInfoTable
|
||||
addonNamespaceTable.registeredObjects[object] = phraseInfoTable
|
||||
|
||||
--save internal information about the language directly in the FontString
|
||||
setFontString_InternalMembers(fontString, addonNamespaceTable.addonId, phraseId, phraseInfoTable.arguments)
|
||||
--save internal information about the language directly in the object
|
||||
setObject_InternalMembers(object, addonNamespaceTable.addonId, phraseId, phraseInfoTable.arguments)
|
||||
|
||||
fontString.SetTextByPhraseID = fontStringMethod_SetTextByPhraseID
|
||||
object.SetTextByPhraseID = objectMethod_SetTextByPhraseID
|
||||
|
||||
return phraseInfoTable
|
||||
end
|
||||
|
||||
--iterate among all registered fontStrings of an addon namespace and set the new text on them
|
||||
local updateAllRegisteredFontStringText = function(addonNamespaceTable)
|
||||
local fontStrings = getRegisteredFontStrings(addonNamespaceTable)
|
||||
for fontString, phraseInfoTable in pairs(fontStrings) do
|
||||
--iterate among all registered objects of an addon namespace and set the new text on them
|
||||
local updateAllRegisteredObjectsText = function(addonNamespaceTable)
|
||||
local objects = getRegisteredObjects(addonNamespaceTable)
|
||||
for object, phraseInfoTable in pairs(objects) do
|
||||
local phraseId = phraseInfoTable.phraseId
|
||||
--note: text is always valid when the callstack started at from DF.Language.SetCurrentLanguage
|
||||
local text = getText(addonNamespaceTable, phraseId)
|
||||
setFontString_Text(fontString, phraseInfoTable, text)
|
||||
setObject_Text(object, phraseInfoTable, text)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -520,8 +536,8 @@ function DF.Language.SetCurrentLanguage(addonId, languageId)
|
||||
|
||||
setCurrentLanguageId(languageId)
|
||||
|
||||
--go into the registered FontStrings and KeyTables and change their text
|
||||
updateAllRegisteredFontStringText(addonNamespaceTable)
|
||||
--go into the registered objects and KeyTables and change their text
|
||||
updateAllRegisteredObjectsText(addonNamespaceTable)
|
||||
updateAllRegisteredTableKeyText(addonNamespaceTable)
|
||||
return true
|
||||
end
|
||||
@@ -557,69 +573,69 @@ end
|
||||
|
||||
|
||||
--@addonId: an identifier, can be any table or string, will be used when getting the table with phrase translations, example: "DetailsLocalization", "Details", "PlaterLoc", _G.Plater
|
||||
--@fontString: a UIObject FontString
|
||||
--@object: any UIObject or table with SetText method
|
||||
--@phraseId: any string to identify the a translated text, example: token: "OPTIONS_FRAME_WIDTH" text: "Adjust the Width of the frame."
|
||||
--@silent: if true won't error on invalid phrase text and instead use the phraseId as the text, it will still error on invalid addonId and fontString
|
||||
--@silent: if true won't error on invalid phrase text and instead use the phraseId as the text, it will still error on invalid addonId and object
|
||||
--@vararg: arguments to pass for format(text, ...)
|
||||
function DF.Language.RegisterFontString(addonId, fontString, phraseId, silent, ...)
|
||||
function DF.Language.RegisterObject(addonId, object, phraseId, silent, ...)
|
||||
if (not isValid_AddonID(addonId)) then
|
||||
error(functionCallPath["RegisterFontString"] .. ": " .. format(errorText["AddonID"], 1) .. ", use: " .. functionSignature["RegisterFontString"] .. ".")
|
||||
error(functionCallPath["RegisterObject"] .. ": " .. format(errorText["AddonID"], 1) .. ", use: " .. functionSignature["RegisterObject"] .. ".")
|
||||
end
|
||||
|
||||
if (not isValid_PhraseID(phraseId)) then
|
||||
error(functionCallPath["RegisterFontString"] .. ": " .. format(errorText["PhraseID"], 3) .. ", use: " .. functionSignature["RegisterFontString"] .. ".")
|
||||
error(functionCallPath["RegisterObject"] .. ": " .. format(errorText["PhraseID"], 3) .. ", use: " .. functionSignature["RegisterObject"] .. ".")
|
||||
end
|
||||
|
||||
local addonNamespaceTable = getAddonNamespace(addonId)
|
||||
if (not addonNamespaceTable) then
|
||||
error(functionCallPath["RegisterFontString"] .. ": " .. errorText["NoLanguages"] .. ", use: " .. functionSignature["RegisterLanguage"] .. ".")
|
||||
error(functionCallPath["RegisterObject"] .. ": " .. errorText["NoLanguages"] .. ", use: " .. functionSignature["RegisterLanguage"] .. ".")
|
||||
end
|
||||
|
||||
if (type(fontString) ~= "table" or not fontString.GetObjectType or fontString:GetObjectType() ~= "FontString") then
|
||||
error(functionCallPath["RegisterFontString"] .. ": " .. format(errorText["FontString"], 2) .. ", use: " .. functionSignature["RegisterFontString"] .. ".")
|
||||
if (not isValid_Object(object)) then
|
||||
error(functionCallPath["RegisterObject"] .. ": " .. format(errorText["InvalidObject"], 2) .. ", use: " .. functionSignature["RegisterObject"] .. ".")
|
||||
end
|
||||
|
||||
local fontStringTable = registerFontString(addonNamespaceTable, fontString, phraseId, ...)
|
||||
local objectTable = registerObject(addonNamespaceTable, object, phraseId, ...)
|
||||
|
||||
local text = getText(addonNamespaceTable, phraseId)
|
||||
if (not isValid_Text(text)) then
|
||||
if (not silent) then
|
||||
error(functionCallPath["RegisterFontString"] .. ": " .. errorText["PhraseIDNotRegistered"] .. ", use: " .. functionSignature["GetLanguageTable"] .. "['PhraseID'] = 'translated text'.")
|
||||
error(functionCallPath["RegisterObject"] .. ": " .. errorText["PhraseIDNotRegistered"] .. ", use: " .. functionSignature["GetLanguageTable"] .. "['PhraseID'] = 'translated text'.")
|
||||
else
|
||||
text = phraseId
|
||||
end
|
||||
end
|
||||
|
||||
setFontString_Text(fontString, fontStringTable, text)
|
||||
setObject_Text(object, objectTable, text)
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
--@addonId: an identifier, can be any table or string, will be used when getting the table with phrase translations, example: "DetailsLocalization", "Details", "PlaterLoc", _G.Plater
|
||||
--@fontString: a UIObject FontString
|
||||
--@object: any UIObject or table with SetText method
|
||||
--@vararg: arguments to pass for format(text, ...)
|
||||
function DF.Language.UpdateFontStringArguments(addonId, fontString, ...)
|
||||
function DF.Language.UpdateObjectArguments(addonId, object, ...)
|
||||
if (not isValid_AddonID(addonId)) then
|
||||
error(functionCallPath["UpdateFontStringArguments"] .. ": " .. format(errorText["AddonID"], 1) .. ", use: " .. functionSignature["UpdateFontStringArguments"] .. ".")
|
||||
error(functionCallPath["UpdateObjectArguments"] .. ": " .. format(errorText["AddonID"], 1) .. ", use: " .. functionSignature["UpdateObjectArguments"] .. ".")
|
||||
end
|
||||
|
||||
local addonNamespaceTable = getAddonNamespace(addonId)
|
||||
if (not addonNamespaceTable) then
|
||||
error(functionCallPath["UpdateFontStringArguments"] .. ": " .. errorText["NoLanguages"] .. ", use: " .. functionSignature["RegisterLanguage"] .. ".")
|
||||
error(functionCallPath["UpdateObjectArguments"] .. ": " .. errorText["NoLanguages"] .. ", use: " .. functionSignature["RegisterLanguage"] .. ".")
|
||||
end
|
||||
|
||||
if (not isValid_FontString(fontString)) then
|
||||
error(functionCallPath["UpdateFontStringArguments"] .. ": " .. format(errorText["FontString"], 2) .. ", use: " .. functionSignature["UpdateFontStringArguments"] .. ".")
|
||||
if (not isValid_Object(object)) then
|
||||
error(functionCallPath["UpdateObjectArguments"] .. ": " .. format(errorText["InvalidObject"], 2) .. ", use: " .. functionSignature["UpdateObjectArguments"] .. ".")
|
||||
end
|
||||
|
||||
local phraseInfoTable = getFontStringPhraseInfoTable(addonNamespaceTable, fontString)
|
||||
local phraseInfoTable = getObjectPhraseInfoTable(addonNamespaceTable, object)
|
||||
if (not phraseInfoTable) then
|
||||
error(functionCallPath["UpdateFontStringArguments"] .. ": " .. errorText["FontStringNotRegistered"] .. ", use: " .. functionSignature["RegisterFontString"] .. ".")
|
||||
error(functionCallPath["UpdateObjectArguments"] .. ": " .. errorText["ObjectNotRegistered"] .. ", use: " .. functionSignature["RegisterObject"] .. ".")
|
||||
end
|
||||
updatePhraseInfoArguments(phraseInfoTable, ...)
|
||||
|
||||
local text = getText(addonNamespaceTable, phraseInfoTable.phraseId)
|
||||
setFontString_Text(fontString, phraseInfoTable, text)
|
||||
setObject_Text(object, phraseInfoTable, text)
|
||||
return true
|
||||
end
|
||||
|
||||
@@ -708,12 +724,23 @@ function DF.Language.UpdateTableKeyArguments(addonId, table, key, ...)
|
||||
end
|
||||
|
||||
|
||||
function DF.Language.RegisterTableKeyWithDefaultt(addonId, table, key, phraseId, defaultText)
|
||||
function DF.Language.RegisterTableKeyWithDefault(addonId, table, key, phraseId, defaultText, ...)
|
||||
if (addonId and phraseId) then
|
||||
print("registered...")
|
||||
DetailsFramework.Language.RegisterTableKey(addonId, table, key, phraseId)
|
||||
DetailsFramework.Language.RegisterTableKey(addonId, table, key, phraseId, ...)
|
||||
else
|
||||
print("used default")
|
||||
table[key] = defaultText
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function DF.Language.RegisterObjectWithDefault(addonId, object, phraseId, defaultText, ...)
|
||||
if (not isValid_Object(object)) then
|
||||
error(functionCallPath["RegisterObjectWithDefault"] .. ": " .. format(errorText["InvalidObject"], 2) .. ", use: " .. functionSignature["RegisterObjectWithDefault"] .. ".")
|
||||
end
|
||||
|
||||
if (phraseId) then
|
||||
DetailsFramework.Language.RegisterObject(addonId, object, phraseId, ...)
|
||||
else
|
||||
object:SetText(defaultText)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user