038931fcfb
Match the layout convention used by every other multi-addon-shape fork in Exiles/ (Bagnon/, Kui_Nameplates/, ShadowedUnitFrames/, etc.) — the addon's own files live in a subfolder named after the addon, with only the repo-level README files at the root. All moves are pure git renames (history preserved). Toc references are relative to the toc location so nothing inside the addon changes.
141 lines
3.7 KiB
Lua
141 lines
3.7 KiB
Lua
--[[-----------------------------------------------------------------------------
|
|
Icon Widget
|
|
-------------------------------------------------------------------------------]]
|
|
local Type, Version = "Icon", 21
|
|
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
|
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
|
|
|
-- Lua APIs
|
|
local select, pairs, print = select, pairs, print
|
|
|
|
-- WoW APIs
|
|
local CreateFrame, UIParent = CreateFrame, UIParent
|
|
|
|
--[[-----------------------------------------------------------------------------
|
|
Scripts
|
|
-------------------------------------------------------------------------------]]
|
|
local function Control_OnEnter(frame)
|
|
frame.obj:Fire("OnEnter")
|
|
end
|
|
|
|
local function Control_OnLeave(frame)
|
|
frame.obj:Fire("OnLeave")
|
|
end
|
|
|
|
local function Button_OnClick(frame, button)
|
|
frame.obj:Fire("OnClick", button)
|
|
AceGUI:ClearFocus()
|
|
end
|
|
|
|
--[[-----------------------------------------------------------------------------
|
|
Methods
|
|
-------------------------------------------------------------------------------]]
|
|
local methods = {
|
|
["OnAcquire"] = function(self)
|
|
self:SetHeight(110)
|
|
self:SetWidth(110)
|
|
self:SetLabel()
|
|
self:SetImage(nil)
|
|
self:SetImageSize(64, 64)
|
|
self:SetDisabled(false)
|
|
end,
|
|
|
|
-- ["OnRelease"] = nil,
|
|
|
|
["SetLabel"] = function(self, text)
|
|
if text and text ~= "" then
|
|
self.label:Show()
|
|
self.label:SetText(text)
|
|
self:SetHeight(self.image:GetHeight() + 25)
|
|
else
|
|
self.label:Hide()
|
|
self:SetHeight(self.image:GetHeight() + 10)
|
|
end
|
|
end,
|
|
|
|
["SetImage"] = function(self, path, ...)
|
|
local image = self.image
|
|
image:SetTexture(path)
|
|
|
|
if image:GetTexture() then
|
|
local n = select("#", ...)
|
|
if n == 4 or n == 8 then
|
|
image:SetTexCoord(...)
|
|
else
|
|
image:SetTexCoord(0, 1, 0, 1)
|
|
end
|
|
end
|
|
end,
|
|
|
|
["SetImageSize"] = function(self, width, height)
|
|
self.image:SetWidth(width)
|
|
self.image:SetHeight(height)
|
|
--self.frame:SetWidth(width + 30)
|
|
if self.label:IsShown() then
|
|
self:SetHeight(height + 25)
|
|
else
|
|
self:SetHeight(height + 10)
|
|
end
|
|
end,
|
|
|
|
["SetDisabled"] = function(self, disabled)
|
|
self.disabled = disabled
|
|
if disabled then
|
|
self.frame:Disable()
|
|
self.label:SetTextColor(0.5, 0.5, 0.5)
|
|
self.image:SetVertexColor(0.5, 0.5, 0.5, 0.5)
|
|
else
|
|
self.frame:Enable()
|
|
self.label:SetTextColor(1, 1, 1)
|
|
self.image:SetVertexColor(1, 1, 1, 1)
|
|
end
|
|
end
|
|
}
|
|
|
|
--[[-----------------------------------------------------------------------------
|
|
Constructor
|
|
-------------------------------------------------------------------------------]]
|
|
local function Constructor()
|
|
local frame = CreateFrame("Button", nil, UIParent)
|
|
frame:Hide()
|
|
|
|
frame:EnableMouse(true)
|
|
frame:SetScript("OnEnter", Control_OnEnter)
|
|
frame:SetScript("OnLeave", Control_OnLeave)
|
|
frame:SetScript("OnClick", Button_OnClick)
|
|
|
|
local label = frame:CreateFontString(nil, "BACKGROUND", "GameFontHighlight")
|
|
label:SetPoint("BOTTOMLEFT")
|
|
label:SetPoint("BOTTOMRIGHT")
|
|
label:SetJustifyH("CENTER")
|
|
label:SetJustifyV("TOP")
|
|
label:SetHeight(18)
|
|
|
|
local image = frame:CreateTexture(nil, "BACKGROUND")
|
|
image:SetWidth(64)
|
|
image:SetHeight(64)
|
|
image:SetPoint("TOP", 0, -5)
|
|
|
|
local highlight = frame:CreateTexture(nil, "HIGHLIGHT")
|
|
highlight:SetAllPoints(image)
|
|
highlight:SetTexture("Interface\\PaperDollInfoFrame\\UI-Character-Tab-Highlight")
|
|
highlight:SetTexCoord(0, 1, 0.23, 0.77)
|
|
highlight:SetBlendMode("ADD")
|
|
|
|
local widget = {
|
|
label = label,
|
|
image = image,
|
|
frame = frame,
|
|
type = Type
|
|
}
|
|
for method, func in pairs(methods) do
|
|
widget[method] = func
|
|
end
|
|
|
|
widget.SetText = function(self, ...) print("AceGUI-3.0-Icon: SetText is deprecated! Use SetLabel instead!"); self:SetLabel(...) end
|
|
|
|
return AceGUI:RegisterAsWidget(widget)
|
|
end
|
|
|
|
AceGUI:RegisterWidgetType(Type, Constructor, Version)
|