Compare with Previous | Blame | View Log
local ButtonTexture = "Interface\\Addons\\LanguageCycle\\media\\LanguageCycleIcon" local addonName = "LanguageCycle" BINDING_HEADER_LANGUAGECYCLE="Language Cycle"; local defaults = { saved_language = {}; translate_group = true; panel_visible = true; panel_locked = false; minimapIcon = { hide = false, minimapPos = 220, radius = 80, } } if not LANGUAGE_CYCLE then LANGUAGE_CYCLE = defaults else for k, v in pairs(defaults) do if LANGUAGE_CYCLE[k] == nil or type(LANGUAGE_CYCLE[k]) ~= type(v) then LANGUAGE_CYCLE[k] = v end end end LC_default_language = ""; LC_verbose = true; LC_unknown = "Unknown Entity"; LC_realm_name = ""; LC_player_name = ""; LC_player_id = nil; LC_panel_height = 0; LC_panel_width = 0; LC_version = "6.0.2a, by Halya, Argent Dawn, EU"; LC_Help_Text={}; LC_Help_Text[0]="Language Cycle will respond to the following commands:"; LC_Help_Text[1]="- /lc : Toggles spoken language between racial/common"; LC_Help_Text[2]="- /lc status : Displays current settings"; LC_Help_Text[3]="- /lc toggle : function removed, translation for guild/party is now forced by Blizzard"; LC_Help_Text[4]="- /lc help : Displays this message"; LC_Help_Text[5]="- /lc show : Display the language cycle button"; LC_Help_Text[6]="- /lc hide : Hide the language cycle button"; LC_Help_Text[7]="- /lc MM : Toggle the language cycle mini-map button"; LC_Help_Text[8]="--------------------------------------------------------------"; --Save Blizzard's original SendText function local LC_Blizzard_SendChatMessage; local LCButtonFrameObject = LibStub:GetLibrary("LibDataBroker-1.1"):NewDataObject(addonName, { type = "data source", text = LANGUAGE_CYCLE.minimapIcon.text, icon = ButtonTexture, OnClick = function(frame, button) GameTooltip:Hide() if button =="LeftButton" then Language_Cycle_Cycle(); elseif button =="MiddleButton" then local t = 0; while LC_Help_Text[t] ~= nil do DEFAULT_CHAT_FRAME:AddMessage(LC_Help_Text[t],0.0, 1.0, 0.0); t = t + 1; end elseif button == "RightButton" then Language_Cycle_Panel_Visible(); end end, OnTooltipShow = function(tooltip) if tooltip and tooltip.AddLine then tooltip:SetText("LanguageCycle") tooltip:AddLine("Left-Click: Cycle Language|nRight-Click: Show/Hide Built-in Panel|nMiddle-Click: Show Help",.8,.8,.8,1) tooltip:Show() end end, }) function Language_Cycle_OnLoad( self ) -- Hook SendChatMessage LC_Blizzard_SendChatMessage = SendChatMessage; SendChatMessage = LC_SendChatMessage; SlashCmdList["LANGUAGECYCLE"] = Language_Cycle_Slash; SLASH_LANGUAGECYCLE1 = "/lc"; ShowUIPanel(Language_Cycle_Panel); if ( not Language_Cycle_Panel:IsVisible() ) then Language_Cycle_Panel:SetOwner(UIParent, "ANCHOR_PRESERVE"); end Language_Cycle_Panel_Backdrop:SetBackdropBorderColor(1,1,1); Language_Cycle_Panel_Backdrop:SetBackdropColor(0.3, 0.3, 0.3); Language_Cycle_Backdrop_Hide(); LC_panel_height = Language_Cycle_Panel:GetHeight(); LC_panel_width = Language_Cycle_Panel:GetWidth(); Language_Cycle_Add_Message("LanguageCycle loaded; Type '/lc help' for a list of options; Version " .. LC_version); -- self:SetPadding(16); self:RegisterForDrag("LeftButton"); self:RegisterEvent("VARIABLES_LOADED"); self:RegisterEvent("PLAYER_ENTERING_WORLD"); end function Language_Cycle_Get_Version() return LC_version end -- replace Blizzard's SendChatMessage function instead. -Nhani function LC_SendChatMessage(msg, chatType, language, channel) if (LC_player_id ~= nil) then language = LANGUAGE_CYCLE.saved_language[LC_player_id]; end local numLanguages = GetNumLanguages(); local i; for i = 1, numLanguages, 1 do local getlanguage, getlanguageID = GetLanguageByIndex(i); if (language == getlanguage) then languageID = getlanguageID; end end LC_Blizzard_SendChatMessage(msg, chatType, languageID, channel); end function Language_Cycle_Panel_Visible() if (Language_Cycle_Panel:IsVisible() ) then HideUIPanel(Language_Cycle_Panel); LANGUAGE_CYCLE.panel_visible = false; else ShowUIPanel(Language_Cycle_Panel); LANGUAGE_CYCLE.panel_visible = true; end end function Language_Cycle_Backdrop_Show(override) if (LANGUAGE_CYCLE.panel_locked and not override) then else Language_Cycle_Panel_Backdrop:Show(); end end function Language_Cycle_Backdrop_Hide(override) if (LANGUAGE_CYCLE.panel_locked and not override) then else Language_Cycle_Panel_Backdrop:Hide(); end end function Language_Cycle_Cycle() local numLangs = GetNumLanguages(); local currentlang = 0; local lang; lang = Language_Cycle_Get_Lang(); for i=1,numLangs,1 do if (lang == GetLanguageByIndex(i)) then currentlang = i; end end if (currentlang == numLangs) then currentlang = 1; else currentlang = currentlang + 1; end Language_Cycle_Set_Lang(GetLanguageByIndex(currentlang)); -- if (IsAddOnLoaded("Titan")) then -- TitanPanelButton_UpdateButton(TITAN_LANGUAGECYCLE_ID); -- end -- if (IsAddOnLoaded("FuBar")) then -- LanguageCycleFuBar:UpdateText() -- end -- For debugging -- Langauge_Cycle_Debug_Message(); end function Language_Cycle_Language_Clicked(button) if (button == "LeftButton") then LC_verbose = false; Language_Cycle_Cycle(); LC_verbose = true; end if (button == "RightButton") then LANGUAGE_CYCLE.panel_locked = not LANGUAGE_CYCLE.panel_locked; Langauge_Cycle_Lock_Backdrop(); end end function Langauge_Cycle_Lock_Backdrop() if (LANGUAGE_CYCLE.panel_locked) then Language_Cycle_Backdrop_Hide(true); Language_Cycle_Panel:SetHeight(Language_Cycle_Button:GetHeight()); Language_Cycle_Panel:SetWidth(Language_Cycle_Button:GetWidth()); else Language_Cycle_Backdrop_Show(true); Language_Cycle_Panel:SetHeight(LC_panel_height); Language_Cycle_Panel:SetWidth(LC_panel_width); end end function Language_Cycle_Variables_Loaded() --Called when variables_loaded event fires, usually on UI reload if (LANGUAGE_CYCLE.panel_visible) then ShowUIPanel(Language_Cycle_Panel); else HideUIPanel(Language_Cycle_Panel); end Langauge_Cycle_Lock_Backdrop(); -- For debugging -- Language_Cycle_Debug_Message(); -- Language_Cycle_Add_Message("Onload done"); end function Language_Cycle_OnEvent( self, event, ... ) if (event == "VARIABLES_LOADED") then Language_Cycle_Variables_Loaded(); -- Add LanguageCycle to myAddOns addons list if(myAddOnsFrame) then myAddOnsList.LanguageCycle = { name = "LanguageCycle", description = "A button to change your spoken language", version = Language_Cycle_Get_Version(), category = MYADDONS_CATEGORY_CHAT, frame = "Language_Cycle_Panel"}; end ---------------------------------------------------------------------------------------- -- LDB Button Creation ---------------------------------------------------------------------------------------- local defaults = { minimapIcon = { hide = false, minimapPos = 220, radius = 80, text = lang, } } if not LANGUAGE_CYCLE then LANGUAGE_CYCLE = defaults else for k, v in pairs(defaults) do if LANGUAGE_CYCLE[k] == nil or type(LANGUAGE_CYCLE[k]) ~= type(v) then LANGUAGE_CYCLE[k] = v end end end LibStub("LibDBIcon-1.0"):Register(addonName, LCButtonFrameObject, LANGUAGE_CYCLE.minimapIcon) end if (event == "PLAYER_ENTERING_WORLD") then Language_Cycle_Init(); end end function Language_Cycle_Init() --Called when the Player_Entering_World event fires, usually on character login. -- May be called later, if initialization fails LC_realm_name = string.gsub(GetRealmName(),"'",""); LC_player_name = UnitName("player"); LC_default_language = GetDefaultLanguage(); LC_verbose = false; Language_Cycle_Backdrop_Hide(true); local lang; if (LC_player_name == nil or LC_player_name == LC_unknown or LC_realm_name == nil) then else LC_player_id = LC_realm_name .. " " .. LC_player_name; end lang = Language_Cycle_Get_Lang(); if (lang == nil) then else Language_Cycle_Set_Lang(lang) end LC_verbose = true; -- For debugging -- Language_Cycle_Debug_Message(); -- Language_Cycle_Add_Message("Entering World Done"); end function Language_Cycle_OnUpdate( self, elapsed ) if (not LC_player_id) then Language_Cycle_Init(); end end function Language_Cycle_Set_Lang(lang) -- Updates the button text, chat window and returns a chat window message Language_Cycle_Button:SetText(lang); DEFAULT_CHAT_FRAME.editBox.language = lang; LANGUAGE_CYCLE.minimapIcon.text = lang; LCButtonFrameObject.text = lang if (LC_verbose) then Language_Cycle_Add_Message(string.format("Now speaking %s", lang)); end Language_Cycle_Save_Lang(lang); end function Language_Cycle_Save_Lang(lang) if (LC_player_id == nil) then else LANGUAGE_CYCLE.saved_language[LC_player_id] = lang; end end function Language_Cycle_Get_Lang() local lang, langID; if (LC_player_id == nil) then else lang = DEFAULT_CHAT_FRAME.editBox.language; if (LANGUAGE_CYCLE.saved_language[LC_player_id] == nil) then if (lang == nil) then lang = LC_default_language; end else lang = LANGUAGE_CYCLE.saved_language[LC_player_id]; end end return lang end function Language_Cycle_Debug_Message() local lang; lang = LANGUAGE_CYCLE.saved_language[LC_player_id]; if (lang == nil) then lang = "unknown"; end if not(LC_player_name == nil) then message(LC_player_name .. " speaks " .. lang); else message("LC_player_name is nil"); end end function Language_Cycle_Slash(arg) if (arg == "" or arg == nil) then Language_Cycle_Cycle(); elseif (arg == "ver" or arg == "version") then Language_Cycle_Add_Message("LanguageCycle version: " .. LC_version); elseif (arg == "clear") then Language_Cycle_Clear(); elseif (arg == "stat" or arg == "status") then local msg = "Speaking: " .. LANGUAGE_CYCLE.saved_language[LC_player_id] .. "; Guild/Party translation is "; if (LANGUAGE_CYCLE.translate_group) then msg = msg .. "on."; else msg = msg .. "off."; end Language_Cycle_Add_Message(msg); elseif (arg == "party" or arg == "guild" or arg == "group" or arg =="toggle") then Language_Cycle_Add_Message("This function has been depreciated due to Blizzard's changes"); elseif (arg == "show" or arg == "hide") then Language_Cycle_Panel_Visible(); elseif (arg == "mm" or arg == "MM") then if (LANGUAGE_CYCLE.minimapIcon.hide == false) then LibStub("LibDBIcon-1.0"):Hide("LanguageCycle") LANGUAGE_CYCLE.minimapIcon.hide = true else LibStub("LibDBIcon-1.0"):Show("LanguageCycle") LANGUAGE_CYCLE.minimapIcon.hide = false end elseif (arg == "help") then local t = 0; while LC_Help_Text[t] ~= nil do DEFAULT_CHAT_FRAME:AddMessage(LC_Help_Text[t],0.0, 1.0, 0.0); t = t + 1; end end end function Language_Cycle_Clear() LANGUAGE_CYCLE.saved_language[LC_player_id] = nil; LANGUAGE_CYCLE.translate_group = true; Language_Cycle_Add_Message(string.format("Cleared language for %s", LC_player_name)); Language_Cycle_Button:SetText("Pref Cleared..."); Language_Cycle_Set_Text_Color(); end function Language_Cycle_Add_Message(msg) DEFAULT_CHAT_FRAME:AddMessage(msg,0.0,1.0,0.0); end