TradeSkillMaster/Core/UI/MainUI/Settings/Auctioning.lua

226 lines
7.7 KiB
Lua

-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster --
-- https://tradeskillmaster.com --
-- All Rights Reserved - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
local _, TSM = ...
local Auctioning = TSM.MainUI.Settings:NewPackage("Auctioning")
local L = TSM.Include("Locale").GetTable()
local Sound = TSM.Include("Util.Sound")
local String = TSM.Include("Util.String")
local Log = TSM.Include("Util.Log")
local UIElements = TSM.Include("UI.UIElements")
local private = {
sounds = {},
soundkeys = {},
}
-- ============================================================================
-- Module Functions
-- ============================================================================
function Auctioning.OnInitialize()
TSM.MainUI.Settings.RegisterSettingPage(L["Auctioning"], "middle", private.GetAuctioningSettingsFrame)
for key, name in pairs(Sound.GetSounds()) do
tinsert(private.sounds, name)
tinsert(private.soundkeys, key)
end
end
-- ============================================================================
-- Auctioning Settings UI
-- ============================================================================
function private.GetAuctioningSettingsFrame()
TSM.UI.AnalyticsRecordPathChange("main", "settings", "auctioning")
return UIElements.New("ScrollFrame", "auctioningSettings")
:SetPadding(8, 8, 8, 0)
:AddChild(TSM.MainUI.Settings.CreateExpandableSection("Auctioning", "auctioning", L["General Options"], L["Some general Auctioning options are below."])
:AddChild(UIElements.New("Frame", "check1")
:SetLayout("HORIZONTAL")
:SetHeight(20)
:SetMargin(0, 0, 0, 12)
:AddChild(UIElements.New("Checkbox", "cancelBids")
:SetWidth("AUTO")
:SetFont("BODY_BODY2_MEDIUM")
:SetText(L["Cancel auctions with bids"])
:SetSettingInfo(TSM.db.global.auctioningOptions, "cancelWithBid")
)
:AddChild(UIElements.New("Spacer", "spacer"))
)
:AddChild(UIElements.New("Frame", "check2")
:SetLayout("HORIZONTAL")
:SetHeight(20)
:AddChild(UIElements.New("Checkbox", "invalidPrice")
:SetWidth("AUTO")
:SetFont("BODY_BODY2_MEDIUM")
:SetText(L["Disable invalid price warnings"])
:SetSettingInfo(TSM.db.global.auctioningOptions, "disableInvalidMsg")
)
:AddChild(UIElements.New("Spacer", "spacer"))
)
)
:AddChild(TSM.MainUI.Settings.CreateExpandableSection("Auctioning", "sounds", L["Auction House Sounds"], L["Setup various sounds that play when doing Auctioning scans."])
:AddChild(UIElements.New("Frame", "labelLine1")
:SetLayout("HORIZONTAL")
:SetHeight(20)
:SetMargin(0, 0, 0, 4)
:AddChild(UIElements.New("Text", "scan")
:SetMargin(0, 12, 0, 0)
:SetFont("BODY_BODY2_MEDIUM")
:SetText(L["Scan complete sound"])
)
:AddChild(UIElements.New("Text", "confirm")
:SetFont("BODY_BODY2_MEDIUM")
:SetText(L["Confirm complete sound"])
)
)
:AddChild(UIElements.New("Frame", "dropdownLine1")
:SetLayout("HORIZONTAL")
:SetHeight(24)
:SetMargin(0, 0, 0, 12)
:AddChild(UIElements.New("SelectionDropdown", "scanComplete")
:SetMargin(0, 12, 0, 0)
:SetItems(private.sounds, private.soundkeys)
:SetSettingInfo(TSM.db.global.auctioningOptions, "scanCompleteSound")
:SetScript("OnSelectionChanged", private.SoundOnSelectionChanged)
)
:AddChild(UIElements.New("SelectionDropdown", "confirmComplete")
:SetItems(private.sounds, private.soundkeys)
:SetSettingInfo(TSM.db.global.auctioningOptions, "confirmCompleteSound")
:SetScript("OnSelectionChanged", private.SoundOnSelectionChanged)
)
)
:AddChild(UIElements.New("Text", "saleLabel")
:SetHeight(20)
:SetMargin(0, 0, 0, 4)
:SetFont("BODY_BODY2_MEDIUM")
:SetText(L["Auction sale sound"])
)
:AddChild(UIElements.New("SelectionDropdown", "saleDropdown")
:SetHeight(24)
:SetItems(private.sounds, private.soundkeys)
:SetSettingInfo(TSM.db.global.coreOptions, "auctionSaleSound")
:SetScript("OnSelectionChanged", private.SoundOnSelectionChanged)
)
)
:AddChild(TSM.MainUI.Settings.CreateExpandableSection("Auctioning", "whitelist", L["Whitelist"], L["TSM will not undercut any players you add to your whitelist."])
:AddChild(UIElements.New("Text", "matchLabel")
:SetHeight(20)
:SetMargin(0, 0, 0, 4)
:SetFont("BODY_BODY2_MEDIUM")
:SetText(L["Match whitelisted players"])
)
:AddChild(UIElements.New("ToggleOnOff", "matchToggle")
:SetHeight(24)
:SetMargin(0, 0, 0, 12)
:SetSettingInfo(TSM.db.global.auctioningOptions, "matchWhitelist")
)
:AddChild(UIElements.New("Text", "addLabel")
:SetHeight(20)
:SetMargin(0, 0, 0, 4)
:SetFont("BODY_BODY2_MEDIUM")
:SetText(L["Whitelisted characters"])
)
:AddChild(UIElements.New("Input", "newPlayerInput")
:SetHeight(24)
:SetMargin(0, 0, 0, 4)
:SetBackgroundColor("ACTIVE_BG")
:SetHintText(L["Enter player name"])
:SetScript("OnEnterPressed", private.NewPlayerOnEnterPressed)
)
:AddChild(UIElements.New("Frame", "whitelistFrame")
:SetLayout("FLOW")
:SetHeight(60)
:AddChildrenWithFunction(private.AddWhitelistRows)
)
)
end
function private.AddWhitelistRows(containerFrame)
for player in pairs(TSM.db.factionrealm.auctioningOptions.whitelist) do
private.AddWhitelistRow(containerFrame, player)
end
end
function private.AddWhitelistRow(frame, player)
frame:AddChild(UIElements.New("Frame", "whitelist_"..player)
:SetLayout("HORIZONTAL")
:SetSize(100, 20)
:SetMargin(0, 12, 0, 0)
:AddChild(UIElements.New("Text", "text")
:SetWidth("AUTO")
:SetMargin(0, 2, 0, 0)
:SetFont("BODY_BODY2_MEDIUM")
:SetText(player)
)
:AddChild(UIElements.New("Button", "removeBtn")
:SetBackgroundAndSize("iconPack.14x14/Close/Circle")
:SetContext(player)
:SetScript("OnClick", private.RemoveWhitelistOnClick)
)
:AddChild(UIElements.New("Spacer", "spacer"))
)
end
-- ============================================================================
-- Local Script Handlers
-- ============================================================================
function private.SoundOnSelectionChanged(self)
Sound.PlaySound(self:GetSelectedItemKey())
end
function private.NewPlayerOnEnterPressed(input)
local newPlayer = strlower(input:GetValue())
input:SetValue("")
input:Draw()
if newPlayer == "" or strfind(newPlayer, ",") or newPlayer ~= String.Escape(newPlayer) then
Log.PrintfUser(L["Invalid player name."])
return
elseif TSM.db.factionrealm.auctioningOptions.whitelist[newPlayer] then
Log.PrintfUser(L["The player \"%s\" is already on your whitelist."], TSM.db.factionrealm.auctioningOptions.whitelist[newPlayer])
return
end
local isAlt = false
for factionrealm in TSM.db:GetConnectedRealmIterator("factionrealm") do
for _, character in TSM.db:FactionrealmCharacterIterator(factionrealm) do
if strlower(newPlayer) == strlower(character) then
Log.PrintfUser(L["You do not need to add \"%s\", alts are whitelisted automatically."], newPlayer)
isAlt = true
end
end
end
if isAlt then
return
end
TSM.db.factionrealm.auctioningOptions.whitelist[newPlayer] = newPlayer
-- add a new row to the UI
local frame = input:GetElement("__parent.whitelistFrame")
private.AddWhitelistRow(frame, newPlayer)
frame:Draw()
end
function private.RemoveWhitelistOnClick(self)
local player = self:GetContext()
TSM.db.factionrealm.auctioningOptions.whitelist[player] = nil
-- remove this row
local row = self:GetParentElement()
local frame = row:GetParentElement()
frame:RemoveChild(row)
row:Release()
frame:Draw()
end