forked from phuein/UserScripts
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpanel.lua
More file actions
132 lines (113 loc) · 4.63 KB
/
Copy pathpanel.lua
File metadata and controls
132 lines (113 loc) · 4.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
--[[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)
keywords = "settings", --(optional) additional keywords for search filter (it looks for matches in name..keywords..author)
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 = 9
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
if updateControl.UpdateValue then
updateControl:UpdateValue()
end
if updateControl.UpdateDisabled then
updateControl:UpdateDisabled()
end
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
cm:FireCallbacks("LAM-RefreshPanel", panel)
end
ESO_Dialogs["LAM_DEFAULTS"] = {
title = {
text = SI_INTERFACE_OPTIONS_RESET_TO_DEFAULT_TOOLTIP,
},
mainText = {
text = SI_OPTIONS_RESET_PROMPT,
align = TEXT_ALIGN_CENTER,
},
buttons = {
[1] = {
text = SI_OPTIONS_RESET,
callback = function(dialog) ForceDefaults(dialog.data[1]) end,
},
[2] = {
text = SI_DIALOG_CANCEL,
},
},
}
local callbackRegistered = false
LAMCreateControl.scrollCount = LAMCreateControl.scrollCount or 1
function LAMCreateControl.panel(parent, panelData, controlName)
local control = wm:CreateControl(controlName, parent, CT_CONTROL)
control.label = wm:CreateControlFromVirtual(nil, control, "ZO_Options_SectionTitleLabel")
local label = control.label
label:SetAnchor(TOPLEFT, control, TOPLEFT, 0, 4)
label:SetText(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("$(CHAT_FONT)|14|soft-shadow-thin")
info:SetAnchor(TOPLEFT, label, BOTTOMLEFT, 0, -2)
if panelData.author and panelData.version then
info:SetText(string.format("Version: %s - %s: %s", panelData.version, GetString(SI_ADDON_MANAGER_AUTHOR), panelData.author))
elseif panelData.author then
info:SetText(string.format("%s: %s", GetString(SI_ADDON_MANAGER_AUTHOR), panelData.author))
else
info:SetText("Version: "..panelData.version)
end
end
control.container = wm:CreateControlFromVirtual("LAMAddonPanelContainer"..LAMCreateControl.scrollCount, control, "ZO_ScrollContainer")
LAMCreateControl.scrollCount = LAMCreateControl.scrollCount + 1
local container = control.container
container:SetAnchor(TOPLEFT, control.info or 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:SetText(GetString(SI_OPTIONS_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 and not callbackRegistered then --don't want to register our callback more than once
cm:RegisterCallback("LAM-RefreshPanel", RefreshPanel)
callbackRegistered = true
end
control.data = panelData
control.controlsToRefresh = {}
return control
end
-- vi: noexpandtab