ESOUI SVN ZAMUnitFramesReactionColors

[/] [trunk/] [ZAM_ReactionColors/] [libs/] [LibAddonMenu-1.0/] [LibAddonMenu-1.0.lua] - Blame information for rev 2

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 Seerah-7
local MAJOR, MINOR = "LibAddonMenu-1.0", 2
2 Seerah-7
local lam, oldminor = LibStub:NewLibrary(MAJOR, MINOR)
3 Seerah-7
if not lam then return end      --the same or newer version of this lib is already loaded into memory
4 Seerah-7
 
5 Seerah-7
--UPVALUES--
6 Seerah-7
lam.lastAddedControl = {}
7 Seerah-7
local lastAddedControl = lam.lastAddedControl
8 Seerah-7
local wm = GetWindowManager()
9 Seerah-7
local strformat = string.format
10 Seerah-7
local tostring = tostring
11 Seerah-7
local round = zo_round
12 Seerah-7
local optionsWindow = ZO_OptionsWindowSettingsScrollChild
13 Seerah-7
 
14 Seerah-7
 
15 Seerah-7
function lam:CreateControlPanel(controlPanelID, controlPanelName)
16 Seerah-7
        local panelID
17 Seerah-7
 
18 Seerah-7
        if _G[controlPanelID] then
19 Seerah-7
                panelID = _G[controlPanelID]
20 Seerah-7
                return panelID
21 Seerah-7
        end
22 Seerah-7
 
23 Seerah-7
        ZO_OptionsWindow_AddUserPanel(controlPanelID, controlPanelName)
24 Seerah-7
 
25 Seerah-7
        --disables Defaults button because we don't need it, but keybind still works :/ ...
26 Seerah-7
        panelID = _G[controlPanelID]
27 Seerah-7
        ZO_PreHook("ZO_OptionsWindow_ChangePanels", function(panel)
28 Seerah-7
                        local enable = (panel ~=  panelID)
29 Seerah-7
                        ZO_OptionsWindowResetToDefaultButton:SetEnabled(enable)
30 Seerah-7
                        ZO_OptionsWindowResetToDefaultButton:SetKeybindEnabled(enable)
31 Seerah-7
                end)
32 Seerah-7
 
33 Seerah-7
        return panelID
34 Seerah-7
end
35 Seerah-7
 
36 Seerah-7
function lam:AddHeader(panelID, controlName, text)
37 Seerah-7
        local header = wm:CreateControlFromVirtual(controlName, optionsWindow, lastAddedControl[panelID] and "ZO_Options_SectionTitle_WithDivider" or "ZO_Options_SectionTitle")
38 Seerah-7
        if lastAddedControl[panelID] then
39 Seerah-7
                header:SetAnchor(TOPLEFT, lastAddedControl[panelID], BOTTOMLEFT, 0, 15)
40 Seerah-7
        else
41 Seerah-7
                header:SetAnchor(TOPLEFT)
42 Seerah-7
        end
43 Seerah-7
        header.controlType = OPTIONS_SECTION_TITLE
44 Seerah-7
        header.panel = panelID
45 Seerah-7
        header.text = text
46 Seerah-7
 
47 Seerah-7
        ZO_OptionsWindow_InitializeControl(header)
48 Seerah-7
 
49 Seerah-7
        lastAddedControl[panelID] = header
50 Seerah-7
end
51 Seerah-7
 
52 Seerah-7
 
53 Seerah-7
--To-Do list:
54 Seerah-7
--extra sub-options window out to the right?? (or maybe addon list?)
55 Seerah-7
--find alternatives to handler hooks
56 Seerah-7
 
57 Seerah-7
function lam:AddSlider(panelID, controlName, text, tooltip, minValue, maxValue, step, getFunc, setFunc, warning, warningText)
58 Seerah-7
        local slider = wm:CreateControlFromVirtual(controlName, optionsWindow, "ZO_Options_Slider")
59 Seerah-7
        slider:SetAnchor(TOPLEFT, lastAddedControl[panelID], BOTTOMLEFT, 0, 6)
