97 lines
3.4 KiB
Lua
97 lines
3.4 KiB
Lua
--[[descriptionData = {
|
|
type = "description",
|
|
text = "My description text to display.", -- or string id or function returning a string
|
|
title = "My Title", -- or string id or function returning a string (optional)
|
|
width = "full", -- or "half" (optional)
|
|
disabled = function() return db.someBooleanSetting end, -- or boolean (optional)
|
|
enableLinks = nil, -- or true for default tooltips, or function OnLinkClicked handler (optional)
|
|
-- see: https://wiki.esoui.com/UI_XML#OnLinkClicked
|
|
reference = "MyAddonDescription" -- unique global reference to control (optional)
|
|
} ]]
|
|
|
|
|
|
local widgetVersion = 10
|
|
local LAM = LibStub("LibAddonMenu-2.0")
|
|
if not LAM:RegisterWidget("description", widgetVersion) then return end
|
|
|
|
local wm = WINDOW_MANAGER
|
|
|
|
local GetDefaultValue = LAM.util.GetDefaultValue
|
|
local GetColorForState = LAM.util.GetColorForState
|
|
|
|
local function OnLinkClicked(control, linkData, linkText, button)
|
|
ZO_LinkHandler_OnLinkClicked(linkText, button)
|
|
end
|
|
|
|
local function UpdateDisabled(control)
|
|
local disable = GetDefaultValue(control.data.disabled)
|
|
if disable ~= control.disabled then
|
|
local color = GetColorForState(disable)
|
|
control.desc:SetColor(color:UnpackRGBA())
|
|
if control.title then
|
|
control.title:SetColor(color:UnpackRGBA())
|
|
end
|
|
control.disabled = disable
|
|
end
|
|
end
|
|
|
|
local function UpdateValue(control)
|
|
if control.title then
|
|
control.title:SetText(LAM.util.GetStringFromValue(control.data.title))
|
|
end
|
|
control.desc:SetText(LAM.util.GetStringFromValue(control.data.text))
|
|
end
|
|
|
|
function LAMCreateControl.description(parent, descriptionData, controlName)
|
|
local control = LAM.util.CreateBaseControl(parent, descriptionData, controlName)
|
|
local isHalfWidth = control.isHalfWidth
|
|
local width = control:GetWidth()
|
|
control:SetResizeToFitDescendents(true)
|
|
|
|
if isHalfWidth then
|
|
control:SetDimensionConstraints(width / 2, 0, width / 2, 0)
|
|
else
|
|
control:SetDimensionConstraints(width, 0, width, 0)
|
|
end
|
|
|
|
control.desc = wm:CreateControl(nil, control, CT_LABEL)
|
|
local desc = control.desc
|
|
desc:SetVerticalAlignment(TEXT_ALIGN_TOP)
|
|
desc:SetFont("ZoFontGame")
|
|
desc:SetText(LAM.util.GetStringFromValue(descriptionData.text))
|
|
desc:SetWidth(isHalfWidth and width / 2 or width)
|
|
|
|
if descriptionData.title then
|
|
control.title = wm:CreateControl(nil, control, CT_LABEL)
|
|
local title = control.title
|
|
title:SetWidth(isHalfWidth and width / 2 or width)
|
|
title:SetAnchor(TOPLEFT, control, TOPLEFT)
|
|
title:SetFont("ZoFontWinH4")
|
|
title:SetText(LAM.util.GetStringFromValue(descriptionData.title))
|
|
desc:SetAnchor(TOPLEFT, title, BOTTOMLEFT)
|
|
else
|
|
desc:SetAnchor(TOPLEFT)
|
|
end
|
|
|
|
if descriptionData.enableLinks then
|
|
desc:SetMouseEnabled(true)
|
|
desc:SetLinkEnabled(true)
|
|
if type(descriptionData.enableLinks) == "function" then
|
|
desc:SetHandler("OnLinkClicked", descriptionData.enableLinks)
|
|
else
|
|
desc:SetHandler("OnLinkClicked", OnLinkClicked)
|
|
end
|
|
end
|
|
|
|
control.UpdateValue = UpdateValue
|
|
if descriptionData.disabled ~= nil then
|
|
control.UpdateDisabled = UpdateDisabled
|
|
control:UpdateDisabled()
|
|
end
|
|
|
|
LAM.util.RegisterForRefreshIfNeeded(control)
|
|
|
|
return control
|
|
|
|
end
|