Files
Andrew6810 4e3aff9d89 init
2022-10-21 06:37:39 -07:00

276 lines
6.5 KiB
Lua

--[[
Frame.lua
General Bagnon settings
--]]
local Bagnon = LibStub('AceAddon-3.0'):GetAddon('Bagnon')
local L = LibStub('AceLocale-3.0'):GetLocale('Bagnon-Config')
local ColorOptions = Bagnon.OptionsPanel:New('BagnonOptions_Colors', 'Bagnon', L.ColorSettings, L.ColorSettingsTitle)
ColorOptions:Hide()
Bagnon.ColorOptions = ColorOptions
local SPACING = 4
local ITEM_SLOT_COLOR_TYPES = {'ammo', 'trade', 'shard', 'keyring'}
--[[
Startup
--]]
function ColorOptions:Load()
self:SetScript('OnShow', self.OnShow)
self:SetScript('OnHide', self.OnHide)
self:AddWidgets()
end
function ColorOptions:ShowFrame(frameID)
self:SetFrameID(frameID)
InterfaceOptionsFrame_OpenToCategory(self)
end
--[[
Messages
--]]
function ColorOptions:UpdateMessages()
if not self:IsVisible() then
self:UnregisterAllMessages()
return
end
self:RegisterMessage('ITEM_HIGHLIGHT_QUALITY_UPDATE')
self:RegisterMessage('ITEM_HIGHLIGHT_QUEST_UPDATE')
self:RegisterMessage('ITEM_SLOT_COLOR_ENABLED_UPDATE')
self:RegisterMessage('ITEM_SLOT_COLOR_UPDATE')
self:RegisterMessage('ITEM_HIGHLIGHT_OPACITY_UPDATE')
end
function ColorOptions:ITEM_HIGHLIGHT_QUALITY_UPDATE(msg, enable)
self:GetHighlightItemsByQualityCheckbox():UpdateChecked()
end
function ColorOptions:ITEM_HIGHLIGHT_QUEST_UPDATE(msg, enable)
self:GetHighlightQuestItemsCheckbox():UpdateChecked()
end
function ColorOptions:ITEM_SLOT_COLOR_ENABLED_UPDATE(msg, enable)
self:GetColorItemSlotsCheckbox():UpdateChecked()
end
function ColorOptions:ITEM_SLOT_COLOR_UPDATE(msg, type, r, g, b)
self:GetItemSlotColorSelector(type):SetColor(r, g, b, a)
end
function ColorOptions:ITEM_HIGHLIGHT_OPACITY_UPDATE(msg, value)
self:GetHighlightOpacitySlider():UpdateValue()
end
--[[
Frame Events
--]]
function ColorOptions:OnShow()
self:UpdateMessages()
end
function ColorOptions:OnHide()
self:UpdateMessages()
end
--[[
Components
--]]
function ColorOptions:AddWidgets()
local colorItemSlots = self:CreateColorItemSlotsCheckbox()
colorItemSlots:SetPoint('TOPLEFT', self, 'TOPLEFT', 14, -72)
local highlightItemsByQuality = self:CreateHighlightItemsByQualityCheckbox()
highlightItemsByQuality:SetPoint('TOPLEFT', colorItemSlots, 'BOTTOMLEFT', 0, -SPACING)
local highightQuestItems = self:CreateHighlightQuestItemsCheckbox()
highightQuestItems:SetPoint('TOPLEFT', highlightItemsByQuality, 'BOTTOMLEFT', 0, -SPACING)
local opacity = self:CreateHighlightOpacitySlider()
opacity:SetPoint('BOTTOMLEFT', self, 'BOTTOMLEFT', 16, 10)
opacity:SetPoint('BOTTOMRIGHT', self, 'BOTTOMRIGHT', -16, 10)
local lastCheckbox = highightQuestItems
local lastSelector = nil
for i, type in self:GetColorTypes() do
local selector = self:CreateItemSlotColorSelector(type)
if i == 1 then
selector:SetPoint('TOPLEFT', lastCheckbox, 'BOTTOMLEFT', 4, -(SPACING + 4))
else
selector:SetPoint('TOPLEFT', lastSelector, 'BOTTOMLEFT', 0, -(SPACING + 6))
end
lastSelector = selector
end
end
function ColorOptions:UpdateWidgets()
if not self:IsVisible() then
return
end
self:GetHighlightItemsByQualityCheckbox():UpdateChecked()
self:GetHighlightQuestItemsCheckbox():UpdateChecked()
self:GetColorItemSlotsCheckbox():UpdateChecked()
self:GetHighlightOpacitySlider():UpdateValue()
for i, type in self:GetColorTypes() do
local selector = self:GetItemSlotColorSelector(type)
selector:UpdateColor()
end
end
function ColorOptions:GetColorTypes()
return pairs(ITEM_SLOT_COLOR_TYPES)
end
--[[ Check Boxes ]]--
--highlight items by quality
function ColorOptions:CreateHighlightItemsByQualityCheckbox()
local button = Bagnon.OptionsCheckButton:New(L.HighlightItemsByQuality, self)
button.OnEnableSetting = function(self, enable)
Bagnon.Settings:SetHighlightItemsByQuality(enable)
end
button.IsSettingEnabled = function(self)
return Bagnon.Settings:HighlightingItemsByQuality()
end
self.highlightItemsByQualityCheckbox = button
return button
end
function ColorOptions:GetHighlightItemsByQualityCheckbox()
return self.highlightItemsByQualityCheckbox
end
--highlight quest items
function ColorOptions:CreateHighlightQuestItemsCheckbox()
local button = Bagnon.OptionsCheckButton:New(L.HighlightQuestItems, self)
button.OnEnableSetting = function(self, enable)
Bagnon.Settings:SetHighlightQuestItems(enable)
end
button.IsSettingEnabled = function(self)
return Bagnon.Settings:HighlightingQuestItems()
end
self.highlightQuestItemsCheckbox = button
return button
end
function ColorOptions:GetHighlightQuestItemsCheckbox()
return self.highlightQuestItemsCheckbox
end
--color item slots
function ColorOptions:CreateColorItemSlotsCheckbox()
local button = Bagnon.OptionsCheckButton:New(L.ColorItemSlotsByBagType, self)
button.OnEnableSetting = function(self, enable)
Bagnon.Settings:SetColorBagSlots(enable)
end
button.IsSettingEnabled = function(self)
return Bagnon.Settings:ColoringBagSlots()
end
self.colorItemSlotsCheckbox = button
return button
end
function ColorOptions:GetColorItemSlotsCheckbox()
return self.colorItemSlotsCheckbox
end
--[[ Sliders ]]--
--border opacity
function ColorOptions:CreateHighlightOpacitySlider()
local slider = Bagnon.OptionsSlider:New(L.ItemHighlightOpacity, self, 10, 100, 1)
slider.SetSavedValue = function(self, value)
Bagnon.Settings:SetHighlightOpacity(value / 100)
end
slider.GetSavedValue = function(self)
return Bagnon.Settings:GetHighlightOpacity() * 100
end
slider.GetFormattedText = function(self, value)
return value .. '%'
end
self.highlightOpacitySlider = slider
return slider
end
function ColorOptions:GetHighlightOpacitySlider()
return self.highlightOpacitySlider
end
--[[ Color Pickers ]]--
--frame color
function ColorOptions:CreateItemSlotColorSelector(type)
local selector = Bagnon.OptionsColorSelector:New(L['ItemSlotColor_' .. type], self, false)
selector.itemSlotType = type
selector.OnSetColor = function(self, r, g, b)
Bagnon.Settings:SetItemSlotColor(self.itemSlotType, r, g, b)
end
selector.GetColor = function(self)
return Bagnon.Settings:GetItemSlotColor(self.itemSlotType)
end
local colorSelectors = self.colorSelectors or {}
colorSelectors[type] = selector
self.colorSelectors = colorSelectors
return selector
end
function ColorOptions:GetItemSlotColorSelector(type)
return self.colorSelectors and self.colorSelectors[type]
end
--[[
Update Methods
--]]
function ColorOptions:SetFrameID(frameID)
if self:GetFrameID() ~= frameID then
self.frameID = frameID
self:UpdateWidgets()
end
end
function ColorOptions:GetFrameID()
return self.frameID
end
--[[ Load the thing ]]--
ColorOptions:Load()