60 Seerah-7
        slider.controlType = OPTIONS_SLIDER
61 Seerah-7
        slider.system = SETTING_TYPE_UI
62 Seerah-7
        slider.panel = panelID
63 Seerah-7
        slider.text = text
64 Seerah-7
        slider.tooltipText = tooltip
65 Seerah-7
        slider.showValue = true
66 Seerah-7
        slider.showValueMin = minValue
67 Seerah-7
        slider.showValueMax = maxValue
68 Seerah-7
        local range = maxValue - minValue
69 Seerah-7
        local slidercontrol = slider:GetNamedChild("Slider")
70 Seerah-7
        local slidervalue = slider:GetNamedChild("ValueLabel")
71 Seerah-7
        slidercontrol:SetValueStep(1/range * step)
72 Seerah-7
        slider:SetHandler("OnShow", function()
73 Seerah-7
                        local curValue = getFunc()
74 Seerah-7
                        slidercontrol:SetValue((curValue - minValue)/range)
75 Seerah-7
                        slidervalue:SetText(tostring(curValue))
76 Seerah-7
                end)
77 Seerah-7
        slidercontrol:SetHandler("OnValueChanged", function (self, value)
78 Seerah-7
                        self:SetValue(value)
79 Seerah-7
                        value = round(value*range + minValue)
80 Seerah-7
                        slidervalue:SetText(strformat("%d", value))
81 Seerah-7
                end)
82 Seerah-7
        slidercontrol:SetHandler("OnSliderReleased", function(self, value)
83 Seerah-7
                        value = round(value*range + minValue)
84 Seerah-7
                        setFunc(value)
85 Seerah-7
                end)
86 Seerah-7
 
87 Seerah-7
        if warning then
88 Seerah-7
                slider.warning = wm:CreateControlFromVirtual(controlName.."WarningIcon", slider, "ZO_Options_WarningIcon")
89 Seerah-7
                slider.warning:SetAnchor(RIGHT, slidercontrol, LEFT, -5, 0)
90 Seerah-7
                slider.warning.tooltipText = warningText
91 Seerah-7
        end
92 Seerah-7
 
93 Seerah-7
        ZO_OptionsWindow_InitializeControl(slider)
94 Seerah-7
 
95 Seerah-7
        lastAddedControl[panelID] = slider
96 Seerah-7
end
97 Seerah-7
 
98 Seerah-7
function lam:AddDropdown(panelID, controlName, text, tooltip, validChoices, getFunc, setFunc, warning, warningText)
99 Seerah-7
        local dropdown = wm:CreateControlFromVirtual(controlName, optionsWindow, "ZO_Options_Dropdown")
100 Seerah-7
        dropdown:SetAnchor(TOPLEFT, lastAddedControl[panelID], BOTTOMLEFT, 0, 6)
101 Seerah-7
        dropdown.controlType = OPTIONS_DROPDOWN
102 Seerah-7
        dropdown.system = SETTING_TYPE_UI
103 Seerah-7
        dropdown.panel = panelID
104 Seerah-7
        dropdown.text = text
105 Seerah-7
        dropdown.tooltipText = tooltip
106 Seerah-7
        dropdown.valid = validChoices
107 Seerah-7
        local dropmenu = ZO_ComboBox_ObjectFromContainer(GetControl(dropdown, "Dropdown"))
108 Seerah-7
        local setText = dropmenu.m_selectedItemText.SetText
109 Seerah-7
        local selectedName
110 Seerah-7
        ZO_PreHookHandler(dropmenu.m_selectedItemText, "OnTextChanged", function(self)
111 Seerah-7
                        if dropmenu.m_selectedItemData then
112 Seerah-7
                                selectedName = dropmenu.m_selectedItemData.name
113 Seerah-7
                                setText(self, selectedName)
114 Seerah-7
                                setFunc(selectedName)
115 Seerah-7
                        end
116 Seerah-7
                end)
117 Seerah-7
        dropdown:SetHandler("OnShow", function()
118 Seerah-7
                        dropmenu:SetSelectedItem(getFunc())
119 Seerah-7
                end)
