154 lignes
3,8 Kio
Lua
154 lignes
3,8 Kio
Lua
|
local AceGUI = LibStub("AceGUI-3.0")
|
||
|
|
||
|
|
||
|
-------------
|
||
|
-- Widgets --
|
||
|
-------------
|
||
|
--[[
|
||
|
Widgets must provide the following functions
|
||
|
Acquire() - Called when the object is aquired, should set everything to a default hidden state
|
||
|
Release() - Called when the object is Released, should remove any anchors and hide the Widget
|
||
|
|
||
|
And the following members
|
||
|
frame - the frame or derivitive object that will be treated as the widget for size and anchoring purposes
|
||
|
type - the type of the object, same as the name given to :RegisterWidget()
|
||
|
|
||
|
Widgets contain a table called userdata, this is a safe place to store data associated with the wigdet
|
||
|
It will be cleared automatically when a widget is released
|
||
|
Placing values directly into a widget object should be avoided
|
||
|
|
||
|
If the Widget can act as a container for other Widgets the following
|
||
|
content - frame or derivitive that children will be anchored to
|
||
|
|
||
|
The Widget can supply the following Optional Members
|
||
|
|
||
|
|
||
|
]]
|
||
|
|
||
|
----------------------------------
|
||
|
-- Blizzard Options Group --
|
||
|
----------------------------------
|
||
|
--[[
|
||
|
Group Designed to be added to the bliz interface options panel
|
||
|
]]
|
||
|
|
||
|
-- WoW APIs
|
||
|
local CreateFrame = CreateFrame
|
||
|
|
||
|
do
|
||
|
local Type = "BlizOptionsGroup"
|
||
|
local Version = 10
|
||
|
|
||
|
local function OnAcquire(self)
|
||
|
|
||
|
end
|
||
|
|
||
|
local function OnRelease(self)
|
||
|
self.frame:ClearAllPoints()
|
||
|
self.frame:Hide()
|
||
|
self:SetName()
|
||
|
end
|
||
|
|
||
|
local function okay(this)
|
||
|
this.obj:Fire("okay")
|
||
|
end
|
||
|
|
||
|
local function cancel(this)
|
||
|
this.obj:Fire("cancel")
|
||
|
end
|
||
|
|
||
|
local function defaults(this)
|
||
|
this.obj:Fire("defaults")
|
||
|
end
|
||
|
|
||
|
local function SetName(self, name, parent)
|
||
|
self.frame.name = name
|
||
|
self.frame.parent = parent
|
||
|
end
|
||
|
|
||
|
local function OnShow(this)
|
||
|
this.obj:Fire("OnShow")
|
||
|
end
|
||
|
|
||
|
local function OnHide(this)
|
||
|
this.obj:Fire("OnHide")
|
||
|
end
|
||
|
|
||
|
local function OnWidthSet(self, width)
|
||
|
local content = self.content
|
||
|
local contentwidth = width - 63
|
||
|
if contentwidth < 0 then
|
||
|
contentwidth = 0
|
||
|
end
|
||
|
content:SetWidth(contentwidth)
|
||
|
content.width = contentwidth
|
||
|
end
|
||
|
|
||
|
|
||
|
local function OnHeightSet(self, height)
|
||
|
local content = self.content
|
||
|
local contentheight = height - 26
|
||
|
if contentheight < 0 then
|
||
|
contentheight = 0
|
||
|
end
|
||
|
content:SetHeight(contentheight)
|
||
|
content.height = contentheight
|
||
|
end
|
||
|
|
||
|
local function SetTitle(self, title)
|
||
|
local content = self.content
|
||
|
content:ClearAllPoints()
|
||
|
if not title or title == "" then
|
||
|
content:SetPoint("TOPLEFT",self.frame,"TOPLEFT",10,-10)
|
||
|
self.label:SetText("")
|
||
|
else
|
||
|
content:SetPoint("TOPLEFT",self.frame,"TOPLEFT",10,-40)
|
||
|
self.label:SetText(title)
|
||
|
end
|
||
|
content:SetPoint("BOTTOMRIGHT",self.frame,"BOTTOMRIGHT",-10,10)
|
||
|
end
|
||
|
|
||
|
local function Constructor()
|
||
|
local frame = CreateFrame("Frame")
|
||
|
local self = {}
|
||
|
self.type = Type
|
||
|
|
||
|
self.OnRelease = OnRelease
|
||
|
self.OnAcquire = OnAcquire
|
||
|
self.frame = frame
|
||
|
self.SetName = SetName
|
||
|
|
||
|
self.OnWidthSet = OnWidthSet
|
||
|
self.OnHeightSet = OnHeightSet
|
||
|
self.SetTitle = SetTitle
|
||
|
|
||
|
frame.obj = self
|
||
|
frame.okay = okay
|
||
|
frame.cancel = cancel
|
||
|
frame.defaults = defaults
|
||
|
|
||
|
frame:Hide()
|
||
|
frame:SetScript("OnHide",OnHide)
|
||
|
frame:SetScript("OnShow",OnShow)
|
||
|
|
||
|
local label = frame:CreateFontString(nil,"OVERLAY","GameFontNormalLarge")
|
||
|
self.label = label
|
||
|
label:SetPoint("TOPLEFT", frame, "TOPLEFT", 10, -15)
|
||
|
label:SetPoint("BOTTOMRIGHT", frame, "TOPRIGHT", 10, -45)
|
||
|
label:SetJustifyH("LEFT")
|
||
|
label:SetJustifyV("TOP")
|
||
|
|
||
|
--Container Support
|
||
|
local content = CreateFrame("Frame",nil,frame)
|
||
|
self.content = content
|
||
|
content.obj = self
|
||
|
content:SetPoint("TOPLEFT",frame,"TOPLEFT",15,-10)
|
||
|
content:SetPoint("BOTTOMRIGHT",frame,"BOTTOMRIGHT",-10,10)
|
||
|
|
||
|
AceGUI:RegisterAsContainer(self)
|
||
|
return self
|
||
|
end
|
||
|
|
||
|
AceGUI:RegisterWidgetType(Type,Constructor,Version)
|
||
|
end
|