9e06049a7ff5156b4e0d4b9a337e17c7ad5bb92c
[wowui.git] / libs / AceGUI-3.0-SharedMediaWidgets / Libs / AceGUI-3.0 / widgets / AceGUIWidget-InteractiveLabel.lua
1 --[[-----------------------------------------------------------------------------
2 InteractiveLabel Widget
3 -------------------------------------------------------------------------------]]
4 local Type, Version = "InteractiveLabel", 20
5 local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
6 if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
7
8 -- Lua APIs
9 local select, pairs = select, pairs
10
11 -- WoW APIs
12 local CreateFrame, UIParent = CreateFrame, UIParent
13
14 -- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
15 -- List them here for Mikk's FindGlobals script
16 -- GLOBALS: GameFontHighlightSmall
17
18 --[[-----------------------------------------------------------------------------
19 Scripts
20 -------------------------------------------------------------------------------]]
21 local function Control_OnEnter(frame)
22         frame.obj:Fire("OnEnter")
23 end
24
25 local function Control_OnLeave(frame)
26         frame.obj:Fire("OnLeave")
27 end
28
29 local function Label_OnClick(frame, button)
30         frame.obj:Fire("OnClick", button)
31         AceGUI:ClearFocus()
32 end
33
34 --[[-----------------------------------------------------------------------------
35 Methods
36 -------------------------------------------------------------------------------]]
37 local methods = {
38         ["OnAcquire"] = function(self)
39                 self:LabelOnAcquire()
40                 self:SetHighlight()
41                 self:SetHighlightTexCoord()
42                 self:SetDisabled(false)
43         end,
44
45         -- ["OnRelease"] = nil,
46
47         ["SetHighlight"] = function(self, ...)
48                 self.highlight:SetTexture(...)
49         end,
50
51         ["SetHighlightTexCoord"] = function(self, ...)
52                 local c = select("#", ...)
53                 if c == 4 or c == 8 then
54                         self.highlight:SetTexCoord(...)
55                 else
56                         self.highlight:SetTexCoord(0, 1, 0, 1)
57                 end
58         end,
59
60         ["SetDisabled"] = function(self,disabled)
61                 self.disabled = disabled
62                 if disabled then
63                         self.frame:EnableMouse(false)
64                         self.label:SetTextColor(0.5, 0.5, 0.5)
65                 else
66                         self.frame:EnableMouse(true)
67                         self.label:SetTextColor(1, 1, 1)
68                 end
69         end
70 }
71
72 --[[-----------------------------------------------------------------------------
73 Constructor
74 -------------------------------------------------------------------------------]]
75 local function Constructor()
76         -- create a Label type that we will hijack
77         local label = AceGUI:Create("Label")
78
79         local frame = label.frame
80         frame:EnableMouse(true)
81         frame:SetScript("OnEnter", Control_OnEnter)
82         frame:SetScript("OnLeave", Control_OnLeave)
83         frame:SetScript("OnMouseDown", Label_OnClick)
84
85         local highlight = frame:CreateTexture(nil, "HIGHLIGHT")
86         highlight:SetTexture(nil)
87         highlight:SetAllPoints()
88         highlight:SetBlendMode("ADD")
89
90         label.highlight = highlight
91         label.type = Type
92         label.LabelOnAcquire = label.OnAcquire
93         for method, func in pairs(methods) do
94                 label[method] = func
95         end
96
97         return label
98 end
99
100 AceGUI:RegisterWidgetType(Type, Constructor, Version)
101