CHARACTERFRAME_SUBFRAMES = { "PaperDollFrame", "PetPaperDollFrame", "SkillFrame", "ReputationFrame", "TokenFrame" }; local NUM_CHARACTERFRAME_TABS = 5; function ToggleCharacter (tab) local subFrame = _G[tab]; if ( subFrame ) then if (not subFrame.hidden) then PanelTemplates_SetTab(CharacterFrame, subFrame:GetID()); if ( CharacterFrame:IsShown() ) then if ( subFrame:IsShown() ) then HideUIPanel(CharacterFrame); else PlaySound("igCharacterInfoTab"); CharacterFrame_ShowSubFrame(tab); end else ShowUIPanel(CharacterFrame); CharacterFrame_ShowSubFrame(tab); end end end end function CharacterFrame_ShowSubFrame (frameName) for index, value in pairs(CHARACTERFRAME_SUBFRAMES) do if ( value == frameName ) then _G[value]:Show() else _G[value]:Hide(); end end end function CharacterFrameTab_OnClick (self, button) local name = self:GetName(); if ( name == "CharacterFrameTab1" ) then ToggleCharacter("PaperDollFrame"); elseif ( name == "CharacterFrameTab2" ) then ToggleCharacter("PetPaperDollFrame"); elseif ( name == "CharacterFrameTab3" ) then ToggleCharacter("ReputationFrame"); elseif ( name == "CharacterFrameTab4" ) then ToggleCharacter("SkillFrame"); elseif ( name == "CharacterFrameTab5" ) then ToggleCharacter("TokenFrame"); end PlaySound("igCharacterInfoTab"); end function CharacterFrame_OnLoad (self) self:RegisterEvent("UNIT_NAME_UPDATE"); self:RegisterEvent("UNIT_PORTRAIT_UPDATE"); self:RegisterEvent("PLAYER_PVP_RANK_CHANGED"); SetTextStatusBarTextPrefix(PlayerFrameHealthBar, HEALTH); SetTextStatusBarTextPrefix(PlayerFrameManaBar, MANA); SetTextStatusBarTextPrefix(MainMenuExpBar, XP); TextStatusBar_UpdateTextString(MainMenuExpBar); -- Tab Handling code PanelTemplates_SetNumTabs(self, 5); PanelTemplates_SetTab(self, 1); end function CharacterFrame_OnEvent (self, event, ...) if ( not self:IsShown() ) then return; end local arg1 = ...; if ( event == "UNIT_PORTRAIT_UPDATE" ) then if ( arg1 == "player" ) then SetPortraitTexture(CharacterFramePortrait, arg1); end return; elseif ( event == "UNIT_NAME_UPDATE" ) then if ( arg1 == "player" ) then CharacterNameText:SetText(UnitPVPName(arg1)); end return; elseif ( event == "PLAYER_PVP_RANK_CHANGED" ) then CharacterNameText:SetText(UnitPVPName("player")); end end function CharacterFrame_OnShow (self) PlaySound("igCharacterInfoOpen"); SetPortraitTexture(CharacterFramePortrait, "player"); CharacterNameText:SetText(UnitPVPName("player")); UpdateMicroButtons(); PlayerFrameHealthBar.showNumeric = true; PlayerFrameManaBar.showNumeric = true; PlayerFrameAlternateManaBar.showNumeric = true; MainMenuExpBar.showNumeric = true; PetFrameHealthBar.showNumeric = true; PetFrameManaBar.showNumeric = true; ShowTextStatusBarText(PlayerFrameHealthBar); ShowTextStatusBarText(PlayerFrameManaBar); ShowTextStatusBarText(PlayerFrameAlternateManaBar); ShowTextStatusBarText(MainMenuExpBar); ShowTextStatusBarText(PetFrameHealthBar); ShowTextStatusBarText(PetFrameManaBar); ShowWatchedReputationBarText(); SetButtonPulse(CharacterMicroButton, 0, 1); --Stop the button pulse end function CharacterFrame_OnHide (self) PlaySound("igCharacterInfoClose"); UpdateMicroButtons(); PlayerFrameHealthBar.showNumeric = nil; PlayerFrameManaBar.showNumeric = nil; PlayerFrameAlternateManaBar.showNumeric = nil; MainMenuExpBar.showNumeric =nil; PetFrameHealthBar.showNumeric = nil; PetFrameManaBar.showNumeric = nil; HideTextStatusBarText(PlayerFrameHealthBar); HideTextStatusBarText(PlayerFrameManaBar); HideTextStatusBarText(PlayerFrameAlternateManaBar); HideTextStatusBarText(MainMenuExpBar); HideTextStatusBarText(PetFrameHealthBar); HideTextStatusBarText(PetFrameManaBar); HideWatchedReputationBarText(); end local function CompareFrameSize(frame1, frame2) return frame1:GetWidth() > frame2:GetWidth(); end local CharTabtable = {}; function CharacterFrame_TabBoundsCheck(self) if ( string.sub(self:GetName(), 1, 17) ~= "CharacterFrameTab" ) then return; end local totalSize = 60; for i=1, NUM_CHARACTERFRAME_TABS do _G["CharacterFrameTab"..i.."Text"]:SetWidth(0); PanelTemplates_TabResize(_G["CharacterFrameTab"..i], 0); totalSize = totalSize + _G["CharacterFrameTab"..i]:GetWidth(); end local diff = totalSize - 465 if ( diff > 0 and CharacterFrameTab5:IsShown() and CharacterFrameTab2:IsShown()) then --Find the biggest tab for i=1, NUM_CHARACTERFRAME_TABS do CharTabtable[i]=_G["CharacterFrameTab"..i]; end table.sort(CharTabtable, CompareFrameSize); local i=1; while ( diff > 0 and i <= NUM_CHARACTERFRAME_TABS) do local tabText = _G[CharTabtable[i]:GetName().."Text"] local change = min(10, diff); tabText:SetWidth(tabText:GetWidth() - change); diff = diff - change; PanelTemplates_TabResize(CharTabtable[i], 0); i = i+1; end end end