local addonName, addonTable = ...; ChillEffectAlts = LibStub("AceAddon-3.0"):NewAddon("ChillEffectAlts", "AceEvent-3.0") local L = LibStub("AceLocale-3.0"):GetLocale("ChillEffectAlts", true) local CurrenciesModule = addonTable.Currencies local CharacterModule = addonTable.Character local Character BINDING_HEADER_THEALTERNATIVEHEADER = "The Alternative" local CharTabtable = {}; local CF_TabBoundsCheck = function(self) self = self and self:GetName() or "CharacterFrameTab" -- hack to make sure it resizes when the CharacterFrame expands/collapses local NUM_CHARACTERFRAME_TABS = 5 if ( string.sub(self, 1, 17) ~= "CharacterFrameTab" ) then return; end for i=1, NUM_CHARACTERFRAME_TABS do _G["CharacterFrameTab"..i.."Text"]:SetWidth(0); PanelTemplates_TabResize(_G["CharacterFrameTab"..i], 0, nil, 36, 88); end local diff = _G["CharacterFrameTab"..NUM_CHARACTERFRAME_TABS]:GetRight() - CharacterFrame:GetRight(); if ( diff > 0 ) then --Find the biggest tab for i=1, NUM_CHARACTERFRAME_TABS do CharTabtable[i]=_G["CharacterFrameTab"..i]; end table.sort(CharTabtable, function(frame1, frame2) return frame1:GetWidth() > frame2:GetWidth(); end); local i=1; while ( diff > 0 and i <= NUM_CHARACTERFRAME_TABS) do local tabText = _G[CharTabtable[i]:GetName().."Text"] local change = min(10, diff); diff = diff - change; tabText:SetWidth(0); PanelTemplates_TabResize(CharTabtable[i], -change, nil, 36-change, 88); -- print(format("Resizing tab %s by %d", CharTabtable[i]:GetName(), change)) i = i+1; end end -- print("Checked bounds, resizing") -- CharacterFrameTab2:Hide() -- CharacterFrameTab3:SetPoint("LEFT", "CharacterFrameTab1", "RIGHT", -15, 0) end function ChillEffectAlts:OnInitialize() local defaults = { char = { currencies = {}, bags = {}, bank = {}, }, global = { shown = {} } } self.db = LibStub("AceDB-3.0"):New("CEAltsDB", defaults) self.db.realm[UnitName("player")] = true self.db.factionrealm[UnitName("player")] = true -- SLASH_ChillEffectAlts1 = "/alt" -- SlashCmdList["ChillEffectAlts"] = function() -- if self.frame:IsShown() then -- self.frame:Hide() -- else -- self.frame:Show() -- end -- end CharacterFrameTab1:SetPoint("TOPLEFT", CharacterFrame, "BOTTOMLEFT", -8, 2) AC = CreateFrame("Button", "CharacterFrameTab5", CharacterFrame, "CharacterFrameTabButtonTemplate", 5) AC:SetPoint("LEFT", "CharacterFrameTab4", "RIGHT", -15, 0) AC:SetText("All Characters") AC:SetScript("OnShow", function(self) if CharacterFrameTab4:IsShown() then self:SetPoint("LEFT", "CharacterFrameTab4", "RIGHT", -15, 0) else self:SetPoint("LEFT", "CharacterFrameTab3", "RIGHT", -15, 0) end end) CharacterFrameTab4:HookScript("OnShow", function() CharacterFrameTab5:SetPoint("LEFT", "CharacterFrameTab4", "RIGHT", -15, 0) end) AC:SetScript("OnEnter", function(self) GameTooltip:SetOwner(self, "ANCHOR_RIGHT"); -- Second arg = GetBindingKey(action) GameTooltip:SetText(MicroButtonTooltipText("All Characters", "TOGGLECHARACTER5"), 1.0,1.0,1.0 ); end) AC:SetScript("OnLeave",GameTooltip_Hide) PanelTemplates_SetNumTabs(CharacterFrame, 5) hooksecurefunc("CharacterFrame_TabBoundsCheck", CF_TabBoundsCheck) hooksecurefunc("CharacterFrame_Expand", CF_TabBoundsCheck) hooksecurefunc("CharacterFrame_Collapse", CF_TabBoundsCheck) hooksecurefunc("PetPaperDollFrame_UpdateIsAvailable", function() CharacterFrameTab2:Hide() CharacterFrameTab3:SetPoint("LEFT", "CharacterFrameTab2", "LEFT", 0, 0) end) hooksecurefunc("CharacterFrameTab_OnClick", function(self, button) local name = self:GetName(); if ( name == "CharacterFrameTab5" ) then ToggleCharacter("ChillEffectCurrencyFrame") CF_TabBoundsCheck(self) end PlaySound("igCharacterInfoTab"); end) CharacterFrameTab2:HookScript("OnShow", function(self) self:Hide() CharacterFrameTab3:SetPoint("LEFT", "CharacterFrameTab2", "LEFT", 0, 0) end) end function ChillEffectAlts:ToggleCurrenciesFrame() if CurrenciesModule:GetFrame():IsShown() then CurrenciesModule:GetFrame():Hide() CharacterFrameCloseButton:Click() else ToggleCharacter("ChillEffectCurrencyFrame") CF_TabBoundsCheck(self) end end local function UpdateCurrencies() assert(Character) Character:UpdateCurrencies() CurrenciesModule:RedrawCurrencyFrame() end local function UpdateBags() assert(Character) Character:UpdateBags() end local function UpdateBank() assert(Character) Character:UpdateBank() end local function UpdateVoidStorage() assert(Character) Character:UpdateVoidStorage() end function ChillEffectAlts:BANKFRAME_OPENED() self.isBankOpen = true Character:UpdateBank() end function ChillEffectAlts:BANKFRAME_CLOSED() self.isBankOpen = false end local gui_built = false function ChillEffectAlts:OnEnable() CurrenciesModule:SetDB(self.db) if not gui_built then CurrenciesModule:CreateCurrencyFrame() end Character = CharacterModule:new(self.db.char) -- Track the open state of the bank. Can't check for IsShown, because addons self.isBankOpen = false; self:RegisterEvent("BANKFRAME_OPENED") self:RegisterEvent("BANKFRAME_CLOSED") self:RegisterEvent("PLAYER_ENTERING_WORLD", UpdateCurrencies) self:RegisterEvent("PLAYER_MONEY", UpdateCurrencies) self:RegisterEvent("CURRENCY_DISPLAY_UPDATE", UpdateCurrencies) self:RegisterEvent("BAG_UPDATE_DELAYED", UpdateBags) end