120 Seerah-7
 
121 Seerah-7
        if warning then
122 Seerah-7
                dropdown.warning = wm:CreateControlFromVirtual(controlName.."WarningIcon", dropdown, "ZO_Options_WarningIcon")
123 Seerah-7
                dropdown.warning:SetAnchor(RIGHT, dropdown:GetNamedChild("Dropdown"), LEFT, -5, 0)
124 Seerah-7
                dropdown.warning.tooltipText = warningText
125 Seerah-7
        end
126 Seerah-7
 
127 Seerah-7
        ZO_OptionsWindow_InitializeControl(dropdown)
128 Seerah-7
 
129 Seerah-7
        lastAddedControl[panelID] = dropdown
130 Seerah-7
end
131 Seerah-7
 
132 Seerah-7
function lam:AddCheckbox(panelID, controlName, text, tooltip, getFunc, setFunc, warning, warningText)
133 Seerah-7
        local checkbox = wm:CreateControlFromVirtual(controlName, optionsWindow, "ZO_Options_Checkbox")
134 Seerah-7
        checkbox:SetAnchor(TOPLEFT, lastAddedControl[panelID], BOTTOMLEFT, 0, 6)
135 Seerah-7
        checkbox.controlType = OPTIONS_CHECKBOX
136 Seerah-7
        checkbox.system = SETTING_TYPE_UI
137 Seerah-7
        checkbox.settingId = _G[strformat("SETTING_%s", controlName)]
138 Seerah-7
        checkbox.panel = panelID
139 Seerah-7
        checkbox.text = text
140 Seerah-7
        checkbox.tooltipText = tooltip
141 Seerah-7
 
142 Seerah-7
        local checkboxButton = checkbox:GetNamedChild("Checkbox")
143 Seerah-7
 
144 Seerah-7
        ZO_PreHookHandler(checkbox, "OnShow", function()
145 Seerah-7
                        checkboxButton:SetState(getFunc() and 1 or 0)
146 Seerah-7
                        checkboxButton:toggleFunction(getFunc())
147 Seerah-7
                end)
148 Seerah-7
        ZO_PreHookHandler(checkboxButton, "OnClicked", function() setFunc(not getFunc()) end)
149 Seerah-7
 
150 Seerah-7
        if warning then
151 Seerah-7
                checkbox.warning = wm:CreateControlFromVirtual(controlName.."WarningIcon", checkbox, "ZO_Options_WarningIcon")
152 Seerah-7
                checkbox.warning:SetAnchor(RIGHT, checkboxButton, LEFT, -5, 0)
153 Seerah-7
                checkbox.warning.tooltipText = warningText
154 Seerah-7
        end
155 Seerah-7
 
156 Seerah-7
        ZO_OptionsWindow_InitializeControl(checkbox)
157 Seerah-7
 
158 Seerah-7
        lastAddedControl[panelID] = checkbox
159 Seerah-7
end
160 Seerah-7
 
161 Seerah-7
function lam:AddColorPicker(panelID, controlName, text, tooltip, getFunc, setFunc, warning, warningText)
162 Seerah-7
        local colorpicker = wm:CreateTopLevelWindow(controlName)
163 Seerah-7
        colorpicker:SetParent(optionsWindow)
164 Seerah-7
        colorpicker:SetAnchor(TOPLEFT, lastAddedControl[panelID], BOTTOMLEFT, 0, 10)
165 Seerah-7
        colorpicker:SetResizeToFitDescendents(true)
166 Seerah-7
        colorpicker:SetWidth(510)
167 Seerah-7
        colorpicker:SetMouseEnabled(true)
168 Seerah-7
 
169 Seerah-7
        colorpicker.label = wm:CreateControl(controlName.."Label", colorpicker, CT_LABEL)
170 Seerah-7
        local label = colorpicker.label
171 Seerah-7
        label:SetDimensions(300, 26)
172 Seerah-7
        label:SetAnchor(TOPLEFT)
173 Seerah-7
        label:SetFont("ZoFontWinH4")
