--[[ Element: Assistant Icon Toggles visibility of `self.Assistant` based on the units raid officer status. Widget Assistant - Any UI widget. Notes The default assistant icon will be applied if the UI widget is a texture and doesn't have a texture or color defined. Examples -- Position and size local Assistant = self:CreateTexture(nil, "OVERLAY") Assistant:SetSize(16, 16) Assistant:SetPoint('TOP', self) -- Register it with oUF self.Assistant = Assistant Hooks and Callbacks ]] local parent, ns = ... local oUF = ns.oUF local Update = function(self, event) if not self.unit then return; end local assistant = self.Assistant --[[ :PreUpdate() Called before the element has been updated. Arguments self - The Assistant element. ]] if(assistant.PreUpdate) then assistant:PreUpdate() end local unit = self.unit local isAssistant = UnitInRaid(unit) and UnitIsGroupAssistant(unit) and not UnitIsGroupLeader(unit) if(isAssistant) then assistant:Show() else assistant:Hide() end --[[ :PostUpdate(isAssistant) Called after the element has been updated. Arguments self - The Assistant element. isAssistant - A boolean holding whether the unit is a raid officer or not. ]] if(assistant.PostUpdate) then return assistant:PostUpdate(isAssistant) end end local Path = function(self, ...) --[[ :Override(self, event, ...) Used to completely override the internal update function. Removing the table key entry will make the element fall-back to its internal function again. Arguments self - The Assistant element. event - The UI event that fired. ... - A vararg with the arguments that accompany the event. ]] return (self.Assistant.Override or Update) (self, ...) end local ForceUpdate = function(element) return Path(element.__owner, 'ForceUpdate') end local Enable = function(self) local assistant = self.Assistant if(assistant) then self:RegisterEvent("GROUP_ROSTER_UPDATE", Path, true) if(assistant:IsObjectType"Texture" and not assistant:GetTexture()) then assistant:SetTexture[[Interface\GroupFrame\UI-Group-AssistantIcon]] end assistant.__owner = self assistant.ForceUpdate = ForceUpdate return true end end local Disable = function(self) local assistant = self.Assistant if(assistant) then self:UnregisterEvent("GROUP_ROSTER_UPDATE", Path) assistant:Hide() end end oUF:AddElement('Assistant', Path, Enable, Disable)