From 1daab21a63738e2a916ff8af78078f4f49a4691a Mon Sep 17 00:00:00 2001 From: Tercio Jose Date: Wed, 5 Oct 2022 22:00:41 -0300 Subject: [PATCH] Updating the BuildMenu() and the language system --- Libs/DF/fw.lua | 98 ++++++++++++++--------- Libs/DF/languages.lua | 177 ++++++++++++++++++++++++------------------ 2 files changed, 163 insertions(+), 112 deletions(-) diff --git a/Libs/DF/fw.lua b/Libs/DF/fw.lua index a71c9213..9e9a9968 100644 --- a/Libs/DF/fw.lua +++ b/Libs/DF/fw.lua @@ -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() diff --git a/Libs/DF/languages.lua b/Libs/DF/languages.lua index fabeaa2f..a3026ac2 100644 --- a/Libs/DF/languages.lua +++ b/Libs/DF/languages.lua @@ -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 \ No newline at end of file