-- ------------------------------------------------------------------------------ -- -- 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