Tercio@11: Tercio@11: local DF = _G ["DetailsFramework"] Tercio@20: if (not DF or not DetailsFrameworkCanLoad) then Tercio@20: return Tercio@20: end Tercio@20: Tercio@11: local _ Tercio@11: local _rawset = rawset --> lua local Tercio@11: local _rawget = rawget --> lua local Tercio@11: local _setmetatable = setmetatable --> lua local Tercio@11: local _unpack = unpack --> lua local Tercio@11: local _type = type --> lua local Tercio@11: local _math_floor = math.floor --> lua local Tercio@11: local loadstring = loadstring --> lua local Tercio@11: Tercio@11: local cleanfunction = function() end Tercio@11: local APILabelFunctions = false Tercio@39: Tercio@39: do Tercio@39: local metaPrototype = { Tercio@39: WidgetType = "label", Tercio@39: SetHook = DF.SetHook, Tercio@39: RunHooksForWidget = DF.RunHooksForWidget, Tercio@39: } Tercio@39: Tercio@39: _G [DF.GlobalWidgetControlNames ["label"]] = _G [DF.GlobalWidgetControlNames ["label"]] or metaPrototype Tercio@39: end Tercio@39: Tercio@39: local LabelMetaFunctions = _G [DF.GlobalWidgetControlNames ["label"]] Tercio@11: Tercio@11: ------------------------------------------------------------------------------------------------------------ Tercio@11: --> metatables Tercio@11: Tercio@11: LabelMetaFunctions.__call = function (_table, value) Tercio@11: return self.label:SetText (value) Tercio@11: end Tercio@11: Tercio@11: ------------------------------------------------------------------------------------------------------------ Tercio@11: --> members Tercio@11: Tercio@11: --> shown Tercio@11: local gmember_shown = function (_object) Tercio@11: return _object:IsShown() Tercio@11: end Tercio@11: --> frame width Tercio@11: local gmember_width = function (_object) Tercio@11: return _object.label:GetStringWidth() Tercio@11: end Tercio@11: --> frame height Tercio@11: local gmember_height = function (_object) Tercio@11: return _object.label:GetStringHeight() Tercio@11: end Tercio@11: --> text Tercio@11: local gmember_text = function (_object) Tercio@11: return _object.label:GetText() Tercio@11: end Tercio@11: --> text color Tercio@11: local gmember_textcolor = function (_object) Tercio@11: return _object.label:GetTextColor() Tercio@11: end Tercio@11: --> text font Tercio@11: local gmember_textfont = function (_object) Tercio@11: local fontface = _object.label:GetFont() Tercio@11: return fontface Tercio@11: end Tercio@11: --> text size Tercio@11: local gmember_textsize = function (_object) Tercio@11: local _, fontsize = _object.label:GetFont() Tercio@11: return fontsize Tercio@11: end Tercio@11: Tercio@39: LabelMetaFunctions.GetMembers = LabelMetaFunctions.GetMembers or {} Tercio@39: LabelMetaFunctions.GetMembers ["shown"] = gmember_shown Tercio@39: LabelMetaFunctions.GetMembers ["width"] = gmember_width Tercio@39: LabelMetaFunctions.GetMembers ["height"] = gmember_height Tercio@39: LabelMetaFunctions.GetMembers ["text"] = gmember_text Tercio@39: LabelMetaFunctions.GetMembers ["fontcolor"] = gmember_textcolor Tercio@39: LabelMetaFunctions.GetMembers ["fontface"] = gmember_textfont Tercio@39: LabelMetaFunctions.GetMembers ["fontsize"] = gmember_textsize Tercio@39: LabelMetaFunctions.GetMembers ["textcolor"] = gmember_textcolor --alias Tercio@39: LabelMetaFunctions.GetMembers ["textfont"] = gmember_textfont --alias Tercio@39: LabelMetaFunctions.GetMembers ["textsize"] = gmember_textsize --alias Tercio@11: Tercio@11: LabelMetaFunctions.__index = function (_table, _member_requested) Tercio@11: Tercio@39: local func = LabelMetaFunctions.GetMembers [_member_requested] Tercio@11: if (func) then Tercio@11: return func (_table, _member_requested) Tercio@11: end Tercio@11: Tercio@11: local fromMe = _rawget (_table, _member_requested) Tercio@11: if (fromMe) then Tercio@11: return fromMe Tercio@11: end Tercio@11: Tercio@11: return LabelMetaFunctions [_member_requested] Tercio@11: end Tercio@11: Tercio@11: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Tercio@11: Tercio@11: --> show Tercio@11: local smember_show = function (_object, _value) Tercio@11: if (_value) then Tercio@11: return _object:Show() Tercio@11: else Tercio@11: return _object:Hide() Tercio@11: end Tercio@11: end Tercio@11: --> hide Tercio@11: local smember_hide = function (_object, _value) Tercio@11: if (not _value) then Tercio@11: return _object:Show() Tercio@11: else Tercio@11: return _object:Hide() Tercio@11: end Tercio@11: end Tercio@11: --> text Tercio@11: local smember_text = function (_object, _value) Tercio@11: return _object.label:SetText (_value) Tercio@11: end Tercio@11: --> text color Tercio@11: local smember_textcolor = function (_object, _value) Tercio@11: local _value1, _value2, _value3, _value4 = DF:ParseColors (_value) Tercio@11: return _object.label:SetTextColor (_value1, _value2, _value3, _value4) Tercio@11: end Tercio@11: --> text font Tercio@11: local smember_textfont = function (_object, _value) Tercio@11: return DF:SetFontFace (_object.label, _value) Tercio@11: end Tercio@11: --> text size Tercio@11: local smember_textsize = function (_object, _value) Tercio@11: return DF:SetFontSize (_object.label, _value) Tercio@11: end Tercio@11: --> text align Tercio@11: local smember_textalign = function (_object, _value) Tercio@11: if (_value == "<") then Tercio@11: _value = "left" Tercio@11: elseif (_value == ">") then Tercio@11: _value = "right" Tercio@11: elseif (_value == "|") then Tercio@11: _value = "center" Tercio@11: end Tercio@11: return _object.label:SetJustifyH (_value) Tercio@11: end Tercio@11: --> text valign Tercio@11: local smember_textvalign = function (_object, _value) Tercio@11: if (_value == "^") then Tercio@11: _value = "top" Tercio@11: elseif (_value == "_") then Tercio@11: _value = "bottom" Tercio@11: elseif (_value == "|") then Tercio@11: _value = "middle" Tercio@11: end Tercio@11: return _object.label:SetJustifyV (_value) Tercio@11: end Tercio@11: --> field size width Tercio@11: local smember_width = function (_object, _value) Tercio@11: return _object.label:SetWidth (_value) Tercio@11: end Tercio@11: --> field size height Tercio@11: local smember_height = function (_object, _value) Tercio@11: return _object.label:SetHeight (_value) Tercio@11: end Tercio@11: --> outline (shadow) Tercio@11: local smember_outline = function (_object, _value) Tercio@11: DF:SetFontOutline (_object.label, _value) Tercio@11: end Tercio@11: Tercio@39: LabelMetaFunctions.SetMembers = LabelMetaFunctions.SetMembers or {} Tercio@39: LabelMetaFunctions.SetMembers["show"] = smember_show Tercio@39: LabelMetaFunctions.SetMembers["hide"] = smember_hide Tercio@39: LabelMetaFunctions.SetMembers["align"] = smember_textalign Tercio@39: LabelMetaFunctions.SetMembers["valign"] = smember_textvalign Tercio@39: LabelMetaFunctions.SetMembers["text"] = smember_text Tercio@39: LabelMetaFunctions.SetMembers["width"] = smember_width Tercio@39: LabelMetaFunctions.SetMembers["height"] = smember_height Tercio@39: LabelMetaFunctions.SetMembers["fontcolor"] = smember_textcolor Tercio@39: LabelMetaFunctions.SetMembers["color"] = smember_textcolor--alias Tercio@39: LabelMetaFunctions.SetMembers["fontface"] = smember_textfont Tercio@39: LabelMetaFunctions.SetMembers["fontsize"] = smember_textsize Tercio@39: LabelMetaFunctions.SetMembers["textcolor"] = smember_textcolor--alias Tercio@39: LabelMetaFunctions.SetMembers["textfont"] = smember_textfont--alias Tercio@39: LabelMetaFunctions.SetMembers["textsize"] = smember_textsize--alias Tercio@39: LabelMetaFunctions.SetMembers["shadow"] = smember_outline Tercio@39: LabelMetaFunctions.SetMembers["outline"] = smember_outline--alias Tercio@11: Tercio@11: LabelMetaFunctions.__newindex = function (_table, _key, _value) Tercio@39: local func = LabelMetaFunctions.SetMembers [_key] Tercio@11: if (func) then Tercio@11: return func (_table, _value) Tercio@11: else Tercio@11: return _rawset (_table, _key, _value) Tercio@11: end Tercio@11: end Tercio@11: Tercio@11: ------------------------------------------------------------------------------------------------------------ Tercio@11: --> methods Tercio@11: Tercio@11: --> show & hide Tercio@11: function LabelMetaFunctions:IsShown() Tercio@11: return self.label:IsShown() Tercio@11: end Tercio@11: function LabelMetaFunctions:Show() Tercio@11: return self.label:Show() Tercio@11: end Tercio@11: function LabelMetaFunctions:Hide() Tercio@11: return self.label:Hide() Tercio@11: end Tercio@11: Tercio@11: -- textcolor Tercio@11: function LabelMetaFunctions:SetTextColor (color, arg2, arg3, arg4) Tercio@11: if (arg2) then Tercio@11: return self.label:SetTextColor (color, arg2, arg3, arg4 or 1) Tercio@11: end Tercio@11: local _value1, _value2, _value3, _value4 = DF:ParseColors (color) Tercio@11: return self.label:SetTextColor (_value1, _value2, _value3, _value4) Tercio@11: end Tercio@11: Tercio@11: -- setpoint Tercio@11: function LabelMetaFunctions:SetPoint (v1, v2, v3, v4, v5) Tercio@11: v1, v2, v3, v4, v5 = DF:CheckPoints (v1, v2, v3, v4, v5, self) Tercio@11: if (not v1) then Tercio@11: print ("Invalid parameter for SetPoint") Tercio@11: return Tercio@11: end Tercio@11: return self.widget:SetPoint (v1, v2, v3, v4, v5) Tercio@11: end Tercio@11: Tercio@11: ------------------------------------------------------------------------------------------------------------ Tercio@22: Tercio@22: function LabelMetaFunctions:SetTemplate (template) Tercio@22: if (template.size) then Tercio@22: DF:SetFontSize (self.label, template.size) Tercio@22: end Tercio@22: if (template.color) then Tercio@22: local r, g, b, a = DF:ParseColors (template.color) Tercio@22: self:SetTextColor (r, g, b, a) Tercio@22: end Tercio@22: if (template.font) then Tercio@22: local SharedMedia = LibStub:GetLibrary ("LibSharedMedia-3.0") Tercio@22: local font = SharedMedia:Fetch ("font", template.font) Tercio@22: DF:SetFontFace (self.label, font) Tercio@22: end Tercio@22: end Tercio@22: Tercio@22: ------------------------------------------------------------------------------------------------------------ Tercio@11: --> object constructor Tercio@11: function DF:CreateLabel (parent, text, size, color, font, member, name, layer) Tercio@11: return DF:NewLabel (parent, nil, name, member, text, font, size, color, layer) Tercio@11: end Tercio@11: Tercio@11: function DF:NewLabel (parent, container, name, member, text, font, size, color, layer) Tercio@11: Tercio@11: if (not parent) then Tercioo@29: return error ("Details! FrameWork: parent not found.", 2) Tercio@11: end Tercio@11: if (not container) then Tercio@11: container = parent Tercio@11: end Tercio@11: Tercio@11: if (not name) then Tercio@11: name = "DetailsFrameworkLabelNumber" .. DF.LabelNameCounter Tercio@11: DF.LabelNameCounter = DF.LabelNameCounter + 1 Tercio@11: end Tercio@11: Tercio@11: if (name:find ("$parent")) then Tercioo@29: local parentName = DF.GetParentName (parent) Tercioo@29: name = name:gsub ("$parent", parentName) Tercio@11: end Tercio@11: Tercio@11: local LabelObject = {type = "label", dframework = true} Tercio@11: Tercio@11: if (member) then Tercio@11: parent [member] = LabelObject Tercio@11: --container [member] = LabelObject.label Tercio@11: end Tercio@11: Tercio@11: if (parent.dframework) then Tercio@11: parent = parent.widget Tercio@11: end Tercio@11: if (container.dframework) then Tercio@11: container = container.widget Tercio@11: end Tercio@11: Tercio@11: font = font or "GameFontHighlightSmall" Tercio@11: Tercio@11: LabelObject.label = parent:CreateFontString (name, layer or "OVERLAY", font) Tercio@11: LabelObject.widget = LabelObject.label Tercio@11: Tercio@11: LabelObject.label.MyObject = LabelObject Tercio@11: Tercio@11: if (not APILabelFunctions) then Tercio@11: APILabelFunctions = true Tercio@11: local idx = getmetatable (LabelObject.label).__index Tercio@11: for funcName, funcAddress in pairs (idx) do Tercio@11: if (not LabelMetaFunctions [funcName]) then Tercio@11: LabelMetaFunctions [funcName] = function (object, ...) Tercio@20: local x = loadstring ( "return _G['"..object.label:GetName().."']:"..funcName.."(...)") Tercio@11: return x (...) Tercio@11: end Tercio@11: end Tercio@11: end Tercio@11: end Tercio@11: Tercio@11: LabelObject.label:SetText (text) Tercio@11: Tercio@11: if (color) then Tercio@11: local r, g, b, a = DF:ParseColors (color) Tercio@11: LabelObject.label:SetTextColor (r, g, b, a) Tercio@20: end Tercio@20: Tercio@20: if (size and type (size) == "number") then Tercio@20: DF:SetFontSize (LabelObject.label, size) Tercio@11: end Tercio@11: Tercio@39: LabelObject.HookList = { Tercio@39: } Tercio@20: Tercio@11: LabelObject.label:SetJustifyH ("LEFT") Tercio@11: Tercio@11: setmetatable (LabelObject, LabelMetaFunctions) Tercio@22: Tercio@22: if (size and type (size) == "table") then Tercio@22: LabelObject:SetTemplate (size) Tercio@22: end Tercio@11: Tercio@11: return LabelObject Tercio@58: end