ElvUI/Libraries/oUF/elements/partyindicator.lua
2020-11-13 14:27:50 -05:00

91 lines
2.4 KiB
Lua

--[[
# Element: Party Indicator
Toggles the visibility of an indicator based on if the player was in a group before joining the instance.
## Widget
PartyIndicator - Player only widget.
]]
local _, ns = ...
local oUF = ns.oUF
local function Update(self, event)
local element = self.PartyIndicator
if(element.PreUpdate) then
element:PreUpdate()
end
local forced = not event or event == 'ElvUI_UpdateAllElements'
if forced or event == 'GROUP_ROSTER_UPDATE' then
if IsInGroup(LE_PARTY_CATEGORY_HOME) and IsInGroup(LE_PARTY_CATEGORY_INSTANCE) then
element:Show()
else
element:Hide()
end
end
if forced or event == 'UPDATE_CHAT_COLOR' then
local private = ChatTypeInfo.PARTY
if private and element.HomeIcon then
element.HomeIcon:SetVertexColor(private.r, private.g, private.b, 1)
end
local public = ChatTypeInfo.INSTANCE_CHAT
if public and element.InstanceIcon then
element.InstanceIcon:SetVertexColor(public.r, public.g, public.b, 1)
end
end
if(element.PostUpdate) then
return element:PostUpdate()
end
end
local function Path(self, ...)
--[[ Override: PartyIndicator.Override(self, event)
Used to completely override the internal update function.
* self - the parent object
* event - the event triggering the update (string)
--]]
return (self.PartyIndicator.Override or Update) (self, ...)
end
local function ForceUpdate(element)
return Path(element.__owner, 'ForceUpdate')
end
local function Enable(self)
local element = self.PartyIndicator
if element then
element.__owner = self
element.ForceUpdate = ForceUpdate
self:RegisterEvent('UPDATE_CHAT_COLOR', Path, true)
self:RegisterEvent('GROUP_ROSTER_UPDATE', Path, true)
if(element.HomeIcon and element.HomeIcon:IsObjectType('Texture') and not element.HomeIcon:GetTexture()) then
element.HomeIcon:SetTexture([[Interface\FriendsFrame\UI-Toast-FriendOnlineIcon]])
end
if(element.InstanceIcon and element.InstanceIcon:IsObjectType('Texture') and not element.InstanceIcon:GetTexture()) then
element.InstanceIcon:SetTexture([[Interface\FriendsFrame\UI-Toast-FriendOnlineIcon]])
end
return true
end
end
local function Disable(self)
local element = self.PartyIndicator
if(element) then
element:Hide()
self:UnregisterEvent('UPDATE_CHAT_COLOR', Path)
self:UnregisterEvent('GROUP_ROSTER_UPDATE', Path)
end
end
oUF:AddElement('PartyIndicator', Path, Enable, Disable)