Call as
Conditions.talent.gridWidget(parent, spec, value, update)
Record the dependency Conditions.talent.gridWidget, 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
Builds the TALENT editor controls for the tier-and-column grid talent layout: a talent icon and a dropdown of the client's grid talents (up to 18). Choosing one stores layout "grid" and the talent index in value, clears the tree fields and operator, and calls update; a note warns when the saved reference belongs to another layout.
Arguments
| Name | Type | What it does |
|---|---|---|
parent | table | Condition widget group the control is added to. |
spec | number | nil | Specialization the editor is for; on progression clients a value from 1 to 4 also selects the talent group to read. |
value | table | Saved TALENT condition settings; the control reads and rewrites its layout, tree, talent, node, entry, operator and value fields. |
update | function | Called with no arguments after every change so the editor can refresh. |
Returns
Nothing.
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.
It reads no game API directly.
How the addon calls it
- Talent (widget)
elseif current=="grid" then gridWidget(parent,spec,value,update)
Dependencies
GRID_TIER_LEVELS(builtin:Conditions/talent.lua:GRID_TIER_LEVELS)PLACEHOLDER(builtin:Conditions/talent.lua:PLACEHOLDER)block→Conditions.talent.blockdropdown→Conditions.talent.dropdowngroup→Conditions.talent.groupicon→Conditions.talent.iconinfo→Conditions.talent.infointeger→Conditions.talent.integerplatform(builtin:Conditions/talent.lua:platform)text→Conditions.talent.text
Source
Conditions/talent.lua, line 243. Read only in game; Duplicate makes an editable copy.
Conditions.talent.gridWidget(parent, spec, value, update)
local tiers,tierOrder={},{}
for tier,level in ipairs(GRID_TIER_LEVELS) do tiers[tier]=string.format(L["Tier %d (level %d)"],tier,level);tierOrder[tier]=tier end
local chosen=value.layout=="grid" and integer(value.value,1,18) and value.value or nil
local shownTier=chosen and math.ceil(chosen/3) or 1
local choices,order={},{}
local function load()
choices,order={},{}
for column=1,3 do
local talent=platform:GetGridTalentInfo((shownTier-1)*3+column,group(spec))
if talent then choices[column]={text=talent.name,icon=talent.icon};order[#order+1]=column end
end
end
load()
if value.layout~="grid" and (value.tree~=nil or value.value~=nil) then
text(parent,L["This reference belongs to another talent layout. Selecting a talent explicitly replaces it; viewing does not convert it."])
end
local box=block(parent)
local talentIcon=icon(box,value,spec)
local tierPicker,picker
tierPicker=dropdown(box,L["Tier"],function(selected)
if selected==shownTier then return end
shownTier=selected;load();picker:SetList(choices,order)
picker:SetValue(chosen and math.ceil(chosen/3)==shownTier and (chosen-1)%3+1 or nil);picker:SetDisabled(#order==0)
end)
tierPicker.configure=function() tierPicker:SetList(tiers,tierOrder);tierPicker:SetValue(shownTier) end
picker=dropdown(box,L["Talent"],function(selected)
chosen=(shownTier-1)*3+selected
value.layout,value.value="grid",chosen
value.tree,value.talent,value.operator=nil,nil,nil
local talent=info(value,spec);talentIcon:SetImage(talent and talent.icon or PLACEHOLDER);update()
end)
picker:SetDisabled(#order==0)
picker.configure=function() picker:SetList(choices,order);picker:SetValue(chosen and math.ceil(chosen/3)==shownTier and (chosen-1)%3+1 or nil) end