ESOUI SVN TaosGroupUltimate

[/] [trunk/] [TaosGroupUltimate/] [libs/] [LibAddonMenu-2.0/] [controls/] [iconpicker.lua] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 Taonnor-14572
--[[iconpickerData = {
2 Taonnor-14572
    type = "iconpicker",
3 Taonnor-14572
    name = "My Icon Picker", -- or string id or function returning a string
4 Taonnor-14572
    choices = {"texture path 1", "texture path 2", "texture path 3"},
5 Taonnor-14572
    getFunc = function() return db.var end,
6 Taonnor-14572
    setFunc = function(var) db.var = var doStuff() end,
7 Taonnor-14572
    tooltip = "Color Picker's tooltip text.", -- or string id or function returning a string (optional)
8 Taonnor-14572
    choicesTooltips = {"icon tooltip 1", "icon tooltip 2", "icon tooltip 3"}, -- or array of string ids or array of functions returning a string (optional)
9 Taonnor-14572
    maxColumns = 5, -- number of icons in one row (optional)
10 Taonnor-14572
    visibleRows = 4.5, -- number of visible rows (optional)
11 Taonnor-14572
    iconSize = 28, -- size of the icons (optional)
12 Taonnor-14572
    defaultColor = ZO_ColorDef:New("FFFFFF"), -- default color of the icons (optional)
13 Taonnor-14572
    width = "full", --or "half" (optional)
14 Taonnor-14572
    beforeShow = function(control, iconPicker) return preventShow end, --(optional)
15 Taonnor-14572
    disabled = function() return db.someBooleanSetting end, --or boolean (optional)
16 Taonnor-14572
    warning = "May cause permanent awesomeness.", -- or string id or function returning a string (optional)
17 Taonnor-14572
    requiresReload = false, -- boolean, if set to true, the warning text will contain a notice that changes are only applied after an UI reload and any change to the value will make the "Apply Settings" button appear on the panel which will reload the UI when pressed (optional)
18 Taonnor-14572
    default = defaults.var, -- default value or function that returns the default value (optional)
19 Taonnor-14572
    reference = "MyAddonIconPicker" -- unique global reference to control (optional)
20 Taonnor-14572
} ]]
21 Taonnor-14572
 
22 Taonnor-14572
local widgetVersion = 8
23 Taonnor-14572
local LAM = LibStub("LibAddonMenu-2.0")
24 Taonnor-14572
if not LAM:RegisterWidget("iconpicker", widgetVersion) then return end
25 Taonnor-14572
 
26 Taonnor-14572
local wm = WINDOW_MANAGER
27 Taonnor-14572
 
28 Taonnor-14572
local IconPickerMenu = ZO_Object:Subclass()
29 Taonnor-14572
local iconPicker
30 Taonnor-14572
LAM.util.GetIconPickerMenu = function()
31 Taonnor-14572
    if not iconPicker then
32 Taonnor-14572
        iconPicker = IconPickerMenu:New("LAMIconPicker")
33 Taonnor-14572
        local sceneFragment = LAM:GetAddonSettingsFragment()
34 Taonnor-14572
        ZO_PreHook(sceneFragment, "OnHidden", function()
35 Taonnor-14572
            if not iconPicker.control:IsHidden() then
36 Taonnor-14572
                iconPicker:Clear()
37 Taonnor-14572
            end
38 Taonnor-14572
        end)
39 Taonnor-14572
    end
40 Taonnor-14572
    return iconPicker
41 Taonnor-14572
end
42 Taonnor-14572
 
43 Taonnor-14572
function IconPickerMenu:New(...)
44 Taonnor-14572
    local object = ZO_Object.New(self)
45 Taonnor-14572
    object:Initialize(...)
46 Taonnor-14572
    return object
47 Taonnor-14572
end
48 Taonnor-14572
 
49 Taonnor-14572
function IconPickerMenu:Initialize(name)
50 Taonnor-14572
    local control = wm:CreateTopLevelWindow(name)
51 Taonnor-14572
    control:SetDrawTier(DT_HIGH)
52 Taonnor-14572
    control:SetHidden(true)
53 Taonnor-14572
    self.control = control
54 Taonnor-14572
 
55 Taonnor-14572
    local scrollContainer = wm:CreateControlFromVirtual(name .. "ScrollContainer", control, "ZO_ScrollContainer")
