Call as
UI.condition_icon.constructor()
Record the dependency UI.condition_icon.constructor, then call it by that name. A namespaced call does not pass self: use a colon call or pass the object yourself.
What it does
Constructs a new RM-ConditionIcon widget: a clickable image with an optional caption below it, with SetImage, SetImageByAtlas, SetImageSize, SetLabel and SetDisabled, firing OnClick, OnEnter and OnLeave while its lease is live. It returns the registered but not yet acquired widget; addon:CreateConditionIcon passes it to addon:AcquireConditionWidget.
Arguments
None.
Returns
| 1 | RMConditionWidget | The new icon widget, registered with the condition widget system. |
|---|
Editions
Built In helpers are registered on every edition. What differs is the game API they read; where one is missing the helper falls back or returns nil with a reason.
- Not available on that edition (the reason is in the tooltip)
- Only while Blizzard's deprecation fallbacks are on
Example
-- needs the dependency UI.condition_icon.constructor
local icon = addon:AcquireConditionWidget("RM-ConditionIcon", UI.condition_icon.constructor)
icon:SetImage("Interface\\Icons\\INV_Misc_QuestionMark")
icon:SetImageSize(36, 36)
icon:SetLabel(L["Spell"])
parent:AddChild(icon)Source
UI/condition_icon.lua, line 27. Read only in game; Duplicate makes an editable copy.
UI.condition_icon.constructor()
local w={type='RM-ConditionIcon',alive=false,disabled=false}
local frame=CreateFrame('Button',nil,UIParent);w.frame=frame;frame:EnableMouse(true)
local image=frame:CreateTexture(nil,'ARTWORK');w.image=image;image:SetPoint('TOP',0,-5)
local label=frame:CreateFontString(nil,'OVERLAY','GameFontHighlightSmall');w.label=label
label:SetPoint('BOTTOMLEFT');label:SetPoint('BOTTOMRIGHT');label:SetJustifyH('CENTER');label:SetJustifyV('TOP');label:SetHeight(18)
function w:SetLabel(text)
self.labelText=text or '';label:SetText(self.labelText)
if self.labelText~='' then label:Show() else label:Hide() end
self:SetHeight(image:GetHeight()+(self.labelText~='' and 25 or 10))
end
function w:SetText(text) self:SetLabel(text) end
function w:SetImage(path,...)
image:SetTexture(path)
local count=select('#',...)
if count==4 or count==8 then image:SetTexCoord(...) else image:SetTexCoord(0,1,0,1) end
end
function w:SetImageByAtlas(atlas) image:SetAtlas(atlas) end
function w:SetImageSize(width,height)
image:SetSize(width,height);self:SetHeight(height+(self.labelText~='' and 25 or 10))
end
function w:SetDisabled(value)
self.disabled=value==true
if self.disabled then frame:Disable();image:SetVertexColor(.5,.5,.5,.5);label:SetTextColor(.5,.5,.5)
else frame:Enable();image:SetVertexColor(1,1,1,1);label:SetTextColor(1,1,1) end
end
function w:OnAcquire()
self.alive=true;self:SetWidth(110);self:SetLabel('');self:SetImage(nil);self:SetImageSize(64,64);self:SetDisabled(false)
frame:RegisterForClicks('LeftButtonUp')
local lease=self.rmLease
local function live() return w.alive and w.rmActive and w.rmLease==lease and not w:IsReleasing() end
addon:SetUIScript(frame,'OnClick',function(_,button) if live() and not w.disabled then w:Fire('OnClick',button) end end)
addon:SetUIScript(frame,'OnEnter',function() if live() then w:Fire('OnEnter') end end)
addon:SetUIScript(frame,'OnLeave',function() if live() then w:Fire('OnLeave') end end)
end
function w:OnRelease()
self.alive=false
if GameTooltip and GameTooltip:IsOwned(frame) then GameTooltip:Hide() end
self:SetLabel('');self:SetImage(nil)
end
return addon:RegisterConditionWidget(w)




