Updating the BuildMenu() and the language system

This commit is contained in:
Tercio Jose
2022-10-05 22:00:41 -03:00
parent 35a79b4014
commit 1daab21a63
2 changed files with 163 additions and 112 deletions
+61 -37
View File
@@ -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
View File
@@ -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