174 Seerah-7
        label:SetWrapMode(TEXT_WRAP_MODE_ELLIPSIS)
175 Seerah-7
        label:SetText(text)
176 Seerah-7
 
177 Seerah-7
        colorpicker.color = wm:CreateControl(controlName.."Color", colorpicker, CT_CONTROL)
178 Seerah-7
        local color = colorpicker.color
179 Seerah-7
        color:SetDimensions(200,26)
180 Seerah-7
        color:SetAnchor(RIGHT)
181 Seerah-7
 
182 Seerah-7
        color.thumb = wm:CreateControl(controlName.."ColorThumb", color, CT_TEXTURE)
183 Seerah-7
        local thumb = color.thumb
184 Seerah-7
        thumb:SetDimensions(36, 18)
185 Seerah-7
        thumb:SetAnchor(LEFT, color, LEFT, 4, 0)
186 Seerah-7
        local r, g, b, a = getFunc()
187 Seerah-7
        thumb:SetColor(r, g, b, a or 1)
188 Seerah-7
 
189 Seerah-7
        color.border = wm:CreateControl(controlName.."ColorBorder", color, CT_TEXTURE)
190 Seerah-7
        local border = color.border
191 Seerah-7
        border:SetTexture("EsoUI\\Art\\ChatWindow\\chatOptions_bgColSwatch_frame.dds")
192 Seerah-7
        border:SetTextureCoords(0, .625, 0, .8125)
193 Seerah-7
        border:SetDimensions(40, 22)
194 Seerah-7
        border:SetAnchor(CENTER, thumb, CENTER, 0, 0)
195 Seerah-7
 
196 Seerah-7
        local ColorPickerCallback
197 Seerah-7
        if not ColorPickerCallback then
198 Seerah-7
                ColorPickerCallback = function(r, g, b, a)
199 Seerah-7
                        thumb:SetColor(r, g, b, a or 1)
200 Seerah-7
                        setFunc(r, g, b, a)
201 Seerah-7
                end
202 Seerah-7
        end
203 Seerah-7
 
204 Seerah-7
        colorpicker.controlType = OPTIONS_CUSTOM
205 Seerah-7
        colorpicker.customSetupFunction = function(colorpicker)
206 Seerah-7
                        colorpicker:SetHandler("OnMouseUp", function(self, btn, upInside)
207 Seerah-7
                                        if upInside then
208 Seerah-7
                                                local r, g, b, a = getFunc()
209 Seerah-7
                                                ZO_ColorPicker:Show(ColorPickerCallback, r, g, b, a, text)
210 Seerah-7
                                        end
211 Seerah-7
                                end)
212 Seerah-7
                end
213 Seerah-7
        colorpicker.panel = panelID
214 Seerah-7
        colorpicker.tooltipText = tooltip
215 Seerah-7
        colorpicker:SetHandler("OnMouseEnter", ZO_Options_OnMouseEnter)
216 Seerah-7
        colorpicker:SetHandler("OnMouseExit", ZO_Options_OnMouseExit)
217 Seerah-7
 
218 Seerah-7
        if warning then
219 Seerah-7
                colorpicker.warning = wm:CreateControlFromVirtual(controlName.."WarningIcon", colorpicker, "ZO_Options_WarningIcon")
220 Seerah-7
                colorpicker.warning:SetAnchor(RIGHT, colorpicker:GetNamedChild("Color"), LEFT, -5, 0)
221 Seerah-7
                colorpicker.warning.tooltipText = warningText
222 Seerah-7
        end
223 Seerah-7
 
224 Seerah-7
        ZO_OptionsWindow_InitializeControl(colorpicker)
225 Seerah-7
 
226 Seerah-7
        lastAddedControl[panelID] = colorpicker
227 Seerah-7
end
228 Seerah-7
 
229 Seerah-7
function lam:AddEditBox(panelID, controlName, text, tooltip, isMultiLine, getFunc, setFunc, warning, warningText)
230 Seerah-7
        local editbox = wm:CreateTopLevelWindow(controlName)
