276 lines
6.5 KiB
Lua
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() |