Mercurial > wow > hansgar_and_franzok_assist
diff Libs/DF/label.lua @ 11:2f09fe4be15c
Added an Options Panel.
| author | Tercio |
|---|---|
| date | Mon, 20 Apr 2015 16:34:18 -0300 |
| parents | |
| children | dc1c77254f80 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Libs/DF/label.lua Mon Apr 20 16:34:18 2015 -0300 @@ -0,0 +1,296 @@ + + + +local DF = _G ["DetailsFramework"] +local _ + +local _rawset = rawset --> lua local +local _rawget = rawget --> lua local +local _setmetatable = setmetatable --> lua local +local _unpack = unpack --> lua local +local _type = type --> lua local +local _math_floor = math.floor --> lua local +local loadstring = loadstring --> lua local + +local cleanfunction = function() end +local APILabelFunctions = false +local LabelMetaFunctions = {} + +------------------------------------------------------------------------------------------------------------ +--> metatables + + LabelMetaFunctions.__call = function (_table, value) + return self.label:SetText (value) + end + +------------------------------------------------------------------------------------------------------------ +--> members + + --> shown + local gmember_shown = function (_object) + return _object:IsShown() + end + --> frame width + local gmember_width = function (_object) + return _object.label:GetStringWidth() + end + --> frame height + local gmember_height = function (_object) + return _object.label:GetStringHeight() + end + --> text + local gmember_text = function (_object) + return _object.label:GetText() + end + --> text color + local gmember_textcolor = function (_object) + return _object.label:GetTextColor() + end + --> text font + local gmember_textfont = function (_object) + local fontface = _object.label:GetFont() + return fontface + end + --> text size + local gmember_textsize = function (_object) + local _, fontsize = _object.label:GetFont() + return fontsize + end + + + local get_members_function_index = { + ["shown"] = gmember_shown, + ["width"] = gmember_width, + ["height"] = gmember_height, + ["text"] = gmember_text, + ["fontcolor"] = gmember_textcolor, + ["fontface"] = gmember_textfont, + ["fontsize"] = gmember_textsize, + ["textcolor"] = gmember_textcolor, --alias + ["textfont"] = gmember_textfont, --alias + ["textsize"] = gmember_textsize --alias + } + + LabelMetaFunctions.__index = function (_table, _member_requested) + + local func = get_members_function_index [_member_requested] + if (func) then + return func (_table, _member_requested) + end + + local fromMe = _rawget (_table, _member_requested) + if (fromMe) then + return fromMe + end + + return LabelMetaFunctions [_member_requested] + end + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + + --> show + local smember_show = function (_object, _value) + if (_value) then + return _object:Show() + else + return _object:Hide() + end + end + --> hide + local smember_hide = function (_object, _value) + if (not _value) then + return _object:Show() + else + return _object:Hide() + end + end + --> text + local smember_text = function (_object, _value) + return _object.label:SetText (_value) + end + --> text color + local smember_textcolor = function (_object, _value) + local _value1, _value2, _value3, _value4 = DF:ParseColors (_value) + return _object.label:SetTextColor (_value1, _value2, _value3, _value4) + end + --> text font + local smember_textfont = function (_object, _value) + return DF:SetFontFace (_object.label, _value) + end + --> text size + local smember_textsize = function (_object, _value) + return DF:SetFontSize (_object.label, _value) + end + --> text align + local smember_textalign = function (_object, _value) + if (_value == "<") then + _value = "left" + elseif (_value == ">") then + _value = "right" + elseif (_value == "|") then + _value = "center" + end + return _object.label:SetJustifyH (_value) + end + --> text valign + local smember_textvalign = function (_object, _value) + if (_value == "^") then + _value = "top" + elseif (_value == "_") then + _value = "bottom" + elseif (_value == "|") then + _value = "middle" + end + return _object.label:SetJustifyV (_value) + end + --> field size width + local smember_width = function (_object, _value) + return _object.label:SetWidth (_value) + end + --> field size height + local smember_height = function (_object, _value) + return _object.label:SetHeight (_value) + end + --> outline (shadow) + local smember_outline = function (_object, _value) + DF:SetFontOutline (_object.label, _value) + end + + local set_members_function_index = { + ["show"] = smember_show, + ["hide"] = smember_hide, + ["align"] = smember_textalign, + ["valign"] = smember_textvalign, + ["text"] = smember_text, + ["width"] = smember_width, + ["height"] = smember_height, + ["fontcolor"] = smember_textcolor, + ["color"] = smember_textcolor,--alias + ["fontface"] = smember_textfont, + ["fontsize"] = smember_textsize, + ["textcolor"] = smember_textcolor,--alias + ["textfont"] = smember_textfont,--alias + ["textsize"] = smember_textsize,--alias + ["shadow"] = smember_outline, + ["outline"] = smember_outline,--alias + } + + LabelMetaFunctions.__newindex = function (_table, _key, _value) + local func = set_members_function_index [_key] + if (func) then + return func (_table, _value) + else + return _rawset (_table, _key, _value) + end + end + +------------------------------------------------------------------------------------------------------------ +--> methods + +--> show & hide + function LabelMetaFunctions:IsShown() + return self.label:IsShown() + end + function LabelMetaFunctions:Show() + return self.label:Show() + end + function LabelMetaFunctions:Hide() + return self.label:Hide() + end + +-- textcolor + function LabelMetaFunctions:SetTextColor (color, arg2, arg3, arg4) + if (arg2) then + return self.label:SetTextColor (color, arg2, arg3, arg4 or 1) + end + local _value1, _value2, _value3, _value4 = DF:ParseColors (color) + return self.label:SetTextColor (_value1, _value2, _value3, _value4) + end + +-- setpoint + function LabelMetaFunctions:SetPoint (v1, v2, v3, v4, v5) + v1, v2, v3, v4, v5 = DF:CheckPoints (v1, v2, v3, v4, v5, self) + if (not v1) then + print ("Invalid parameter for SetPoint") + return + end + return self.widget:SetPoint (v1, v2, v3, v4, v5) + end + +------------------------------------------------------------------------------------------------------------ +--> object constructor +function DF:CreateLabel (parent, text, size, color, font, member, name, layer) + return DF:NewLabel (parent, nil, name, member, text, font, size, color, layer) +end + +function DF:NewLabel (parent, container, name, member, text, font, size, color, layer) + + if (not parent) then + return nil + end + if (not container) then + container = parent + end + + if (not name) then + name = "DetailsFrameworkLabelNumber" .. DF.LabelNameCounter + DF.LabelNameCounter = DF.LabelNameCounter + 1 + end + + if (name:find ("$parent")) then + local pname = parent:GetName() + assert (pname, "label used $parent but parent has no name.") + name = name:gsub ("$parent", parent:GetName()) + end + + local LabelObject = {type = "label", dframework = true} + + if (member) then + parent [member] = LabelObject + --container [member] = LabelObject.label + end + + if (parent.dframework) then + parent = parent.widget + end + if (container.dframework) then + container = container.widget + end + + font = font or "GameFontHighlightSmall" + + LabelObject.label = parent:CreateFontString (name, layer or "OVERLAY", font) + LabelObject.widget = LabelObject.label + + LabelObject.label.MyObject = LabelObject + + if (not APILabelFunctions) then + APILabelFunctions = true + local idx = getmetatable (LabelObject.label).__index + for funcName, funcAddress in pairs (idx) do + if (not LabelMetaFunctions [funcName]) then + LabelMetaFunctions [funcName] = function (object, ...) + local x = loadstring ( "return _G."..object.label:GetName()..":"..funcName.."(...)") + return x (...) + end + end + end + end + + LabelObject.label:SetText (text) + + if (size) then + DF:SetFontSize (LabelObject.label, size) + end + + if (color) then + local r, g, b, a = DF:ParseColors (color) + LabelObject.label:SetTextColor (r, g, b, a) + end + + LabelObject.label:SetJustifyH ("LEFT") + + setmetatable (LabelObject, LabelMetaFunctions) + + return LabelObject +end \ No newline at end of file
