Как вызывать
addon:Widget_SpellWidget(spec, editbox, value, nametoid, isvalid, update)
Доступен напрямую через addon; зависимость не нужна.
Что делает
Создать поле ввода заклинания с подсказками, проверкой и поддержкой ссылок на заклинания для виджетов пользовательских условий. Сохранение выбранного значения выполняет обратный вызов обновления; добавьте возвращённый виджет к родителю обратного вызова.
Аргументы
| Имя | Тип | Что делает |
|---|---|---|
self | RMAddon | Экземпляр аддона Rotation Master (неявно при вызове через двоеточие). |
spec | number | Область специализации для определения подсказок заклинаний. |
editbox | string | Вид входного элемента-образца, например Spec_EditBox, используемый для подсказок заклинаний. |
value | table | Запись значения условия с полями spell, ranked и disabled; обновляется на месте. |
nametoid | function | Сопоставитель набранного названия заклинания и его ID. |
isvalid | function | Предикат, проверяющий предлагаемое значение заклинания. |
update | function | Обратный вызов, получающий подтверждённое значение заклинания. |
Возвращает
| 1 | RMConditionGroup | Группа поля заклинания с иконкой действия, полем ссылки и необязательным выбором ранга. |
|---|
Издания
Встроенные помощники регистрируются во всех изданиях. Различается игровой API, который они читают; если нужного API нет, помощник использует запасной вариант или возвращает nil с причиной.
- Недоступно в этом издании (причина — во всплывающей подсказке)
- Только пока включены запасные реализации Blizzard для устаревших функций
| Игровой API | |||||
|---|---|---|---|---|---|
GameTooltip |
Как его вызывает аддон
- Любое заклинание доступно (widget)
local spell_group = addon:Widget_SpellWidget(spec, "Spell_EditBox", value, - Заряды любого заклинания (widget)
local spell_group = addon:Widget_SpellWidget(spec, "Spell_EditBox", value, - Восстановление любого заклинания (widget)
local spell_group = addon:Widget_SpellWidget(spec, "Spell_EditBox", value, - Любое заклинание в зоне досягаемости (widget)
local spell_group = addon:Widget_SpellWidget(spec, "Spell_EditBox", value, - Время перезарядки любого заклинания (widget)
local spell_group = addon:Widget_SpellWidget(spec, "Spell_EditBox", value, - Заклинание ротации Боевого помощника (widget)
local spell_group = addon:Widget_SpellWidget(spec, "Spec_EditBox", value, - Предложение боевого помощника (widget)
local spell_group = addon:Widget_SpellWidget(spec, "Spec_EditBox", value, - Заклинание питомца активно или ожидает (widget)
local spell_group = addon:Widget_SpellWidget((BOOKTYPE_PET or "pet"), "Spec_EditBox", value,
и ещё 19: Заклинание питомца доступно (widget), Заряды заклинания питомца (widget), Восстановление заклинания питомца (widget), История применений питомца (widget), Время в истории применений питомца (widget), Заклинание питомца в зоне досягаемости (widget), Время перезарядки заклинания питомца (widget), Заклинание активно или ожидает (widget), Автоповтор заклинания активен (widget), Заклинание доступно (widget), Заряды заклинания (widget), Восстановление заклинания (widget), Свечение эффекта заклинания (widget), История применений (widget), Время в истории применений (widget), Заклинание в зоне досягаемости (widget), Время перезарядки заклинания (widget), Определённый тотем установлен (widget), Оставшееся время определённого тотема (widget)
Зависимости
RANK_TIP(builtin:Conditions/common.lua:RANK_TIP)SpellData(builtin:Conditions/common.lua:SpellData)
Исходный код
Conditions/common.lua, строка 82. В игре только для чтения; «Дублировать» создаёт редактируемую копию.
Conditions.common.Widget_SpellWidget(self, spec, editbox, value, nametoid, isvalid, update)
local spell_group = addon:CreateConditionGroup()
spell_group:SetLayout('RM-SpellField')
local rankChoice
local spell = addon:CreateSpellEditBox(editbox,value.spell)
local initialSpell=type(value.spell)=="string" and SpellData:GetSpellId(value.spell) or value.spell
local spellIcon = addon:CreateSpellActionIcon(spec == (BOOKTYPE_PET or "pet") and "pet" or "spell",initialSpell,isvalid)
spellIcon:SetWidth(44)
spellIcon:SetHeight(44)
spellIcon:SetText(value.spell)
spellIcon:SetCallback("OnEnterPressed", function(_, _, v)
v = tonumber(v)
if v and isvalid(v) then
value.spell = v
spellIcon:SetText(v)
spell:SetText(SpellData:SpellName(value.spell, not value.ranked))
if GameTooltip:IsOwned(spellIcon.frame) and GameTooltip:IsVisible() then
GameTooltip:SetHyperlink("spell:" .. v)
end
else
value.spell = nil
spellIcon:SetText(nil)
spell:SetText(nil)
if GameTooltip:IsOwned(spellIcon.frame) and GameTooltip:IsVisible() then
GameTooltip:Hide()
end
end
update()
end)
spellIcon:SetCallback("OnEnter", function()
if value.spell then
GameTooltip:SetOwner(spellIcon.frame, "ANCHOR_BOTTOMRIGHT", 3)
GameTooltip:SetHyperlink("spell:" .. value.spell)
end
end)
spellIcon:SetCallback("OnLeave", function()
if GameTooltip:IsOwned(spellIcon.frame) then
GameTooltip:Hide()
end
end)
spellIcon:SetDisabled(value.disabled)
spell_group:AddChild(spellIcon)
if addon:ClientHasSpellRanks() and spec ~= (BOOKTYPE_PET or "pet") then
local nr_button = addon:CreateConditionCheckBox()
nr_button:SetLabel(L["Use this exact spell rank"])
nr_button.button.tooltip = RANK_TIP
nr_button:SetValue(value.ranked or false)
nr_button:SetCallback("OnValueChanged", function(_, _, val)
value.ranked = val
spell:SetUserData("norank", not val)
spell:SetText(value.spell and SpellData:SpellName(value.spell, not value.ranked))
update()
end)
nr_button:SetDisabled(value.disabled)
rankChoice=nr_button
end
spell:SetFullWidth(true)
spell:SetLabel('')
spell:SetText(value.spell and SpellData:SpellName(value.spell, not value.ranked))
spell:SetUserData("norank", not value.ranked)
spell:SetUserData("spec", spec)
spell:SetCallback("OnEnterPressed", function(_, _, v)
if not addon.isint(v) then
v = nametoid(v)
else
v = tonumber(v)
end
if isvalid(v) then
value.spell = v
spell:SetText(SpellData:SpellName(value.spell, not value.ranked))
else
value.spell = nil
spell:SetText(nil)
end
spellIcon:SetText(value.spell)
update()
end)
spell:SetDisabled(value.disabled)
spell_group:AddChild(spell)
if rankChoice then
rankChoice.frame.GetFontString=function() return rankChoice.button:GetFontString() end
spell_group:AddChild(rankChoice)
end
return spell_group




