comparison ui/AmrUiLabel.lua @ 57:01b63b8ed811 v21

total rewrite to version 21
author yellowfive
date Fri, 05 Jun 2015 11:05:15 -0700
parents
children e31b02b24488
comparison
equal deleted inserted replaced
56:75431c084aa0 57:01b63b8ed811
1 --[[-----------------------------------------------------------------------------
2 Label Widget
3 Displays text.
4 -------------------------------------------------------------------------------]]
5 local Type, Version = "AmrUiLabel", 1
6 local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
7 if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
8
9 local Amr = LibStub("AceAddon-3.0"):GetAddon("AskMrRobot")
10
11 -- Lua APIs
12 local max, select, pairs = math.max, select, pairs
13
14 -- WoW APIs
15 local CreateFrame, UIParent = CreateFrame, UIParent
16
17
18 --[[-----------------------------------------------------------------------------
19 Support functions
20 -------------------------------------------------------------------------------]]
21
22 local function updateSize(self)
23 if self.resizing then return end
24 local frame = self.frame
25 local width = frame.width or frame:GetWidth() or 0
26 local label = self.label
27 local height
28
29 label:ClearAllPoints()
30 label:SetPoint("TOPLEFT")
31 label:SetWidth(width)
32 height = label:GetHeight()
33
34 self.resizing = true
35 frame:SetHeight(height)
36 frame.height = height
37 self.resizing = nil
38 end
39
40 --[[-----------------------------------------------------------------------------
41 Scripts
42 -------------------------------------------------------------------------------]]
43
44 local function frameOnEnter(frame)
45 frame.obj:Fire("OnEnter")
46 end
47
48 local function frameOnLeave(frame)
49 frame.obj:Fire("OnLeave")
50 end
51
52 local function frameOnMouseDown(frame, ...)
53 frame.obj:Fire("OnMouseDown", ...)
54 end
55
56 local function frameOnMouseUp(frame, ...)
57 frame.obj:Fire("OnMouseUp", ...)
58 end
59
60 --[[-----------------------------------------------------------------------------
61 Methods
62 -------------------------------------------------------------------------------]]
63 local methods = {
64 ["OnAcquire"] = function(self)
65 -- set the flag to stop constant size updates
66 self.resizing = true
67 -- height is set dynamically by the text size
68 self:SetWidth(200)
69 self:SetText()
70 self:SetFont(Amr.CreateFont("Regular", 16, Amr.Colors.Text))
71 self:SetJustifyH("LEFT")
72 self:SetJustifyV("MIDDLE")
73 self:SetWordWrap(true)
74 self:SetVisible(true)
75
76 -- reset the flag
77 self.resizing = nil
78 -- run the update explicitly
79 updateSize(self)
80 end,
81
82 -- ["OnRelease"] = nil,
83
84 ["OnWidthSet"] = function(self, width)
85 updateSize(self)
86 end,
87
88 ["GetHeight"] = function(self)
89 return self.frame:GetHeight()
90 end,
91
92 ["SetText"] = function(self, text)
93 self.label:SetText(text)
94 updateSize(self)
95 end,
96
97 ["SetFont"] = function(self, font)
98 self.label:SetFontObject(font)
99 updateSize(self)
100 end,
101
102 ["SetJustifyV"] = function(self, val)
103 self.label:SetJustifyV(val)
104 end,
105
106 ["SetJustifyH"] = function(self, val)
107 self.label:SetJustifyH(val)
108 end,
109
110 ["SetWordWrap"] = function(self, enable)
111 self.label:SetWordWrap(enable)
112 updateSize(self)
113 end,
114
115 ["SetVisible"] = function(self, visible)
116 if visible then
117 self.frame:Show()
118 else
119 self.frame:Hide()
120 end
121 end
122 }
123
124 --[[-----------------------------------------------------------------------------
125 Constructor
126 -------------------------------------------------------------------------------]]
127 local function Constructor()
128 local frame = CreateFrame("Frame", nil, UIParent)
129 frame:Hide()
130
131 frame:SetScript("OnEnter", frameOnEnter)
132 frame:SetScript("OnLeave", frameOnLeave)
133 frame:SetScript("OnMouseDown", frameOnMouseDown)
134 frame:SetScript("OnMouseUp", frameOnMouseUp)
135
136 local label = frame:CreateFontString(nil, "ARTWORK")
137 label:SetFontObject(Amr.CreateFont("Regular", 16, Amr.Colors.Text))
138
139 -- create widget
140 local widget = {
141 label = label,
142 frame = frame,
143 type = Type
144 }
145 for method, func in pairs(methods) do
146 widget[method] = func
147 end
148
149 return AceGUI:RegisterAsWidget(widget)
150 end
151
152 AceGUI:RegisterWidgetType(Type, Constructor, Version)