You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

124 lines
3.2 KiB

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 APIHelpFunctions = false
local HelpMetaFunctions = {}
local get_members_function_index = {}
3 years ago
HelpMetaFunctions.__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 HelpMetaFunctions [_member_requested]
end
local set_members_function_index = {}
3 years ago
HelpMetaFunctions.__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
function HelpMetaFunctions:AddHelp (width, height, x, y, buttonX, buttonY, text, anchor)
self.helpTable [#self.helpTable + 1] = {
HighLightBox = {x = x, y = y, width = width, height = height},
ButtonPos = { x = buttonX, y = buttonY},
ToolTipDir = anchor or "RIGHT",
ToolTipText = text
}
end
function HelpMetaFunctions: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 HelpMetaFunctions:ShowHelp()
if (not HelpPlate_IsShowing (self.helpTable)) then
HelpPlate_Show (self.helpTable, self.frame, self.button, true)
else
HelpPlate_Hide (true)
end
end
local nameCounter = 1
function DF:NewHelp (parent, width, height, x, y, buttonWidth, buttonHeight, name)
local help = {}
if (parent.dframework) then
parent = parent.widget
end
local helpButton = CreateFrame ("button", name or "DetailsFrameworkHelpButton"..nameCounter, parent, "MainHelpPlateButton")
nameCounter = nameCounter + 1
if (not APIHelpFunctions) then
APIHelpFunctions = true
local idx = getmetatable (helpButton).__index
for funcName, funcAddress in pairs (idx) do
if (not HelpMetaFunctions [funcName]) then
3 years ago
HelpMetaFunctions [funcName] = function(object, ...)
local x = loadstring ( "return _G."..object.button:GetName()..":"..funcName.."(...)")
return x (...)
end
end
end
end
if (buttonWidth and buttonHeight) then
helpButton:SetWidth (buttonWidth)
helpButton:SetHeight (buttonHeight)
helpButton.I:SetWidth (buttonWidth*0.8)
helpButton.I:SetHeight (buttonHeight*0.8)
helpButton.Ring:SetWidth (buttonWidth)
helpButton.Ring:SetHeight (buttonHeight)
helpButton.Ring:SetPoint ("center", buttonWidth*.2, -buttonWidth*.2)
end
help.helpTable = {
FramePos = {x = x, y = y},
FrameSize = {width = width, height = height}
}
help.frame = parent
help.button = helpButton
help.widget = helpButton
help.I = helpButton.I
help.Ring = helpButton.Ring
helpButton:SetScript ("OnClick", function()
help:ShowHelp()
end)
setmetatable (help, HelpMetaFunctions)
return help
end