--[[----------------------------------------------------------------------------- Button Widget Graphical Button. -------------------------------------------------------------------------------]] local Type, Version = "Button", 20 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 pairs = pairs -- WoW APIs local _G = _G local PlaySound, CreateFrame, UIParent = PlaySound, CreateFrame, UIParent --[[----------------------------------------------------------------------------- Scripts -------------------------------------------------------------------------------]] local function Button_OnClick(frame, ...) PlaySound("igMainMenuOption") frame.obj:Fire("OnClick", ...) AceGUI:ClearFocus() end local function Control_OnEnter(frame) frame.obj:Fire("OnEnter") end local function Control_OnLeave(frame) frame.obj:Fire("OnLeave") end --[[----------------------------------------------------------------------------- Methods -------------------------------------------------------------------------------]] local methods = { ["OnAcquire"] = function(self) -- restore default values self:SetHeight(24) self:SetWidth(200) self:SetDisabled(false) self:SetText() end, -- ["OnRelease"] = nil, ["SetText"] = function(self, text) self.text:SetText(text) end, ["SetDisabled"] = function(self, disabled) self.disabled = disabled if disabled then self.frame:Disable() else self.frame:Enable() end end } --[[----------------------------------------------------------------------------- Constructor -------------------------------------------------------------------------------]] local function Constructor() local name = "AceGUI30Button" .. AceGUI:GetNextWidgetNum(Type) local frame = CreateFrame("Button", name, UIParent, "UIPanelButtonTemplate2") frame:Hide() frame:EnableMouse(true) frame:SetScript("OnClick", Button_OnClick) frame:SetScript("OnEnter", Control_OnEnter) frame:SetScript("OnLeave", Control_OnLeave) local text = frame:GetFontString() text:ClearAllPoints() text:SetPoint("TOPLEFT", 15, -1) text:SetPoint("BOTTOMRIGHT", -15, 1) text:SetJustifyV("MIDDLE") local widget = { text = text, frame = frame, type = Type } for method, func in pairs(methods) do widget[method] = func end return AceGUI:RegisterAsWidget(widget) end AceGUI:RegisterWidgetType(Type, Constructor, Version)