You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

174 lines
3.9 KiB

--- @type StdUi
local StdUi = LibStub and LibStub('StdUi', true);
if not StdUi then
return
end
local module, version = 'Spell', 2;
if not StdUi:UpgradeNeeded(module, version) then
return
end
----------------------------------------------------
--- SpellBox
----------------------------------------------------
local SpellBoxEvents = {
OnEnter = function(self)
if self.editBox.value then
GameTooltip:SetOwner(self.editBox);
GameTooltip:SetSpellByID(self.editBox.value);
GameTooltip:Show();
end
end,
OnLeave = function(self)
if self.editBox.value then
GameTooltip:Hide();
end
end
};
function StdUi:SpellBox(parent, width, height, iconSize, spellValidator)
iconSize = iconSize or 16;
local editBox = self:EditBox(parent, width, height, '', spellValidator or self.Util.spellValidator);
editBox:SetTextInsets(iconSize + 7, 3, 3, 3);
local iconFrame = self:Panel(editBox, iconSize, iconSize);
self:GlueLeft(iconFrame, editBox, 2, 0, true);
local icon = self:Texture(iconFrame, iconSize, iconSize, 134400);
icon:SetAllPoints();
editBox.icon = icon;
iconFrame.editBox = editBox;
for k, v in pairs(SpellBoxEvents) do
iconFrame:SetScript(k, v);
end
return editBox;
end
----------------------------------------------------
--- SpellInfo
----------------------------------------------------
local SpellInfoMethods = {
SetSpell = function(self, nameOrId)
local name, _, i, _, _, _, spellId = GetSpellInfo(nameOrId);
self.spellId = spellId;
self.spellName = name;
self.icon:SetTexture(i);
self.text:SetText(name);
end
};
local SpellInfoEvents = {
OnEnter = function(self)
GameTooltip:SetOwner(self.widget);
GameTooltip:SetSpellByID(self.widget.spellId);
GameTooltip:Show();
end,
OnLeave = function()
GameTooltip:Hide();
end
};
function StdUi:SpellInfo(parent, width, height, iconSize)
iconSize = iconSize or 16;
local frame = self:Panel(parent, width, height);
local iconFrame = self:Panel(frame, iconSize, iconSize);
self:GlueLeft(iconFrame, frame, 2, 0, true);
local icon = self:Texture(iconFrame, iconSize, iconSize);
icon:SetAllPoints();
local btn = self:SquareButton(frame, iconSize, iconSize, 'DELETE');
StdUi:GlueRight(btn, frame, -3, 0, true);
local text = self:Label(frame);
text:SetPoint('LEFT', icon, 'RIGHT', 3, 0);
text:SetPoint('RIGHT', btn, 'RIGHT', -3, 0);
frame.removeBtn = btn;
frame.icon = icon;
frame.text = text;
btn.parent = frame;
iconFrame.widget = frame;
for k, v in pairs(SpellInfoMethods) do
frame[k] = v;
end
for k, v in pairs(SpellInfoEvents) do
iconFrame:SetScript(k, v);
end
return frame;
end;
----------------------------------------------------
--- SpellCheckbox
----------------------------------------------------
local SpellCheckboxMethods = {
SetSpell = function(self, nameOrId)
local name, _, i, _, _, _, spellId = GetSpellInfo(nameOrId);
self.spellId = spellId;
self.spellName = name;
self.icon:SetTexture(i);
self.text:SetText(name);
end
};
local SpellCheckboxEvents = {
OnEnter = function(self)
if self.spellId then
GameTooltip:SetOwner(self);
GameTooltip:SetSpellByID(self.spellId);
GameTooltip:Show();
end
end,
OnLeave = function(self)
if self.spellId then
GameTooltip:Hide();
end
end
};
function StdUi:SpellCheckbox(parent, width, height, iconSize)
iconSize = iconSize or 16;
local checkbox = self:Checkbox(parent, '', width, height);
checkbox.spellId = nil;
checkbox.spellName = '';
local iconFrame = self:Panel(checkbox, iconSize, iconSize);
iconFrame:SetPoint('LEFT', checkbox.target, 'RIGHT', 5, 0);
local icon = self:Texture(iconFrame, iconSize, iconSize);
icon:SetAllPoints();
checkbox.icon = icon;
checkbox.text:SetPoint('LEFT', iconFrame, 'RIGHT', 5, 0);
for k, v in pairs(SpellCheckboxMethods) do
checkbox[k] = v;
end
for k, v in pairs(SpellCheckboxEvents) do
checkbox:SetScript(k, v);
end
return checkbox;
end;
StdUi:RegisterModule(module, version);