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
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)
|
|
|