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.
349 lines
16 KiB
349 lines
16 KiB
|
|
local Details = Details
|
|
local DetailsFramework = _G.DetailsFramework
|
|
local GameCooltip2 = GameCooltip2
|
|
|
|
function Details:CreateAPI2Frame()
|
|
if (not _G.DetailsAPI2Frame or not _G.DetailsAPI2Frame.Initialized) then
|
|
|
|
--menu settings
|
|
|
|
_G.DetailsAPI2Frame.Initialized = true
|
|
|
|
local panelWidth = 800
|
|
local panelHeight = 610
|
|
local scrollWidth = 200
|
|
local scrollHeight = 570
|
|
local lineHeight = 20
|
|
local lineAmount = 27
|
|
local backdropColor = {.2, .2, .2, 0.2}
|
|
local backdropColorOnEnter = {.8, .8, .8, 0.4}
|
|
local backdropColorSelected = {1, 1, .8, 0.4}
|
|
local yStart = -30
|
|
local xAnchorPoint = 250
|
|
local parametersAmount = 10
|
|
local returnAmount = 10
|
|
|
|
--local Api2Frame = DetailsFramework:CreateSimplePanel (UIParent, panelWidth, panelHeight, "Details! API 2.0", "DetailsAPI2Frame")
|
|
local Api2Frame = _G.DetailsAPI2Frame
|
|
|
|
Api2Frame:SetFrameStrata ("FULLSCREEN")
|
|
Api2Frame:SetPoint ("center")
|
|
DetailsFramework:ApplyStandardBackdrop (Api2Frame, false, 1.2)
|
|
|
|
--store
|
|
local apiFunctionNames = {}
|
|
local parametersLines = {}
|
|
local returnLines = {}
|
|
local currentSelected = 1
|
|
|
|
local api = Details.API_Description.namespaces[1].api
|
|
|
|
--on select api on the menu
|
|
local onSelectAPI = function (self)
|
|
local apiName = apiFunctionNames [self.index]
|
|
if (not apiName) then
|
|
Details:Msg ("API name not found:", apiName)
|
|
return
|
|
end
|
|
|
|
--fill the box in the right with information about the API
|
|
local apiInfo = api [self.index]
|
|
if (not apiInfo) then
|
|
Details:Msg ("API information for api not found", apiName)
|
|
return
|
|
end
|
|
|
|
currentSelected = self.index
|
|
|
|
--update name and desc
|
|
Api2Frame.ApiFunctionName.text = apiName
|
|
Api2Frame.ApiFunctionDesc.text = apiInfo.desc
|
|
|
|
--update the copy line text box
|
|
local parameters = ""
|
|
for parameterIndex, parameterInfo in ipairs (apiInfo.parameters) do
|
|
if (parameterInfo.required) then
|
|
parameters = parameters .. parameterInfo.name .. ", "
|
|
end
|
|
end
|
|
parameters = parameters:gsub (", $", "")
|
|
|
|
local returnValues = "local "
|
|
for returnIndex, returnInfo in ipairs (apiInfo.returnValues) do
|
|
returnValues = returnValues .. returnInfo.name .. ", "
|
|
end
|
|
returnValues = returnValues:gsub (", $", "")
|
|
returnValues = returnValues .. " = "
|
|
|
|
if (parameters ~= "") then
|
|
Api2Frame.ApiCopy.text = returnValues .. "Details." .. apiName .. "( " .. parameters .. " )"
|
|
else
|
|
Api2Frame.ApiCopy.text = returnValues .. "Details." .. apiName .. "()"
|
|
end
|
|
|
|
Api2Frame.ApiCopy:SetFocus (true)
|
|
Api2Frame.ApiCopy:HighlightText()
|
|
|
|
--parameters
|
|
for i = 1, #parametersLines do
|
|
local parameterLine = parametersLines [i]
|
|
local parameterInfo = apiInfo.parameters [i]
|
|
|
|
if (parameterInfo) then
|
|
parameterLine:Show()
|
|
parameterLine.index = i
|
|
parameterLine.name.text = parameterInfo.name
|
|
parameterLine.typeData.text = parameterInfo.type
|
|
parameterLine.required.text = parameterInfo.required and "yes" or "no"
|
|
parameterLine.default.text = parameterInfo.default or ""
|
|
else
|
|
parameterLine:Hide()
|
|
end
|
|
end
|
|
|
|
--return values
|
|
for i = 1, #returnLines do
|
|
local returnLine = returnLines [i]
|
|
local returnInfo = apiInfo.returnValues [i]
|
|
|
|
if (returnInfo) then
|
|
returnLine:Show()
|
|
returnLine.index = i
|
|
returnLine.name.text = returnInfo.name
|
|
returnLine.typeData.text = returnInfo.type
|
|
returnLine.desc.text = returnInfo.desc
|
|
|
|
else
|
|
returnLine:Hide()
|
|
end
|
|
end
|
|
|
|
--refresh the scroll box
|
|
Api2Frame.scrollMenu:Refresh()
|
|
end
|
|
|
|
--menu scroll
|
|
local apiMenuScrollRefresh = function (self, data, offset, total_lines)
|
|
for i = 1, total_lines do
|
|
local index = i + offset
|
|
local apiName = data [index]
|
|
if (apiName) then
|
|
local line = self:GetLine (i)
|
|
line.text:SetText (apiName)
|
|
line.index = index
|
|
|
|
if (currentSelected == index) then
|
|
line:SetBackdropColor (unpack (backdropColorSelected))
|
|
else
|
|
line:SetBackdropColor (unpack (backdropColor))
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
for apiIndex, apiDesc in ipairs (api) do
|
|
tinsert (apiFunctionNames, apiDesc.name)
|
|
end
|
|
|
|
local api2ScrollMenu = DetailsFramework:CreateScrollBox (Api2Frame, "$parentApi2MenuScroll", apiMenuScrollRefresh, apiFunctionNames, scrollWidth, scrollHeight, lineAmount, lineHeight)
|
|
DetailsFramework:ReskinSlider (api2ScrollMenu)
|
|
api2ScrollMenu:SetPoint ("topleft", Api2Frame, "topleft", 10, yStart)
|
|
Api2Frame.scrollMenu = api2ScrollMenu
|
|
|
|
local lineOnEnter = function (self)
|
|
self:SetBackdropColor (unpack (backdropColorOnEnter))
|
|
|
|
local apiName = apiFunctionNames [self.index]
|
|
if (not apiName) then
|
|
return
|
|
end
|
|
|
|
--fill the box in the right with information about the API
|
|
local apiInfo = api [self.index]
|
|
if (not apiInfo) then
|
|
return
|
|
end
|
|
|
|
GameCooltip2:Preset(2)
|
|
GameCooltip2:SetOwner (self, "left", "right", 2, 0)
|
|
GameCooltip2:AddLine (apiInfo.desc)
|
|
GameCooltip2:ShowCooltip()
|
|
end
|
|
|
|
local lineOnLeave = function (self)
|
|
if (currentSelected == self.index) then
|
|
self:SetBackdropColor (unpack (backdropColorSelected))
|
|
else
|
|
self:SetBackdropColor (unpack (backdropColor))
|
|
end
|
|
|
|
GameCooltip2:Hide()
|
|
end
|
|
|
|
--create lines
|
|
for i = 1, lineAmount do
|
|
api2ScrollMenu:CreateLine (function (self, index)
|
|
local line = CreateFrame ("button", "$parentLine" .. index, self, "BackdropTemplate")
|
|
line:SetPoint ("topleft", self, "topleft", 1, -((index-1)*(lineHeight+1)) - 1)
|
|
line:SetSize (scrollWidth - 2, lineHeight)
|
|
line.index = index
|
|
|
|
line:SetScript ("OnEnter", lineOnEnter)
|
|
line:SetScript ("OnLeave", lineOnLeave)
|
|
|
|
line:SetBackdrop ({bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true})
|
|
line:SetBackdropColor (unpack (backdropColor))
|
|
|
|
line.text = DetailsFramework:CreateLabel (line)
|
|
line.text:SetPoint ("left", line, "left", 2, 0)
|
|
|
|
line:SetScript ("OnMouseDown", onSelectAPI)
|
|
|
|
return line
|
|
end)
|
|
end
|
|
|
|
--info box
|
|
local infoWidth = panelWidth - xAnchorPoint - 10
|
|
--api name
|
|
Api2Frame.ApiFunctionName = DetailsFramework:CreateLabel (Api2Frame, "", 14, "orange")
|
|
Api2Frame.ApiFunctionName:SetPoint ("topleft", Api2Frame, "topleft", xAnchorPoint, yStart)
|
|
--api desc
|
|
Api2Frame.ApiFunctionDesc = DetailsFramework:CreateLabel (Api2Frame)
|
|
Api2Frame.ApiFunctionDesc:SetPoint ("topleft", Api2Frame.ApiFunctionName, "bottomleft", 0, -2)
|
|
Api2Frame.ApiFunctionDesc.width = infoWidth
|
|
Api2Frame.ApiFunctionDesc.height = 22
|
|
Api2Frame.ApiFunctionDesc.valign = "top"
|
|
|
|
--api func to copy
|
|
local apiCopyString = DetailsFramework:CreateLabel (Api2Frame, "Copy String", 12, "orange")
|
|
apiCopyString:SetPoint ("topleft", Api2Frame.ApiFunctionDesc, "bottomleft", 0, -20)
|
|
Api2Frame.ApiCopy = DetailsFramework:CreateTextEntry (Api2Frame, function() end, infoWidth, 20)
|
|
Api2Frame.ApiCopy:SetPoint ("topleft", apiCopyString, "bottomleft", 0, -2)
|
|
Api2Frame.ApiCopy:SetTemplate (DetailsFramework:GetTemplate ("button", "DETAILS_CUSTOMDISPLAY_CODE_BOX"))
|
|
|
|
--parameters
|
|
local parametersYStart = yStart - 110
|
|
local parametersString = DetailsFramework:CreateLabel (Api2Frame, "Parameters", 12, "orange")
|
|
parametersString:SetPoint ("topleft", Api2Frame, "topleft", xAnchorPoint, parametersYStart)
|
|
|
|
parametersYStart = parametersYStart - 20
|
|
|
|
local space1, space2, space3 = 150, 300, 450
|
|
local parametersHeader = CreateFrame ("frame", nil, Api2Frame, "BackdropTemplate")
|
|
parametersHeader:SetSize (infoWidth, 20)
|
|
parametersHeader:SetPoint ("topleft", Api2Frame, "topleft", xAnchorPoint, parametersYStart)
|
|
parametersHeader:SetBackdrop ({bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true})
|
|
parametersHeader:SetBackdropColor (unpack (backdropColor))
|
|
parametersHeader.name = DetailsFramework:CreateLabel (parametersHeader, "Name", 12, "yellow")
|
|
parametersHeader.typeData = DetailsFramework:CreateLabel (parametersHeader, "Type", 12, "yellow")
|
|
parametersHeader.required = DetailsFramework:CreateLabel (parametersHeader, "Is Required", 12, "yellow")
|
|
parametersHeader.default = DetailsFramework:CreateLabel (parametersHeader, "Default Value", 12, "yellow")
|
|
parametersHeader.name:SetPoint ("left", parametersHeader, "left", 2, 0)
|
|
parametersHeader.typeData:SetPoint ("left", parametersHeader, "left", space1, 0)
|
|
parametersHeader.required:SetPoint ("left", parametersHeader, "left", space2, 0)
|
|
parametersHeader.default:SetPoint ("left", parametersHeader, "left", space3, 0)
|
|
|
|
local parameterOnEnter = function (self)
|
|
GameCooltip2:Preset(2)
|
|
GameCooltip2:SetOwner (self)
|
|
|
|
--fill the box in the right with information about the API
|
|
local apiInfo = api [currentSelected]
|
|
if (not apiInfo) then
|
|
return
|
|
end
|
|
GameCooltip2:AddLine (apiInfo.parameters [self.index].desc)
|
|
GameCooltip2:ShowCooltip()
|
|
|
|
self:SetBackdropColor (unpack (backdropColorOnEnter))
|
|
end
|
|
local parameterOnLeave = function (self)
|
|
GameCooltip2:Hide()
|
|
self:SetBackdropColor (unpack (backdropColor))
|
|
end
|
|
|
|
for i = 1, parametersAmount do
|
|
local parameterLine = {}
|
|
local f = CreateFrame ("frame", nil, Api2Frame, "BackdropTemplate")
|
|
f:SetSize (infoWidth, 20)
|
|
f:SetScript ("OnEnter", parameterOnEnter)
|
|
f:SetScript ("OnLeave", parameterOnLeave)
|
|
f:SetBackdrop ({bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true})
|
|
f:SetBackdropColor (unpack (backdropColor))
|
|
f:Hide()
|
|
|
|
f.name = DetailsFramework:CreateLabel (f)
|
|
f.typeData = DetailsFramework:CreateLabel (f)
|
|
f.required = DetailsFramework:CreateLabel (f)
|
|
f.default = DetailsFramework:CreateLabel (f)
|
|
|
|
f:SetPoint ("topleft", Api2Frame, "topleft", xAnchorPoint, parametersYStart + (-i * 20))
|
|
|
|
f.name:SetPoint ("left", f, "left", 2, 0)
|
|
f.typeData:SetPoint ("left", f, "left", space1, 0)
|
|
f.required:SetPoint ("left", f, "left", space2, 0)
|
|
f.default:SetPoint ("left", f, "left", space3, 0)
|
|
|
|
tinsert (parametersLines, f)
|
|
end
|
|
|
|
--return value box
|
|
local returnYStart = yStart - 260
|
|
local returnString = DetailsFramework:CreateLabel (Api2Frame, "Return Values", 12, "orange")
|
|
returnString:SetPoint ("topleft", Api2Frame, "topleft", xAnchorPoint, returnYStart)
|
|
|
|
returnYStart = returnYStart - 20
|
|
|
|
local space1 = 200
|
|
local returnHeader = CreateFrame ("frame", nil, Api2Frame, "BackdropTemplate")
|
|
returnHeader:SetSize (infoWidth, 20)
|
|
returnHeader:SetPoint ("topleft", Api2Frame, "topleft", xAnchorPoint, returnYStart)
|
|
returnHeader:SetBackdrop ({bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true})
|
|
returnHeader:SetBackdropColor (unpack (backdropColor))
|
|
returnHeader.name = DetailsFramework:CreateLabel (returnHeader, "Name", 12, "yellow")
|
|
returnHeader.typeData = DetailsFramework:CreateLabel (returnHeader, "Type", 12, "yellow")
|
|
returnHeader.name:SetPoint ("left", returnHeader, "left", 2, 0)
|
|
returnHeader.typeData:SetPoint ("left", returnHeader, "left", space1, 0)
|
|
|
|
local returnOnEnter = function (self)
|
|
self:SetBackdropColor (unpack (backdropColorOnEnter))
|
|
end
|
|
local returnOnLeave = function (self)
|
|
self:SetBackdropColor (unpack (backdropColor))
|
|
end
|
|
|
|
for i = 1, returnAmount do
|
|
local parameterLine = {}
|
|
local f = CreateFrame ("frame", nil, Api2Frame, "BackdropTemplate")
|
|
f:SetSize (infoWidth, 20)
|
|
f:SetScript ("OnEnter", returnOnEnter)
|
|
f:SetScript ("OnLeave", returnOnLeave)
|
|
f:SetBackdrop ({bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true})
|
|
f:SetBackdropColor (unpack (backdropColor))
|
|
f:Hide()
|
|
|
|
f.name = DetailsFramework:CreateLabel (f)
|
|
f.typeData = DetailsFramework:CreateLabel (f)
|
|
|
|
f.desc = DetailsFramework:CreateLabel (f, "", 10, "gray")
|
|
f.desc.width = infoWidth
|
|
f.desc.height = 60
|
|
f.desc.valign = "top"
|
|
|
|
f:SetPoint ("topleft", Api2Frame, "topleft", xAnchorPoint, returnYStart + (-i * 20))
|
|
|
|
f.name:SetPoint ("left", f, "left", 2, 0)
|
|
f.typeData:SetPoint ("left", f, "left", space1, 0)
|
|
|
|
f.desc:SetPoint ("topleft", f.name, "bottomleft", 0, -5)
|
|
|
|
tinsert (returnLines, f)
|
|
end
|
|
|
|
function Api2Frame.Refresh()
|
|
onSelectAPI (api2ScrollMenu.Frames [1])
|
|
end
|
|
end
|
|
end
|
|
|