Compare with Previous | Blame | View Log
--[[panelData = {
type = "panel",
name = "Window Title",
displayName = "My Longer Window Title", --(optional) (can be useful for long addon names or if you want to colorize it)
author = "Seerah", --(optional)
version = "2.0", --(optional)
slashCommand = "/myaddon", --(optional) will register a keybind to open to this panel (don't forget to include the slash!)
registerForRefresh = true, --boolean (optional) (will refresh all options controls when a setting is changed and when the panel is shown)
registerForDefaults = true, --boolean (optional) (will set all options controls back to default values)
resetFunc = function() print("defaults reset") end, --(optional) custom function to run after settings are reset to defaults
} ]]
local widgetVersion = 2
local LAM = LibStub("LibAddonMenu-2.0")
if not LAM:RegisterWidget("panel", widgetVersion) then return end
local wm = WINDOW_MANAGER
local cm = CALLBACK_MANAGER
local function RefreshPanel(control)
local panel = control.panel or control --callback can be fired by a single control or by the panel showing
local panelControls = panel.controlsToRefresh
for i = 1, #panelControls do
local updateControl = panelControls[i]
if updateControl == control then return end
if updateControl.UpdateValue then
updateControl:UpdateValue()
end
if updateControl.UpdateDisabled then
updateControl:UpdateDisabled()
end
end
end
local function ForceDefaults(panel)
local panelControls = panel.controlsToRefresh
for i = 1, #panelControls do
local updateControl = panelControls[i]
if updateControl.UpdateValue and updateControl.data.default ~= nil then
updateControl:UpdateValue(true)
end
end
if panel.data.resetFunc then
panel.data.resetFunc()
end
end
ESO_Dialogs["LAM_DEFAULTS"] = {
title = {
text = "Reset To Defaults",
},
mainText = {
text = "Reset this addon's settings to their default values?",
align = TEXT_ALIGN_CENTER,
},
buttons = {
[1] = {
text = SI_OPTIONS_RESET,
callback = function(dialog) ForceDefaults(dialog.data[1]) end,
},
[2] = {
text = SI_DIALOG_CANCEL,
},
},
}
local scrollCount = 1
function LAMCreateControl.panel(parent, panelData, controlName)
local control = wm:CreateTopLevelWindow(controlName)
control:SetParent(parent)
control.bg = wm:CreateControl(nil, control, CT_BACKDROP)
local bg = control.bg
bg:SetAnchorFill()
bg:SetEdgeTexture("EsoUI\\Art\\Tooltips\\UI-Border.dds", 128, 16)
bg:SetCenterColor(0, 0, 0, 0)
control.label = wm:CreateControlFromVirtual(nil, control, "ZO_Options_SectionTitleLabel")
local label = control.label
label:SetAnchor(TOPLEFT, control, TOPLEFT, 10, 10)
label:SetText(panelData.displayName and panelData.displayName or panelData.name)
if panelData.author or panelData.version then
control.info = wm:CreateControl(nil, control, CT_LABEL)
local info = control.info
--info:SetFont("ZoFontGameSmall")
info:SetFont("$(CHAT_FONT)|14|soft-shadow-thin")
info:SetColor(ZO_HIGHLIGHT_TEXT:UnpackRGBA())
info:SetHeight(13)
info:SetAnchor(TOPRIGHT, control, BOTTOMRIGHT, -5, 2)
if panelData.author and panelData.version then
info:SetText("Version: "..panelData.version.." - Author: "..panelData.author)
elseif panelData.author then
info:SetText("Author: "..panelData.author)
else
info:SetText("Version: "..panelData.version)
end
end
control.container = wm:CreateControlFromVirtual("LAMAddonPanelContainer"..scrollCount, control, "ZO_ScrollContainer")
scrollCount = scrollCount + 1
local container = control.container
container:SetAnchor(TOPLEFT, label, BOTTOMLEFT, 0, 20)
container:SetAnchor(BOTTOMRIGHT, control, BOTTOMRIGHT, -3, -3)
control.scroll = GetControl(control.container, "ScrollChild")
control.scroll:SetResizeToFitPadding(0, 20)
if panelData.registerForDefaults then
control.defaultButton = wm:CreateControlFromVirtual(nil, control, "ZO_DefaultTextButton")
local defaultButton = control.defaultButton
defaultButton:SetFont("ZoFontDialogKeybindDescription")
defaultButton:SetHorizontalAlignment(TEXT_ALIGN_LEFT)
defaultButton:SetText("Reset To Defaults")
defaultButton:SetDimensions(200, 30)
defaultButton:SetAnchor(TOPLEFT, control, BOTTOMLEFT, 0, 2)
defaultButton:SetHandler("OnClicked", function()
ZO_Dialogs_ShowDialog("LAM_DEFAULTS", {control})
end)
end
if panelData.registerForRefresh then
cm:RegisterCallback("LAM-RefreshPanel", RefreshPanel)
end
control.data = panelData
control.controlsToRefresh = {}
return control
end