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.
432 lines
13 KiB
432 lines
13 KiB
|
4 years ago
|
-- ------------------------------------------------------------------------------ --
|
||
|
|
-- TradeSkillMaster_Warehousing --
|
||
|
|
-- http://www.curse.com/addons/wow/tradeskillmaster_warehousing --
|
||
|
|
-- --
|
||
|
|
-- 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 AceGUI = LibStub("AceGUI-3.0") -- load the AceGUI libraries
|
||
|
|
|
||
|
|
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster_Warehousing") -- loads the localization table
|
||
|
|
|
||
|
|
local function getHelpString1()
|
||
|
|
return
|
||
|
|
L["Warehousing will try to get the right number of items, if there are not enough in the bank to fill out the order, it will grab all that there is."]
|
||
|
|
end
|
||
|
|
|
||
|
|
local function getHelpString2()
|
||
|
|
return
|
||
|
|
L["1) Select Operations on the left menu and type a name in the textbox labeled \"Operation Name\", hit okay"] .. "\n" ..
|
||
|
|
L["2) You can delete an operation by selecting the operation and then under Operation Management click the button labelled \"Delete Operation\". "]
|
||
|
|
end
|
||
|
|
|
||
|
|
local function getHelpString3()
|
||
|
|
return
|
||
|
|
L["Simply hit empty bags, warehousing will remember what you had so that when you hit restore, it will grab all those items again. If you hit empty bags while your bags are empty it will overwrite the previous bag state, so you will not be able to use restore."]
|
||
|
|
end
|
||
|
|
|
||
|
|
local function getHelpString4()
|
||
|
|
return
|
||
|
|
L["1) Open up a bank (either the gbank or personal bank)"] .. "\n" ..
|
||
|
|
L["2) You should see a window on your right with a list of groups"] .. "\n" ..
|
||
|
|
format(L["3) Select one or more groups and hit either %s or %s"], "\"" .. L["Move Group To Bank"] .. "\"", "\"" .. L["Move Group To Bags"] .. "\"")
|
||
|
|
end
|
||
|
|
|
||
|
|
local function getHelpString5()
|
||
|
|
return
|
||
|
|
L["You can use the following slash commands to get items from or put items into your bank or guildbank."] .. "\n" ..
|
||
|
|
L["/tsm get/put X Y - X can be either an itemID, ItemLink (shift-click item) or partial text. Y is optionally the quantity you want to move."] .. "\n\n" ..
|
||
|
|
L["Example 1: /tsm get glyph 20 - get up to 20 of each item in your bank/guildbank where the name contains" .. "\"" .. "glyph" .. "\"" .. " and place them in your bags."] .. "\n\n" ..
|
||
|
|
L["Example 2: /tsm put 74249 - get all of item 74249 (Spirit Dust) from your bags and put them in your bank/guildbank"]
|
||
|
|
end
|
||
|
|
|
||
|
|
local function getHelpString6()
|
||
|
|
return
|
||
|
|
L["You can toggle the Bank UI by typing the command "] .. "/tsm bankui "
|
||
|
|
end
|
||
|
|
|
||
|
|
local function CreateOperation(name)
|
||
|
|
TSM.operations[name] = CopyTable(TSM.operationDefaults)
|
||
|
|
end
|
||
|
|
|
||
|
|
local function DeleteOperation(name)
|
||
|
|
TSM.operations[name] = nil
|
||
|
|
end
|
||
|
|
|
||
|
|
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["Help"] }, { 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:DrawHelp(treeGroup)
|
||
|
|
elseif minor then
|
||
|
|
Options:DrawOperationSettings(treeGroup, minor)
|
||
|
|
else
|
||
|
|
Options:DrawNewOperation(treeGroup)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function Options:DrawHelp(container)
|
||
|
|
local page = {
|
||
|
|
{
|
||
|
|
type = "ScrollFrame",
|
||
|
|
layout = "List",
|
||
|
|
children = {
|
||
|
|
{
|
||
|
|
type = "InlineGroup",
|
||
|
|
layout = "flow",
|
||
|
|
title = "TSM_Warehousing",
|
||
|
|
children = {
|
||
|
|
{
|
||
|
|
type = "Label",
|
||
|
|
text = getHelpString1(),
|
||
|
|
relativeWidth = 1,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
},
|
||
|
|
{
|
||
|
|
type = "Spacer",
|
||
|
|
},
|
||
|
|
{
|
||
|
|
type = "InlineGroup",
|
||
|
|
layout = "flow",
|
||
|
|
title = L["To create a Warehousing Operation"],
|
||
|
|
children = {
|
||
|
|
{
|
||
|
|
type = "Label",
|
||
|
|
text = getHelpString2(),
|
||
|
|
relativeWidth = 1,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
},
|
||
|
|
{
|
||
|
|
type = "Spacer",
|
||
|
|
},
|
||
|
|
{
|
||
|
|
type = "InlineGroup",
|
||
|
|
layout = "flow",
|
||
|
|
title = L["Empty Bags/Restore Bags"],
|
||
|
|
children = {
|
||
|
|
{
|
||
|
|
type = "Label",
|
||
|
|
text = getHelpString3(),
|
||
|
|
relativeWidth = 1,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
},
|
||
|
|
{
|
||
|
|
type = "Spacer",
|
||
|
|
},
|
||
|
|
{
|
||
|
|
type = "InlineGroup",
|
||
|
|
layout = "flow",
|
||
|
|
title = L["To move a Group"],
|
||
|
|
children = {
|
||
|
|
{
|
||
|
|
type = "Label",
|
||
|
|
text = getHelpString4(),
|
||
|
|
relativeWidth = 1,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
},
|
||
|
|
{
|
||
|
|
type = "Spacer",
|
||
|
|
},
|
||
|
|
{
|
||
|
|
type = "InlineGroup",
|
||
|
|
layout = "flow",
|
||
|
|
title = L["Slash Commands"],
|
||
|
|
children = {
|
||
|
|
{
|
||
|
|
type = "Label",
|
||
|
|
text = getHelpString5(),
|
||
|
|
relativeWidth = 1,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
},
|
||
|
|
{
|
||
|
|
type = "InlineGroup",
|
||
|
|
layout = "flow",
|
||
|
|
title = L["Bank UI"],
|
||
|
|
children = {
|
||
|
|
{
|
||
|
|
type = "Label",
|
||
|
|
text = getHelpString6(),
|
||
|
|
relativeWidth = 1,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
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["Warehousing operations contain settings for moving the items in a group. Type the name of the new operation into the box below and hit 'enter' to create a new Warehousing operation."],
|
||
|
|
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
|
||
|
|
CreateOperation(name)
|
||
|
|
Options:UpdateTree()
|
||
|
|
Options.treeGroup:SelectByPath(2, name)
|
||
|
|
TSMAPI:NewOperationCallback("Warehousing", 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("Warehousing", 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 operationSettings = TSM.operations[operationName]
|
||
|
|
|
||
|
|
local page = {
|
||
|
|
{
|
||
|
|
-- scroll frame to contain everything
|
||
|
|
type = "ScrollFrame",
|
||
|
|
layout = "List",
|
||
|
|
children = {
|
||
|
|
{
|
||
|
|
type = "InlineGroup",
|
||
|
|
layout = "flow",
|
||
|
|
title = L["Move Quantity Settings"],
|
||
|
|
children = {
|
||
|
|
{
|
||
|
|
type = "CheckBox",
|
||
|
|
label = L["Set Move Quantity"],
|
||
|
|
relativeWidth = 0.35,
|
||
|
|
settingInfo = {operationSettings, "moveQtyEnabled"},
|
||
|
|
callback = function() container:ReloadTab() end,
|
||
|
|
tooltip = L["Enable this to set the quantity to move, if disabled Warehousing will move all of the item"],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
-- slider to set the move quantity
|
||
|
|
type = "Slider",
|
||
|
|
settingInfo = {operationSettings, "moveQuantity"},
|
||
|
|
label = L["Move Quantity"],
|
||
|
|
disabled = not operationSettings.moveQtyEnabled,
|
||
|
|
isPercent = false,
|
||
|
|
min = 1,
|
||
|
|
max = 5000,
|
||
|
|
step = 1,
|
||
|
|
relativeWidth = 0.65,
|
||
|
|
tooltip = L["Warehousing will move this number of each item"],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
type = "Spacer",
|
||
|
|
},
|
||
|
|
{
|
||
|
|
type = "CheckBox",
|
||
|
|
label = L["Set Stack Size for bags"],
|
||
|
|
relativeWidth = 0.35,
|
||
|
|
settingInfo = {operationSettings, "stackSizeEnabled"},
|
||
|
|
callback = function() container:ReloadTab() end,
|
||
|
|
tooltip = L["Enable this to set the stack size multiple to be moved"],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
-- slider to set the move quantity
|
||
|
|
type = "Slider",
|
||
|
|
settingInfo = {operationSettings, "stackSize"},
|
||
|
|
label = L["Stack Size Multiple"],
|
||
|
|
disabled = not operationSettings.stackSizeEnabled,
|
||
|
|
isPercent = false,
|
||
|
|
min = 1,
|
||
|
|
max = 200,
|
||
|
|
step = 1,
|
||
|
|
relativeWidth = 0.65,
|
||
|
|
tooltip = L["Warehousing will only move items in multiples of the stack size set when moving to your bags, this is useful for milling/prospecting etc to ensure you don't move items you can't process"],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
type = "Spacer",
|
||
|
|
},
|
||
|
|
{
|
||
|
|
type = "CheckBox",
|
||
|
|
settingInfo = {operationSettings, "keepBagQtyEnabled"},
|
||
|
|
label = L["Set Keep in Bags Quantity"],
|
||
|
|
relativeWidth = 0.35,
|
||
|
|
callback = function() container:ReloadTab() end,
|
||
|
|
tooltip = L["Enable this to set the quantity to keep back in your bags"],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
-- slider to set the keep bags qty
|
||
|
|
type = "Slider",
|
||
|
|
settingInfo = {operationSettings, "keepBagQuantity"},
|
||
|
|
label = L["Keep in Bags Quantity"],
|
||
|
|
disabled = not operationSettings.keepBagQtyEnabled,
|
||
|
|
isPercent = false,
|
||
|
|
min = 1,
|
||
|
|
max = 5000,
|
||
|
|
step = 1,
|
||
|
|
relativeWidth = 0.65,
|
||
|
|
tooltip = L["Warehousing will ensure this number remain in your bags when moving items to the bank / guildbank."],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
type = "Spacer",
|
||
|
|
},
|
||
|
|
{
|
||
|
|
type = "CheckBox",
|
||
|
|
settingInfo = {operationSettings, "keepBankQtyEnabled"},
|
||
|
|
label = L["Set Keep in Bank Quantity"],
|
||
|
|
relativeWidth = 0.35,
|
||
|
|
callback = function() container:ReloadTab() end,
|
||
|
|
tooltip = L["Enable this to set the quantity to keep back in your bank / guildbank"],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
-- slider to set the keep bank qty
|
||
|
|
type = "Slider",
|
||
|
|
settingInfo = {operationSettings, "keepBankQuantity"},
|
||
|
|
label = L["Keep in Bank/GuildBank Quantity"],
|
||
|
|
disabled = not operationSettings.keepBankQtyEnabled,
|
||
|
|
isPercent = false,
|
||
|
|
min = 1,
|
||
|
|
max = 5000,
|
||
|
|
step = 1,
|
||
|
|
relativeWidth = 0.65,
|
||
|
|
tooltip = L["Warehousing will ensure this number remain in your bank / guildbank when moving items to your bags."],
|
||
|
|
},
|
||
|
|
},
|
||
|
|
},
|
||
|
|
{
|
||
|
|
type = "Spacer",
|
||
|
|
},
|
||
|
|
{
|
||
|
|
type = "InlineGroup",
|
||
|
|
layout = "flow",
|
||
|
|
title = L["Restock Settings"],
|
||
|
|
children = {
|
||
|
|
{
|
||
|
|
type = "CheckBox",
|
||
|
|
settingInfo = {operationSettings, "restockQtyEnabled"},
|
||
|
|
label = L["Enable Restock"],
|
||
|
|
relativeWidth = 0.25,
|
||
|
|
callback = function() container:ReloadTab() end,
|
||
|
|
tooltip = L["Enable this to set the restock quantity"],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
-- slider to set the move quantity
|
||
|
|
type = "Slider",
|
||
|
|
settingInfo = {operationSettings, "restockQuantity"},
|
||
|
|
label = L["Restock Quantity"],
|
||
|
|
disabled = not operationSettings.restockQtyEnabled,
|
||
|
|
isPercent = false,
|
||
|
|
min = 1,
|
||
|
|
max = 5000,
|
||
|
|
step = 1,
|
||
|
|
relativeWidth = 0.75,
|
||
|
|
tooltip = L["Warehousing will restock your bags up to this number of items"],
|
||
|
|
},
|
||
|
|
},
|
||
|
|
},
|
||
|
|
},
|
||
|
|
},
|
||
|
|
}
|
||
|
|
TSMAPI:BuildPage(container, page)
|
||
|
|
end
|
||
|
|
|
||
|
|
function Options:DrawOperationRelationships(container, operationName)
|
||
|
|
local settingInfo = {
|
||
|
|
{
|
||
|
|
label = L["Move Quantity Settings"],
|
||
|
|
{key="moveQtyEnabled", label=L["Set Move Quantity"]},
|
||
|
|
{key="moveQuantity", label=L["Move Quantity"]},
|
||
|
|
{key="keepBagQtyEnabled", label=L["Set Keep in Bags Quantity"]},
|
||
|
|
{key="keepBagQuantity", label=L["Keep in Bags Quantity"]},
|
||
|
|
{key="keepBankQtyEnabled", label=L["Set Keep in Bank Quantity"]},
|
||
|
|
{key="keepBankQuantity", label=L["Keep in Bank/GuildBank Quantity"]},
|
||
|
|
},
|
||
|
|
{
|
||
|
|
label = L["Restock Settings"],
|
||
|
|
{key="restockQtyEnabled", label=L["Enable Restock"]},
|
||
|
|
{key="restockQuantity", label=L["Restock Quantity"]},
|
||
|
|
},
|
||
|
|
}
|
||
|
|
TSMAPI:ShowOperationRelationshipTab(TSM, container, TSM.operations[operationName], settingInfo)
|
||
|
|
end
|