Reference › Function reference › UI

UI.condition_display.buttonConstructor

dependency

Call as

UI.condition_display.buttonConstructor()

Record the dependency UI.condition_display.buttonConstructor, 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-ConditionButton widget around a 200-pixel workbench button, with SetText, SetAutoWidth and SetDisabled, firing OnClick (with the mouse button), OnEnter and OnLeave only while its lease is live. It returns the registered but not yet acquired widget; addon:CreateConditionButton passes it to addon:AcquireConditionWidget.

Arguments

None.

Returns

1RMConditionWidgetThe new button 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
Game APIClassic EraTBC AnniversaryClassic progressionForeverRetail
GameTooltipClassic EraTBC AnniversaryClassic progressionForeverRetail
UIParentClassic EraTBC AnniversaryClassic progressionForeverRetail

Example

-- needs the dependency UI.condition_display.buttonConstructor
local button = addon:AcquireConditionWidget("RM-ConditionButton", UI.condition_display.buttonConstructor)
button:SetText(L["Clear"])
button:SetAutoWidth(true)
button:SetCallback("OnClick", function() value.spell = nil end)
parent:AddChild(button)

Dependencies

Source

UI/condition_display.lua, line 110. Read only in game; Duplicate makes an editable copy.

UI.condition_display.buttonConstructor()
    local w={type='RM-ConditionButton',text='',disabled=false,autoWidth=false}
    local frame=addon:CreateWorkbenchButton(UIParent,'',200);w.frame=frame
    local label=frame:GetFontString();w.label=label;label:SetWordWrap(false)
    local enter,leave=frame:GetScript('OnEnter'),frame:GetScript('OnLeave')
    function w:OnWidthSet(width) label:SetWidth(math.max(1,width-12)) end
    function w:SetText(text)
        self.text=text==nil and '' or tostring(text);frame:SetText(self.text);label:SetText(self.text)
        if self.autoWidth then self:SetWidth(label:GetStringWidth()+30) end
    end
    function w:SetAutoWidth(value)
        self.autoWidth=value==true
        if self.autoWidth then self:SetWidth(label:GetStringWidth()+30) end
    end
    function w:SetDisabled(value) self.disabled=value==true;if self.disabled then frame:Disable() else frame:Enable() end end
    function w:OnAcquire()
        self:SetAutoWidth(false);self:SetWidth(200);self:SetHeight(24);self:SetDisabled(false);self:SetText('')
        label:SetFontObject(defaultFont());frame:SetSelected(false);frame.tooltip=nil;frame:RegisterForClicks('LeftButtonUp')
        local lease=self.rmLease
        local function live() return 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 if enter then enter(frame) end;w:Fire('OnEnter') end end)
        addon:SetUIScript(frame,'OnLeave',function() if live() then if leave then leave(frame) end;w:Fire('OnLeave') end end)
    end
    function w:OnRelease()
        if GameTooltip and GameTooltip:IsOwned(frame) then GameTooltip:Hide() end
        self.text='';frame:SetText('');label:SetText('');frame.tooltip=nil
    end
    return addon:RegisterConditionWidget(w)

Back to Function reference