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.
375 lines
12 KiB
375 lines
12 KiB
-- ------------------------------------------------------------------------------ -- |
|
-- TradeSkillMaster_Shopping -- |
|
-- http://www.curse.com/addons/wow/tradeskillmaster_shopping -- |
|
-- -- |
|
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) -- |
|
-- All Rights Reserved* - Detailed license information included with addon. -- |
|
-- ------------------------------------------------------------------------------ -- |
|
|
|
-- load the parent file (TSM) into a local variable and register this file as a module |
|
local TSM = select(2, ...) |
|
local Options = TSM:NewModule("Options", "AceEvent-3.0", "AceHook-3.0") |
|
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster_Shopping") -- loads the localization table |
|
local AceGUI = LibStub("AceGUI-3.0") -- load the AceGUI libraries |
|
|
|
|
|
function Options:Load(parent, operation, group) |
|
Options.treeGroup = AceGUI:Create("TSMTreeGroup") |
|
Options.treeGroup:SetLayout("Fill") |
|
Options.treeGroup:SetCallback("OnGroupSelected", function(...) Options:SelectTree(...) end) |
|
Options.treeGroup:SetStatusTable(TSM.db.global.optionsTreeStatus) |
|
parent:AddChild(Options.treeGroup) |
|
|
|
Options:UpdateTree() |
|
if operation then |
|
if operation == "" then |
|
Options.currentGroup = group |
|
Options.treeGroup:SelectByPath(2) |
|
Options.currentGroup = nil |
|
else |
|
Options.treeGroup:SelectByPath(2, operation) |
|
end |
|
else |
|
Options.treeGroup:SelectByPath(1) |
|
end |
|
end |
|
|
|
function Options:UpdateTree() |
|
local operationTreeChildren = {} |
|
|
|
for name in pairs(TSM.operations) do |
|
tinsert(operationTreeChildren, { value = name, text = name }) |
|
end |
|
|
|
sort(operationTreeChildren, function(a, b) return a.value < b.value end) |
|
|
|
Options.treeGroup:SetTree({ { value = 1, text = L["Options"] }, { value = 2, text = L["Operations"], children = operationTreeChildren } }) |
|
end |
|
|
|
function Options:SelectTree(treeGroup, _, selection) |
|
treeGroup:ReleaseChildren() |
|
|
|
local major, minor = ("\001"):split(selection) |
|
major = tonumber(major) |
|
if major == 1 then |
|
Options:DrawGeneralSettings(treeGroup) |
|
elseif minor then |
|
Options:DrawOperationSettings(treeGroup, minor) |
|
else |
|
Options:DrawNewOperation(treeGroup) |
|
end |
|
end |
|
|
|
function Options:DrawGeneralSettings(container) |
|
local page = { |
|
{ |
|
type = "ScrollFrame", |
|
layout = "list", |
|
children = { |
|
{ |
|
type = "InlineGroup", |
|
layout = "flow", |
|
title = L["General Options"], |
|
children = { |
|
{ |
|
type = "EditBox", |
|
label = L["Default Post Undercut Amount"], |
|
settingInfo = { TSM.db.global, "postUndercut" }, |
|
relativeWidth = 0.5, |
|
acceptCustom = true, |
|
callback = function(_, _, value) TSMAPI.AuctionControl.undercut = value end, |
|
tooltip = L["What to set the default undercut to when posting items with Shopping."], |
|
}, |
|
{ |
|
type = "EditBox", |
|
label = L["Market Value Price Source"], |
|
settingInfo = { TSM.db.global, "marketValueSource" }, |
|
relativeWidth = 0.5, |
|
acceptCustom = true, |
|
tooltip = L["This is how Shopping calculates the '% Market Value' column in the search results."], |
|
}, |
|
{ |
|
type = "Slider", |
|
label = L["Max Disenchant Search Percent"], |
|
settingInfo = { TSM.db.global, "maxDeSearchPercent" }, |
|
min = .1, |
|
max = 1, |
|
step = .01, |
|
isPercent = true, |
|
relativeWidth = 1, |
|
tooltip = L["This is the maximum percentage of disenchant value that the Other > Disenchant search will display results for."], |
|
}, |
|
{ |
|
type = "Slider", |
|
label = L["Min Disenchant Level"], |
|
settingInfo = { TSM.db.global, "minDeSearchLvl" }, |
|
min = 1, |
|
max = 450, |
|
step = 1, |
|
isPercent = false, |
|
relativeWidth = 0.5, |
|
callback = function(self, _, value) |
|
if value > TSM.db.global.maxDeSearchLvl then |
|
TSM:Print(TSMAPI.Design:GetInlineColor("link2") .. L["Warning: The min disenchant level must be lower than the max disenchant level."] .. "|r") |
|
end |
|
TSM.db.global.minDeSearchLvl = min(value, TSM.db.global.maxDeSearchLvl) |
|
end, |
|
tooltip = L["This is the minimum item level that the Other > Disenchant search will display results for."], |
|
}, |
|
{ |
|
type = "Slider", |
|
label = L["Max Disenchant Level"], |
|
settingInfo = { TSM.db.global, "maxDeSearchLvl" }, |
|
min = 1, |
|
max = 450, |
|
step = 1, |
|
isPercent = false, |
|
callback = function(self, _, value) |
|
if value < TSM.db.global.minDeSearchLvl then |
|
TSM:Print(TSMAPI.Design:GetInlineColor("link2") .. L["Warning: The max disenchant level must be higher than the min disenchant level."] .. "|r") |
|
end |
|
TSM.db.global.maxDeSearchLvl = max(value, TSM.db.global.minDeSearchLvl) |
|
end, |
|
relativeWidth = 0.5, |
|
tooltip = L["This is the maximum item level that the Other > Disenchant search will display results for."], |
|
}, |
|
}, |
|
}, |
|
{ |
|
type = "Spacer", |
|
}, |
|
{ |
|
type = "InlineGroup", |
|
layout = "flow", |
|
title = "Posting Options", |
|
children = { |
|
{ |
|
type = "Slider", |
|
label = L["Bid Percent"], |
|
settingInfo = { TSM.db.global, "postBidPercent" }, |
|
min = .1, |
|
max = 1, |
|
step = .01, |
|
isPercent = true, |
|
relativeWidth = 0.5, |
|
tooltip = L["This is the percentage of your buyout price that your bid will be set to when posting auctions with Shopping."], |
|
}, |
|
{ |
|
type = "EditBox", |
|
label = L["Normal Post Price"], |
|
settingInfo = { TSM.db.global, "normalPostPrice" }, |
|
relativeWidth = 0.49, |
|
acceptCustom = true, |
|
tooltip = L["This is the default price Shopping will suggest to post items at when there's no others posted."], |
|
}, |
|
{ |
|
type = "HeadingLine" |
|
}, |
|
{ |
|
type = "Dropdown", |
|
label = L["Quick Posting Duration"], |
|
list = { AUCTION_DURATION_ONE, AUCTION_DURATION_TWO, AUCTION_DURATION_THREE }, |
|
settingInfo = { TSM.db.global, "quickPostingDuration" }, |
|
relativeWidth = 0.5, |
|
tooltip = L["The duration at which items will be posted via the 'Quick Posting' frame."], |
|
}, |
|
{ |
|
type = "EditBox", |
|
label = L["Quick Posting Price"], |
|
settingInfo = { TSM.db.global, "quickPostingPrice" }, |
|
relativeWidth = 0.49, |
|
acceptCustom = true, |
|
tooltip = L["This price is used to determine what items will be posted at through the 'Quick Posting' frame."], |
|
}, |
|
}, |
|
}, |
|
{ |
|
type = "InlineGroup", |
|
layout = "flow", |
|
title = L["Sniper Options"], |
|
children = { |
|
{ |
|
type = "CheckBox", |
|
label = L["Below Vendor Sell Price"], |
|
settingInfo = { TSM.db.global, "sniperVendorPrice" }, |
|
relativeWidth = 0.5, |
|
tooltip = L["Items which are below their vendor sell price will be displayed in Sniper searches."], |
|
}, |
|
{ |
|
type = "CheckBox", |
|
label = L["Below Max Price"], |
|
settingInfo = { TSM.db.global, "sniperMaxPrice" }, |
|
relativeWidth = 0.49, |
|
tooltip = L["Items which are below their maximum price (per their group / Shopping operation) will be displayed in Sniper searches."], |
|
}, |
|
{ |
|
type = "EditBox", |
|
label = L["Below Custom Price ('0c' to disable)"], |
|
settingInfo = { TSM.db.global, "sniperCustomPrice" }, |
|
relativeWidth = 0.5, |
|
acceptCustom = true, |
|
tooltip = L["Items which are below this custom price will be displayed in Sniper searches."], |
|
}, |
|
}, |
|
}, |
|
}, |
|
}, |
|
} |
|
|
|
TSMAPI:BuildPage(container, page) |
|
end |
|
|
|
function Options:DrawNewOperation(container) |
|
local currentGroup = Options.currentGroup |
|
local page = { |
|
{ |
|
-- scroll frame to contain everything |
|
type = "ScrollFrame", |
|
layout = "List", |
|
children = { |
|
{ |
|
type = "InlineGroup", |
|
layout = "flow", |
|
title = L["New Operation"], |
|
children = { |
|
{ |
|
type = "Label", |
|
text = L["Shopping operations contain settings items which you regularly buy from the auction house."], |
|
relativeWidth = 1, |
|
}, |
|
{ |
|
type = "EditBox", |
|
label = L["Operation Name"], |
|
relativeWidth = 0.8, |
|
callback = function(self, _, name) |
|
name = (name or ""):trim() |
|
if name == "" then return end |
|
if TSM.operations[name] then |
|
self:SetText("") |
|
return TSM:Printf(L["Error creating operation. Operation with name '%s' already exists."], name) |
|
end |
|
TSM.operations[name] = CopyTable(TSM.operationDefaults) |
|
Options:UpdateTree() |
|
Options.treeGroup:SelectByPath(2, name) |
|
TSMAPI:NewOperationCallback("Shopping", currentGroup, name) |
|
end, |
|
tooltip = L["Give the new operation a name. A descriptive name will help you find this operation later."], |
|
}, |
|
}, |
|
}, |
|
}, |
|
}, |
|
} |
|
TSMAPI:BuildPage(container, page) |
|
end |
|
|
|
function Options:DrawOperationSettings(container, operationName) |
|
local tg = AceGUI:Create("TSMTabGroup") |
|
tg:SetLayout("Fill") |
|
tg:SetFullHeight(true) |
|
tg:SetFullWidth(true) |
|
tg:SetTabs({ { value = 1, text = L["General"] }, { value = 2, text = L["Relationships"] }, { value = 3, text = L["Management"] } }) |
|
tg:SetCallback("OnGroupSelected", function(self, _, value) |
|
tg:ReleaseChildren() |
|
TSMAPI:UpdateOperation("Shopping", operationName) |
|
if value == 1 then |
|
Options:DrawOperationGeneral(self, operationName) |
|
elseif value == 2 then |
|
Options:DrawOperationRelationships(self, operationName) |
|
elseif value == 3 then |
|
TSMAPI:DrawOperationManagement(TSM, self, operationName) |
|
end |
|
end) |
|
container:AddChild(tg) |
|
tg:SelectTab(1) |
|
end |
|
|
|
function Options:DrawOperationGeneral(container, operationName) |
|
local operation = TSM.operations[operationName] |
|
local page = { |
|
{ |
|
type = "ScrollFrame", |
|
layout = "list", |
|
children = { |
|
{ |
|
type = "InlineGroup", |
|
layout = "flow", |
|
title = L["General Operation Options"], |
|
children = { |
|
{ |
|
type = "EditBox", |
|
label = L["Maximum Auction Price (per item)"], |
|
settingInfo = { operation, "maxPrice" }, |
|
relativeWidth = 0.49, |
|
acceptCustom = true, |
|
disabled = operation.relationships.maxprice, |
|
tooltip = L["The highest price per item you will pay for items in affected by this operation."], |
|
}, |
|
{ |
|
type = "Slider", |
|
settingInfo = { operation, "maxRestock" }, |
|
label = L["Max Restock Quantity"], |
|
disabled = operation.relationships.maxRestock, |
|
isPercent = false, |
|
min = 0, |
|
max = 5000, |
|
step = 1, |
|
relativeWidth = 0.49, |
|
tooltip = L["If set above 0, Shopping will only buy up to this total quantity for items in groups using this operation."], |
|
}, |
|
{ |
|
type = "CheckBox", |
|
label = L["Show Auctions Above Max Price"], |
|
settingInfo = { operation, "showAboveMaxPrice" }, |
|
disabled = operation.relationships.showAboveMaxPrice, |
|
tooltip = L["If checked, auctions above the max price will be shown."], |
|
}, |
|
{ |
|
type = "CheckBox", |
|
label = L["Even (5/10/15/20) Stacks Only"], |
|
settingInfo = { operation, "evenStacks" }, |
|
disabled = operation.relationships.evenStacks, |
|
tooltip = L["If checked, only auctions posted in even quantities will be considered for purchasing."], |
|
}, |
|
}, |
|
}, |
|
}, |
|
}, |
|
} |
|
|
|
TSMAPI:BuildPage(container, page) |
|
end |
|
|
|
function Options:DrawOperationRelationships(container, operationName) |
|
local settingInfo = { |
|
{ |
|
label = L["General Settings"], |
|
{ key = "maxPrice", label = L["Maximum Auction Price (per item)"] }, |
|
{ key = "maxRestock", label = L["Max Restock Quantity"] }, |
|
{ key = "showAboveMaxPrice", label = L["Show Auctions Above Max Price"] }, |
|
{ key = "evenStacks", label = L["Even (5/10/15/20) Stacks Only"] }, |
|
}, |
|
} |
|
TSMAPI:ShowOperationRelationshipTab(TSM, container, TSM.operations[operationName], settingInfo) |
|
end |
|
|
|
function Options:LoadTooltipOptions(container) |
|
local page = { |
|
{ |
|
type = "SimpleGroup", |
|
layout = "Flow", |
|
fullHeight = true, |
|
children = { |
|
{ |
|
type = "CheckBox", |
|
label = L["Show Shopping Max Price in Tooltip"], |
|
settingInfo = { TSM.db.global, "tooltip" }, |
|
callback = function(_, _, value) container:ReloadTab() end, |
|
tooltip = L["If checked, the maximum shopping price will be shown in the tooltip for the item."], |
|
}, |
|
}, |
|
}, |
|
} |
|
|
|
TSMAPI:BuildPage(container, page) |
|
end
|
|
|