56 Taonnor-14572
    -- control:SetDimensions(control.container:GetWidth(), height) -- adjust to icon size / col count
57 Taonnor-14572
    scrollContainer:SetAnchorFill()
58 Taonnor-14572
    ZO_Scroll_SetUseFadeGradient(scrollContainer, false)
59 Taonnor-14572
    ZO_Scroll_SetHideScrollbarOnDisable(scrollContainer, false)
60 Taonnor-14572
    ZO_VerticalScrollbarBase_OnMouseExit(scrollContainer:GetNamedChild("ScrollBar")) -- scrollbar initialization seems to be broken so we force it to update the correct alpha value
61 Taonnor-14572
    local scroll = GetControl(scrollContainer, "ScrollChild")
62 Taonnor-14572
    self.scroll = scroll
63 Taonnor-14572
    self.scrollContainer = scrollContainer
64 Taonnor-14572
 
65 Taonnor-14572
    local bg = wm:CreateControl(nil, scrollContainer, CT_BACKDROP)
66 Taonnor-14572
    bg:SetAnchor(TOPLEFT, scrollContainer, TOPLEFT, 0, -3)
67 Taonnor-14572
    bg:SetAnchor(BOTTOMRIGHT, scrollContainer, BOTTOMRIGHT, 2, 5)
68 Taonnor-14572
    bg:SetEdgeTexture("EsoUI\\Art\\Tooltips\\UI-Border.dds", 128, 16)
69 Taonnor-14572
    bg:SetCenterTexture("EsoUI\\Art\\Tooltips\\UI-TooltipCenter.dds")
70 Taonnor-14572
    bg:SetInsets(16, 16, -16, -16)
71 Taonnor-14572
 
72 Taonnor-14572
    local mungeOverlay = wm:CreateControl(nil, bg, CT_TEXTURE)
73 Taonnor-14572
    mungeOverlay:SetTexture("EsoUI/Art/Tooltips/munge_overlay.dds")
74 Taonnor-14572
    mungeOverlay:SetDrawLevel(1)
75 Taonnor-14572
    mungeOverlay:SetAddressMode(TEX_MODE_WRAP)
76 Taonnor-14572
    mungeOverlay:SetAnchorFill()
77 Taonnor-14572
 
78 Taonnor-14572
    local mouseOver = wm:CreateControl(nil, scrollContainer, CT_TEXTURE)
79 Taonnor-14572
    mouseOver:SetDrawLevel(2)
80 Taonnor-14572
    mouseOver:SetTexture("EsoUI/Art/Buttons/minmax_mouseover.dds")
81 Taonnor-14572
    mouseOver:SetHidden(true)
82 Taonnor-14572
 
83 Taonnor-14572
    local function IconFactory(pool)
84 Taonnor-14572
        local icon = wm:CreateControl(name .. "Entry" .. pool:GetNextControlId(), scroll, CT_TEXTURE)
85 Taonnor-14572
        icon:SetMouseEnabled(true)
86 Taonnor-14572
        icon:SetDrawLevel(3)
87 Taonnor-14572
        icon:SetHandler("OnMouseEnter", function()
88 Taonnor-14572
            mouseOver:SetAnchor(TOPLEFT, icon, TOPLEFT, 0, 0)
89 Taonnor-14572
            mouseOver:SetAnchor(BOTTOMRIGHT, icon, BOTTOMRIGHT, 0, 0)
90 Taonnor-14572
            mouseOver:SetHidden(false)
91 Taonnor-14572
            if self.customOnMouseEnter then
92 Taonnor-14572
                self.customOnMouseEnter(icon)
93 Taonnor-14572
            else
94 Taonnor-14572
                self:OnMouseEnter(icon)
95 Taonnor-14572
            end
96 Taonnor-14572
        end)
97 Taonnor-14572
        icon:SetHandler("OnMouseExit", function()
98 Taonnor-14572
            mouseOver:ClearAnchors()
99 Taonnor-14572
            mouseOver:SetHidden(true)
100 Taonnor-14572
            if self.customOnMouseExit then
101 Taonnor-14572
                self.customOnMouseExit(icon)
102 Taonnor-14572
            else
103 Taonnor-14572
                self:OnMouseExit(icon)
104 Taonnor-14572
            end
105 Taonnor-14572
        end)
