130 lines
3.4 KiB
Lua
130 lines
3.4 KiB
Lua
|
|
INSPECTFRAME_SUBFRAMES = { "InspectPaperDollFrame", "InspectPVPFrame", "InspectTalentFrame", "InspectTalentFrame", "InspectTalentFrame" };
|
|
|
|
UIPanelWindows["InspectFrame"] = { area = "left", pushable = 0 };
|
|
|
|
function InspectFrame_Show(unit)
|
|
HideUIPanel(InspectFrame);
|
|
if ( CanInspect(unit, true) ) then
|
|
NotifyInspect(unit);
|
|
InspectFrame.unit = unit;
|
|
InspectSwitchTabs(1);
|
|
ShowUIPanel(InspectFrame);
|
|
InspectFrame_UpdateTalentTab();
|
|
end
|
|
end
|
|
|
|
function InspectFrame_OnLoad(self)
|
|
self:RegisterEvent("PLAYER_TARGET_CHANGED");
|
|
self:RegisterEvent("PARTY_MEMBERS_CHANGED");
|
|
self:RegisterEvent("UNIT_NAME_UPDATE");
|
|
self:RegisterEvent("UNIT_PORTRAIT_UPDATE");
|
|
self.unit = nil;
|
|
|
|
-- Tab Handling code
|
|
PanelTemplates_SetNumTabs(self, 3);
|
|
PanelTemplates_SetTab(self, 1);
|
|
end
|
|
|
|
function InspectFrame_OnEvent(self, event, ...)
|
|
if ( not self:IsShown() ) then
|
|
return;
|
|
end
|
|
if ( event == "PLAYER_TARGET_CHANGED" or event == "PARTY_MEMBERS_CHANGED" ) then
|
|
if ( (event == "PLAYER_TARGET_CHANGED" and self.unit == "target") or
|
|
(event == "PARTY_MEMBERS_CHANGED" and self.unit ~= "target") ) then
|
|
if ( CanInspect(self.unit) ) then
|
|
InspectFrame_UnitChanged(self);
|
|
else
|
|
HideUIPanel(InspectFrame);
|
|
end
|
|
end
|
|
return;
|
|
elseif ( event == "UNIT_NAME_UPDATE" ) then
|
|
local arg1 = ...;
|
|
if ( arg1 == self.unit ) then
|
|
InspectNameText:SetText(UnitName(arg1));
|
|
end
|
|
return;
|
|
elseif ( event == "UNIT_PORTRAIT_UPDATE" ) then
|
|
local arg1 = ...;
|
|
if ( arg1 == self.unit ) then
|
|
SetPortraitTexture(InspectFramePortrait, arg1);
|
|
end
|
|
return;
|
|
end
|
|
end
|
|
|
|
function InspectFrame_UnitChanged(self)
|
|
local unit = self.unit;
|
|
NotifyInspect(unit);
|
|
InspectPaperDollFrame_OnShow(self);
|
|
SetPortraitTexture(InspectFramePortrait, unit);
|
|
InspectNameText:SetText(UnitName(unit));
|
|
InspectFrame_UpdateTalentTab();
|
|
if ( InspectPVPFrame:IsShown() ) then
|
|
InspectPVPFrame_OnShow();
|
|
end
|
|
end
|
|
|
|
function InspectFrame_OnShow(self)
|
|
if ( not self.unit ) then
|
|
return;
|
|
end
|
|
PlaySound("igCharacterInfoOpen");
|
|
SetPortraitTexture(InspectFramePortrait, self.unit);
|
|
InspectNameText:SetText(UnitName(self.unit));
|
|
end
|
|
|
|
function InspectFrame_OnHide(self)
|
|
self.unit = nil;
|
|
PlaySound("igCharacterInfoClose");
|
|
|
|
-- Clear the player being inspected
|
|
ClearInspectPlayer();
|
|
|
|
-- in the InspectTalentFrame_Update function, a default talent tab is selected smartly if there is no tab selected
|
|
-- it actually ends up feeling natural to have this behavior happen every time the frame is shown
|
|
PanelTemplates_SetTab(InspectTalentFrame, nil);
|
|
end
|
|
|
|
function InspectFrame_OnUpdate(self)
|
|
if ( not UnitIsVisible(self.unit) ) then
|
|
HideUIPanel(InspectFrame);
|
|
end
|
|
end
|
|
|
|
function InspectSwitchTabs(newID)
|
|
local newFrame = _G[INSPECTFRAME_SUBFRAMES[newID]];
|
|
local oldFrame = _G[INSPECTFRAME_SUBFRAMES[PanelTemplates_GetSelectedTab(InspectFrame)]];
|
|
if ( newFrame ) then
|
|
if ( oldFrame ) then
|
|
oldFrame:Hide();
|
|
end
|
|
PanelTemplates_SetTab(InspectFrame, newID);
|
|
ShowUIPanel(InspectFrame);
|
|
newFrame:Show();
|
|
end
|
|
end
|
|
|
|
function InspectFrameTab_OnClick(self)
|
|
PlaySound("igCharacterInfoTab");
|
|
InspectSwitchTabs(self:GetID());
|
|
end
|
|
|
|
function InspectFrame_UpdateTalentTab()
|
|
if ( not InspectFrame.unit ) then
|
|
return;
|
|
end
|
|
local level = UnitLevel(InspectFrame.unit);
|
|
if ( level > 0 and level < 10 ) then
|
|
PanelTemplates_DisableTab(InspectFrame, 3);
|
|
if ( PanelTemplates_GetSelectedTab(InspectFrame) == 3 ) then
|
|
InspectSwitchTabs(1);
|
|
end
|
|
else
|
|
PanelTemplates_EnableTab(InspectFrame, 3);
|
|
InspectTalentFrame_UpdateTabs();
|
|
end
|
|
end
|