Bagnon-3.3.5/Bagnon_Config/panels/frameOptions.lua
Richard Steininger 27a08f8981 Reverts for 3.3.5
2023-10-18 20:56:57 +02:00

664 lines
No EOL
16 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 FrameOptions = Bagnon.OptionsPanel:New('BagnonOptions_Frame', 'Bagnon', L.FrameSettings, L.FrameSettingsTitle)
FrameOptions:Hide()
Bagnon.FrameOptions = FrameOptions
local CHECK_BUTTON_SPACING = 4
--[[
Startup
--]]
function FrameOptions:Load()
self:SetFrameID('inventory')
self:SetScript('OnShow', self.OnShow)
self:SetScript('OnHide', self.OnHide)
self:AddWidgets()
end
function FrameOptions:ShowFrame(frameID)
self:SetFrameID(frameID)
InterfaceOptionsFrame_OpenToCategory(self)
end
--[[
Messages
--]]
function FrameOptions:UpdateMessages()
if not self:IsVisible() then
self:UnregisterAllMessages()
return
end
self:RegisterMessage('FRAME_LAYER_UPDATE')
self:RegisterMessage('FRAME_SCALE_UPDATE')
self:RegisterMessage('FRAME_OPACITY_UPDATE')
self:RegisterMessage('FRAME_COLOR_UPDATE')
self:RegisterMessage('FRAME_BORDER_COLOR_UPDATE')
self:RegisterMessage('ITEM_FRAME_SPACING_UPDATE')
self:RegisterMessage('ITEM_FRAME_COLUMNS_UPDATE')
self:RegisterMessage('BAG_FRAME_ENABLE_UPDATE')
self:RegisterMessage('MONEY_FRAME_ENABLE_UPDATE')
self:RegisterMessage('DATABROKER_FRAME_ENABLE_UPDATE')
self:RegisterMessage('SEARCH_TOGGLE_ENABLE_UPDATE')
self:RegisterMessage('SORT_BUTTON_ENABLE_UPDATE')
self:RegisterMessage('SLOT_ORDER_UPDATE')
self:RegisterMessage('OPTIONS_TOGGLE_ENABLE_UPDATE')
end
function FrameOptions:FRAME_LAYER_UPDATE(msg, frameID, layer)
if self:GetFrameID() == frameID then
self:GetLayerSlider():UpdateValue()
end
end
function FrameOptions:FRAME_SCALE_UPDATE(msg, frameID, scale)
if self:GetFrameID() == frameID then
self:GetScaleSlider():UpdateValue()
end
end
function FrameOptions:FRAME_OPACITY_UPDATE(msg, frameID, opacity)
if self:GetFrameID() == frameID then
self:GetOpacitySlider():UpdateValue()
end
end
function FrameOptions:FRAME_COLOR_UPDATE(msg, frameID, r, g, b, a)
if self:GetFrameID() == frameID then
self:GetColorSelector():SetColor(r, g, b, a)
end
end
function FrameOptions:FRAME_BORDER_COLOR_UPDATE(msg, frameID, r, g, b, a)
if self:GetFrameID() == frameID then
self:GetBorderColorSelector():SetColor(r, g, b, a)
end
end
function FrameOptions:ITEM_FRAME_SPACING_UPDATE(msg, frameID, spacing)
if self:GetFrameID() == frameID then
self:GetSpacingSlider():UpdateValue()
end
end
function FrameOptions:ITEM_FRAME_COLUMNS_UPDATE(msg, frameID, columns)
if self:GetFrameID() == frameID then
self:GetColumnsSlider():UpdateValue()
end
end
function FrameOptions:BAG_FRAME_ENABLE_UPDATE(msg, frameID, enable)
if self:GetFrameID() == frameID then
self:GetToggleBagFrameCheckbox():UpdateChecked()
end
end
function FrameOptions:MONEY_FRAME_ENABLE_UPDATE(msg, frameID, enable)
if self:GetFrameID() == frameID then
self:GetToggleMoneyFrameCheckbox():UpdateChecked()
end
end
function FrameOptions:DATABROKER_FRAME_ENABLE_UPDATE(msg, frameID, enable)
if self:GetFrameID() == frameID then
self:GetToggleDBOFrameCheckbox():UpdateChecked()
end
end
function FrameOptions:SEARCH_TOGGLE_ENABLE_UPDATE(msg, frameID, enable)
if self:GetFrameID() == frameID then
self:GetToggleSearchFrameCheckbox():UpdateChecked()
end
end
function FrameOptions:SORT_BUTTON_ENABLE_UPDATE(msg, frameID, enable)
if self:GetFrameID() == frameID then
self:GetSortButtonCheckbox():UpdateChecked()
end
end
function FrameOptions:SLOT_ORDER_UPDATE(msg, frameID, enable)
if self:GetFrameID() == frameID then
self:GetReverseSlotOrderCheckbox():UpdateChecked()
end
end
function FrameOptions:ITEM_FRAME_BAG_BREAK_UPDATE(msg, frameID, enable)
if self:GetFrameID() == frameID then
self:GetBagBreakCheckbox():UpdateChecked()
end
end
function FrameOptions:OPTIONS_TOGGLE_ENABLE_UPDATE(msg, frameID, enable)
if self:GetFrameID() == frameID then
self:GetToggleOptionsCheckbox():UpdateChecked()
end
end
--[[
Frame Events
--]]
function FrameOptions:OnShow()
self:UpdateMessages()
self:UpdateWidgets()
end
function FrameOptions:OnHide()
self:UpdateMessages()
end
--[[
Components
--]]
function FrameOptions:AddWidgets()
--[[ Dropdowns ]]--
--add frame selector
local frameSelector = self:CreateFrameSelector()
frameSelector:SetPoint('TOPLEFT', self, 'TOPLEFT', -4, -64)
--[[ Checkboxes ]]--
local toggleBagFrame = self:CreateToggleBagFrameCheckbox()
toggleBagFrame:SetPoint('TOPLEFT', frameSelector, 'BOTTOMLEFT', 16, -4)
local toggleMoneyFrame = self:CreateToggleMoneyFrameCheckbox()
toggleMoneyFrame:SetPoint('TOPLEFT', toggleBagFrame, 'BOTTOMLEFT', 0, -CHECK_BUTTON_SPACING)
local toggleDBOFrame = self:CreateToggleDBOFrameCheckbox()
toggleDBOFrame:SetPoint('TOPLEFT', toggleMoneyFrame, 'BOTTOMLEFT', 0, -CHECK_BUTTON_SPACING)
local sortButtonFrame = self:CreateSortButtonCheckbox()
sortButtonFrame:SetPoint('TOPLEFT', toggleDBOFrame, 'BOTTOMLEFT', 0, -CHECK_BUTTON_SPACING)
local toggleSearchFrame = self:CreateToggleSearchFrameCheckbox()
toggleSearchFrame:SetPoint('TOPLEFT', sortButtonFrame, 'BOTTOMLEFT', 0, -CHECK_BUTTON_SPACING)
local toggleOptionsFrame = self:CreateToggleOptionsCheckbox()
toggleOptionsFrame:SetPoint('TOPLEFT', toggleSearchFrame, 'BOTTOMLEFT', 0, -CHECK_BUTTON_SPACING)
local reverseSlotOrdering = self:CreateReverseSlotOrderCheckbox()
reverseSlotOrdering:SetPoint('TOPLEFT', toggleOptionsFrame, 'BOTTOMLEFT', 0, -CHECK_BUTTON_SPACING)
local bagBreak = self:CreateBagBreakCheckbox()
bagBreak:SetPoint('TOPLEFT', reverseSlotOrdering, 'BOTTOMLEFT', 0, -CHECK_BUTTON_SPACING)
--[[ Color Selectors ]]--
--add color selector
local frameColor = self:CreateColorSelector()
frameColor:SetPoint('TOPLEFT', frameSelector, 'BOTTOMRIGHT', -28, -6)
--add border colors selector
local frameBorderColor = self:CreateBorderColorSelector()
frameBorderColor:SetPoint('TOPLEFT', frameColor, 'BOTTOMLEFT', 0, -8)
--[[ Sliders ]]--
--add opacity slider
local opacity = self:CreateOpacitySlider()
opacity:SetWidth(180)
opacity:SetPoint('BOTTOMRIGHT', self, 'BOTTOMRIGHT', -16, 10)
local scale = self:CreateScaleSlider()
scale:SetPoint('BOTTOMLEFT', opacity, 'TOPLEFT', 0, 20)
scale:SetPoint('BOTTOMRIGHT', opacity, 'TOPRIGHT', 0, 20)
local spacing = self:CreateSpacingSlider()
spacing:SetPoint('BOTTOMLEFT', scale, 'TOPLEFT', 0, 20)
spacing:SetPoint('BOTTOMRIGHT', scale, 'TOPRIGHT', 0, 20)
local cols = self:CreateColumnsSlider()
cols:SetPoint('BOTTOMLEFT', spacing, 'TOPLEFT', 0, 20)
cols:SetPoint('BOTTOMRIGHT', spacing, 'TOPRIGHT', 0, 20)
local layer = self:CreateLayerSlider()
layer:SetPoint('BOTTOMLEFT', cols, 'TOPLEFT', 0, 20)
layer:SetPoint('BOTTOMRIGHT', cols, 'TOPRIGHT', 0, 20)
end
function FrameOptions:UpdateWidgets()
if not self:IsVisible() then
return
end
local settings = self:GetSettings()
self:GetColorSelector():SetColor(settings:GetColor())
self:GetBorderColorSelector():SetColor(settings:GetBorderColor())
self:GetColumnsSlider():UpdateValue()
self:GetSpacingSlider():UpdateValue()
self:GetScaleSlider():UpdateValue()
self:GetOpacitySlider():UpdateValue()
self:GetLayerSlider():UpdateValue()
self:GetToggleBagFrameCheckbox():UpdateChecked()
self:GetToggleBagFrameCheckbox():SetDisabled(self:GetFrameID() == 'keys' or self:GetFrameID() == 'guildbank')
self:GetToggleMoneyFrameCheckbox():UpdateChecked()
self:GetToggleDBOFrameCheckbox():UpdateChecked()
self:GetToggleSearchFrameCheckbox():UpdateChecked()
self:GetToggleOptionsCheckbox():UpdateChecked()
self:GetSortButtonCheckbox():UpdateChecked()
self:GetReverseSlotOrderCheckbox():UpdateChecked()
self:GetReverseSlotOrderCheckbox():SetDisabled(self:GetFrameID() == 'guildbank')
self:GetBagBreakCheckbox():UpdateChecked()
self:GetBagBreakCheckbox():SetDisabled(self:GetFrameID() == 'keys' or self:GetFrameID() == 'guildbank')
end
--[[ Dropdowns ]]--
--frame selector
function FrameOptions:CreateFrameSelector()
local dropdown = Bagnon.OptionsDropdown:New(L.Frame, self, 200)
dropdown.titleText:Hide()
dropdown.Initialize = function(self)
self:AddItem(L.Inventory, 'inventory')
self:AddItem(L.Bank, 'bank')
self:AddItem(L.KeyRing, 'keys')
if IsAddOnLoaded('Bagnon_GuildBank') then
self:AddItem(L.GuildBank, 'guildbank')
end
end
dropdown.SetSavedValue = function(self, value)
self:GetParent():SetFrameID(value)
end
dropdown.GetSavedValue = function(self)
return self:GetParent():GetFrameID()
end
self.frameSelector = dropdown
return dropdown
end
function FrameOptions:GetFrameSelector()
return self.frameSelector
end
--[[ Color Pickers ]]--
--frame color
function FrameOptions:CreateColorSelector()
local selector = Bagnon.OptionsColorSelector:New(L.FrameColor, self, true)
selector.OnSetColor = function(self, r, g, b, a)
self:GetParent():GetSettings():SetColor(r, g, b, a)
end
selector.GetColor = function(self)
return self:GetParent():GetSettings():GetColor()
end
self.colorSelector = selector
return selector
end
function FrameOptions:GetColorSelector()
return self.colorSelector
end
--background color
function FrameOptions:CreateBorderColorSelector()
local selector = Bagnon.OptionsColorSelector:New(L.FrameBorderColor, self, true)
selector.OnSetColor = function(self, r, g, b, a)
self:GetParent():GetSettings():SetBorderColor(r, g, b, a)
end
selector.GetColor = function(self)
return self:GetParent():GetSettings():GetBorderColor()
end
self.borderColorSelector = selector
return selector
end
function FrameOptions:GetBorderColorSelector()
return self.borderColorSelector
end
--[[ Sliders ]]--
--columns
function FrameOptions:CreateColumnsSlider()
local slider = Bagnon.OptionsSlider:New(L.Columns, self, 4, 36, 1)
slider.SetSavedValue = function(self, value)
self:GetParent():GetSettings():SetItemFrameColumns(value)
end
slider.GetSavedValue = function(self)
return self:GetParent():GetSettings():GetItemFrameColumns()
end
self.columnsSlider = slider
return slider
end
function FrameOptions:GetColumnsSlider()
return self.columnsSlider
end
--spacing
function FrameOptions:CreateSpacingSlider()
local slider = Bagnon.OptionsSlider:New(L.Spacing, self, -16, 36, 2)
slider.SetSavedValue = function(self, value)
self:GetParent():GetSettings():SetItemFrameSpacing(value)
end
slider.GetSavedValue = function(self)
return self:GetParent():GetSettings():GetItemFrameSpacing()
end
self.spacingSlider = slider
return slider
end
function FrameOptions:GetSpacingSlider()
return self.spacingSlider
end
--scale
function FrameOptions:CreateScaleSlider()
local slider = Bagnon.OptionsSlider:New(L.Scale, self, 50, 200, 5)
slider.SetSavedValue = function(self, value)
self:GetParent():GetSettings():SetScale(value / 100)
end
slider.GetSavedValue = function(self)
return self:GetParent():GetSettings():GetScale() * 100
end
slider.GetFormattedText = function(self, value)
return value .. '%'
end
self.scaleSlider = slider
return slider
end
function FrameOptions:GetScaleSlider()
return self.scaleSlider
end
--opacity
function FrameOptions:CreateOpacitySlider()
local slider = Bagnon.OptionsSlider:New(L.Opacity, self, 10, 100, 1)
slider.SetSavedValue = function(self, value)
self:GetParent():GetSettings():SetOpacity(value / 100)
end
slider.GetSavedValue = function(self)
return self:GetParent():GetSettings():GetOpacity() * 100
end
slider.GetFormattedText = function(self, value)
return value .. '%'
end
self.opacitySlider = slider
return slider
end
function FrameOptions:GetOpacitySlider()
return self.opacitySlider
end
--layer
function FrameOptions:CreateLayerSlider()
local availableLayers = self:GetSettings():GetAvailableLayers()
local slider = Bagnon.OptionsSlider:New(L.FrameLayer, self, 1, #availableLayers, 1)
slider.layers = availableLayers
slider.SetSavedValue = function(self, value)
self:GetParent():GetSettings():SetLayer(self.layers[value])
end
slider.GetSavedValue = function(self)
local layer = self:GetParent():GetSettings():GetLayer()
for k, v in pairs(self.layers) do
if v == layer then
return k
end
end
return 1
end
slider.GetFormattedText = function(self, value)
return self.layers[value]
end
self.layerSlider = slider
return slider
end
function FrameOptions:GetLayerSlider()
return self.layerSlider
end
--[[ Check Boxes ]]--
--bag frame
function FrameOptions:CreateToggleBagFrameCheckbox()
local button = Bagnon.OptionsCheckButton:New(L.EnableBagFrame, self)
button.OnEnableSetting = function(self, enable)
self:GetParent():GetSettings():SetHasBagFrame(enable)
end
button.IsSettingEnabled = function(self, enable)
return self:GetParent():GetSettings():HasBagFrame()
end
self.toggleBagFrameCheckbox = button
return button
end
function FrameOptions:GetToggleBagFrameCheckbox()
return self.toggleBagFrameCheckbox
end
--money frame
function FrameOptions:CreateToggleMoneyFrameCheckbox()
local button = Bagnon.OptionsCheckButton:New(L.EnableMoneyFrame, self)
button.OnEnableSetting = function(self, enable)
self:GetParent():GetSettings():SetHasMoneyFrame(enable)
end
button.IsSettingEnabled = function(self, enable)
return self:GetParent():GetSettings():HasMoneyFrame()
end
self.toggleMoneyFrameCheckbox = button
return button
end
function FrameOptions:GetToggleMoneyFrameCheckbox()
return self.toggleMoneyFrameCheckbox
end
--databroker frame
function FrameOptions:CreateToggleDBOFrameCheckbox()
local button = Bagnon.OptionsCheckButton:New(L.EnableDBOFrame, self)
button.OnEnableSetting = function(self, enable)
self:GetParent():GetSettings():SetHasDBOFrame(enable)
end
button.IsSettingEnabled = function(self, enable)
return self:GetParent():GetSettings():HasDBOFrame()
end
self.toggleDBOFrameCheckbox = button
return button
end
function FrameOptions:GetToggleDBOFrameCheckbox()
return self.toggleDBOFrameCheckbox
end
--search frame toggle
function FrameOptions:CreateToggleSearchFrameCheckbox()
local button = Bagnon.OptionsCheckButton:New(L.EnableSearchToggle, self)
button.OnEnableSetting = function(self, enable)
self:GetParent():GetSettings():SetHasSearchToggle(enable)
end
button.IsSettingEnabled = function(self, enable)
return self:GetParent():GetSettings():HasSearchToggle()
end
self.toggleSearchFrameCheckbox = button
return button
end
function FrameOptions:GetToggleSearchFrameCheckbox()
return self.toggleSearchFrameCheckbox
end
--options frame toggle
function FrameOptions:CreateToggleOptionsCheckbox()
local button = Bagnon.OptionsCheckButton:New(L.EnableOptionsToggle, self)
button.OnEnableSetting = function(self, enable)
self:GetParent():GetSettings():SetHasOptionsToggle(enable)
end
button.IsSettingEnabled = function(self, enable)
return self:GetParent():GetSettings():HasOptionsToggle()
end
self.toggleOptionsCheckbox = button
return button
end
function FrameOptions:GetToggleOptionsCheckbox()
return self.toggleOptionsCheckbox
end
--options sort button
function FrameOptions:CreateSortButtonCheckbox()
local button = Bagnon.OptionsCheckButton:New(L.EnableSortButton, self)
button.OnEnableSetting = function(self, enable)
self:GetParent():GetSettings():SetHasSortButton(enable)
end
button.IsSettingEnabled = function(self, enable)
return self:GetParent():GetSettings():HasSortButton()
end
self.sortButtonCheckbox = button
return button
end
function FrameOptions:GetSortButtonCheckbox()
return self.sortButtonCheckbox
end
--reverse slot ordering
function FrameOptions:CreateReverseSlotOrderCheckbox()
local button = Bagnon.OptionsCheckButton:New(L.ReverseSlotOrdering, self)
button.OnEnableSetting = function(self, enable)
self:GetParent():GetSettings():SetReverseSlotOrder(enable)
end
button.IsSettingEnabled = function(self)
return self:GetParent():GetSettings():IsSlotOrderReversed()
end
self.reverseSlotOrderCheckbox = button
return button
end
function FrameOptions:GetReverseSlotOrderCheckbox()
return self.reverseSlotOrderCheckbox
end
--bag break layout
function FrameOptions:CreateBagBreakCheckbox()
local button = Bagnon.OptionsCheckButton:New(L.EnableBagBreak, self)
button.OnEnableSetting = function(self, enable)
self:GetParent():GetSettings():SetBagBreak(enable)
end
button.IsSettingEnabled = function(self)
return self:GetParent():GetSettings():IsBagBreakEnabled()
end
self.bagBreakCheckbox = button
return button
end
function FrameOptions:GetBagBreakCheckbox()
return self.bagBreakCheckbox
end
--[[
Update Methods
--]]
function FrameOptions:SetFrameID(frameID)
if self:GetFrameID() ~= frameID then
self.frameID = frameID
self:UpdateWidgets()
end
end
function FrameOptions:GetFrameID()
return self.frameID
end
function FrameOptions:GetSettings()
return Bagnon.FrameSettings:Get(self:GetFrameID())
end
--[[ Load the thing ]]--
FrameOptions:Load()