106 Taonnor-14572
        icon:SetHandler("OnMouseUp", function(control, ...)
107 Taonnor-14572
            PlaySound("Click")
108 Taonnor-14572
            icon.OnSelect(icon, icon.texture)
109 Taonnor-14572
            self:Clear()
110 Taonnor-14572
        end)
111 Taonnor-14572
        return icon
112 Taonnor-14572
    end
113 Taonnor-14572
 
114 Taonnor-14572
    local function ResetFunction(icon)
115 Taonnor-14572
        icon:ClearAnchors()
116 Taonnor-14572
    end
117 Taonnor-14572
 
118 Taonnor-14572
    self.iconPool = ZO_ObjectPool:New(IconFactory, ResetFunction)
119 Taonnor-14572
    self:SetMaxColumns(1)
120 Taonnor-14572
    self.icons = {}
121 Taonnor-14572
    self.color = ZO_DEFAULT_ENABLED_COLOR
122 Taonnor-14572
 
123 Taonnor-14572
    EVENT_MANAGER:RegisterForEvent(name .. "_OnGlobalMouseUp", EVENT_GLOBAL_MOUSE_UP, function()
124 Taonnor-14572
        if self.refCount ~= nil then
125 Taonnor-14572
            local moc = wm:GetMouseOverControl()
126 Taonnor-14572
            if(moc:GetOwningWindow() ~= control) then
127 Taonnor-14572
                self.refCount = self.refCount - 1
128 Taonnor-14572
                if self.refCount <= 0 then
129 Taonnor-14572
                    self:Clear()
130 Taonnor-14572
                end
131 Taonnor-14572
            end
132 Taonnor-14572
        end
133 Taonnor-14572
    end)
134 Taonnor-14572
end
135 Taonnor-14572
 
136 Taonnor-14572
function IconPickerMenu:OnMouseEnter(icon)
137 Taonnor-14572
    InitializeTooltip(InformationTooltip, icon, TOPLEFT, 0, 0, BOTTOMRIGHT)
138 Taonnor-14572
    SetTooltipText(InformationTooltip, LAM.util.GetStringFromValue(icon.tooltip))
139 Taonnor-14572
    InformationTooltipTopLevel:BringWindowToTop()
140 Taonnor-14572
end
141 Taonnor-14572
 
142 Taonnor-14572
function IconPickerMenu:OnMouseExit(icon)
143 Taonnor-14572
    ClearTooltip(InformationTooltip)
144 Taonnor-14572
end
145 Taonnor-14572
 
146 Taonnor-14572
function IconPickerMenu:SetMaxColumns(value)
147 Taonnor-14572
    self.maxCols = value ~= nil and value or 5
148 Taonnor-14572
end
149 Taonnor-14572
 
150 Taonnor-14572
local DEFAULT_SIZE = 28
151 Taonnor-14572
function IconPickerMenu:SetIconSize(value)
152 Taonnor-14572
    local iconSize = DEFAULT_SIZE
153 Taonnor-14572
    if value ~= nil then iconSize = math.max(iconSize, value) end
154 Taonnor-14572
    self.iconSize = iconSize
155 Taonnor-14572
end
156 Taonnor-14572
 
157 Taonnor-14572
function IconPickerMenu:SetVisibleRows(value)
158 Taonnor-14572
    self.visibleRows = value ~= nil and value or 4.5
159 Taonnor-14572
end
160 Taonnor-14572
 
161 Taonnor-14572
function IconPickerMenu:SetMouseHandlers(onEnter, onExit)
162 Taonnor-14572
    self.customOnMouseEnter = onEnter
163 Taonnor-14572
    self.customOnMouseExit = onExit
164 Taonnor-14572
end
165 Taonnor-14572
 
166 Taonnor-14572
function IconPickerMenu:UpdateDimensions()
167 Taonnor-14572
    local iconSize = self.iconSize
168 Taonnor-14572
    local width = iconSize * self.maxCols + 20
169 Taonnor-14572
    local height = iconSize * self.visibleRows
170 Taonnor-14572
    self.control:SetDimensions(width, height)
171 Taonnor-14572
 
172 Taonnor-14572
    local icons = self.icons
173 Taonnor-14572
    for i = 1, #icons do
174 Taonnor-14572
        local icon = icons[i]
