Référence › Référence des fonctions › UI

UI.condition_display.labelConstructor

dépendance

Appel

UI.condition_display.labelConstructor(interactive)

Enregistrez la dépendance UI.condition_display.labelConstructor, puis appelez-la sous ce nom. Un appel par espace de noms ne transmet pas self : utilisez un appel avec deux-points ou passez l'objet vous-même.

Ce qu'elle fait

Constructs a new condition text widget: a plain wrapping RM-ConditionLabel, or with interactive set an RM-ConditionLink button that adds a leading image and OnEnter, OnLeave and OnClick callbacks. Both measure their wrapped text height and ask the parent to lay out again when it changes.

Arguments

NomTypeCe qu'elle fait
interactiveboolean | nilTrue to build the interactive link variant with an image; false or nil builds a plain label.

Retours

1RMConditionWidgetThe new label or link widget, registered but not yet acquired.

Éditions

Les fonctions utilitaires intégrées sont enregistrées sur toutes les éditions. Ce qui diffère, c'est l'API du jeu qu'elles lisent ; quand l'une manque, la fonction utilitaire se rabat sur une alternative ou renvoie nil avec une raison.

  • Indisponible sur cette édition (la raison figure dans l'infobulle)
  • Uniquement tant que les solutions de repli de Blizzard pour les fonctions obsolètes sont actives
API du jeuClassic EraTBC AnniversaryClassic ProgressionForeverRetail
CreateFrameClassic EraTBC AnniversaryClassic ProgressionForeverRetail
GameFontHighlightSmallClassic EraTBC AnniversaryClassic ProgressionForeverRetail
GameTooltipClassic EraTBC AnniversaryClassic ProgressionForeverRetail
UIParentClassic EraTBC AnniversaryClassic ProgressionForeverRetail

Comment l'addon l'appelle

Dépendances

Source

UI/condition_display.lua, ligne 32. En lecture seule dans le jeu ; Dupliquer crée une copie modifiable.

UI.condition_display.labelConstructor(interactive)
    local w={type=interactive and 'RM-ConditionLink' or 'RM-ConditionLabel',text=''}
    local frame=CreateFrame(interactive and 'Button' or 'Frame',nil,UIParent);w.frame=frame
    local image=interactive and frame:CreateTexture(nil,'ARTWORK');w.image=image
    local label=frame:CreateFontString(nil,'OVERLAY','GameFontHighlightSmall');w.label=label
    label:SetPoint('TOPLEFT');label:SetWordWrap(true);label:SetHeight(0)
    local function layoutText()
        local inset=image and w.imagePath and (w.imageWidth+4) or 0
        label:SetWidth(math.max(1,frame:GetWidth()-inset))
        local textHeight=math.max(1,label:GetStringHeight() or 0)
        local height=math.max(textHeight,image and w.imagePath and w.imageHeight or 0)
        label:ClearAllPoints();label:SetPoint('TOPLEFT',frame,'TOPLEFT',inset,-(height-textHeight)/2)
        if image then image:ClearAllPoints();image:SetPoint('TOPLEFT',frame,'TOPLEFT',0,-(height-w.imageHeight)/2) end
        -- Backing frame dimensions may be quantized. Compare text requests,
        -- not engine rounding, before notifying the parent layout.
        local changed=height~=w.measuredHeight
        w.measuredHeight=height;w:SetHeight(height)
        return changed
    end
    local function measure()
        if w.measuring then return end
        w.measuring=true
        local ok,changed=pcall(layoutText)
        w.measuring=false
        if not ok then error(changed,0) end
        if changed and w.parent and w.parent.DoLayout then w.parent:DoLayout() end
    end
    function w:OnWidthSet() measure() end
    function w:SetText(text) self.text=text==nil and '' or tostring(text);label:SetText(self.text);measure() end
    function w:SetFont(path,height,flags) label:SetFont(path,height,flags);measure() end
    function w:SetFontObject(font) label:SetFontObject(font or defaultFont());measure() end
    function w:SetColor(red,green,blue,alpha)
        if red==nil or green==nil or blue==nil then red,green,blue=1,1,1 end
        label:SetTextColor(red,green,blue,alpha or 1)
    end
    function w:SetJustifyH(value) label:SetJustifyH(value) end
    function w:SetJustifyV(value) label:SetJustifyV(value) end
    if interactive then
        function w:SetImage(path,...)
            self.imagePath=path;image:SetTexture(path)
            local count=select('#',...);if count==4 or count==8 then image:SetTexCoord(...) else image:SetTexCoord(0,1,0,1) end
            if path then image:Show() else image:Hide() end;measure()
        end
        function w:SetImageSize(width,height) self.imageWidth,self.imageHeight=width,height;image:SetSize(width,height);measure() end
        function w:SetDisabled(value) self.disabled=value==true;if self.disabled then frame:Disable() else frame:Enable() end end
    end
    function w:OnAcquire()
        self.measuring=false;self.measuredHeight=nil
        if interactive then self.imagePath=nil;self.imageWidth,self.imageHeight=24,24;image:SetTexture(nil);image:SetSize(24,24);image:Hide();self:SetDisabled(false) end
        self:SetText('');self:SetFontObject();self:SetColor();self:SetJustifyH('LEFT');self:SetJustifyV('TOP');self:SetWidth(200)
        if interactive then
            frame:RegisterForClicks('LeftButtonUp','RightButtonUp');local lease=self.rmLease
            local function live() return w.rmActive and w.rmLease==lease and not w:IsReleasing() 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)
            addon:SetUIScript(frame,'OnClick',function(_,button) if live() and not w.disabled then w:Fire('OnClick',button) end end)
        end
    end
    function w:OnRelease()
        self.text='';self.measuring=false;self.measuredHeight=nil;label:SetText('')
        if image then image:Hide();image:SetTexture(nil);self.imagePath=nil;if GameTooltip and GameTooltip:IsOwned(frame) then GameTooltip:Hide() end end
    end
    return addon:RegisterConditionWidget(w)

Retour à Référence des fonctions