231 Seerah-7
        editbox:SetParent(optionsWindow)
232 Seerah-7
        editbox:SetAnchor(TOPLEFT, lastAddedControl[panelID], BOTTOMLEFT, 0, 10)
233 Seerah-7
        editbox:SetResizeToFitDescendents(true)
234 Seerah-7
        editbox:SetWidth(510)
235 Seerah-7
        editbox:SetMouseEnabled(true)
236 Seerah-7
 
237 Seerah-7
        editbox.label = wm:CreateControl(controlName.."Label", editbox, CT_LABEL)
238 Seerah-7
        local label = editbox.label
239 Seerah-7
        label:SetDimensions(300, 26)
240 Seerah-7
        label:SetAnchor(TOPLEFT)
241 Seerah-7
        label:SetFont("ZoFontWinH4")
242 Seerah-7
        label:SetWrapMode(TEXT_WRAP_MODE_ELLIPSIS)
243 Seerah-7
        label:SetText(text)
244 Seerah-7
 
245 Seerah-7
        editbox.bg = wm:CreateControlFromVirtual(controlName.."BG", editbox, "ZO_EditBackdrop")
246 Seerah-7
        local bg = editbox.bg
247 Seerah-7
        bg:SetDimensions(200,isMultiLine and 100 or 24)
248 Seerah-7
        bg:SetAnchor(RIGHT)
249 Seerah-7
        editbox.edit = wm:CreateControlFromVirtual(controlName.."Edit", bg, isMultiLine and "ZO_DefaultEditMultiLineForBackdrop" or "ZO_DefaultEditForBackdrop")
250 Seerah-7
        editbox.edit:SetText(getFunc())
251 Seerah-7
        editbox.edit:SetHandler("OnFocusLost", function(self) setFunc(self:GetText()) end)
252 Seerah-7
 
253 Seerah-7
 
254 Seerah-7
        editbox.panel = panelID
255 Seerah-7
        editbox.tooltipText = tooltip
256 Seerah-7
        editbox:SetHandler("OnMouseEnter", ZO_Options_OnMouseEnter)
257 Seerah-7
        editbox:SetHandler("OnMouseExit", ZO_Options_OnMouseExit)
258 Seerah-7
 
259 Seerah-7
        if warning then
260 Seerah-7
                editbox.warning = wm:CreateControlFromVirtual(controlName.."WarningIcon", editbox, "ZO_Options_WarningIcon")
261 Seerah-7
                editbox.warning:SetAnchor(TOPRIGHT, editbox:GetNamedChild("BG"), TOPLEFT, -5, 0)
262 Seerah-7
                editbox.warning.tooltipText = warningText
263 Seerah-7
        end
264 Seerah-7
 
265 Seerah-7
        ZO_OptionsWindow_InitializeControl(editbox)
266 Seerah-7
 
267 Seerah-7
        lastAddedControl[panelID] = editbox
268 Seerah-7
end
269 Seerah-7
 
270 Seerah-7
function lam:AddButton(panelID, controlName, text, tooltip, onClick, warning, warningText)
271 Seerah-7
        local button = wm:CreateTopLevelWindow(controlName)
272 Seerah-7
        button:SetParent(optionsWindow)
273 Seerah-7
        button:SetAnchor(TOPLEFT, lastAddedControl[panelID], BOTTOMLEFT, 0, 6)
274 Seerah-7
        button:SetDimensions(510, 28)
275 Seerah-7
        button:SetMouseEnabled(true)
276 Seerah-7
 
277 Seerah-7
        button.btn = wm:CreateControlFromVirtual(controlName.."Button", button, "ZO_DefaultButton")
278 Seerah-7
        local btn = button.btn
279 Seerah-7
        btn:SetAnchor(TOPRIGHT)
280 Seerah-7
        btn:SetWidth(200)
281 Seerah-7
        btn:SetText(text)
282 Seerah-7
        btn:SetHandler("OnClicked", onClick)
283 Seerah-7
 
284 Seerah-7
        button.controlType = OPTIONS_CUSTOM
