comparison Libs/DF/label.lua @ 11:2f09fe4be15c

Added an Options Panel.
author Tercio
date Mon, 20 Apr 2015 16:34:18 -0300
parents
children dc1c77254f80
comparison
equal deleted inserted replaced
10:f1e32be6773e 11:2f09fe4be15c
1
2
3
4 local DF = _G ["DetailsFramework"]
5 local _
6
7 local _rawset = rawset --> lua local
8 local _rawget = rawget --> lua local
9 local _setmetatable = setmetatable --> lua local
10 local _unpack = unpack --> lua local
11 local _type = type --> lua local
12 local _math_floor = math.floor --> lua local
13 local loadstring = loadstring --> lua local
14
15 local cleanfunction = function() end
16 local APILabelFunctions = false
17 local LabelMetaFunctions = {}
18
19 ------------------------------------------------------------------------------------------------------------
20 --> metatables
21
22 LabelMetaFunctions.__call = function (_table, value)
23 return self.label:SetText (value)
24 end
25
26 ------------------------------------------------------------------------------------------------------------
27 --> members
28
29 --> shown
30 local gmember_shown = function (_object)
31 return _object:IsShown()
32 end
33 --> frame width
34 local gmember_width = function (_object)
35 return _object.label:GetStringWidth()
36 end
37 --> frame height
38 local gmember_height = function (_object)
39 return _object.label:GetStringHeight()
40 end
41 --> text
42 local gmember_text = function (_object)
43 return _object.label:GetText()
44 end
45 --> text color
46 local gmember_textcolor = function (_object)
47 return _object.label:GetTextColor()
48 end
49 --> text font
50 local gmember_textfont = function (_object)
51 local fontface = _object.label:GetFont()
52 return fontface
53 end
54 --> text size
55 local gmember_textsize = function (_object)
56 local _, fontsize = _object.label:GetFont()
57 return fontsize
58 end
59
60
61 local get_members_function_index = {
62 ["shown"] = gmember_shown,
63 ["width"] = gmember_width,
64 ["height"] = gmember_height,
65 ["text"] = gmember_text,
66 ["fontcolor"] = gmember_textcolor,
67 ["fontface"] = gmember_textfont,
68 ["fontsize"] = gmember_textsize,
69 ["textcolor"] = gmember_textcolor, --alias
70 ["textfont"] = gmember_textfont, --alias
71 ["textsize"] = gmember_textsize --alias
72 }
73
74 LabelMetaFunctions.__index = function (_table, _member_requested)
75
76 local func = get_members_function_index [_member_requested]
77 if (func) then
78 return func (_table, _member_requested)
79 end
80
81 local fromMe = _rawget (_table, _member_requested)
82 if (fromMe) then
83 return fromMe
84 end
85
86 return LabelMetaFunctions [_member_requested]
87 end
88
89 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
90
91 --> show
92 local smember_show = function (_object, _value)
93 if (_value) then
94 return _object:Show()
95 else
96 return _object:Hide()
97 end
98 end
99 --> hide
100 local smember_hide = function (_object, _value)
101 if (not _value) then
102 return _object:Show()
103 else
104 return _object:Hide()
105 end
106 end
107 --> text
108 local smember_text = function (_object, _value)
109 return _object.label:SetText (_value)
110 end
111 --> text color
112 local smember_textcolor = function (_object, _value)
113 local _value1, _value2, _value3, _value4 = DF:ParseColors (_value)
114 return _object.label:SetTextColor (_value1, _value2, _value3, _value4)
115 end
116 --> text font
117 local smember_textfont = function (_object, _value)
118 return DF:SetFontFace (_object.label, _value)
119 end
120 --> text size
121 local smember_textsize = function (_object, _value)
122 return DF:SetFontSize (_object.label, _value)
123 end
124 --> text align
125 local smember_textalign = function (_object, _value)
126 if (_value == "<") then
127 _value = "left"
128 elseif (_value == ">") then
129 _value = "right"
130 elseif (_value == "|") then
131 _value = "center"
132 end
133 return _object.label:SetJustifyH (_value)
134 end
135 --> text valign
136 local smember_textvalign = function (_object, _value)
137 if (_value == "^") then
138 _value = "top"
139 elseif (_value == "_") then
140 _value = "bottom"
141 elseif (_value == "|") then
142 _value = "middle"
143 end
144 return _object.label:SetJustifyV (_value)
145 end
146 --> field size width
147 local smember_width = function (_object, _value)
148 return _object.label:SetWidth (_value)
149 end
150 --> field size height
151 local smember_height = function (_object, _value)
152 return _object.label:SetHeight (_value)
153 end
154 --> outline (shadow)
155 local smember_outline = function (_object, _value)
156 DF:SetFontOutline (_object.label, _value)
157 end
158
159 local set_members_function_index = {
160 ["show"] = smember_show,
161 ["hide"] = smember_hide,
162 ["align"] = smember_textalign,
163 ["valign"] = smember_textvalign,
164 ["text"] = smember_text,
165 ["width"] = smember_width,
166 ["height"] = smember_height,
167 ["fontcolor"] = smember_textcolor,
168 ["color"] = smember_textcolor,--alias
169 ["fontface"] = smember_textfont,
170 ["fontsize"] = smember_textsize,
171 ["textcolor"] = smember_textcolor,--alias
172 ["textfont"] = smember_textfont,--alias
173 ["textsize"] = smember_textsize,--alias
174 ["shadow"] = smember_outline,
175 ["outline"] = smember_outline,--alias
176 }
177
178 LabelMetaFunctions.__newindex = function (_table, _key, _value)
179 local func = set_members_function_index [_key]
180 if (func) then
181 return func (_table, _value)
182 else
183 return _rawset (_table, _key, _value)
184 end
185 end
186
187 ------------------------------------------------------------------------------------------------------------
188 --> methods
189
190 --> show & hide
191 function LabelMetaFunctions:IsShown()
192 return self.label:IsShown()
193 end
194 function LabelMetaFunctions:Show()
195 return self.label:Show()
196 end
197 function LabelMetaFunctions:Hide()
198 return self.label:Hide()
199 end
200
201 -- textcolor
202 function LabelMetaFunctions:SetTextColor (color, arg2, arg3, arg4)
203 if (arg2) then
204 return self.label:SetTextColor (color, arg2, arg3, arg4 or 1)
205 end
206 local _value1, _value2, _value3, _value4 = DF:ParseColors (color)
207 return self.label:SetTextColor (_value1, _value2, _value3, _value4)
208 end
209
210 -- setpoint
211 function LabelMetaFunctions:SetPoint (v1, v2, v3, v4, v5)
212 v1, v2, v3, v4, v5 = DF:CheckPoints (v1, v2, v3, v4, v5, self)
213 if (not v1) then
214 print ("Invalid parameter for SetPoint")
215 return
216 end
217 return self.widget:SetPoint (v1, v2, v3, v4, v5)
218 end
219
220 ------------------------------------------------------------------------------------------------------------
221 --> object constructor
222 function DF:CreateLabel (parent, text, size, color, font, member, name, layer)
223 return DF:NewLabel (parent, nil, name, member, text, font, size, color, layer)
224 end
225
226 function DF:NewLabel (parent, container, name, member, text, font, size, color, layer)
227
228 if (not parent) then
229 return nil
230 end
231 if (not container) then
232 container = parent
233 end
234
235 if (not name) then
236 name = "DetailsFrameworkLabelNumber" .. DF.LabelNameCounter
237 DF.LabelNameCounter = DF.LabelNameCounter + 1
238 end
239
240 if (name:find ("$parent")) then
241 local pname = parent:GetName()
242 assert (pname, "label used $parent but parent has no name.")
243 name = name:gsub ("$parent", parent:GetName())
244 end
245
246 local LabelObject = {type = "label", dframework = true}
247
248 if (member) then
249 parent [member] = LabelObject
250 --container [member] = LabelObject.label
251 end
252
253 if (parent.dframework) then
254 parent = parent.widget
255 end
256 if (container.dframework) then
257 container = container.widget
258 end
259
260 font = font or "GameFontHighlightSmall"
261
262 LabelObject.label = parent:CreateFontString (name, layer or "OVERLAY", font)
263 LabelObject.widget = LabelObject.label
264
265 LabelObject.label.MyObject = LabelObject
266
267 if (not APILabelFunctions) then
268 APILabelFunctions = true
269 local idx = getmetatable (LabelObject.label).__index
270 for funcName, funcAddress in pairs (idx) do
271 if (not LabelMetaFunctions [funcName]) then
272 LabelMetaFunctions [funcName] = function (object, ...)
273 local x = loadstring ( "return _G."..object.label:GetName()..":"..funcName.."(...)")
274 return x (...)
275 end
276 end
277 end
278 end
279
280 LabelObject.label:SetText (text)
281
282 if (size) then
283 DF:SetFontSize (LabelObject.label, size)
284 end
285
286 if (color) then
287 local r, g, b, a = DF:ParseColors (color)
288 LabelObject.label:SetTextColor (r, g, b, a)
289 end
290
291 LabelObject.label:SetJustifyH ("LEFT")
292
293 setmetatable (LabelObject, LabelMetaFunctions)
294
295 return LabelObject
296 end