local DF = _G ["DetailsFramework"] if (not DF or not DetailsFrameworkCanLoad) then return end 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 do local metaPrototype = { WidgetType = "label", SetHook = DF.SetHook, RunHooksForWidget = DF.RunHooksForWidget, dversion = DF.dversion, } --check if there's a metaPrototype already existing if (_G[DF.GlobalWidgetControlNames["label"]]) then --get the already existing metaPrototype local oldMetaPrototype = _G[DF.GlobalWidgetControlNames ["label"]] --check if is older if ( (not oldMetaPrototype.dversion) or (oldMetaPrototype.dversion < DF.dversion) ) then --the version is older them the currently loading one --copy the new values into the old metatable for funcName, _ in pairs(metaPrototype) do oldMetaPrototype[funcName] = metaPrototype[funcName] end end else --first time loading the framework _G[DF.GlobalWidgetControlNames ["label"]] = metaPrototype end end local LabelMetaFunctions = _G[DF.GlobalWidgetControlNames ["label"]] ------------------------------------------------------------------------------------------------------------ --> 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 LabelMetaFunctions.GetMembers = LabelMetaFunctions.GetMembers or {} LabelMetaFunctions.GetMembers ["shown"] = gmember_shown LabelMetaFunctions.GetMembers ["width"] = gmember_width LabelMetaFunctions.GetMembers ["height"] = gmember_height LabelMetaFunctions.GetMembers ["text"] = gmember_text LabelMetaFunctions.GetMembers ["fontcolor"] = gmember_textcolor LabelMetaFunctions.GetMembers ["fontface"] = gmember_textfont LabelMetaFunctions.GetMembers ["fontsize"] = gmember_textsize LabelMetaFunctions.GetMembers ["textcolor"] = gmember_textcolor --alias LabelMetaFunctions.GetMembers ["textfont"] = gmember_textfont --alias LabelMetaFunctions.GetMembers ["textsize"] = gmember_textsize --alias LabelMetaFunctions.__index = function (_table, _member_requested) local func = LabelMetaFunctions.GetMembers [_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 LabelMetaFunctions.SetMembers = LabelMetaFunctions.SetMembers or {} LabelMetaFunctions.SetMembers["show"] = smember_show LabelMetaFunctions.SetMembers["hide"] = smember_hide LabelMetaFunctions.SetMembers["align"] = smember_textalign LabelMetaFunctions.SetMembers["valign"] = smember_textvalign LabelMetaFunctions.SetMembers["text"] = smember_text LabelMetaFunctions.SetMembers["width"] = smember_width LabelMetaFunctions.SetMembers["height"] = smember_height LabelMetaFunctions.SetMembers["fontcolor"] = smember_textcolor LabelMetaFunctions.SetMembers["color"] = smember_textcolor--alias LabelMetaFunctions.SetMembers["fontface"] = smember_textfont LabelMetaFunctions.SetMembers["fontsize"] = smember_textsize LabelMetaFunctions.SetMembers["textcolor"] = smember_textcolor--alias LabelMetaFunctions.SetMembers["textfont"] = smember_textfont--alias LabelMetaFunctions.SetMembers["textsize"] = smember_textsize--alias LabelMetaFunctions.SetMembers["shadow"] = smember_outline LabelMetaFunctions.SetMembers["outline"] = smember_outline--alias LabelMetaFunctions.__newindex = function (_table, _key, _value) local func = LabelMetaFunctions.SetMembers [_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 --text text function LabelMetaFunctions:SetTextTruncated (text, maxWidth) self.widget:SetText (text) DF:TruncateText (self.widget, maxWidth) 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 ------------------------------------------------------------------------------------------------------------ function LabelMetaFunctions:SetTemplate (template) if (template.size) then DF:SetFontSize (self.label, template.size) end if (template.color) then local r, g, b, a = DF:ParseColors (template.color) self:SetTextColor (r, g, b, a) end if (template.font) then local SharedMedia = LibStub:GetLibrary ("LibSharedMedia-3.0") local font = SharedMedia:Fetch ("font", template.font) DF:SetFontFace (self.label, font) end 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 error ("Details! FrameWork: parent not found.", 2) 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 parentName = DF.GetParentName (parent) name = name:gsub ("$parent", parentName) 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 == "" and "GameFontHighlightSmall" or 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 (color) then local r, g, b, a = DF:ParseColors (color) LabelObject.label:SetTextColor (r, g, b, a) end if (size and type (size) == "number") then DF:SetFontSize (LabelObject.label, size) end LabelObject.HookList = { } LabelObject.label:SetJustifyH ("LEFT") setmetatable (LabelObject, LabelMetaFunctions) if (size and type (size) == "table") then LabelObject:SetTemplate (size) end return LabelObject end