Referenz › Funktionsreferenz › UI

UI.condition_display.labelConstructor

Abhängigkeit

Aufruf als

UI.condition_display.labelConstructor(interactive)

Erfassen Sie die Abhängigkeit UI.condition_display.labelConstructor und rufen Sie sie dann unter diesem Namen auf. Ein Aufruf über den Namensraum übergibt kein self: Verwenden Sie einen Doppelpunkt-Aufruf oder übergeben Sie das Objekt selbst.

Was sie bewirkt

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.

Argumente

NameTypWas sie bewirkt
interactiveboolean | nilTrue to build the interactive link variant with an image; false or nil builds a plain label.

Rückgabewerte

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

Editionen

Integrierte Hilfsfunktionen werden auf jeder Edition registriert. Unterschiedlich ist die Spiel-API, die sie lesen; fehlt eine, weicht die Hilfsfunktion aus oder gibt nil mit einem Grund zurück.

  • Auf dieser Edition nicht verfügbar (den Grund nennt der Tooltip)
  • Nur, solange Blizzards Ersatz für veraltete Funktionen aktiv ist
Spiel-APIClassic EraTBC AnniversaryClassic ProgressionForeverRetail
CreateFrameClassic EraTBC AnniversaryClassic ProgressionForeverRetail
GameFontHighlightSmallClassic EraTBC AnniversaryClassic ProgressionForeverRetail
GameTooltipClassic EraTBC AnniversaryClassic ProgressionForeverRetail
UIParentClassic EraTBC AnniversaryClassic ProgressionForeverRetail

Wie das Addon sie aufruft

Abhängigkeiten

Quelle

UI/condition_display.lua, Zeile 32. Im Spiel schreibgeschützt; Duplizieren erstellt eine bearbeitbare Kopie.

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)

Zurück zu Funktionsreferenz