175 Taonnor-14572
        icon:SetDimensions(iconSize, iconSize)
176 Taonnor-14572
    end
177 Taonnor-14572
end
178 Taonnor-14572
 
179 Taonnor-14572
function IconPickerMenu:UpdateAnchors()
180 Taonnor-14572
    local iconSize = self.iconSize
181 Taonnor-14572
    local col, maxCols = 1, self.maxCols
182 Taonnor-14572
    local previousCol, previousRow
183 Taonnor-14572
    local scroll = self.scroll
184 Taonnor-14572
    local icons = self.icons
185 Taonnor-14572
 
186 Taonnor-14572
    for i = 1, #icons do
187 Taonnor-14572
        local icon = icons[i]
188 Taonnor-14572
        icon:ClearAnchors()
189 Taonnor-14572
        if i == 1 then
190 Taonnor-14572
            icon:SetAnchor(TOPLEFT, scroll, TOPLEFT, 0, 0)
191 Taonnor-14572
            previousRow = icon
192 Taonnor-14572
        elseif col == 1 then
193 Taonnor-14572
            icon:SetAnchor(TOPLEFT, previousRow, BOTTOMLEFT, 0, 0)
194 Taonnor-14572
            previousRow = icon
195 Taonnor-14572
        else
196 Taonnor-14572
            icon:SetAnchor(TOPLEFT, previousCol, TOPRIGHT, 0, 0)
197 Taonnor-14572
        end
198 Taonnor-14572
        previousCol = icon
199 Taonnor-14572
        col = col >= maxCols and 1 or col + 1
200 Taonnor-14572
    end
201 Taonnor-14572
end
202 Taonnor-14572
 
203 Taonnor-14572
function IconPickerMenu:Clear()
204 Taonnor-14572
    self.icons = {}
205 Taonnor-14572
    self.iconPool:ReleaseAllObjects()
206 Taonnor-14572
    self.control:SetHidden(true)
207 Taonnor-14572
    self.color = ZO_DEFAULT_ENABLED_COLOR
208 Taonnor-14572
    self.refCount = nil
209 Taonnor-14572
    self.parent = nil
210 Taonnor-14572
    self.customOnMouseEnter = nil
211 Taonnor-14572
    self.customOnMouseExit = nil
212 Taonnor-14572
end
213 Taonnor-14572
 
214 Taonnor-14572
function IconPickerMenu:AddIcon(texturePath, callback, tooltip)
215 Taonnor-14572
    local icon, key = self.iconPool:AcquireObject()
216 Taonnor-14572
    icon:SetTexture(texturePath)
217 Taonnor-14572
    icon:SetColor(self.color:UnpackRGBA())
218 Taonnor-14572
    icon.texture = texturePath
219 Taonnor-14572
    icon.tooltip = tooltip
220 Taonnor-14572
    icon.OnSelect = callback
