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