285 Seerah-7
        button.customSetupFunction = function() end
286 Seerah-7
        button.panel = panelID
287 Seerah-7
        btn.tooltipText = tooltip
288 Seerah-7
        btn:SetHandler("OnMouseEnter", ZO_Options_OnMouseEnter)
289 Seerah-7
        btn:SetHandler("OnMouseExit", ZO_Options_OnMouseExit)
290 Seerah-7
 
291 Seerah-7
        if warning then
292 Seerah-7
                button.warning = wm:CreateControlFromVirtual(controlName.."WarningIcon", button, "ZO_Options_WarningIcon")
293 Seerah-7
                button.warning:SetAnchor(RIGHT, btn, LEFT, -5, 0)
294 Seerah-7
                button.warning.tooltipText = warningText
295 Seerah-7
        end
296 Seerah-7
 
297 Seerah-7
        ZO_OptionsWindow_InitializeControl(button)
298 Seerah-7
 
299 Seerah-7
        lastAddedControl[panelID] = button
300 Seerah-7
end
301 Seerah-7
 
302 Seerah-7
 
303 Seerah-7
--test controls--
304 Seerah-7
--[[local controlPanelID = lam:CreateControlPanel("ZAM_ADDONS_OPTIONS", "ZAM Addons")
305 Seerah-7
lam:AddHeader(controlPanelID, "ZAM_Addons_TESTADDON", "TEST ADDON")
306 Seerah-7
lam:AddSlider(controlPanelID, "ZAM_TESTSLIDER", "Test slider", "Adjust the slider.", 1, 10, 1, function() return 7 end, function(value) end, true, "needs UI reload")
307 Seerah-7
lam:AddDropdown(controlPanelID, "ZAM_TESTDROPDOWN", "Test Dropdown", "Pick something!", {"thing 1", "thing 2", "thing 3"}, function() return "thing 2" end, function(self,valueString) print(valueString) end)
308 Seerah-7
local checkbox1 = true
309 Seerah-7
lam:AddCheckbox(controlPanelID, "ZAM_TESTCHECKBOX", "Test Checkbox", "On or off?", function() return checkbox1 end, function(value) checkbox1 = not checkbox1 print(value, checkbox1) end)
310 Seerah-7
lam:AddColorPicker(controlPanelID, "ZAM_TESTCOLORPICKER", "Test color picker", "What's your favorite color?", function() return 1, 1, 0 end, function(r,g,b) print(r,g,b) end)
311 Seerah-7
lam:AddEditBox(controlPanelID, "ZAM_TESTEDITBOX", "Test Edit Box", "This is a tooltip!", false, function() return "hi" end, function(text) print(text) end)
312 Seerah-7
lam:AddHeader(controlPanelID, "ZAM_Addons_TESTADDON2", "TEST ADDON 2")
313 Seerah-7
local checkbox2 = false
314 Seerah-7
lam:AddCheckbox(controlPanelID, "ZAM_TESTCHECKBOX2", "Test Checkbox 2", "On or off?", function() return checkbox2 end, function(value) checkbox2 = not checkbox2 print(value, checkbox2) end)
315 Seerah-7
lam:AddButton(controlPanelID, "ZAM_TESTBUTTON", "Test Button", "Click me", function() print("hi") end, true, "oh noez!")
316 Seerah-7
lam:AddEditBox(controlPanelID, "ZAM_TESTEDITBOX2", "Test Edit Box 2", "This is a tooltip!", true, function() return "hi" end, function(text) print(text) end, true, "warning text")
317 Seerah-7
lam:AddSlider(controlPanelID, "ZAM_TESTSLIDER2", "Test slider 2", "Adjust the slider.", 50, 100, 10, function() return 80 end, function(value) end)
318 Seerah-7
lam:AddDropdown(controlPanelID, "ZAM_TESTDROPDOWN2", "Test Dropdown 2", "Pick something!", {"thing 4", "thing 5", "thing 6"}, function() return "thing 6" end, function(self,valueString) print(valueString) end)
319 Seerah-7
]]--