ESOUI SVN TaosGroupUltimate

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

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 Taonnor-14572
--[[colorpickerData = {
2 Taonnor-14572
    type = "colorpicker",
3 Taonnor-14572
    name = "My Color Picker", -- or string id or function returning a string
4 Taonnor-14572
    getFunc = function() return db.r, db.g, db.b, db.a end, --(alpha is optional)
5 Taonnor-14572
    setFunc = function(r,g,b,a) db.r=r, db.g=g, db.b=b, db.a=a end, --(alpha is optional)
6 Taonnor-14572
    tooltip = "Color Picker's tooltip text.", -- or string id or function returning a string (optional)
7 Taonnor-14572
    width = "full", --or "half" (optional)
8 Taonnor-14572
    disabled = function() return db.someBooleanSetting end, --or boolean (optional)
9 Taonnor-14572
    warning = "May cause permanent awesomeness.", -- or string id or function returning a string (optional)
10 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)
11 Taonnor-14572
    default = {r = defaults.r, g = defaults.g, b = defaults.b, a = defaults.a}, --(optional) table of default color values (or default = defaultColor, where defaultColor is a table with keys of r, g, b[, a]) or a function that returns the color
12 Taonnor-14572
    reference = "MyAddonColorpicker" -- unique global reference to control (optional)
13 Taonnor-14572
} ]]
14 Taonnor-14572
 
15 Taonnor-14572
 
16 Taonnor-14572
local widgetVersion = 13
17 Taonnor-14572
local LAM = LibStub("LibAddonMenu-2.0")
18 Taonnor-14572
if not LAM:RegisterWidget("colorpicker", widgetVersion) then return end
19 Taonnor-14572
 
20 Taonnor-14572
local wm = WINDOW_MANAGER
21 Taonnor-14572
 
22 Taonnor-14572
local function UpdateDisabled(control)
23 Taonnor-14572
    local disable
24 Taonnor-14572
    if type(control.data.disabled) == "function" then
25 Taonnor-14572
        disable = control.data.disabled()
26 Taonnor-14572
    else
27 Taonnor-14572
        disable = control.data.disabled
28 Taonnor-14572
    end
29 Taonnor-14572
 
30 Taonnor-14572
    if disable then
31 Taonnor-14572
        control.label:SetColor(ZO_DEFAULT_DISABLED_COLOR:UnpackRGBA())
32 Taonnor-14572
    else
33 Taonnor-14572
        control.label:SetColor(ZO_DEFAULT_ENABLED_COLOR:UnpackRGBA())
34 Taonnor-14572
    end
35 Taonnor-14572
 
36 Taonnor-14572
    control.isDisabled = disable
37 Taonnor-14572
end
38 Taonnor-14572
 
39 Taonnor-14572
local function UpdateValue(control, forceDefault, valueR, valueG, valueB, valueA)
40 Taonnor-14572
    if forceDefault then --if we are forcing defaults
41 Taonnor-14572
        local color = LAM.util.GetDefaultValue(control.data.default)
42 Taonnor-14572
        valueR, valueG, valueB, valueA = color.r, color.g, color.b, color.a
43 Taonnor-14572
        control.data.setFunc(valueR, valueG, valueB, valueA)
44 Taonnor-14572
    elseif valueR and valueG and valueB then
45 Taonnor-14572
        control.data.setFunc(valueR, valueG, valueB, valueA or 1)
46 Taonnor-14572
        --after setting this value, let's refresh the others to see if any should be disabled or have their settings changed
47 Taonnor-14572
        LAM.util.RequestRefreshIfNeeded(control)
48 Taonnor-14572
    else
49 Taonnor-14572
        valueR, valueG, valueB, valueA = control.data.getFunc()
50 Taonnor-14572
    end
51 Taonnor-14572
 
52 Taonnor-14572
    control.thumb:SetColor(valueR, valueG, valueB, valueA or 1)
53 Taonnor-14572
end
54 Taonnor-14572
 
55 Taonnor-14572
function LAMCreateControl.colorpicker(parent, colorpickerData, controlName)
56 Taonnor-14572
    local control = LAM.util.CreateLabelAndContainerControl(parent, colorpickerData, controlName)
57 Taonnor-14572
 
58 Taonnor-14572
    control.color = control.container
59 Taonnor-14572
    local color = control.color
60 Taonnor-14572
 
61 Taonnor-14572
    control.thumb = wm:CreateControl(nil, color, CT_TEXTURE)
62 Taonnor-14572
    local thumb = control.thumb
63 Taonnor-14572
    thumb:SetDimensions(36, 18)
64 Taonnor-14572
    thumb:SetAnchor(LEFT, color, LEFT, 4, 0)
65 Taonnor-14572
 
66 Taonnor-14572
    color.border = wm:CreateControl(nil, color, CT_TEXTURE)
67 Taonnor-14572
    local border = color.border
68 Taonnor-14572
    border:SetTexture("EsoUI\\Art\\ChatWindow\\chatOptions_bgColSwatch_frame.dds")
69 Taonnor-14572
    border:SetTextureCoords(0, .625, 0, .8125)
70 Taonnor-14572
    border:SetDimensions(40, 22)
71 Taonnor-14572
    border:SetAnchor(CENTER, thumb, CENTER, 0, 0)
72 Taonnor-14572
 
73 Taonnor-14572
    local function ColorPickerCallback(r, g, b, a)
74 Taonnor-14572
        control:UpdateValue(false, r, g, b, a)
75 Taonnor-14572
    end
76 Taonnor-14572
 
77 Taonnor-14572
    control:SetHandler("OnMouseUp", function(self, btn, upInside)
78 Taonnor-14572
        if self.isDisabled then return end
79 Taonnor-14572
 
80 Taonnor-14572
        if upInside then
81 Taonnor-14572
            local r, g, b, a = colorpickerData.getFunc()
82 Taonnor-14572
            COLOR_PICKER:Show(ColorPickerCallback, r, g, b, a, LAM.util.GetStringFromValue(colorpickerData.name))
83 Taonnor-14572
        end
84 Taonnor-14572
    end)
85 Taonnor-14572
 
86 Taonnor-14572
    if colorpickerData.warning ~= nil or colorpickerData.requiresReload then
87 Taonnor-14572
        control.warning = wm:CreateControlFromVirtual(nil, control, "ZO_Options_WarningIcon")
88 Taonnor-14572
        control.warning:SetAnchor(RIGHT, control.color, LEFT, -5, 0)
89 Taonnor-14572
        control.UpdateWarning = LAM.util.UpdateWarning
90 Taonnor-14572
        control:UpdateWarning()
91 Taonnor-14572
    end
92 Taonnor-14572
 
93 Taonnor-14572
    control.data.tooltipText = LAM.util.GetStringFromValue(colorpickerData.tooltip)
94 Taonnor-14572
 
95 Taonnor-14572
    control.UpdateValue = UpdateValue
96 Taonnor-14572
    control:UpdateValue()
97 Taonnor-14572
    if colorpickerData.disabled ~= nil then
98 Taonnor-14572
        control.UpdateDisabled = UpdateDisabled
99 Taonnor-14572
        control:UpdateDisabled()
100 Taonnor-14572
    end
101 Taonnor-14572
 
102 Taonnor-14572
    LAM.util.RegisterForRefreshIfNeeded(control)
103 Taonnor-14572
    LAM.util.RegisterForReloadIfNeeded(control)
104 Taonnor-14572
 
105 Taonnor-14572
    return control
106 Taonnor-14572
end