You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

139 lines
4.8 KiB

local _
local addonName, platerInternal = ...
local detailsFramework = _G.DetailsFramework
function platerInternal.NumberToHex(number)
local hex = string.format("%x", number)
if (#hex == 1) then
hex = "0" .. hex
end
return hex
end
local colorHueCache = {}
for colorName, colorTable in pairs(detailsFramework:GetDefaultColorList()) do
colorHueCache[colorName] = detailsFramework:GetColorHue(unpack(colorTable))
end
local function sortColors(t1, t2)
return colorHueCache[t1[2]] > colorHueCache[t2[2]]
end
local ignoredColors = {
["transparent"] = true,
["black"] = true,
["none"] = true,
}
local colorNoValue = {1, 1, 1, 0.5}
local dropdownStatusBarTexture = platerInternal.Defaults.dropdownStatusBarTexture
local dropdownStatusBarColor = platerInternal.Defaults.dropdownStatusBarColor
function platerInternal.RefreshColorDropdown(frame, dropdown, dbColors, onSelectColorCallback, keyWithValue, enabledIndex, colorIndex)
local currentValue = dropdown[keyWithValue]
if (not currentValue) then
return {}
end
local optionsTableToReturn
if (not frame.cachedColorTable) then
local colorList = {}
local colorsAlreadyAdded = {}
local dropdownOptions = {}
--add, in the top of the list, colors that are already in use
for _, colorTable in pairs(dbColors) do
local bInEnabled
if (enabledIndex) then
bInEnabled = colorTable[enabledIndex]
else
bInEnabled = true
end
local color = colorTable[colorIndex]
if (bInEnabled and not colorsAlreadyAdded[color]) then
colorsAlreadyAdded[color] = true
local r, g, b = detailsFramework:ParseColors(color)
table.insert(colorList, {{r, g, b}, color})
end
end
for index, colorTable in ipairs(colorList) do
local colortable = colorTable[1]
local colorname = colorTable[2]
table.insert(dropdownOptions, {
label = " " .. colorname,
value = colorname,
color = colortable,
onclick = onSelectColorCallback,
statusbar = dropdownStatusBarTexture,
statusbarcolor = dropdownStatusBarColor,
icon = [[Interface\AddOns\Plater\media\star_empty_64]],
iconcolor = {1, 1, 1, .6},
favorite = true,
})
end
--all colors
local allColors = {}
for colorName, colorTable in pairs(detailsFramework:GetDefaultColorList()) do
if (not colorsAlreadyAdded[colorName] and not ignoredColors[colorName]) then
table.insert(allColors, {colorTable, colorName})
end
end
table.sort(allColors, sortColors)
for index, colorTable in ipairs(allColors) do
local colortable = colorTable[1]
local colorname = colorTable[2]
table.insert(dropdownOptions, {
label = colorname,
value = colorname,
color = colortable,
onclick = onSelectColorCallback,
statusbar = dropdownStatusBarTexture,
statusbarcolor = dropdownStatusBarColor,
})
end
table.insert(dropdownOptions, 1, {
label = "no color",
value = platerInternal.RemoveColor,
color = colorNoValue,
statusbar = dropdownStatusBarTexture,
statusbarcolor = dropdownStatusBarColor,
onclick = onSelectColorCallback
})
frame.cachedColorTable = dropdownOptions
optionsTableToReturn = dropdownOptions
else
optionsTableToReturn = frame.cachedColorTable
end
local dropdownColorTableCurrentSelected = dbColors[currentValue]
if (dropdownColorTableCurrentSelected) then
local bColorIsEnabled = dropdownColorTableCurrentSelected[enabledIndex]
local colorNameInUse = dropdownColorTableCurrentSelected[colorIndex]
if (bColorIsEnabled) then
for i = 1, #optionsTableToReturn do
local option = optionsTableToReturn[i]
if (option.value ~= platerInternal.NoColor) then
option.desc = "Hold Shift to change the color of all npcs with the color " .. detailsFramework:AddColorToText(colorNameInUse, colorNameInUse) .. " to " .. detailsFramework:AddColorToText(option.value, option.value) .. "."
end
end
else
for i = 1, #optionsTableToReturn do
local option = optionsTableToReturn[i]
option.desc = nil
end
end
end
return optionsTableToReturn
end