initial commit
This commit is contained in:
215
Core/UI/VendoringUI/Sell.lua
Normal file
215
Core/UI/VendoringUI/Sell.lua
Normal file
@@ -0,0 +1,215 @@
|
||||
-- ------------------------------------------------------------------------------ --
|
||||
-- TradeSkillMaster --
|
||||
-- https://tradeskillmaster.com --
|
||||
-- All Rights Reserved - Detailed license information included with addon. --
|
||||
-- ------------------------------------------------------------------------------ --
|
||||
|
||||
local _, TSM = ...
|
||||
local Sell = TSM.UI.VendoringUI:NewPackage("Sell")
|
||||
local L = TSM.Include("Locale").GetTable()
|
||||
local Money = TSM.Include("Util.Money")
|
||||
local TempTable = TSM.Include("Util.TempTable")
|
||||
local String = TSM.Include("Util.String")
|
||||
local Theme = TSM.Include("Util.Theme")
|
||||
local ItemInfo = TSM.Include("Service.ItemInfo")
|
||||
local Settings = TSM.Include("Service.Settings")
|
||||
local UIElements = TSM.Include("UI.UIElements")
|
||||
local private = {
|
||||
settings = nil,
|
||||
filterText = "",
|
||||
query = nil,
|
||||
}
|
||||
|
||||
|
||||
|
||||
-- ============================================================================
|
||||
-- Module Functions
|
||||
-- ============================================================================
|
||||
|
||||
function Sell.OnInitialize()
|
||||
private.settings = Settings.NewView()
|
||||
:AddKey("global", "vendoringUIContext", "sellScrollingTable")
|
||||
TSM.UI.VendoringUI.RegisterTopLevelPage(L["Sell"], private.GetFrame)
|
||||
end
|
||||
|
||||
|
||||
|
||||
-- ============================================================================
|
||||
-- Sell UI
|
||||
-- ============================================================================
|
||||
|
||||
function private.GetFrame()
|
||||
TSM.UI.AnalyticsRecordPathChange("vendoring", "sell")
|
||||
private.filterText = ""
|
||||
if private.query then
|
||||
TSM.Vendoring.Sell.ResetBagsQuery(private.query)
|
||||
else
|
||||
private.query = TSM.Vendoring.Sell.CreateBagsQuery()
|
||||
end
|
||||
|
||||
return UIElements.New("Frame", "sell")
|
||||
:SetLayout("VERTICAL")
|
||||
:AddChild(UIElements.New("Frame", "header")
|
||||
:SetLayout("VERTICAL")
|
||||
:SetPadding(8)
|
||||
:SetBackgroundColor("PRIMARY_BG_ALT")
|
||||
:AddChild(UIElements.New("Text", "ignoreText")
|
||||
:SetHeight(36)
|
||||
:SetMargin(0, 0, 0, 8)
|
||||
:SetFont("BODY_BODY3")
|
||||
:SetText(format(L["%sLeft-Click|r to ignore an item for this session. Hold %sShift|r to ignore permanently. You can remove items from permanent ignore in the Vendoring settings."], Theme.GetColor("INDICATOR"):GetTextColorPrefix(), Theme.GetColor("INDICATOR"):GetTextColorPrefix()))
|
||||
)
|
||||
:AddChild(UIElements.New("Frame", "filters")
|
||||
:SetLayout("HORIZONTAL")
|
||||
:SetHeight(24)
|
||||
:AddChild(UIElements.New("Input", "searchInput")
|
||||
:SetIconTexture("iconPack.18x18/Search")
|
||||
:SetClearButtonEnabled(true)
|
||||
:AllowItemInsert()
|
||||
:SetHintText(L["Search Bags"])
|
||||
:SetScript("OnValueChanged", private.InputOnValueChanged)
|
||||
)
|
||||
:AddChild(UIElements.New("Button", "filterBtn")
|
||||
:SetWidth("AUTO")
|
||||
:SetMargin(8, 8, 0, 0)
|
||||
:SetFont("BODY_BODY3_MEDIUM")
|
||||
:SetText(FILTERS)
|
||||
-- TODO
|
||||
-- :SetScript("OnClick", private.FilterButtonOnClick)
|
||||
)
|
||||
:AddChild(UIElements.New("Button", "filterBtnIcon")
|
||||
:SetBackgroundAndSize("iconPack.14x14/Filter")
|
||||
-- TODO
|
||||
-- :SetScript("OnClick", private.FilterButtonOnClick)
|
||||
)
|
||||
)
|
||||
)
|
||||
:AddChild(UIElements.New("QueryScrollingTable", "items")
|
||||
:SetSettingsContext(private.settings, "sellScrollingTable")
|
||||
:GetScrollingTableInfo()
|
||||
:NewColumn("item")
|
||||
:SetTitle(L["Item"])
|
||||
:SetIconSize(12)
|
||||
:SetFont("ITEM_BODY3")
|
||||
:SetJustifyH("LEFT")
|
||||
:SetTextInfo("itemString", private.GetItemText)
|
||||
:SetIconInfo("itemString", ItemInfo.GetTexture)
|
||||
:SetTooltipInfo("itemString")
|
||||
:SetSortInfo("name")
|
||||
:SetTooltipLinkingDisabled(true)
|
||||
:DisableHiding()
|
||||
:Commit()
|
||||
:NewColumn("vendorSell")
|
||||
:SetTitle(L["Vendor Sell"])
|
||||
:SetFont("TABLE_TABLE1")
|
||||
:SetJustifyH("RIGHT")
|
||||
:SetTextInfo("vendorSell", private.GetVendorSellText)
|
||||
:SetSortInfo("vendorSell")
|
||||
:Commit()
|
||||
:NewColumn("potential")
|
||||
:SetTitle(L["Potential"])
|
||||
:SetFont("TABLE_TABLE1")
|
||||
:SetJustifyH("RIGHT")
|
||||
:SetTextInfo("potentialValue", Money.ToString)
|
||||
:SetSortInfo("potentialValue")
|
||||
:Commit()
|
||||
:SetCursor("BUY_CURSOR")
|
||||
:Commit()
|
||||
:SetQuery(private.query)
|
||||
:SetScript("OnRowClick", private.RowOnClick)
|
||||
)
|
||||
:AddChild(UIElements.New("Texture", "line")
|
||||
:SetHeight(2)
|
||||
:SetTexture("ACTIVE_BG")
|
||||
)
|
||||
:AddChild(UIElements.New("Frame", "footer")
|
||||
:SetLayout("HORIZONTAL")
|
||||
:SetHeight(40)
|
||||
:SetPadding(8)
|
||||
:SetBackgroundColor("PRIMARY_BG_ALT")
|
||||
:AddChild(UIElements.New("ActionButton", "sellTrashBtn")
|
||||
:SetWidth(128)
|
||||
:SetMargin(0, 8, 0, 0)
|
||||
:SetText(L["Sell Trash"])
|
||||
:SetScript("OnClick", private.SellTrashBtnOnClick)
|
||||
)
|
||||
:AddChild(UIElements.New("ActionButton", "sellBOEBtn")
|
||||
:SetWidth(128)
|
||||
:SetMargin(0, 8, 0, 0)
|
||||
:SetText(L["Sell BoEs"])
|
||||
:SetScript("OnClick", private.SellBOEBtnOnClick)
|
||||
)
|
||||
:AddChild(UIElements.New("ActionButton", "sellAllBtn")
|
||||
:SetText(L["Sell All"])
|
||||
:SetScript("OnClick", private.SellAllBtnOnClick)
|
||||
)
|
||||
)
|
||||
end
|
||||
|
||||
function private.GetItemText(itemString)
|
||||
return TSM.UI.GetColoredItemName(itemString) or "?"
|
||||
end
|
||||
|
||||
function private.GetVendorSellText(vendorSell)
|
||||
return vendorSell > 0 and Money.ToString(vendorSell) or ""
|
||||
end
|
||||
|
||||
|
||||
|
||||
-- ============================================================================
|
||||
-- Local Script Handlers
|
||||
-- ============================================================================
|
||||
|
||||
function private.InputOnValueChanged(input)
|
||||
local text = input:GetValue()
|
||||
if text == private.filterText then
|
||||
return
|
||||
end
|
||||
private.filterText = text
|
||||
|
||||
TSM.Vendoring.Sell.ResetBagsQuery(private.query)
|
||||
if text ~= "" then
|
||||
private.query:Matches("name", String.Escape(text))
|
||||
end
|
||||
input:GetElement("__parent.__parent.__parent.items"):UpdateData(true)
|
||||
end
|
||||
|
||||
function private.RowOnClick(_, row, mouseButton)
|
||||
local itemString = row:GetField("itemString")
|
||||
if mouseButton == "RightButton" then
|
||||
TSM.Vendoring.Sell.SellItem(itemString)
|
||||
elseif IsShiftKeyDown() then
|
||||
TSM.Vendoring.Sell.IgnoreItemPermanent(itemString)
|
||||
else
|
||||
TSM.Vendoring.Sell.IgnoreItemSession(itemString)
|
||||
end
|
||||
end
|
||||
|
||||
function private.SellTrashBtnOnClick(button)
|
||||
for _, row in private.query:Iterator() do
|
||||
local itemString, quality = row:GetFields("itemString", "quality")
|
||||
if quality == (TSM.IsShadowlands() and Enum.ItemQuality.Poor or LE_ITEM_QUALITY_POOR) then
|
||||
TSM.Vendoring.Sell.SellItem(itemString)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function private.SellBOEBtnOnClick(button)
|
||||
-- checking if an item is disenchantable might cause our query to change since it depends on the ItemInfo DB, so cache the list of items first
|
||||
local items = TempTable.Acquire()
|
||||
for _, row in private.query:Iterator() do
|
||||
tinsert(items, row:GetField("itemString"))
|
||||
end
|
||||
for _, itemString in ipairs(items) do
|
||||
if ItemInfo.IsDisenchantable(itemString) then
|
||||
TSM.Vendoring.Sell.SellItem(itemString)
|
||||
end
|
||||
end
|
||||
TempTable.Release(items)
|
||||
end
|
||||
|
||||
function private.SellAllBtnOnClick(button)
|
||||
for _, row in private.query:Iterator() do
|
||||
TSM.Vendoring.Sell.SellItem(row:GetField("itemString"))
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user