forked from Bastion/Bastion
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.
173 lines
3.9 KiB
173 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);
|
|
|