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.

1525 lines
68 KiB

local _, Cell = ...
local L = Cell.L
local F = Cell.funcs
local B = Cell.bFuncs
local I = Cell.iFuncs
local P = Cell.pixelPerfectFuncs
local LoadData, LoadButtonStyle, LoadDebuffTypeColor
local appearanceTab = Cell:CreateFrame("CellOptionsFrame_AppearanceTab", Cell.frames.optionsFrame, nil, nil, true)
Cell.frames.appearanceTab = appearanceTab
appearanceTab:SetAllPoints(Cell.frames.optionsFrame)
appearanceTab:Hide()
-------------------------------------------------
-- cell
-------------------------------------------------
local scaleSlider, strataDropdown, accentColorDropdown, accentColorPicker, optionsFontSizeOffset, useGameFontCB
local function CreateCellPane()
local cellPane = Cell:CreateTitledPane(appearanceTab, "Cell", 422, 140)
cellPane:SetPoint("TOPLEFT", appearanceTab, "TOPLEFT", 5, -5)
-- global scale
scaleSlider = Cell:CreateSlider(L["Scale"], cellPane, 0.5, 4, 141, 0.01, nil, nil, nil, L["Scale"], L["Non-integer scaling may result in abnormal display of options UI"])
scaleSlider:SetPoint("TOPLEFT", cellPane, "TOPLEFT", 5, -40)
scaleSlider.afterValueChangedFn = function(value)
CellDB["appearance"]["scale"] = value
Cell:Fire("UpdateAppearance", "scale")
Cell:Fire("UpdatePixelPerfect")
local popup = Cell:CreateConfirmPopup(appearanceTab, 200, L["A UI reload is required.\nDo it now?"], function()
ReloadUI()
end, nil, true)
popup:SetPoint("TOPLEFT", appearanceTab, "TOPLEFT", 117, -70)
end
Cell:RegisterForCloseDropdown(scaleSlider)
-- options ui font size
optionsFontSizeOffset = Cell:CreateSlider(L["Options UI Font Size"], cellPane, -5, 5, 141, 1)
optionsFontSizeOffset:SetPoint("TOPLEFT", 222, -40)
optionsFontSizeOffset.afterValueChangedFn = function(value)
CellDB["appearance"]["optionsFontSizeOffset"] = value
Cell:UpdateOptionsFont(value, CellDB["appearance"]["useGameFont"])
Cell:UpdateAboutFont(value)
end
-- raid frame strata
strataDropdown = Cell:CreateDropdown(cellPane, 141)
strataDropdown:SetPoint("TOPLEFT", scaleSlider, 0, -50)
strataDropdown:SetItems({
{
["text"] = "LOW",
["onClick"] = function()
CellDB["appearance"]["strata"] = "LOW"
Cell:Fire("UpdateAppearance", "strata")
end,
},
{
["text"] = "MEDIUM",
["onClick"] = function()
CellDB["appearance"]["strata"] = "MEDIUM"
Cell:Fire("UpdateAppearance", "strata")
end,
},
{
["text"] = "HIGH",
["onClick"] = function()
CellDB["appearance"]["strata"] = "HIGH"
Cell:Fire("UpdateAppearance", "strata")
end,
},
})
local scaleSliderText = cellPane:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
scaleSliderText:SetPoint("BOTTOMLEFT", strataDropdown, "TOPLEFT", 0, 1)
scaleSliderText:SetText(L["Strata"])
hooksecurefunc(strataDropdown, "SetEnabled", function(self, enabled)
if enabled then
scaleSliderText:SetTextColor(1, 1, 1)
else
scaleSliderText:SetTextColor(0.4, 0.4, 0.4)
end
end)
-- accent color
accentColorDropdown = Cell:CreateDropdown(cellPane, 141)
accentColorDropdown:SetPoint("TOPLEFT", optionsFontSizeOffset, 0, -50)
accentColorDropdown:SetItems({
{
["text"] = L["Class Color"],
["value"] = "class_color",
["onClick"] = function()
if CellDB["appearance"]["accentColor"][1] ~= "class_color" then
local popup = Cell:CreateConfirmPopup(appearanceTab, 200, L["A UI reload is required.\nDo it now?"], function()
ReloadUI()
end, nil, true)
popup:SetPoint("TOPLEFT", appearanceTab, 117, -77)
end
CellDB["appearance"]["accentColor"][1] = "class_color"
accentColorPicker:SetEnabled(false)
end
},
{
["text"] = L["Custom Color"],
["value"] = "custom",
["onClick"] = function()
if CellDB["appearance"]["accentColor"][1] ~= "custom" then
local popup = Cell:CreateConfirmPopup(appearanceTab, 200, L["A UI reload is required.\nDo it now?"], function()
ReloadUI()
end, nil, true)
popup:SetPoint("TOPLEFT", appearanceTab, 117, -77)
end
CellDB["appearance"]["accentColor"][1] = "custom"
accentColorPicker:SetEnabled(true)
end
},
})
local accentColorText = cellPane:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
accentColorText:SetPoint("BOTTOMLEFT", accentColorDropdown, "TOPLEFT", 0, 1)
accentColorText:SetText(L["Options UI Accent Color"])
accentColorPicker = Cell:CreateColorPicker(cellPane, "", false, nil, function(r, g, b)
if CellDB["appearance"]["accentColor"][2][1] ~= r or CellDB["appearance"]["accentColor"][2][2] ~= g or CellDB["appearance"]["accentColor"][2][3] ~= b then
local popup = Cell:CreateConfirmPopup(appearanceTab, 200, L["A UI reload is required.\nDo it now?"], function()
ReloadUI()
end, nil, true)
popup:SetPoint("TOPLEFT", appearanceTab, 117, -77)
end
CellDB["appearance"]["accentColor"][2][1] = r
CellDB["appearance"]["accentColor"][2][2] = g
CellDB["appearance"]["accentColor"][2][3] = b
end)
accentColorPicker:SetPoint("LEFT", accentColorDropdown, "RIGHT", 5, 0)
Cell:RegisterForCloseDropdown(accentColorPicker)
-- use game font
useGameFontCB = Cell:CreateCheckButton(cellPane, "Use Game Font", function(checked)
CellDB["appearance"]["useGameFont"] = checked
Cell:UpdateOptionsFont(CellDB["appearance"]["optionsFontSizeOffset"], checked)
end)
useGameFontCB:SetPoint("TOPLEFT", strataDropdown, 0, -32)
if Cell.isAsian then
useGameFontCB:Hide()
end
end
-------------------------------------------------
-- preview icons
-------------------------------------------------
local previewIconsBG, borderIcon1, borderIcon2, barIcon1, barIcon2
local function SetOnUpdate(indicator, type, icon, stack)
indicator.preview = indicator.preview or CreateFrame("Frame", nil, indicator)
indicator.preview:SetScript("OnUpdate", function(self, elapsed)
self.elapsedTime = (self.elapsedTime or 0) + elapsed
if self.elapsedTime >= 13 then
self.elapsedTime = 0
indicator:SetCooldown(GetTime(), 13, type, icon, stack)
end
end)
indicator:SetScript("OnShow", function()
indicator.preview.elapsedTime = 0
indicator:SetCooldown(GetTime(), 13, type, icon, stack)
end)
end
-- local function SetOnUpdate_Refresh(indicator, type, icon, stack)
-- indicator.preview = indicator.preview or CreateFrame("Frame", nil, indicator)
-- indicator.preview:SetScript("OnUpdate", function(self, elapsed)
-- self.elapsedTime = (self.elapsedTime or 0) + elapsed
-- if self.elapsedTime >= 5 then
-- self.elapsedTime = 0
-- indicator:SetCooldown(GetTime(), 13, type, icon, stack, true)
-- end
-- end)
-- indicator:SetScript("OnShow", function()
-- indicator.preview.elapsedTime = 0
-- indicator:SetCooldown(GetTime(), 13, type, icon, stack)
-- end)
-- end
--[=[ update font
local function UpdatePreviewIcons(layout, indicatorName, setting, value, value2)
if not indicatorName or indicatorName == "raidDebuffs" then
borderIcon1:SetFont(unpack(Cell.vars.currentLayoutTable.indicators[Cell.defaults.indicatorIndices["raidDebuffs"]].font))
borderIcon2:SetFont(unpack(Cell.vars.currentLayoutTable.indicators[Cell.defaults.indicatorIndices["raidDebuffs"]].font))
end
if not indicatorName or indicatorName == "debuffs" then
barIcon1:SetFont(unpack(Cell.vars.currentLayoutTable.indicators[Cell.defaults.indicatorIndices["debuffs"]].font))
barIcon2:SetFont(unpack(Cell.vars.currentLayoutTable.indicators[Cell.defaults.indicatorIndices["debuffs"]].font))
end
end]=]
local previewIconsFont = {
{"Cell ".._G.DEFAULT, 11, "Outline", "TOPRIGHT", 2, 1},
{"Cell ".._G.DEFAULT, 11, "Outline", "BOTTOMRIGHT", 2, -1},
}
local function CreatePreviewIcons()
previewIconsBG = Cell:CreateFrame("CellAppearancePreviewIconsBG", appearanceTab)
previewIconsBG:SetPoint("TOPLEFT", appearanceTab, "TOPRIGHT", 5, -160)
P:Size(previewIconsBG, 95, 45)
Cell:StylizeFrame(previewIconsBG, {0.1, 0.1, 0.1, 0.77}, {0, 0, 0, 0})
previewIconsBG:Show()
local previewText = previewIconsBG:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET_TITLE")
previewText:SetPoint("TOP", 0, -3)
previewText:SetText(Cell:GetAccentColorString()..L["Preview"].." 1")
borderIcon1 = I:CreateAura_BorderIcon("CellAppearancePreviewIcon1", previewIconsBG, 2)
borderIcon1:SetFont(unpack(previewIconsFont))
P:Size(borderIcon1, 22, 22)
borderIcon1:SetPoint("BOTTOMLEFT")
SetOnUpdate(borderIcon1, "Magic", 135819, 0)
borderIcon1:Show()
borderIcon2 = I:CreateAura_BorderIcon("CellAppearancePreviewIcon2", previewIconsBG, 2)
borderIcon2:SetFont(unpack(previewIconsFont))
P:Size(borderIcon2, 22, 22)
borderIcon2:SetPoint("BOTTOMLEFT", borderIcon1, "BOTTOMRIGHT", P:Scale(1), 0)
borderIcon2.preview = CreateFrame("Frame", nil, borderIcon2)
borderIcon2.preview:SetScript("OnUpdate", function(self, elapsed)
self.elapsedTime = (self.elapsedTime or 0) + elapsed
if self.elapsedTime >= 6 then
self.elapsedTime = 0
self.stack = self.stack + 1
borderIcon2:SetCooldown(GetTime(), 13, "", 135718, self.stack, Cell.vars.iconAnimation ~= "never")
end
end)
borderIcon2:SetScript("OnShow", function()
borderIcon2.preview.stack = 1
borderIcon2.preview.elapsedTime = 0
borderIcon2:SetCooldown(GetTime(), 13, "", 135718, 1)
end)
borderIcon2:Show()
barIcon2 = I:CreateAura_BarIcon("CellAppearancePreviewIcon4", previewIconsBG)
barIcon2:SetFont(unpack(previewIconsFont))
P:Size(barIcon2, 22, 22)
barIcon2:SetPoint("BOTTOMRIGHT")
barIcon2.preview = CreateFrame("Frame", nil, barIcon2)
barIcon2.preview:SetScript("OnUpdate", function(self, elapsed)
self.elapsedTime = (self.elapsedTime or 0) + elapsed
if self.elapsedTime >= 6 then
self.elapsedTime = 0
barIcon2:SetCooldown(GetTime(), 13, nil, 136085, 0, Cell.vars.iconAnimation == "duration")
end
end)
barIcon2:SetScript("OnShow", function()
barIcon2.preview.elapsedTime = 0
barIcon2:SetCooldown(GetTime(), 13, nil, 136085, 0)
end)
barIcon2:ShowAnimation(true)
barIcon2:Show()
barIcon1 = I:CreateAura_BarIcon("CellAppearancePreviewIcon3", previewIconsBG)
barIcon1:SetFont(unpack(previewIconsFont))
P:Size(barIcon1, 22, 22)
barIcon1:SetPoint("BOTTOMRIGHT", barIcon2, "BOTTOMLEFT", P:Scale(-1), 0)
barIcon1:ShowDuration(true)
barIcon1:ShowAnimation(true)
SetOnUpdate(barIcon1, "", 132155, 5)
barIcon1:Show()
-- display debuff type colors
-- curse_border = I:CreateAura_BorderIcon("CellAppearancePreviewIconCurse1", previewIconsBG, 2)
-- P:Size(curse_border, 22 ,22)
-- curse_border:SetPoint("TOPLEFT", borderIcon1, "BOTTOMLEFT", 0, P:Scale(-1))
-- curse_border:SetCooldown(0, 0, "Curse", 136139, 0)
-- curse_border:Show()
-- disease_border = I:CreateAura_BorderIcon("CellAppearancePreviewIconDisease1", previewIconsBG, 2)
-- P:Size(disease_border, 22 ,22)
-- disease_border:SetPoint("TOPLEFT", curse_border, "TOPRIGHT", P:Scale(1), 0)
-- disease_border:SetCooldown(0, 0, "Disease", 136128, 0)
-- disease_border:Show()
-- magic_border = I:CreateAura_BorderIcon("CellAppearancePreviewIconMagic1", previewIconsBG, 2)
-- P:Size(magic_border, 22 ,22)
-- magic_border:SetPoint("TOPLEFT", disease_border, "TOPRIGHT", P:Scale(1), 0)
-- magic_border:SetCooldown(0, 0, "Magic", 240443, 0)
-- magic_border:Show()
-- poison_border = I:CreateAura_BorderIcon("CellAppearancePreviewIconPoison1", previewIconsBG, 2)
-- P:Size(poison_border, 22 ,22)
-- poison_border:SetPoint("TOPLEFT", magic_border, "TOPRIGHT", P:Scale(1), 0)
-- poison_border:SetCooldown(0, 0, "Poison", 136182, 0)
-- poison_border:Show()
-- UpdatePreviewIcons()
end
-------------------------------------------------
-- preview button
-------------------------------------------------
local previewButton, previewButton2
local function CreatePreviewButtons()
previewButton = CreateFrame("Button", "CellAppearancePreviewButton", appearanceTab, "CellPreviewButtonTemplate")
-- previewButton.type = "main" -- layout setup
previewButton:SetPoint("TOPLEFT", previewIconsBG, "BOTTOMLEFT", 0, -50)
previewButton:UnregisterAllEvents()
previewButton:SetScript("OnEnter", nil)
previewButton:SetScript("OnLeave", nil)
previewButton:SetScript("OnUpdate", nil)
previewButton:Show()
previewButton.previewHealthText = previewButton.widget.overlayFrame:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
previewButton.previewHealthText:SetPoint("CENTER")
previewButton.widget.healthBar:SetMinMaxSmoothedValue(0, 100)
previewButton.widget.healthBar:SetMinMaxValues(0, 100)
previewButton.widget.powerBar:SetMinMaxValues(0, 1)
previewButton.widget.powerBar:SetValue(1)
local previewButtonBG = Cell:CreateFrame("CellAppearancePreviewButtonBG", appearanceTab)
previewButtonBG:SetPoint("TOPLEFT", previewButton, 0, 20)
previewButtonBG:SetPoint("BOTTOMRIGHT", previewButton, "TOPRIGHT")
Cell:StylizeFrame(previewButtonBG, {0.1, 0.1, 0.1, 0.77}, {0, 0, 0, 0})
previewButtonBG:Show()
local previewText = previewButtonBG:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET_TITLE")
previewText:SetPoint("TOP", 0, -3)
previewText:SetText(Cell:GetAccentColorString()..L["Preview"].." 2")
previewButton2 = CreateFrame("Button", "CellAppearancePreviewButton2", appearanceTab, "CellPreviewButtonTemplate")
-- previewButton2.type = "main" -- layout setup
previewButton2:SetPoint("TOPLEFT", previewButton, "BOTTOMLEFT", 0, -50)
previewButton2:UnregisterAllEvents()
previewButton2:SetScript("OnEnter", nil)
previewButton2:SetScript("OnLeave", nil)
previewButton2:SetScript("OnUpdate", nil)
previewButton2:Show()
previewButton2.widget.powerBar:SetMinMaxValues(0, 1)
previewButton2.widget.powerBar:SetValue(1)
local previewButtonBG2 = Cell:CreateFrame("CellAppearancePreviewButtonBG2", appearanceTab)
previewButtonBG2:SetPoint("TOPLEFT", previewButton2, 0, 20)
previewButtonBG2:SetPoint("BOTTOMRIGHT", previewButton2, "TOPRIGHT")
Cell:StylizeFrame(previewButtonBG2, {0.1, 0.1, 0.1, 0.77}, {0, 0, 0, 0})
previewButtonBG2:Show()
local previewText2 = previewButtonBG2:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET_TITLE")
previewText2:SetPoint("TOP", 0, -3)
previewText2:SetText(Cell:GetAccentColorString()..L["Preview"].." 3")
-- animation
local states = {-20, -30, -40, 50, -60, 0, 100, 0}
local ticker
previewButton:SetScript("OnShow", function()
previewButton.perc = 1
previewButton.widget.healthBar:SetValue(100)
-- previewButton.widget.healthBar:SetSmoothedValue(100)
previewButton.previewHealthText:SetText("100%")
local health, healthPercent, healthPercentOld, currentState = 100, 1, 1, 1
ticker = C_Timer.NewTicker(1, function()
health = health + states[currentState]
healthPercent = health / 100
previewButton.perc = healthPercent
if CellDB["appearance"]["barAnimation"] == "Flash" then
previewButton.widget.healthBar:SetValue(health)
local diff = healthPercent - (healthPercentOld or healthPercent)
if diff >= 0 then
previewButton.func.HideFlash()
-- previewButton.widget.damageFlashTex:Hide()
elseif diff <= -0.05 and diff >= -1 then
previewButton.func.ShowFlash(abs(diff))
-- print(abs(diff))
end
elseif CellDB["appearance"]["barAnimation"] == "Smooth" then
previewButton.widget.healthBar:SetSmoothedValue(health)
else
previewButton.widget.healthBar:SetValue(health)
end
-- update text
if health == 0 then
previewButton.previewHealthText:SetText(L["DEAD"])
else
previewButton.previewHealthText:SetText(health.."%")
end
-- update color
local r, g, b, lossR, lossG, lossB = F:GetHealthColor(healthPercent, health == 0, F:GetClassColor(Cell.vars.playerClass))
previewButton.widget.healthBar:SetStatusBarColor(r, g, b, CellDB["appearance"]["barAlpha"])
previewButton.widget.healthBarLoss:SetVertexColor(lossR, lossG, lossB, CellDB["appearance"]["lossAlpha"])
healthPercentOld = healthPercent
currentState = currentState == 8 and 1 or (currentState + 1)
end)
end)
previewButton:SetScript("OnHide", function()
previewButton.perc = 100
ticker:Cancel()
ticker = nil
end)
Cell:Fire("CreatePreview", previewButton, previewButton2)
end
local function UpdatePreviewShields(r, g, b)
if CellDB["appearance"]["healPrediction"][1] then
previewButton2.widget.incomingHeal:SetValue(0.2)
if CellDB["appearance"]["healPrediction"][2] then
previewButton2.widget.incomingHeal:SetVertexColor(CellDB["appearance"]["healPrediction"][3][1], CellDB["appearance"]["healPrediction"][3][2], CellDB["appearance"]["healPrediction"][3][3], CellDB["appearance"]["healPrediction"][3][4])
else
previewButton2.widget.incomingHeal:SetVertexColor(r, g, b, 0.4)
end
else
previewButton2.widget.incomingHeal:Hide()
end
if Cell.isRetail then
if CellDB["appearance"]["healAbsorb"][1] then
previewButton2.widget.absorbsBar:SetValue(0.3)
previewButton2.widget.absorbsBar:SetVertexColor(CellDB["appearance"]["healAbsorb"][2][1], CellDB["appearance"]["healAbsorb"][2][2], CellDB["appearance"]["healAbsorb"][2][3], CellDB["appearance"]["healAbsorb"][2][4])
else
previewButton2.widget.absorbsBar:Hide()
end
end
if Cell.isRetail or Cell.isCata then
if CellDB["appearance"]["shield"][1] then
previewButton2.widget.shieldBar:SetValue(0.4)
previewButton2.widget.shieldBar:SetVertexColor(CellDB["appearance"]["shield"][2][1], CellDB["appearance"]["shield"][2][2], CellDB["appearance"]["shield"][2][3], CellDB["appearance"]["shield"][2][4])
else
previewButton2.widget.shieldBar:Hide()
end
if CellDB["appearance"]["overshield"] then
previewButton2.widget.overShieldGlow:SetVertexColor(CellDB["appearance"]["shield"][2][1], CellDB["appearance"]["shield"][2][2], CellDB["appearance"]["shield"][2][3], 1)
previewButton2.widget.overShieldGlow:Show()
else
previewButton2.widget.overShieldGlow:Hide()
end
end
end
local function UpdatePreviewButton()
previewButton.widget.healthBar:SetStatusBarTexture(Cell.vars.texture)
previewButton.widget.healthBarLoss:SetTexture(Cell.vars.texture)
previewButton.widget.powerBar:SetStatusBarTexture(Cell.vars.texture)
previewButton.widget.powerBarLoss:SetTexture(Cell.vars.texture)
previewButton.widget.incomingHeal:SetTexture(Cell.vars.texture)
previewButton.widget.damageFlashTex:SetTexture(Cell.vars.texture)
previewButton2.widget.healthBar:SetStatusBarTexture(Cell.vars.texture)
previewButton2.widget.healthBarLoss:SetTexture(Cell.vars.texture)
previewButton2.widget.powerBar:SetStatusBarTexture(Cell.vars.texture)
previewButton2.widget.powerBarLoss:SetTexture(Cell.vars.texture)
previewButton2.widget.incomingHeal:SetTexture(Cell.vars.texture)
previewButton2.widget.damageFlashTex:SetTexture(Cell.vars.texture)
-- power color
local r, g, b = F:GetPowerColor("player", Cell.vars.playerClass)
previewButton.widget.powerBar:SetStatusBarColor(r, g, b)
previewButton2.widget.powerBar:SetStatusBarColor(r, g, b)
-- alpha
previewButton:SetBackdropColor(0, 0, 0, CellDB["appearance"]["bgAlpha"])
previewButton2:SetBackdropColor(0, 0, 0, CellDB["appearance"]["bgAlpha"])
-- barOrientation
B:SetOrientation(previewButton, Cell.vars.currentLayoutTable["barOrientation"][1], Cell.vars.currentLayoutTable["barOrientation"][2])
B:SetOrientation(previewButton2, Cell.vars.currentLayoutTable["barOrientation"][1], Cell.vars.currentLayoutTable["barOrientation"][2])
-- size
P:Size(previewButton, Cell.vars.currentLayoutTable["main"]["size"][1], Cell.vars.currentLayoutTable["main"]["size"][2])
B:SetPowerSize(previewButton, Cell.vars.currentLayoutTable["main"]["powerSize"])
P:Size(previewButton2, Cell.vars.currentLayoutTable["main"]["size"][1], Cell.vars.currentLayoutTable["main"]["size"][2])
B:SetPowerSize(previewButton2, Cell.vars.currentLayoutTable["main"]["powerSize"])
previewButton2.widget.healthBar:SetMinMaxValues(0, 100)
previewButton2.widget.healthBar:SetValue(60)
previewButton2.state.healthMax = 100
previewButton2.state.healthPercent = 0.6
-- health color
local r, g, b, lossR, lossG, lossB
r, g, b, lossR, lossG, lossB = F:GetHealthColor(previewButton.perc or 1, previewButton.perc == 0, F:GetClassColor(Cell.vars.playerClass))
previewButton.widget.healthBar:SetStatusBarColor(r, g, b, CellDB["appearance"]["barAlpha"])
previewButton.widget.healthBarLoss:SetVertexColor(lossR, lossG, lossB, CellDB["appearance"]["lossAlpha"])
r, g, b, lossR, lossG, lossB = F:GetHealthColor(0.6, false, F:GetClassColor(Cell.vars.playerClass))
previewButton2.widget.healthBar:SetStatusBarColor(r, g, b, CellDB["appearance"]["barAlpha"])
previewButton2.widget.healthBarLoss:SetVertexColor(lossR, lossG, lossB, CellDB["appearance"]["lossAlpha"])
UpdatePreviewShields(r, g, b)
previewButton.loaded = true
Cell:Fire("UpdatePreview", previewButton, previewButton2)
end
-------------------------------------------------
-- unitbutton
-------------------------------------------------
local textureDropdown, barColorDropdown, barColorPicker, fullColorCB, fullColorPicker, lossColorDropdown, lossColorPicker, deathColorCB, deathColorPicker, powerColorDropdown, powerColorPicker, barAnimationDropdown, targetColorPicker, mouseoverColorPicker, highlightSize
local gradientColorCB1, gradientColorCB2, gradientColorCB3
local barAlpha, lossAlpha, bgAlpha, oorAlpha, predCB, useLibCB, absorbCB, shieldCB, oversCB
local predCustomCB, predColorPicker, absorbColorPicker, shieldColorPicker
local iconOptionsBtn, iconOptionsFrame, iconAnimationDropdown, durationRoundUpCB, durationDecimalText1, durationDecimalText2, durationDecimalDropdown, durationColorCB, durationNormalCP, durationPercentCP, durationSecondCP, durationPercentDD, durationSecondEB, durationSecondText
local LSM = LibStub("LibSharedMedia-3.0", true)
local function CheckTextures()
local items = {}
local textures, textureNames
local defaultTexture, defaultTextureName = "Interface\\AddOns\\Cell\\Media\\statusbar.tga", "Cell ".._G.DEFAULT
-- if LSM then
textures, textureNames = F:Copy(LSM:HashTable("statusbar")), F:Copy(LSM:List("statusbar"))
-- make default texture first
F:TRemove(textureNames, defaultTextureName)
tinsert(textureNames, 1, defaultTextureName)
for _, name in pairs(textureNames) do
tinsert(items, {
["text"] = name,
["texture"] = textures[name],
["onClick"] = function()
CellDB["appearance"]["texture"] = name
F:GetBarTexture() -- update Cell.vars.texture NOW
Cell:Fire("UpdateAppearance", "texture")
end,
})
end
-- else
-- textureNames = {defaultTextureName}
-- textures = {[defaultTextureName] = defaultTexture}
-- tinsert(items, {
-- ["text"] = defaultTextureName,
-- ["texture"] = defaultTexture,
-- ["onClick"] = function()
-- CellDB["appearance"]["texture"] = defaultTextureName
-- F:GetBarTexture() -- update Cell.vars.texture NOW
-- Cell:Fire("UpdateAppearance", "texture")
-- end,
-- })
-- end
textureDropdown:SetItems(items)
-- validation
if textures[CellDB["appearance"]["texture"]] then
textureDropdown:SetSelected(CellDB["appearance"]["texture"], textures[CellDB["appearance"]["texture"]])
else
textureDropdown:SetSelected(defaultTextureName, defaultTexture)
end
end
local function CreateIconOptionsFrame()
if not appearanceTab.mask then
Cell:CreateMask(appearanceTab, nil, {1, -1, -1, 1})
appearanceTab.mask:Hide()
end
iconOptionsFrame = Cell:CreateFrame("CellOptionsFrame_IconOptions", appearanceTab, 230, 235)
iconOptionsFrame:SetBackdropBorderColor(unpack(Cell:GetAccentColorTable()))
iconOptionsFrame:SetPoint("TOP", iconOptionsBtn, "BOTTOM", 0, -5)
iconOptionsFrame:SetPoint("RIGHT", -5, 0)
iconOptionsFrame:SetFrameLevel(appearanceTab:GetFrameLevel() + 50)
iconOptionsFrame:SetScript("OnShow", function()
appearanceTab.mask:Show()
iconOptionsBtn:SetFrameLevel(appearanceTab:GetFrameLevel() + 50)
end)
iconOptionsFrame:SetScript("OnHide", function()
iconOptionsFrame:Hide()
appearanceTab.mask:Hide()
iconOptionsBtn:SetFrameLevel(appearanceTab:GetFrameLevel() + 1)
end)
-- icon animation
iconAnimationDropdown = Cell:CreateDropdown(iconOptionsFrame, 180)
iconAnimationDropdown:SetPoint("TOPLEFT", iconOptionsFrame, 10, -25)
iconAnimationDropdown:SetItems({
{
["text"] = L["+ Stack & Duration"],
["value"] = "duration",
["onClick"] = function()
CellDB["appearance"]["auraIconOptions"]["animation"] = "duration"
Cell:Fire("UpdateAppearance", "icon")
end,
},
{
["text"] = L["+ Stack"],
["value"] = "stack",
["onClick"] = function()
CellDB["appearance"]["auraIconOptions"]["animation"] = "stack"
Cell:Fire("UpdateAppearance", "icon")
end,
},
{
["text"] = L["Never"],
["value"] = "never",
["onClick"] = function()
CellDB["appearance"]["auraIconOptions"]["animation"] = "never"
Cell:Fire("UpdateAppearance", "icon")
end,
},
})
local iconAnimationText = iconOptionsFrame:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
iconAnimationText:SetPoint("BOTTOMLEFT", iconAnimationDropdown, "TOPLEFT", 0, 1)
iconAnimationText:SetText(L["Play Icon Animation When"])
-- duration round up
durationRoundUpCB = Cell:CreateCheckButton(iconOptionsFrame, L["Round Up Duration Text"], function(checked, self)
CellDropdownList:Hide()
CellDB["appearance"]["auraIconOptions"]["durationRoundUp"] = checked
Cell:SetEnabled(not checked, durationDecimalText1, durationDecimalText2, durationDecimalDropdown)
Cell:Fire("UpdateAppearance", "icon")
end)
durationRoundUpCB:SetPoint("TOPLEFT", iconAnimationDropdown, "BOTTOMLEFT", 0, -22)
-- duration decimal
durationDecimalText1 = iconOptionsFrame:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
durationDecimalText1:SetPoint("TOPLEFT", durationRoundUpCB, "BOTTOMLEFT", 0, -10)
durationDecimalText1:SetText(L["Display One Decimal Place When"])
durationDecimalText2 = iconOptionsFrame:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
durationDecimalText2:SetPoint("TOPLEFT", durationDecimalText1, "BOTTOMLEFT", 0, -5)
durationDecimalText2:SetText(L["Remaining Time <"])
durationDecimalDropdown = Cell:CreateDropdown(iconOptionsFrame, 60)
durationDecimalDropdown:SetPoint("LEFT", durationDecimalText2, "RIGHT", 5, 0)
local items = {}
for i = 5, 0, -1 do
tinsert(items, {
["text"] = i == 0 and _G.NONE or i,
["value"] = i,
["onClick"] = function()
CellDB["appearance"]["auraIconOptions"]["durationDecimal"] = i
Cell:Fire("UpdateAppearance", "icon")
end
})
end
durationDecimalDropdown:SetItems(items)
-- duration text color
durationColorCB = Cell:CreateCheckButton(iconOptionsFrame, L["Color Duration Text"], function(checked, self)
CellDropdownList:Hide()
-- restore sec
durationSecondEB:SetText(CellDB["appearance"]["auraIconOptions"]["durationColors"][3][4])
durationSecondEB.confirmBtn:Hide()
CellDB["appearance"]["auraIconOptions"]["durationColorEnabled"] = checked
Cell:SetEnabled(checked, durationNormalCP, durationPercentCP, durationPercentDD, durationSecondCP, durationSecondEB, durationSecondText)
Cell:Fire("UpdateAppearance", "icon")
end)
durationColorCB:SetPoint("TOPLEFT", durationRoundUpCB, "BOTTOMLEFT", 0, -63)
durationNormalCP = Cell:CreateColorPicker(iconOptionsFrame, L["Normal"], false, function(r, g, b)
CellDB["appearance"]["auraIconOptions"]["durationColors"][1][1] = r
CellDB["appearance"]["auraIconOptions"]["durationColors"][1][2] = g
CellDB["appearance"]["auraIconOptions"]["durationColors"][1][3] = b
Cell:Fire("UpdateAppearance", "icon")
end)
durationNormalCP:SetPoint("TOPLEFT", durationColorCB, "BOTTOMLEFT", 0, -8)
durationPercentCP = Cell:CreateColorPicker(iconOptionsFrame, L["Remaining Time <"], false, function(r, g, b)
CellDB["appearance"]["auraIconOptions"]["durationColors"][2][1] = r
CellDB["appearance"]["auraIconOptions"]["durationColors"][2][2] = g
CellDB["appearance"]["auraIconOptions"]["durationColors"][2][3] = b
Cell:Fire("UpdateAppearance", "icon")
end)
durationPercentCP:SetPoint("TOPLEFT", durationNormalCP, "BOTTOMLEFT", 0, -8)
durationSecondCP = Cell:CreateColorPicker(iconOptionsFrame, L["Remaining Time <"], false, function(r, g, b)
CellDB["appearance"]["auraIconOptions"]["durationColors"][3][1] = r
CellDB["appearance"]["auraIconOptions"]["durationColors"][3][2] = g
CellDB["appearance"]["auraIconOptions"]["durationColors"][3][3] = b
Cell:Fire("UpdateAppearance", "icon")
end)
durationSecondCP:SetPoint("TOPLEFT", durationPercentCP, "BOTTOMLEFT", 0, -8)
durationPercentDD = Cell:CreateDropdown(iconOptionsFrame, 60)
durationPercentDD:SetPoint("LEFT", durationPercentCP.label, "RIGHT", 5, 0)
durationPercentDD:SetItems({
{
["text"] = "75%",
["value"] = 0.75,
["onClick"] = function()
CellDB["appearance"]["auraIconOptions"]["durationColors"][2][4] = 0.75
Cell:Fire("UpdateAppearance", "icon")
end,
},
{
["text"] = "50%",
["value"] = 0.5,
["onClick"] = function()
CellDB["appearance"]["auraIconOptions"]["durationColors"][2][4] = 0.5
Cell:Fire("UpdateAppearance", "icon")
end,
},
{
["text"] = "25%",
["value"] = 0.25,
["onClick"] = function()
CellDB["appearance"]["auraIconOptions"]["durationColors"][2][4] = 0.25
Cell:Fire("UpdateAppearance", "icon")
end,
},
{
["text"] = _G.NONE,
["value"] = 0,
["onClick"] = function()
CellDB["appearance"]["auraIconOptions"]["durationColors"][2][4] = 0
Cell:Fire("UpdateAppearance", "icon")
end,
},
})
durationSecondEB = Cell:CreateEditBox(iconOptionsFrame, 43, 20, false, false, true)
durationSecondEB:SetPoint("LEFT", durationSecondCP.label, "RIGHT", 5, 0)
durationSecondEB:SetMaxLetters(4)
durationSecondEB.confirmBtn = Cell:CreateButton(iconOptionsFrame, "OK", "accent", {27, 20})
durationSecondEB.confirmBtn:SetPoint("LEFT", durationSecondEB, "RIGHT", -1, 0)
durationSecondEB.confirmBtn:Hide()
durationSecondEB.confirmBtn:SetScript("OnHide", function()
durationSecondEB.confirmBtn:Hide()
end)
durationSecondEB.confirmBtn:SetScript("OnClick", function()
local newSec = tonumber(durationSecondEB:GetText())
durationSecondEB:SetText(newSec)
durationSecondEB.confirmBtn:Hide()
CellDB["appearance"]["auraIconOptions"]["durationColors"][3][4] = newSec
Cell:Fire("UpdateAppearance", "icon")
end)
durationSecondEB:SetScript("OnTextChanged", function(self, userChanged)
if userChanged then
local newSec = tonumber(self:GetText())
if newSec and newSec ~= "" then
durationSecondEB.confirmBtn:Show()
else
durationSecondEB.confirmBtn:Hide()
end
end
end)
durationSecondText = iconOptionsFrame:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
durationSecondText:SetPoint("LEFT", durationSecondEB, "RIGHT", 5, 0)
durationSecondText:SetText(L["sec"])
end
local function CreateUnitButtonStylePane()
local unitButtonPane = Cell:CreateTitledPane(appearanceTab, L["Unit Button Style"], 422, 410)
unitButtonPane:SetPoint("TOPLEFT", appearanceTab, "TOPLEFT", 5, -160)
-- texture
textureDropdown = Cell:CreateDropdown(unitButtonPane, 160, "texture")
textureDropdown:SetPoint("TOPLEFT", unitButtonPane, "TOPLEFT", 5, -42)
local textureText = unitButtonPane:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
textureText:SetPoint("BOTTOMLEFT", textureDropdown, "TOPLEFT", 0, 1)
textureText:SetText(L["Texture"])
-- bar color
barColorDropdown = Cell:CreateDropdown(unitButtonPane, 141)
barColorDropdown:SetPoint("TOPLEFT", textureDropdown, "BOTTOMLEFT", 0, -30)
barColorDropdown:SetItems({
{
["text"] = L["Class Color"],
["value"] = "class_color",
["onClick"] = function()
CellDB["appearance"]["barColor"][1] = "class_color"
barColorPicker:SetEnabled(false)
Cell:Fire("UpdateAppearance", "color")
end,
},
{
["text"] = L["Class Color (dark)"],
["value"] = "class_color_dark",
["onClick"] = function()
CellDB["appearance"]["barColor"][1] = "class_color_dark"
barColorPicker:SetEnabled(false)
Cell:Fire("UpdateAppearance", "color")
end,
},
{
["text"] = L["Gradient"].." A",
["value"] = "gradient",
["onClick"] = function()
CellDB["appearance"]["barColor"][1] = "gradient"
barColorPicker:SetEnabled(false)
Cell:Fire("UpdateAppearance", "color")
end,
},
{
["text"] = L["Gradient"].." B",
["value"] = "gradient2",
["onClick"] = function()
CellDB["appearance"]["barColor"][1] = "gradient2"
barColorPicker:SetEnabled(false)
Cell:Fire("UpdateAppearance", "color")
end,
},
{
["text"] = L["Custom Color"],
["value"] = "custom",
["onClick"] = function()
CellDB["appearance"]["barColor"][1] = "custom"
barColorPicker:SetEnabled(true)
Cell:Fire("UpdateAppearance", "color")
end,
},
})
local barColorText = unitButtonPane:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
barColorText:SetPoint("BOTTOMLEFT", barColorDropdown, "TOPLEFT", 0, 1)
barColorText:SetText(L["Health Bar Color"])
barColorPicker = Cell:CreateColorPicker(unitButtonPane, "", false, function(r, g, b)
CellDB["appearance"]["barColor"][2][1] = r
CellDB["appearance"]["barColor"][2][2] = g
CellDB["appearance"]["barColor"][2][3] = b
if CellDB["appearance"]["barColor"][1] == "custom" then
Cell:Fire("UpdateAppearance", "color")
end
end)
barColorPicker:SetPoint("LEFT", barColorDropdown, "RIGHT", 5, 0)
-- full hp color
fullColorCB = Cell:CreateCheckButton(unitButtonPane, "", function(checked, self)
CellDB["appearance"]["fullColor"][1] = checked
fullColorPicker:SetEnabled(checked)
Cell:Fire("UpdateAppearance", "fullColor")
end, L["Enable Full Health Color"])
fullColorCB:SetPoint("TOPLEFT", barColorPicker, "TOPRIGHT", 2, 0)
fullColorPicker = Cell:CreateColorPicker(unitButtonPane, "", false, function(r, g, b)
CellDB["appearance"]["fullColor"][2][1] = r
CellDB["appearance"]["fullColor"][2][2] = g
CellDB["appearance"]["fullColor"][2][3] = b
if CellDB["appearance"]["fullColor"][1] then
Cell:Fire("UpdateAppearance", "fullColor")
end
end)
fullColorPicker:SetPoint("TOPLEFT", fullColorCB, "TOPRIGHT", 2, 0)
-- loss color
lossColorDropdown = Cell:CreateDropdown(unitButtonPane, 141)
lossColorDropdown:SetPoint("TOPLEFT", barColorDropdown, "BOTTOMLEFT", 0, -30)
lossColorDropdown:SetItems({
{
["text"] = L["Class Color"],
["value"] = "class_color",
["onClick"] = function()
CellDB["appearance"]["lossColor"][1] = "class_color"
lossColorPicker:SetEnabled(false)
Cell:Fire("UpdateAppearance", "color")
end,
},
{
["text"] = L["Class Color (dark)"],
["value"] = "class_color_dark",
["onClick"] = function()
CellDB["appearance"]["lossColor"][1] = "class_color_dark"
lossColorPicker:SetEnabled(false)
Cell:Fire("UpdateAppearance", "color")
end,
},
{
["text"] = L["Gradient"].." A",
["value"] = "gradient",
["onClick"] = function()
CellDB["appearance"]["lossColor"][1] = "gradient"
lossColorPicker:SetEnabled(false)
Cell:Fire("UpdateAppearance", "color")
end,
},
{
["text"] = L["Gradient"].." B",
["value"] = "gradient2",
["onClick"] = function()
CellDB["appearance"]["lossColor"][1] = "gradient2"
lossColorPicker:SetEnabled(false)
Cell:Fire("UpdateAppearance", "color")
end,
},
{
["text"] = L["Custom Color"],
["value"] = "custom",
["onClick"] = function()
CellDB["appearance"]["lossColor"][1] = "custom"
lossColorPicker:SetEnabled(true)
Cell:Fire("UpdateAppearance", "color")
end,
},
})
local lossColorText = unitButtonPane:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
lossColorText:SetPoint("BOTTOMLEFT", lossColorDropdown, "TOPLEFT", 0, 1)
lossColorText:SetText(L["Health Loss Color"])
lossColorPicker = Cell:CreateColorPicker(unitButtonPane, "", false, function(r, g, b)
CellDB["appearance"]["lossColor"][2][1] = r
CellDB["appearance"]["lossColor"][2][2] = g
CellDB["appearance"]["lossColor"][2][3] = b
if CellDB["appearance"]["lossColor"][1] == "custom" then
Cell:Fire("UpdateAppearance", "color")
end
end)
lossColorPicker:SetPoint("LEFT", lossColorDropdown, "RIGHT", 5, 0)
-- death color
deathColorCB = Cell:CreateCheckButton(unitButtonPane, "", function(checked, self)
CellDB["appearance"]["deathColor"][1] = checked
deathColorPicker:SetEnabled(checked)
Cell:Fire("UpdateAppearance", "deathColor")
end, L["Enable Death Color"])
deathColorCB:SetPoint("TOPLEFT", lossColorPicker, "TOPRIGHT", 2, 0)
deathColorPicker = Cell:CreateColorPicker(unitButtonPane, "", false, function(r, g, b)
CellDB["appearance"]["deathColor"][2][1] = r
CellDB["appearance"]["deathColor"][2][2] = g
CellDB["appearance"]["deathColor"][2][3] = b
if CellDB["appearance"]["deathColor"][1] then
Cell:Fire("UpdateAppearance", "deathColor")
end
end)
deathColorPicker:SetPoint("TOPLEFT", deathColorCB, "TOPRIGHT", 2, 0)
-- power color
powerColorDropdown = Cell:CreateDropdown(unitButtonPane, 141)
powerColorDropdown:SetPoint("TOPLEFT", lossColorDropdown, "BOTTOMLEFT", 0, -30)
powerColorDropdown:SetItems({
{
["text"] = L["Power Color"],
["value"] = "power_color",
["onClick"] = function()
CellDB["appearance"]["powerColor"][1] = "power_color"
powerColorPicker:SetEnabled(false)
Cell:Fire("UpdateAppearance", "color")
end,
},
{
["text"] = L["Power Color (dark)"],
["value"] = "power_color_dark",
["onClick"] = function()
CellDB["appearance"]["powerColor"][1] = "power_color_dark"
powerColorPicker:SetEnabled(false)
Cell:Fire("UpdateAppearance", "color")
end,
},
{
["text"] = L["Class Color"],
["value"] = "class_color",
["onClick"] = function()
CellDB["appearance"]["powerColor"][1] = "class_color"
powerColorPicker:SetEnabled(false)
Cell:Fire("UpdateAppearance", "color")
end,
},
{
["text"] = L["Custom Color"],
["value"] = "custom",
["onClick"] = function()
CellDB["appearance"]["powerColor"][1] = "custom"
powerColorPicker:SetEnabled(true)
Cell:Fire("UpdateAppearance", "color")
end,
},
})
local powerColorText = unitButtonPane:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
powerColorText:SetPoint("BOTTOMLEFT", powerColorDropdown, "TOPLEFT", 0, 1)
powerColorText:SetText(L["Power Color"])
powerColorPicker = Cell:CreateColorPicker(unitButtonPane, "", false, function(r, g, b)
CellDB["appearance"]["powerColor"][2][1] = r
CellDB["appearance"]["powerColor"][2][2] = g
CellDB["appearance"]["powerColor"][2][3] = b
if CellDB["appearance"]["powerColor"][1] == "custom" then
Cell:Fire("UpdateAppearance", "color")
end
end)
powerColorPicker:SetPoint("LEFT", powerColorDropdown, "RIGHT", 5, 0)
-- bar animation
barAnimationDropdown = Cell:CreateDropdown(unitButtonPane, 141)
barAnimationDropdown:SetPoint("TOPLEFT", powerColorDropdown, "BOTTOMLEFT", 0, -30)
barAnimationDropdown:SetItems({
{
["text"] = L["Flash"],
["onClick"] = function()
CellDB["appearance"]["barAnimation"] = "Flash"
Cell:Fire("UpdateAppearance", "animation")
end,
},
{
["text"] = L["Smooth"],
["onClick"] = function()
CellDB["appearance"]["barAnimation"] = "Smooth"
Cell:Fire("UpdateAppearance", "animation")
end,
},
{
["text"] = L["None"],
["onClick"] = function()
CellDB["appearance"]["barAnimation"] = "None"
Cell:Fire("UpdateAppearance", "animation")
end,
},
})
local barAnimationText = unitButtonPane:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
barAnimationText:SetPoint("BOTTOMLEFT", barAnimationDropdown, "TOPLEFT", 0, 1)
barAnimationText:SetText(L["Bar Animation"])
-- gradient colors
gradientColorCB1 = Cell:CreateColorPicker(unitButtonPane, nil, false, function(r, g, b)
CellDB["appearance"]["gradientColors"][1][1] = r
CellDB["appearance"]["gradientColors"][1][2] = g
CellDB["appearance"]["gradientColors"][1][3] = b
Cell:Fire("UpdateAppearance", "color")
end)
gradientColorCB1:SetPoint("TOPLEFT", barAnimationDropdown, "BOTTOMLEFT", 0, -30)
gradientColorCB2 = Cell:CreateColorPicker(unitButtonPane, nil, false, function(r, g, b)
CellDB["appearance"]["gradientColors"][2][1] = r
CellDB["appearance"]["gradientColors"][2][2] = g
CellDB["appearance"]["gradientColors"][2][3] = b
Cell:Fire("UpdateAppearance", "color")
end)
gradientColorCB2:SetPoint("TOPLEFT", gradientColorCB1, "TOPRIGHT", 5, 0)
gradientColorCB3 = Cell:CreateColorPicker(unitButtonPane, nil, false, function(r, g, b)
CellDB["appearance"]["gradientColors"][3][1] = r
CellDB["appearance"]["gradientColors"][3][2] = g
CellDB["appearance"]["gradientColors"][3][3] = b
Cell:Fire("UpdateAppearance", "color")
end)
gradientColorCB3:SetPoint("TOPLEFT", gradientColorCB2, "TOPRIGHT", 5, 0)
local gradientColorsText = unitButtonPane:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
gradientColorsText:SetPoint("BOTTOMLEFT", gradientColorCB1, "TOPLEFT", 0, 1)
gradientColorsText:SetText(L["Gradient Colors"])
-- target highlight
targetColorPicker = Cell:CreateColorPicker(unitButtonPane, L["Target Highlight Color"], true, function(r, g, b, a)
CellDB["appearance"]["targetColor"][1] = r
CellDB["appearance"]["targetColor"][2] = g
CellDB["appearance"]["targetColor"][3] = b
CellDB["appearance"]["targetColor"][4] = a
Cell:Fire("UpdateAppearance", "highlightColor")
end)
targetColorPicker:SetPoint("TOPLEFT", gradientColorCB1, "BOTTOMLEFT", 0, -15)
-- mouseover highlight
mouseoverColorPicker = Cell:CreateColorPicker(unitButtonPane, L["Mouseover Highlight Color"], true, function(r, g, b, a)
CellDB["appearance"]["mouseoverColor"][1] = r
CellDB["appearance"]["mouseoverColor"][2] = g
CellDB["appearance"]["mouseoverColor"][3] = b
CellDB["appearance"]["mouseoverColor"][4] = a
Cell:Fire("UpdateAppearance", "highlightColor")
end)
mouseoverColorPicker:SetPoint("TOPLEFT", targetColorPicker, "BOTTOMLEFT", 0, -10)
-- highlight size
highlightSize = Cell:CreateSlider(L["Highlight Size"], unitButtonPane, -5, 5, 141, 1)
highlightSize:SetPoint("TOPLEFT", mouseoverColorPicker, "BOTTOMLEFT", 0, -25)
highlightSize.afterValueChangedFn = function(value)
CellDB["appearance"]["highlightSize"] = value
Cell:Fire("UpdateAppearance", "highlightSize")
end
-- icon options
iconOptionsBtn = Cell:CreateButton(unitButtonPane, L["Aura Icon Options"], "accent-hover", {160, 20})
iconOptionsBtn:SetPoint("TOPLEFT", unitButtonPane, "TOPLEFT", 222, -42)
iconOptionsBtn:SetScript("OnClick", function()
if iconOptionsFrame:IsShown() then
iconOptionsFrame:Hide()
else
iconOptionsFrame:Show()
end
end)
-- bar alpha
barAlpha = Cell:CreateSlider(L["Health Bar Alpha"], unitButtonPane, 0, 100, 141, 1, function(value)
CellDB["appearance"]["barAlpha"] = value/100
Cell:Fire("UpdateAppearance", "alpha")
end, nil, true)
barAlpha:SetPoint("TOPLEFT", iconOptionsBtn, "BOTTOMLEFT", 0, -30)
-- loss alpha
lossAlpha = Cell:CreateSlider(L["Health Loss Alpha"], unitButtonPane, 0, 100, 141, 1, function(value)
CellDB["appearance"]["lossAlpha"] = value/100
Cell:Fire("UpdateAppearance", "alpha")
end, nil, true)
lossAlpha:SetPoint("TOPLEFT", barAlpha, "BOTTOMLEFT", 0, -40)
-- bg alpha
bgAlpha = Cell:CreateSlider(L["Background Alpha"], unitButtonPane, 0, 100, 141, 1, function(value)
CellDB["appearance"]["bgAlpha"] = value/100
Cell:Fire("UpdateAppearance", "alpha")
end, nil, true)
bgAlpha:SetPoint("TOPLEFT", lossAlpha, "BOTTOMLEFT", 0, -40)
-- out of range alpha
oorAlpha = Cell:CreateSlider(L["Out of Range Alpha"], unitButtonPane, 0, 100, 141, 1, function(value)
CellDB["appearance"]["outOfRangeAlpha"] = value/100
Cell:Fire("UpdateAppearance", "outOfRangeAlpha")
end, nil, true)
oorAlpha:SetPoint("TOPLEFT", bgAlpha, "BOTTOMLEFT", 0, -40)
-- heal prediction
predCB = Cell:CreateCheckButton(unitButtonPane, L["Heal Prediction"], function(checked, self)
CellDB["appearance"]["healPrediction"][1] = checked
predCustomCB:SetEnabled(checked)
if checked then
predColorPicker:SetEnabled(CellDB["appearance"]["healPrediction"][2])
else
predColorPicker:SetEnabled(false)
end
Cell:Fire("UpdateAppearance", "shields")
end)
predCB:SetPoint("TOPLEFT", oorAlpha, "BOTTOMLEFT", 0, -35)
-- heal prediction custom color
predCustomCB = Cell:CreateCheckButton(unitButtonPane, "", function(checked, self)
CellDB["appearance"]["healPrediction"][2] = checked
predColorPicker:SetEnabled(checked)
Cell:Fire("UpdateAppearance", "shields")
end)
predCustomCB:SetPoint("TOPLEFT", predCB, "BOTTOMLEFT", 14, -7)
predColorPicker = Cell:CreateColorPicker(unitButtonPane, L["Custom Color"], true, function(r, g, b, a)
CellDB["appearance"]["healPrediction"][3][1] = r
CellDB["appearance"]["healPrediction"][3][2] = g
CellDB["appearance"]["healPrediction"][3][3] = b
CellDB["appearance"]["healPrediction"][3][4] = a
Cell:Fire("UpdateAppearance", "shields")
end)
predColorPicker:SetPoint("TOPLEFT", predCustomCB, "TOPRIGHT", 5, 0)
-- heal prediction use LibHealComm
useLibCB = Cell:CreateCheckButton(unitButtonPane, _G.USE.." LibHealComm", function(checked, self)
CellDB["appearance"]["useLibHealComm"] = checked
F:EnableLibHealComm(checked)
end, L["LibHealComm needs to be installed"])
useLibCB:SetPoint("TOPLEFT", predCustomCB, "BOTTOMLEFT", 0, -7)
useLibCB:SetEnabled(Cell.isVanilla or Cell.isCata)
-- heal absorb
absorbCB = Cell:CreateCheckButton(unitButtonPane, "", function(checked, self)
CellDB["appearance"]["healAbsorb"][1] = checked
absorbColorPicker:SetEnabled(checked)
Cell:Fire("UpdateAppearance", "shields")
end)
absorbCB:SetPoint("TOPLEFT", predCB, "BOTTOMLEFT", 0, -49)
absorbCB:SetEnabled(Cell.isRetail)
absorbColorPicker = Cell:CreateColorPicker(unitButtonPane, L["Heal Absorb"], true, function(r, g, b, a)
CellDB["appearance"]["healAbsorb"][2][1] = r
CellDB["appearance"]["healAbsorb"][2][2] = g
CellDB["appearance"]["healAbsorb"][2][3] = b
CellDB["appearance"]["healAbsorb"][2][4] = a
Cell:Fire("UpdateAppearance", "shields")
end)
absorbColorPicker:SetPoint("TOPLEFT", absorbCB, "TOPRIGHT", 5, 0)
-- shield
shieldCB = Cell:CreateCheckButton(unitButtonPane, "", function(checked, self)
CellDB["appearance"]["shield"][1] = checked
shieldColorPicker:SetEnabled(checked)
Cell:Fire("UpdateAppearance", "shields")
end)
shieldCB:SetPoint("TOPLEFT", absorbCB, "BOTTOMLEFT", 0, -7)
shieldCB:SetEnabled(not Cell.isVanilla)
shieldColorPicker = Cell:CreateColorPicker(unitButtonPane, L["Shield Texture"], true, function(r, g, b, a)
CellDB["appearance"]["shield"][2][1] = r
CellDB["appearance"]["shield"][2][2] = g
CellDB["appearance"]["shield"][2][3] = b
CellDB["appearance"]["shield"][2][4] = a
Cell:Fire("UpdateAppearance", "shields")
end)
shieldColorPicker:SetPoint("TOPLEFT", shieldCB, "TOPRIGHT", 5, 0)
-- overshield
oversCB = Cell:CreateCheckButton(unitButtonPane, L["Overshield Texture"], function(checked, self)
CellDB["appearance"]["overshield"] = checked
Cell:Fire("UpdateAppearance", "shields")
end)
oversCB:SetPoint("TOPLEFT", shieldCB, "BOTTOMLEFT", 0, -7)
oversCB:SetEnabled(not Cell.isVanilla)
-- reset
local resetBtn = Cell:CreateButton(unitButtonPane, L["Reset All"], "accent", {77, 17}, nil, nil, nil, nil, nil, L["Reset All"], L["[Ctrl+LeftClick] to reset these settings"])
resetBtn:SetPoint("TOPRIGHT")
resetBtn:SetScript("OnClick", function()
if IsControlKeyDown() then
F:ResetButtonStyle()
-- load data
textureDropdown:SetSelected("Cell ".._G.DEFAULT, "Interface\\AddOns\\Cell\\Media\\statusbar.tga")
LoadButtonStyle()
Cell:Fire("UpdateAppearance", "reset")
end
end)
Cell:RegisterForCloseDropdown(resetBtn) -- close dropdown
end
-------------------------------------------------
-- debuff type color
-------------------------------------------------
local curseCP, diseaseCP, magicCP, poisonCP, bleedCP
local function CreateDebuffTypeColorPane()
local dtcPane = Cell:CreateTitledPane(appearanceTab, L["Debuff Type Color"], 422, 60)
dtcPane:SetPoint("TOPLEFT", appearanceTab, "TOPLEFT", 5, -585)
-- curse
curseCP = Cell:CreateColorPicker(dtcPane, "|TInterface\\AddOns\\Cell\\Media\\Debuffs\\Curse:0|t"..L["Curse"], false, nil, function(r, g, b)
I:SetDebuffTypeColor("Curse", r, g, b)
Cell:Fire("UpdateIndicators", F:GetNotifiedLayoutName(Cell.vars.currentLayout), "dispels", "debuffTypeColor")
end)
curseCP:SetPoint("TOPLEFT", 5, -27)
-- disease
diseaseCP = Cell:CreateColorPicker(dtcPane, "|TInterface\\AddOns\\Cell\\Media\\Debuffs\\Disease:0|t"..L["Disease"], false, nil, function(r, g, b)
I:SetDebuffTypeColor("Disease", r, g, b)
Cell:Fire("UpdateIndicators", F:GetNotifiedLayoutName(Cell.vars.currentLayout), "dispels", "debuffTypeColor")
end)
diseaseCP:SetPoint("TOPLEFT", curseCP, "TOPRIGHT", 95, 0)
-- magic
magicCP = Cell:CreateColorPicker(dtcPane, "|TInterface\\AddOns\\Cell\\Media\\Debuffs\\Magic:0|t"..L["Magic"], false, nil, function(r, g, b)
I:SetDebuffTypeColor("Magic", r, g, b)
Cell:Fire("UpdateIndicators", F:GetNotifiedLayoutName(Cell.vars.currentLayout), "dispels", "debuffTypeColor")
end)
magicCP:SetPoint("TOPLEFT", diseaseCP, "TOPRIGHT", 95, 0)
-- poison
poisonCP = Cell:CreateColorPicker(dtcPane, "|TInterface\\AddOns\\Cell\\Media\\Debuffs\\Poison:0|t"..L["Poison"], false, nil, function(r, g, b)
I:SetDebuffTypeColor("Poison", r, g, b)
Cell:Fire("UpdateIndicators", F:GetNotifiedLayoutName(Cell.vars.currentLayout), "dispels", "debuffTypeColor")
end)
poisonCP:SetPoint("TOPLEFT", magicCP, "TOPRIGHT", 95, 0)
-- bleed
bleedCP = Cell:CreateColorPicker(dtcPane, "|TInterface\\AddOns\\Cell\\Media\\Debuffs\\Bleed:0|t"..L["Bleed"], false, nil, function(r, g, b)
I:SetDebuffTypeColor("Bleed", r, g, b)
Cell:Fire("UpdateIndicators", F:GetNotifiedLayoutName(Cell.vars.currentLayout), "dispels", "debuffTypeColor")
end)
bleedCP:SetPoint("TOPLEFT", curseCP, "BOTTOMLEFT", 0, -7)
-- reset
local resetBtn = Cell:CreateButton(dtcPane, L["Reset All"], "accent", {77, 17}, nil, nil, nil, nil, nil, L["Reset All"], L["[Ctrl+LeftClick] to reset these settings"])
resetBtn:SetPoint("TOPRIGHT")
resetBtn:SetScript("OnClick", function()
if IsControlKeyDown() then
I:ResetDebuffTypeColor()
LoadDebuffTypeColor()
Cell:Fire("UpdateIndicators", F:GetNotifiedLayoutName(Cell.vars.currentLayout), "dispels", "debuffTypeColor")
end
end)
Cell:RegisterForCloseDropdown(resetBtn) -- close dropdown
end
-------------------------------------------------
-- functions
-------------------------------------------------
local init
LoadButtonStyle = function()
if not init then CheckTextures() end
barColorDropdown:SetSelectedValue(CellDB["appearance"]["barColor"][1])
barColorPicker:SetColor(CellDB["appearance"]["barColor"][2])
barColorPicker:SetEnabled(CellDB["appearance"]["barColor"][1] == "custom")
fullColorCB:SetChecked(CellDB["appearance"]["fullColor"][1])
fullColorPicker:SetColor(CellDB["appearance"]["fullColor"][2])
fullColorPicker:SetEnabled(CellDB["appearance"]["fullColor"][1])
lossColorDropdown:SetSelectedValue(CellDB["appearance"]["lossColor"][1])
lossColorPicker:SetColor(CellDB["appearance"]["lossColor"][2])
lossColorPicker:SetEnabled(CellDB["appearance"]["lossColor"][1] == "custom")
deathColorCB:SetChecked(CellDB["appearance"]["deathColor"][1])
deathColorPicker:SetColor(CellDB["appearance"]["deathColor"][2])
deathColorPicker:SetEnabled(CellDB["appearance"]["deathColor"][1])
powerColorDropdown:SetSelectedValue(CellDB["appearance"]["powerColor"][1])
powerColorPicker:SetColor(CellDB["appearance"]["powerColor"][2])
powerColorPicker:SetEnabled(CellDB["appearance"]["powerColor"][1] == "custom")
barAnimationDropdown:SetSelected(L[CellDB["appearance"]["barAnimation"]])
local c = CellDB["appearance"]["gradientColors"]
gradientColorCB1:SetColor(c[1][1], c[1][2], c[1][3])
gradientColorCB2:SetColor(c[2][1], c[2][2], c[2][3])
gradientColorCB3:SetColor(c[3][1], c[3][2], c[3][3])
targetColorPicker:SetColor(CellDB["appearance"]["targetColor"])
mouseoverColorPicker:SetColor(CellDB["appearance"]["mouseoverColor"])
highlightSize:SetValue(CellDB["appearance"]["highlightSize"])
oorAlpha:SetValue(CellDB["appearance"]["outOfRangeAlpha"]*100)
barAlpha:SetValue(CellDB["appearance"]["barAlpha"]*100)
lossAlpha:SetValue(CellDB["appearance"]["lossAlpha"]*100)
bgAlpha:SetValue(CellDB["appearance"]["bgAlpha"]*100)
predCB:SetChecked(CellDB["appearance"]["healPrediction"][1])
useLibCB:SetChecked(CellDB["appearance"]["useLibHealComm"])
absorbCB:SetChecked(CellDB["appearance"]["healAbsorb"][1])
shieldCB:SetChecked(CellDB["appearance"]["shield"][1])
oversCB:SetChecked(CellDB["appearance"]["overshield"])
predCustomCB:SetChecked(CellDB["appearance"]["healPrediction"][2])
predCustomCB:SetEnabled(CellDB["appearance"]["healPrediction"][1])
predColorPicker:SetEnabled(CellDB["appearance"]["healPrediction"][1] and CellDB["appearance"]["healPrediction"][2])
predColorPicker:SetColor(unpack(CellDB["appearance"]["healPrediction"][3]))
absorbColorPicker:SetEnabled(CellDB["appearance"]["healAbsorb"][1])
absorbColorPicker:SetColor(unpack(CellDB["appearance"]["healAbsorb"][2]))
shieldColorPicker:SetEnabled(CellDB["appearance"]["shield"][1])
shieldColorPicker:SetColor(unpack(CellDB["appearance"]["shield"][2]))
-- icon options
iconAnimationDropdown:SetSelectedValue(CellDB["appearance"]["auraIconOptions"]["animation"])
durationRoundUpCB:SetChecked(CellDB["appearance"]["auraIconOptions"]["durationRoundUp"])
Cell:SetEnabled(not CellDB["appearance"]["auraIconOptions"]["durationRoundUp"], durationDecimalText1, durationDecimalText2, durationDecimalDropdown)
durationDecimalDropdown:SetSelectedValue(CellDB["appearance"]["auraIconOptions"]["durationDecimal"])
durationColorCB:SetChecked(CellDB["appearance"]["auraIconOptions"]["durationColorEnabled"])
Cell:SetEnabled(CellDB["appearance"]["auraIconOptions"]["durationColorEnabled"], durationNormalCP, durationPercentCP, durationPercentDD, durationSecondCP, durationSecondEB, durationSecondText)
durationNormalCP:SetColor(CellDB["appearance"]["auraIconOptions"]["durationColors"][1])
durationPercentCP:SetColor(CellDB["appearance"]["auraIconOptions"]["durationColors"][2][1], CellDB["appearance"]["auraIconOptions"]["durationColors"][2][2], CellDB["appearance"]["auraIconOptions"]["durationColors"][2][3])
durationPercentDD:SetSelectedValue(CellDB["appearance"]["auraIconOptions"]["durationColors"][2][4])
durationSecondCP:SetColor(CellDB["appearance"]["auraIconOptions"]["durationColors"][3][1], CellDB["appearance"]["auraIconOptions"]["durationColors"][3][2], CellDB["appearance"]["auraIconOptions"]["durationColors"][3][3])
durationSecondEB:SetText(CellDB["appearance"]["auraIconOptions"]["durationColors"][3][4])
end
LoadDebuffTypeColor = function()
curseCP:SetColor(I:GetDebuffTypeColor("Curse"))
diseaseCP:SetColor(I:GetDebuffTypeColor("Disease"))
magicCP:SetColor(I:GetDebuffTypeColor("Magic"))
poisonCP:SetColor(I:GetDebuffTypeColor("Poison"))
bleedCP:SetColor(I:GetDebuffTypeColor("Bleed"))
end
LoadData = function()
scaleSlider:SetValue(CellDB["appearance"]["scale"])
strataDropdown:SetSelected(CellDB["appearance"]["strata"])
accentColorDropdown:SetSelectedValue(CellDB["appearance"]["accentColor"][1])
accentColorPicker:SetColor(CellDB["appearance"]["accentColor"][2])
accentColorPicker:SetEnabled(CellDB["appearance"]["accentColor"][1] == "custom")
optionsFontSizeOffset:SetValue(CellDB["appearance"]["optionsFontSizeOffset"])
useGameFontCB:SetChecked(CellDB["appearance"]["useGameFont"])
LoadButtonStyle()
LoadDebuffTypeColor()
end
local function ShowTab(tab)
if tab == "appearance" then
if not init then
CreatePreviewIcons()
CreatePreviewButtons()
CreateCellPane()
CreateUnitButtonStylePane()
CreateIconOptionsFrame()
CreateDebuffTypeColorPane()
F:ApplyCombatProtectionToWidget(scaleSlider)
F:ApplyCombatProtectionToWidget(strataDropdown)
end
appearanceTab:Show()
if init then return end
UpdatePreviewButton()
LoadData()
init = true
else
appearanceTab:Hide()
end
end
Cell:RegisterCallback("ShowOptionsTab", "AppearanceTab_ShowTab", ShowTab)
-------------------------------------------------
-- update preivew
-------------------------------------------------
local function UpdateLayout()
if init and previewButton.loaded then
UpdatePreviewButton()
end
end
Cell:RegisterCallback("UpdateLayout", "AppearanceTab_UpdateLayout", UpdateLayout)
--[[
local function UpdateIndicators(...)
if init then
UpdatePreviewIcons(...)
end
end
Cell:RegisterCallback("UpdateIndicators", "AppearanceTab_UpdateIndicators", UpdateIndicators)
]]
-------------------------------------------------
-- update appearance
-------------------------------------------------
local function UpdateAppearance(which)
F:Debug("|cff7f7fffUpdateAppearance:|r", which)
if not which or which == "texture" or which == "color" or which == "fullColor" or which == "deathColor" or which == "alpha" or which == "outOfRangeAlpha" or which == "shields" or which == "animation" or which == "highlightColor" or which == "highlightSize" or which == "reset" then
local tex
if not which or which == "texture" or which == "reset" then tex = F:GetBarTexture() end
if not which or which == "color" or which == "reset" then
if strfind(CellDB["appearance"]["barColor"][1], "gradient") or strfind(CellDB["appearance"]["lossColor"][1], "gradient") then
Cell.vars.useGradientColor = true
else
Cell.vars.useGradientColor = false
end
end
if not which or which == "fullColor" or which == "reset" then
Cell.vars.useFullColor = CellDB["appearance"]["fullColor"][1] and true or false
end
if not which or which == "deathColor" or which == "reset" then
Cell.vars.useDeathColor = CellDB["appearance"]["deathColor"][1] and true or false
end
F:IterateAllUnitButtons(function(b)
-- texture
if not which or which == "texture" or which == "reset" then
B:SetTexture(b, tex)
end
-- color
if not which or which == "color" or which == "fullColor" or which == "deathColor" or which == "alpha" or which == "shields" or which == "reset" then
B:UpdateColor(b)
end
-- outOfRangeAlpha
if which == "outOfRangeAlpha" or which == "reset" then
b.state.wasInRange = nil
end
-- shields
if not which or which == "shields" or which == "reset" then
B:UpdateShields(b)
end
-- animation
if not which or which == "animation" or which == "reset" then
b.func.UpdateAnimation()
end
-- highlightColor
if not which or which == "highlightColor" or which == "reset" then
B:UpdateHighlightColor(b)
end
-- highlightColor
if not which or which == "highlightSize" or which == "reset" then
B:UpdateHighlightSize(b)
end
end)
end
-- icon options
if not which or which == "icon" or which == "reset" then
-- animation
Cell.vars.iconAnimation = CellDB["appearance"]["auraIconOptions"]["animation"]
-- round up
Cell.vars.iconDurationRoundUp = CellDB["appearance"]["auraIconOptions"]["durationRoundUp"]
-- decimal
Cell.vars.iconDurationDecimal = CellDB["appearance"]["auraIconOptions"]["durationDecimal"]
-- color
if CellDB["appearance"]["auraIconOptions"]["durationColorEnabled"] then
Cell.vars.iconDurationColors = CellDB["appearance"]["auraIconOptions"]["durationColors"]
else
Cell.vars.iconDurationColors = nil
end
end
-- scale
if not which or which == "scale" then
P:SetRelativeScale(CellDB["appearance"]["scale"])
P:SetEffectiveScale(Cell.frames.mainFrame)
if Cell.frames.changelogsFrame then P:SetEffectiveScale(Cell.frames.changelogsFrame) end
if Cell.frames.codeSnippetsFrame then P:SetEffectiveScale(Cell.frames.codeSnippetsFrame) end
P:SetEffectiveScale(CellTooltip)
P:SetEffectiveScale(CellSpellTooltip)
-- P:SetEffectiveScale(CellScanningTooltip)
CellTooltip:UpdatePixelPerfect()
CellSpellTooltip:UpdatePixelPerfect()
-- CellScanningTooltip:UpdatePixelPerfect()
Cell.menu:UpdatePixelPerfect()
end
-- strata
if not which or which == "strata" then
Cell.frames.mainFrame:SetFrameStrata(CellDB["appearance"]["strata"])
Cell.frames.optionsFrame:SetFrameStrata("DIALOG")
Cell.frames.raidRosterFrame:SetFrameStrata("DIALOG")
end
-- preview
if which ~= "highlightColor" and which ~= "highlightSize" and init and previewButton:IsVisible() then
UpdatePreviewButton()
end
end
Cell:RegisterCallback("UpdateAppearance", "UpdateAppearance", UpdateAppearance)