WoWInterface SVN NightWatch

[/] [trunk/] [libs/] [AceGUI-3.0/] [widgets/] [AceGUIWidget-InteractiveLabel.lua] - Rev 29

Compare with Previous | Blame | View Log

--[[-----------------------------------------------------------------------------
InteractiveLabel Widget
-------------------------------------------------------------------------------]]
local Type, Version = "InteractiveLabel", 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 select, pairs = select, pairs

-- WoW APIs
local CreateFrame, UIParent = CreateFrame, UIParent

-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
-- List them here for Mikk's FindGlobals script
-- GLOBALS: GameFontHighlightSmall

--[[-----------------------------------------------------------------------------
Scripts
-------------------------------------------------------------------------------]]
local function Control_OnEnter(frame)
        frame.obj:Fire("OnEnter")
end

local function Control_OnLeave(frame)
        frame.obj:Fire("OnLeave")
end

local function Label_OnClick(frame, button)
        frame.obj:Fire("OnClick", button)
        AceGUI:ClearFocus()
end

--[[-----------------------------------------------------------------------------
Methods
-------------------------------------------------------------------------------]]
local methods = {
        ["OnAcquire"] = function(self)
                self:LabelOnAcquire()
                self:SetHighlight()
                self:SetHighlightTexCoord()
                self:SetDisabled(false)
        end,

        -- ["OnRelease"] = nil,

        ["SetHighlight"] = function(self, ...)
                self.highlight:SetTexture(...)
        end,

        ["SetHighlightTexCoord"] = function(self, ...)
                local c = select("#", ...)
                if c == 4 or c == 8 then
                        self.highlight:SetTexCoord(...)
                else
                        self.highlight:SetTexCoord(0, 1, 0, 1)
                end
        end,

        ["SetDisabled"] = function(self,disabled)
                self.disabled = disabled
                if disabled then
                        self.frame:EnableMouse(false)
                        self.label:SetTextColor(0.5, 0.5, 0.5)
                else
                        self.frame:EnableMouse(true)
                        self.label:SetTextColor(1, 1, 1)
                end
        end
}

--[[-----------------------------------------------------------------------------
Constructor
-------------------------------------------------------------------------------]]
local function Constructor()
        -- create a Label type that we will hijack
        local label = AceGUI:Create("Label")

        local frame = label.frame
        frame:EnableMouse(true)
        frame:SetScript("OnEnter", Control_OnEnter)
        frame:SetScript("OnLeave", Control_OnLeave)
        frame:SetScript("OnMouseDown", Label_OnClick)

        local highlight = frame:CreateTexture(nil, "HIGHLIGHT")
        highlight:SetTexture(nil)
        highlight:SetAllPoints()
        highlight:SetBlendMode("ADD")

        label.highlight = highlight
        label.type = Type
        label.LabelOnAcquire = label.OnAcquire
        for method, func in pairs(methods) do
                label[method] = func
        end

        return label
end

AceGUI:RegisterWidgetType(Type, Constructor, Version)

Compare with Previous | Blame