269 lines
12 KiB
Lua
269 lines
12 KiB
Lua
|
-- ------------------------------------------------------------------------------ --
|
||
|
-- TradeSkillMaster --
|
||
|
-- https://tradeskillmaster.com --
|
||
|
-- All Rights Reserved - Detailed license information included with addon. --
|
||
|
-- ------------------------------------------------------------------------------ --
|
||
|
|
||
|
local _, TSM = ...
|
||
|
local Vendoring = TSM.MainUI.Operations:NewPackage("Vendoring")
|
||
|
local L = TSM.Include("Locale").GetTable()
|
||
|
local UIElements = TSM.Include("UI.UIElements")
|
||
|
local private = {
|
||
|
currentOperationName = nil,
|
||
|
}
|
||
|
local RESTOCK_SOURCES = { BANK, GUILD, L["Alts"], L["Alts AH"], L["AH"], L["Mail"] }
|
||
|
local RESTOCK_SOURCES_KEYS = { "bank", "guild", "alts", "alts_ah", "ah", "mail" }
|
||
|
local SETTING_INFO = {
|
||
|
restockQty = "INPUT_LABEL",
|
||
|
restockSources = "DROPDOWN",
|
||
|
keepQty = "INPUT_LABEL",
|
||
|
sellAfterExpired = "INPUT_LABEL",
|
||
|
vsMarketValue = "INPUT",
|
||
|
vsMaxMarketValue = "INPUT",
|
||
|
vsDestroyValue = "INPUT",
|
||
|
vsMaxDestroyValue = "INPUT",
|
||
|
sellSoulbound = "TOGGLE",
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
-- ============================================================================
|
||
|
-- Module Functions
|
||
|
-- ============================================================================
|
||
|
|
||
|
function Vendoring.OnInitialize()
|
||
|
TSM.MainUI.Operations.RegisterModule("Vendoring", private.GetVendoringOperationSettings)
|
||
|
end
|
||
|
|
||
|
|
||
|
|
||
|
-- ============================================================================
|
||
|
-- Vendoring Operation Settings UI
|
||
|
-- ============================================================================
|
||
|
|
||
|
function private.GetVendoringOperationSettings(operationName)
|
||
|
TSM.UI.AnalyticsRecordPathChange("main", "operations", "vendoring")
|
||
|
private.currentOperationName = operationName
|
||
|
|
||
|
local operation = TSM.Operations.GetSettings("Vendoring", private.currentOperationName)
|
||
|
return UIElements.New("ScrollFrame", "settings")
|
||
|
:SetPadding(8, 8, 8, 0)
|
||
|
:AddChild(TSM.MainUI.Operations.CreateExpandableSection("Vendoring", "buyOptionsHeading", L["Buy Options"], L["Set what is bought from a vendor."])
|
||
|
:AddChild(TSM.MainUI.Operations.CreateLinkedSettingLine("enableBuy", L["Enable buying"])
|
||
|
:SetLayout("VERTICAL")
|
||
|
:SetHeight(48)
|
||
|
:SetMargin(0, 0, 0, 12)
|
||
|
:AddChild(UIElements.New("ToggleOnOff", "toggle")
|
||
|
:SetHeight(18)
|
||
|
:SetSettingInfo(operation, "enableBuy")
|
||
|
:SetDisabled(TSM.Operations.HasRelationship("Vendoring", private.currentOperationName, "enableBuy"))
|
||
|
:SetScript("OnValueChanged", private.EnableBuyingToggleOnValueChanged)
|
||
|
)
|
||
|
)
|
||
|
:AddChild(TSM.MainUI.Operations.CreateLinkedSettingLine("restockQty", L["Restock quantity"], not operation.enableBuy)
|
||
|
:SetLayout("VERTICAL")
|
||
|
:SetHeight(48)
|
||
|
:SetMargin(0, 0, 0, 12)
|
||
|
:AddChild(UIElements.New("Frame", "content")
|
||
|
:SetLayout("HORIZONTAL")
|
||
|
:SetHeight(24)
|
||
|
:AddChild(UIElements.New("Input", "input")
|
||
|
:SetMargin(0, 8, 0, 0)
|
||
|
:SetBackgroundColor("ACTIVE_BG")
|
||
|
:SetValidateFunc("NUMBER", "0:50000")
|
||
|
:SetSettingInfo(operation, "restockQty")
|
||
|
:SetDisabled(TSM.Operations.HasRelationship("Vendoring", private.currentOperationName, "restockQty") or not operation.enableBuy)
|
||
|
)
|
||
|
:AddChild(UIElements.New("Text", "label")
|
||
|
:SetWidth("AUTO")
|
||
|
:SetFont("BODY_BODY3")
|
||
|
:SetTextColor((TSM.Operations.HasRelationship("Vendoring", private.currentOperationName, "restockQty") or not operation.enableBuy) and "TEXT_DISABLED" or "TEXT")
|
||
|
:SetFormattedText(L["Enter a value from %d - %d"], 0, 50000)
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
:AddChild(TSM.MainUI.Operations.CreateLinkedSettingLine("restockSources", L["Sources to include for restock"], not operation.enableBuy)
|
||
|
:SetLayout("VERTICAL")
|
||
|
:SetHeight(48)
|
||
|
:AddChild(UIElements.New("MultiselectionDropdown", "dropdown")
|
||
|
:SetHeight(24)
|
||
|
:SetItems(RESTOCK_SOURCES, RESTOCK_SOURCES_KEYS)
|
||
|
:SetSettingInfo(operation, "restockSources")
|
||
|
:SetSelectionText(L["No Sources"], L["%d Sources"], L["All Sources"])
|
||
|
:SetDisabled(TSM.Operations.HasRelationship("Vendoring", private.currentOperationName, "restockSources") or not operation.enableBuy)
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
:AddChild(TSM.MainUI.Operations.CreateExpandableSection("Vendoring", "sellOptionsHeading", L["Sell Options"], L["Set what is sold to a vendor."])
|
||
|
:AddChild(TSM.MainUI.Operations.CreateLinkedSettingLine("enableSell", L["Enable selling"])
|
||
|
:SetLayout("VERTICAL")
|
||
|
:SetHeight(48)
|
||
|
:SetMargin(0, 0, 0, 12)
|
||
|
:AddChild(UIElements.New("ToggleOnOff", "toggle")
|
||
|
:SetHeight(18)
|
||
|
:SetSettingInfo(operation, "enableSell")
|
||
|
:SetScript("OnValueChanged", private.EnableSellingToggleOnValueChanged)
|
||
|
:SetDisabled(TSM.Operations.HasRelationship("Vendoring", private.currentOperationName, "enableSell"))
|
||
|
)
|
||
|
)
|
||
|
:AddChild(TSM.MainUI.Operations.CreateLinkedSettingLine("keepQty", L["Keep quantity"], not operation.enableSell)
|
||
|
:SetLayout("VERTICAL")
|
||
|
:SetHeight(48)
|
||
|
:SetMargin(0, 0, 0, 12)
|
||
|
:AddChild(UIElements.New("Frame", "content")
|
||
|
:SetLayout("HORIZONTAL")
|
||
|
:SetHeight(24)
|
||
|
:AddChild(UIElements.New("Input", "input")
|
||
|
:SetMargin(0, 8, 0, 0)
|
||
|
:SetBackgroundColor("ACTIVE_BG")
|
||
|
:SetValidateFunc("NUMBER", "0:50000")
|
||
|
:SetSettingInfo(operation, "keepQty")
|
||
|
:SetDisabled(TSM.Operations.HasRelationship("Vendoring", private.currentOperationName, "keepQty") or not operation.enableSell)
|
||
|
)
|
||
|
:AddChild(UIElements.New("Text", "label")
|
||
|
:SetWidth("AUTO")
|
||
|
:SetFont("BODY_BODY3")
|
||
|
:SetTextColor((TSM.Operations.HasRelationship("Vendoring", private.currentOperationName, "keepQty") or not operation.enableSell) and "TEXT_DISABLED" or "TEXT")
|
||
|
:SetFormattedText(L["Enter a value from %d - %d"], 0, 50000)
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
:AddChild(TSM.MainUI.Operations.CreateLinkedSettingLine("sellAfterExpired", L["Min number of expires"], not operation.enableSell)
|
||
|
:SetLayout("VERTICAL")
|
||
|
:SetHeight(48)
|
||
|
:SetMargin(0, 0, 0, 12)
|
||
|
:AddChild(UIElements.New("Frame", "content")
|
||
|
:SetLayout("HORIZONTAL")
|
||
|
:SetHeight(24)
|
||
|
:AddChild(UIElements.New("Input", "input")
|
||
|
:SetMargin(0, 8, 0, 0)
|
||
|
:SetBackgroundColor("ACTIVE_BG")
|
||
|
:SetValidateFunc("NUMBER", "0:50000")
|
||
|
:SetSettingInfo(operation, "sellAfterExpired")
|
||
|
:SetDisabled(TSM.Operations.HasRelationship("Vendoring", private.currentOperationName, "sellAfterExpired") or not operation.enableSell)
|
||
|
)
|
||
|
:AddChild(UIElements.New("Text", "label")
|
||
|
:SetWidth("AUTO")
|
||
|
:SetFont("BODY_BODY3")
|
||
|
:SetTextColor((TSM.Operations.HasRelationship("Vendoring", private.currentOperationName, "sellAfterExpired") or not operation.enableSell) and "TEXT_DISABLED" or "TEXT")
|
||
|
:SetFormattedText(L["Enter a value from %d - %d"], 0, 50000)
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
:AddChild(TSM.MainUI.Operations.CreateLinkedSettingLine("vsMarketValue", L["Market value"], not operation.enableSell)
|
||
|
:SetLayout("VERTICAL")
|
||
|
:SetHeight(48)
|
||
|
:SetMargin(0, 0, 0, 12)
|
||
|
:AddChild(UIElements.New("Input", "input")
|
||
|
:SetHeight(24)
|
||
|
:SetBackgroundColor("ACTIVE_BG")
|
||
|
:SetValidateFunc("CUSTOM_PRICE")
|
||
|
:SetSettingInfo(operation, "vsMarketValue")
|
||
|
:SetDisabled(TSM.Operations.HasRelationship("Vendoring", private.currentOperationName, "vsMarketValue") or not operation.enableSell)
|
||
|
)
|
||
|
)
|
||
|
:AddChild(TSM.MainUI.Operations.CreateLinkedSettingLine("vsMaxMarketValue", L["Max market value (Enter '0c' to disable)"], not operation.enableSell)
|
||
|
:SetLayout("VERTICAL")
|
||
|
:SetHeight(48)
|
||
|
:SetMargin(0, 0, 0, 12)
|
||
|
:AddChild(UIElements.New("Input", "input")
|
||
|
:SetHeight(24)
|
||
|
:SetBackgroundColor("ACTIVE_BG")
|
||
|
:SetValidateFunc("CUSTOM_PRICE")
|
||
|
:SetSettingInfo(operation, "vsMaxMarketValue")
|
||
|
:SetDisabled(TSM.Operations.HasRelationship("Vendoring", private.currentOperationName, "vsMaxMarketValue") or not operation.enableSell)
|
||
|
)
|
||
|
)
|
||
|
:AddChild(TSM.MainUI.Operations.CreateLinkedSettingLine("vsDestroyValue", L["Destroy value"], not operation.enableSell)
|
||
|
:SetLayout("VERTICAL")
|
||
|
:SetHeight(48)
|
||
|
:SetMargin(0, 0, 0, 12)
|
||
|
:AddChild(UIElements.New("Input", "input")
|
||
|
:SetHeight(24)
|
||
|
:SetBackgroundColor("ACTIVE_BG")
|
||
|
:SetValidateFunc("CUSTOM_PRICE")
|
||
|
:SetSettingInfo(operation, "vsDestroyValue")
|
||
|
:SetDisabled(TSM.Operations.HasRelationship("Vendoring", private.currentOperationName, "vsDestroyValue") or not operation.enableSell)
|
||
|
)
|
||
|
)
|
||
|
:AddChild(TSM.MainUI.Operations.CreateLinkedSettingLine("vsMaxDestroyValue", L["Max destroy value (Enter '0c' to disable)"], not operation.enableSell)
|
||
|
:SetLayout("VERTICAL")
|
||
|
:SetHeight(48)
|
||
|
:SetMargin(0, 0, 0, 12)
|
||
|
:AddChild(UIElements.New("Input", "input")
|
||
|
:SetHeight(24)
|
||
|
:SetBackgroundColor("ACTIVE_BG")
|
||
|
:SetValidateFunc("CUSTOM_PRICE")
|
||
|
:SetSettingInfo(operation, "vsMaxDestroyValue")
|
||
|
:SetDisabled(TSM.Operations.HasRelationship("Vendoring", private.currentOperationName, "vsMaxDestroyValue") or not operation.enableSell)
|
||
|
)
|
||
|
)
|
||
|
:AddChild(TSM.MainUI.Operations.CreateLinkedSettingLine("sellSoulbound", L["Sell soulbound items"], not operation.enableSell)
|
||
|
:SetLayout("VERTICAL")
|
||
|
:SetHeight(48)
|
||
|
:SetMargin(0, 0, 0, 0)
|
||
|
:AddChild(UIElements.New("ToggleOnOff", "toggle")
|
||
|
:SetHeight(18)
|
||
|
:SetSettingInfo(operation, "sellSoulbound")
|
||
|
:SetDisabled(TSM.Operations.HasRelationship("Vendoring", private.currentOperationName, "sellSoulbound") or not operation.enableSell)
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
:AddChild(TSM.MainUI.Operations.GetOperationManagementElements("Vendoring", private.currentOperationName))
|
||
|
end
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
-- ============================================================================
|
||
|
-- Local Script Handlers
|
||
|
-- ============================================================================
|
||
|
|
||
|
function private.UpdateSettingState(settingsFrame, key, operation, value)
|
||
|
local relationshipSet, linkTexture, textColor = TSM.Operations.GetRelationshipColors("Vendoring", private.currentOperationName, key, value)
|
||
|
local settingKeyFrame = settingsFrame:GetElement(key)
|
||
|
settingKeyFrame:GetElement("line.linkBtn")
|
||
|
:SetBackground(linkTexture)
|
||
|
:SetDisabled(not value)
|
||
|
settingKeyFrame:GetElement("line.label")
|
||
|
:SetTextColor(textColor)
|
||
|
local settingType = SETTING_INFO[key]
|
||
|
if settingType == "INPUT_LABEL" then
|
||
|
settingKeyFrame:GetElement("content.input")
|
||
|
:SetDisabled(relationshipSet or not value)
|
||
|
:SetValue(operation[key] or "")
|
||
|
settingKeyFrame:GetElement("content.label")
|
||
|
:SetTextColor(textColor)
|
||
|
elseif settingType == "INPUT" then
|
||
|
settingKeyFrame:GetElement("input")
|
||
|
:SetDisabled(relationshipSet or not value)
|
||
|
elseif settingType == "TOGGLE" then
|
||
|
settingKeyFrame:GetElement("toggle")
|
||
|
:SetDisabled(relationshipSet or not value)
|
||
|
elseif settingType == "DROPDOWN" then
|
||
|
settingKeyFrame:GetElement("dropdown")
|
||
|
:SetDisabled(relationshipSet or not value)
|
||
|
else
|
||
|
error("Invalid settingType: "..tostring(settingType))
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function private.EnableBuyingToggleOnValueChanged(toggle, value)
|
||
|
local operation = TSM.Operations.GetSettings("Vendoring", private.currentOperationName)
|
||
|
local settingsFrame = toggle:GetElement("__parent.__parent")
|
||
|
private.UpdateSettingState(settingsFrame, "restockQty", operation, value)
|
||
|
private.UpdateSettingState(settingsFrame, "restockSources", operation, value)
|
||
|
settingsFrame:Draw()
|
||
|
end
|
||
|
|
||
|
function private.EnableSellingToggleOnValueChanged(toggle, value)
|
||
|
local operation = TSM.Operations.GetSettings("Vendoring", private.currentOperationName)
|
||
|
local settingsFrame = toggle:GetElement("__parent.__parent")
|
||
|
for key in pairs(SETTING_INFO) do
|
||
|
if key ~= "restockQty" and key ~= "restockSources" then
|
||
|
private.UpdateSettingState(settingsFrame, key, operation, value)
|
||
|
end
|
||
|
end
|
||
|
settingsFrame:Draw()
|
||
|
end
|