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.

193 lines
4.1 KiB

--[[
This file is part of 'AceGUI-3.0: SFX Widgets', an add-on for World of Warcraft. For bug reports,
documentation and license information, visit https://github.com/SFX-WoW/AceGUI-3.0_SFX-Widgets.
* File...: SFX-Info.lua
* Author.: StormFX
]]
----------------------------------------
-- Locals
---
local Type, Version = "SFX-Info", 2
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
-- Exit if a current or newer version is loaded.
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
----------------------------------------
-- Lua API
---
local pairs = pairs
----------------------------------------
-- WoW API
---
local CreateFrame, UIParent = CreateFrame, UIParent
----------------------------------------
-- Utility
---
-- Frame:OnEnter()
local function Frame_OnEnter(self)
self.obj:Fire("OnEnter")
end
-- Frame:OnLeave()
local function Frame_OnLeave(self)
self.obj:Fire("OnLeave")
end
-- Height Update
local function UpdateHeight(self)
if self.resizing then return end
self.resizing = true
local Frame, Info = self.frame, self.Info
local Width = (Frame.width or Frame:GetWidth() or 0) - 83
Width = (Width > 0 and Width) or 0
Info:SetWidth(Width)
Frame:SetHeight(Info:GetStringHeight())
self.resizing = nil
end
----------------------------------------
-- Widget Methods
---
local Methods = {
-- Widget:OnAcquire()
-- Fires when the widget is initialized.
OnAcquire = function(self)
-- Reset the widget.
self.resizing = true
self:SetDisabled(true)
self:SetLabel()
self:SetColon()
self:SetText()
self:SetFullWidth(true)
self.resizing = nil
UpdateHeight(self)
end,
-- Widget:OnAcquire()
-- Fires when the widget's width is changed.
OnWidthSet = function(self)
UpdateHeight(self)
end,
-- Widget:SetDisabled()
-- Toggles showing of the tooltip.
SetDisabled = function(self, Disabled)
self.disabled = Disabled
local frame = self.frame
if Disabled then
frame:SetScript("OnEnter", nil)
frame:SetScript("OnLeave", nil)
else
frame:SetScript("OnEnter", Frame_OnEnter)
frame:SetScript("OnLeave", Frame_OnLeave)
end
end,
-- Widget:SetColon()
-- Sets the column separator.
SetColon = function(self, Text)
self.Colon:SetText(Text or ":")
end,
-- Widget:SetLabel()
-- Sets the text of the Label field.
SetLabel = function(self, Text)
Text = Text or ""
self.Label:SetText(Text)
if Text == "" then
self:SetColon(Text)
end
end,
-- Widget:GetText()
-- Returns the text of the Info field.
GetText = function(self)
return self.Info:GetText() or ""
end,
-- Widget:SetText()
-- Sets the text of the Info field.
SetText = function(self, Text)
Text = Text or ""
self.Info:SetText(Text)
UpdateHeight(self)
end,
-- Unused Methods
-- OnRelease = nil,
-- OnHeightSet = nil,
}
----------------------------------------
-- Constructor
---
local function Constructor()
-- Container Frame
local Frame = CreateFrame("Frame", nil, UIParent)
-- Label: Left Text
local Label = Frame:CreateFontString(nil, "OVERLAY", "GameFontNormal")
Label:SetPoint("TOPLEFT", Frame, "TOPLEFT")
Label:SetPoint("BOTTOM", Frame, "BOTTOM")
Label:SetWidth(75)
Label:SetJustifyH("RIGHT")
Label:SetJustifyV("TOP")
-- Colon: Column Separator
local Colon = Frame:CreateFontString(nil, "OVERLAY", "GameFontNormal")
Colon:SetPoint("TOPLEFT", Label, "TOPRIGHT")
Colon:SetPoint("BOTTOM", Frame, "BOTTOM")
Colon:SetWidth(8)
Colon:SetJustifyH("LEFT")
Colon:SetJustifyV("TOP")
-- Info: Right Text
local Info = Frame:CreateFontString(nil, "OVERLAY", "GameFontHighlight")
Info:SetPoint("TOPLEFT", Colon, "TOPRIGHT")
Info:SetJustifyH("LEFT")
Info:SetJustifyV("TOP")
local Widget = {
type = Type,
frame = Frame,
--num = AceGUI:GetNextWidgetNum(Type),
Label = Label,
Colon = Colon,
Info = Info,
}
for method, func in pairs(Methods) do
Widget[method] = func
end
Frame.obj = Widget
return AceGUI:RegisterAsWidget(Widget)
end
AceGUI:RegisterWidgetType(Type, Constructor, Version)