221 Taonnor-14572
    self.icons[#self.icons + 1] = icon
222 Taonnor-14572
end
223 Taonnor-14572
 
224 Taonnor-14572
function IconPickerMenu:Show(parent)
225 Taonnor-14572
    if #self.icons == 0 then return false end
226 Taonnor-14572
    if not self.control:IsHidden() then self:Clear() return false end
227 Taonnor-14572
    self:UpdateDimensions()
228 Taonnor-14572
    self:UpdateAnchors()
229 Taonnor-14572
 
230 Taonnor-14572
    local control = self.control
231 Taonnor-14572
    control:ClearAnchors()
232 Taonnor-14572
    control:SetAnchor(TOPLEFT, parent, BOTTOMLEFT, 0, 8)
233 Taonnor-14572
    control:SetHidden(false)
234 Taonnor-14572
    control:BringWindowToTop()
235 Taonnor-14572
    self.parent = parent
236 Taonnor-14572
    self.refCount = 2
237 Taonnor-14572
 
238 Taonnor-14572
    return true
239 Taonnor-14572
end
240 Taonnor-14572
 
241 Taonnor-14572
function IconPickerMenu:SetColor(color)
242 Taonnor-14572
    local icons = self.icons
243 Taonnor-14572
    self.color = color
244 Taonnor-14572
    for i = 1, #icons do
245 Taonnor-14572
        local icon = icons[i]
246 Taonnor-14572
        icon:SetColor(color:UnpackRGBA())
247 Taonnor-14572
    end
248 Taonnor-14572
end
249 Taonnor-14572
 
250 Taonnor-14572
-------------------------------------------------------------
251 Taonnor-14572
 
252 Taonnor-14572
local function UpdateChoices(control, choices, choicesTooltips)
253 Taonnor-14572
    local data = control.data
254 Taonnor-14572
    if not choices then
255 Taonnor-14572
        choices, choicesTooltips = data.choices, data.choicesTooltips or {}
256 Taonnor-14572
    end
257 Taonnor-14572
    local addedChoices = {}
258 Taonnor-14572
 
259 Taonnor-14572
    local iconPicker = LAM.util.GetIconPickerMenu()
260 Taonnor-14572
    iconPicker:Clear()
261 Taonnor-14572
    for i = 1, #choices do
262 Taonnor-14572
        local texture = choices[i]
263 Taonnor-14572
        if not addedChoices[texture] then -- remove duplicates
264 Taonnor-14572
            iconPicker:AddIcon(choices[i], function(self, texture)
265 Taonnor-14572
                control.icon:SetTexture(texture)
266 Taonnor-14572
                data.setFunc(texture)
267 Taonnor-14572
                LAM.util.RequestRefreshIfNeeded(control)
268 Taonnor-14572
            end, LAM.util.GetStringFromValue(choicesTooltips[i]))
269 Taonnor-14572
        addedChoices[texture] = true
270 Taonnor-14572
        end
271 Taonnor-14572
    end
272 Taonnor-14572
end
273 Taonnor-14572
 
274 Taonnor-14572
local function IsDisabled(control)
275 Taonnor-14572
    if type(control.data.disabled) == "function" then
276 Taonnor-14572
        return control.data.disabled()
277 Taonnor-14572
    else
278 Taonnor-14572
        return control.data.disabled
279 Taonnor-14572
    end
280 Taonnor-14572
end
281 Taonnor-14572
 
282 Taonnor-14572
local function SetColor(control, color)
283 Taonnor-14572
    local icon = control.icon
284 Taonnor-14572
    if IsDisabled(control) then
285 Taonnor-14572
        icon:SetColor(ZO_DEFAULT_DISABLED_COLOR:UnpackRGBA())
286 Taonnor-14572
    else
287 Taonnor-14572
        icon.color = color or control.data.defaultColor or ZO_DEFAULT_ENABLED_COLOR
288 Taonnor-14572
        icon:SetColor(icon.color:UnpackRGBA())
289 Taonnor-14572
    end
290 Taonnor-14572
 
291 Taonnor-14572
    local iconPicker = LAM.util.GetIconPickerMenu()
292 Taonnor-14572
    if iconPicker.parent == control.container and not iconPicker.control:IsHidden() then
293 Taonnor-14572
        iconPicker:SetColor(icon.color)
294 Taonnor-14572
    end
295 Taonnor-14572
end
296 Taonnor-14572
 
297 Taonnor-14572
local function UpdateDisabled(control)
298 Taonnor-14572
    local disable = IsDisabled(control)
299 Taonnor-14572
 
300 Taonnor-14572
    control.dropdown:SetMouseEnabled(not disable)
301 Taonnor-14572
    control.dropdownButton:SetEnabled(not disable)
302 Taonnor-14572
 
303 Taonnor-14572
    local iconPicker = LAM.util.GetIconPickerMenu()
304 Taonnor-14572
    if iconPicker.parent == control.container and not iconPicker.control:IsHidden() then
305 Taonnor-14572
        iconPicker:Clear()
306 Taonnor-14572
    end
307 Taonnor-14572
 
308 Taonnor-14572
    SetColor(control, control.icon.color)
309 Taonnor-14572
    if disable then
310 Taonnor-14572
        control.label:SetColor(ZO_DEFAULT_DISABLED_COLOR:UnpackRGBA())
311 Taonnor-14572
    else
312 Taonnor-14572
        control.label:SetColor(ZO_DEFAULT_ENABLED_COLOR:UnpackRGBA())
313 Taonnor-14572
    end
314 Taonnor-14572
end
315 Taonnor-14572
 
316 Taonnor-14572
local function UpdateValue(control, forceDefault, value)
317 Taonnor-14572
    if forceDefault then --if we are forcing defaults
318 Taonnor-14572
        value = LAM.util.GetDefaultValue(control.data.default)
319 Taonnor-14572
        control.data.setFunc(value)
320 Taonnor-14572
        control.icon:SetTexture(value)
321 Taonnor-14572
    elseif value then
322 Taonnor-14572
        control.data.setFunc(value)
323 Taonnor-14572
        --after setting this value, let's refresh the others to see if any should be disabled or have their settings changed
324 Taonnor-14572
        LAM.util.RequestRefreshIfNeeded(control)
325 Taonnor-14572
    else
326 Taonnor-14572
        value = control.data.getFunc()
327 Taonnor-14572
        control.icon:SetTexture(value)
328 Taonnor-14572
    end
329 Taonnor-14572
end
330 Taonnor-14572
 
331 Taonnor-14572
local MIN_HEIGHT = 26
332 Taonnor-14572
local HALF_WIDTH_LINE_SPACING = 2
333 Taonnor-14572
local function SetIconSize(control, size)
334 Taonnor-14572
    local icon = control.icon
335 Taonnor-14572
    icon.size = size
336 Taonnor-14572
    icon:SetDimensions(size, size)
337 Taonnor-14572
 
338 Taonnor-14572
    local height = size + 4
339 Taonnor-14572
    control.dropdown:SetDimensions(size + 20, height)
340 Taonnor-14572
    height = math.max(height, MIN_HEIGHT)
341 Taonnor-14572
    control.container:SetHeight(height)
342 Taonnor-14572
    if control.lineControl then
343 Taonnor-14572
        control.lineControl:SetHeight(MIN_HEIGHT + size + HALF_WIDTH_LINE_SPACING)
344 Taonnor-14572
    else
345 Taonnor-14572
        control:SetHeight(height)
346 Taonnor-14572
    end
347 Taonnor-14572
 
348 Taonnor-14572
    local iconPicker = LAM.util.GetIconPickerMenu()
349 Taonnor-14572
    if iconPicker.parent == control.container and not iconPicker.control:IsHidden() then
350 Taonnor-14572
        iconPicker:SetIconSize(size)
351 Taonnor-14572
        iconPicker:UpdateDimensions()
352 Taonnor-14572
        iconPicker:UpdateAnchors()
353 Taonnor-14572
    end
354 Taonnor-14572
end
355 Taonnor-14572
 
356 Taonnor-14572
function LAMCreateControl.iconpicker(parent, iconpickerData, controlName)
357 Taonnor-14572
    local control = LAM.util.CreateLabelAndContainerControl(parent, iconpickerData, controlName)
358 Taonnor-14572
 
359 Taonnor-14572
    local function ShowIconPicker()
360 Taonnor-14572
        local iconPicker = LAM.util.GetIconPickerMenu()
361 Taonnor-14572
        if iconPicker.parent == control.container then
362 Taonnor-14572
            iconPicker:Clear()
363 Taonnor-14572
        else
364 Taonnor-14572
            iconPicker:SetMaxColumns(iconpickerData.maxColumns)
365 Taonnor-14572
            iconPicker:SetVisibleRows(iconpickerData.visibleRows)
366 Taonnor-14572
            iconPicker:SetIconSize(control.icon.size)
367 Taonnor-14572
            UpdateChoices(control)
368 Taonnor-14572
            iconPicker:SetColor(control.icon.color)
369 Taonnor-14572
            if iconpickerData.beforeShow then
370 Taonnor-14572
                if iconpickerData.beforeShow(control, iconPicker) then
371 Taonnor-14572
                    iconPicker:Clear()
372 Taonnor-14572
                    return
373 Taonnor-14572
                end
374 Taonnor-14572
            end
375 Taonnor-14572
            iconPicker:Show(control.container)
376 Taonnor-14572
        end
377 Taonnor-14572
    end
378 Taonnor-14572
 
379 Taonnor-14572
    local iconSize = iconpickerData.iconSize ~= nil and iconpickerData.iconSize or DEFAULT_SIZE
380 Taonnor-14572
    control.dropdown = wm:CreateControl(nil, control.container, CT_CONTROL)
381 Taonnor-14572
    local dropdown = control.dropdown
382 Taonnor-14572
    dropdown:SetAnchor(LEFT, control.container, LEFT, 0, 0)
383 Taonnor-14572
    dropdown:SetMouseEnabled(true)
384 Taonnor-14572
    dropdown:SetHandler("OnMouseUp", ShowIconPicker)
385 Taonnor-14572
    dropdown:SetHandler("OnMouseEnter", function() ZO_Options_OnMouseEnter(control) end)
386 Taonnor-14572
    dropdown:SetHandler("OnMouseExit", function() ZO_Options_OnMouseExit(control) end)
387 Taonnor-14572
 
388 Taonnor-14572
    control.icon = wm:CreateControl(nil, dropdown, CT_TEXTURE)
389 Taonnor-14572
    local icon = control.icon
390 Taonnor-14572
    icon:SetAnchor(LEFT, dropdown, LEFT, 3, 0)
391 Taonnor-14572
    icon:SetDrawLevel(2)
392 Taonnor-14572
 
393 Taonnor-14572
    local dropdownButton = wm:CreateControlFromVirtual(nil, dropdown, "ZO_DropdownButton")
394 Taonnor-14572
    dropdownButton:SetDimensions(16, 16)
395 Taonnor-14572
    dropdownButton:SetHandler("OnClicked", ShowIconPicker)
396 Taonnor-14572
    dropdownButton:SetAnchor(RIGHT, dropdown, RIGHT, -3, 0)
397 Taonnor-14572
    control.dropdownButton = dropdownButton
398 Taonnor-14572
 
399 Taonnor-14572
    control.bg = wm:CreateControl(nil, dropdown, CT_BACKDROP)
400 Taonnor-14572
    local bg = control.bg
401 Taonnor-14572
    bg:SetAnchor(TOPLEFT, dropdown, TOPLEFT, 0, -3)
402 Taonnor-14572
    bg:SetAnchor(BOTTOMRIGHT, dropdown, BOTTOMRIGHT, 2, 5)
403 Taonnor-14572
    bg:SetEdgeTexture("EsoUI/Art/Tooltips/UI-Border.dds", 128, 16)
404 Taonnor-14572
    bg:SetCenterTexture("EsoUI/Art/Tooltips/UI-TooltipCenter.dds")
405 Taonnor-14572
    bg:SetInsets(16, 16, -16, -16)
406 Taonnor-14572
    local mungeOverlay = wm:CreateControl(nil, bg, CT_TEXTURE)
407 Taonnor-14572
    mungeOverlay:SetTexture("EsoUI/Art/Tooltips/munge_overlay.dds")
408 Taonnor-14572
    mungeOverlay:SetDrawLevel(1)
409 Taonnor-14572
    mungeOverlay:SetAddressMode(TEX_MODE_WRAP)
410 Taonnor-14572
    mungeOverlay:SetAnchorFill()
411 Taonnor-14572
 
412 Taonnor-14572
    if iconpickerData.warning ~= nil or iconpickerData.requiresReload then
413 Taonnor-14572
        control.warning = wm:CreateControlFromVirtual(nil, control, "ZO_Options_WarningIcon")
414 Taonnor-14572
        control.warning:SetAnchor(RIGHT, control.container, LEFT, -5, 0)
415 Taonnor-14572
        control.UpdateWarning = LAM.util.UpdateWarning
416 Taonnor-14572
        control:UpdateWarning()
417 Taonnor-14572
    end
418 Taonnor-14572
 
419 Taonnor-14572
    control.UpdateChoices = UpdateChoices
420 Taonnor-14572
    control.UpdateValue = UpdateValue
421 Taonnor-14572
    control:UpdateValue()
422 Taonnor-14572
    control.SetColor = SetColor
423 Taonnor-14572
    control:SetColor()
424 Taonnor-14572
    control.SetIconSize = SetIconSize
425 Taonnor-14572
    control:SetIconSize(iconSize)
426 Taonnor-14572
 
427 Taonnor-14572
    if iconpickerData.disabled ~= nil then
428 Taonnor-14572
        control.UpdateDisabled = UpdateDisabled
429 Taonnor-14572
        control:UpdateDisabled()
430 Taonnor-14572
    end
431 Taonnor-14572
 
432 Taonnor-14572
    LAM.util.RegisterForRefreshIfNeeded(control)
433 Taonnor-14572
    LAM.util.RegisterForReloadIfNeeded(control)
434 Taonnor-14572
 
435 Taonnor-14572
    return control
436 Taonnor-14572
end