TradeSkillMaster/Core/UI/Elements/CraftingMatList.lua

142 lines
4.8 KiB
Lua

-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster --
-- https://tradeskillmaster.com --
-- All Rights Reserved - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
--- Crafting Mat List UI Element Class.
-- The element used to show the mats for a specific craft in the Crafting UI. It is a subclass of the @{ScrollingTable} class.
-- @classmod CraftingMatList
local _, TSM = ...
local CraftingMatList = TSM.Include("LibTSMClass").DefineClass("CraftingMatList", TSM.UI.ScrollingTable)
local ItemString = TSM.Include("Util.ItemString")
local Theme = TSM.Include("Util.Theme")
local Inventory = TSM.Include("Service.Inventory")
local UIElements = TSM.Include("UI.UIElements")
UIElements.Register(CraftingMatList)
TSM.UI.CraftingMatList = CraftingMatList
local private = {}
-- ============================================================================
-- Public Class Methods
-- ============================================================================
function CraftingMatList.__init(self)
self.__super:__init()
self._spellId = nil
self._rowHoverEnabled = false
end
function CraftingMatList.Acquire(self)
self._headerHidden = true
self.__super:Acquire()
self:SetSelectionDisabled(true)
self:GetScrollingTableInfo()
:NewColumn("check")
:SetWidth(14)
:SetIconSize(14)
:SetIconFunction(private.GetCheck)
:Commit()
:NewColumn("item")
:SetFont("ITEM_BODY3")
:SetJustifyH("LEFT")
:SetIconSize(12)
:SetIconFunction(private.GetItemIcon)
:SetTextFunction(private.GetItemText)
:SetTooltipFunction(private.GetItemTooltip)
:Commit()
:NewColumn("qty")
:SetAutoWidth()
:SetFont("TABLE_TABLE1")
:SetJustifyH("CENTER")
:SetTextFunction(private.GetQty)
:Commit()
:Commit()
end
function CraftingMatList.Release(self)
self._spellId = nil
self.__super:Release()
end
function CraftingMatList.SetScript(self, script, handler)
error("Unknown CraftingMatList script: "..tostring(script))
return self
end
--- Sets the crafting recipe to display materials for.
-- @tparam CraftingMatList self The crafting mat list object
-- @tparam number spellId The spellId for the recipe
-- @treturn CraftingMatList The crafting mat list object
function CraftingMatList.SetRecipe(self, spellId)
self._spellId = spellId
self:_UpdateData()
return self
end
-- ============================================================================
-- Private Class Methods
-- ============================================================================
function CraftingMatList._UpdateData(self)
wipe(self._data)
if not self._spellId then
return
end
for i = 1, TSM.Crafting.ProfessionUtil.GetNumMats(self._spellId) do
tinsert(self._data, i)
end
end
-- ============================================================================
-- Private Helper Functions
-- ============================================================================
function private.GetCheck(self, index)
local itemLink, _, _, quantity = TSM.Crafting.ProfessionUtil.GetMatInfo(self._spellId, index)
local itemString = ItemString.Get(itemLink)
local bagQuantity = Inventory.GetBagQuantity(itemString)
if not TSM.IsWowClassic() then
bagQuantity = bagQuantity + Inventory.GetReagentBankQuantity(itemString) + Inventory.GetBankQuantity(itemString)
end
if bagQuantity >= quantity then
return TSM.UI.TexturePacks.GetColoredKey("iconPack.14x14/Checkmark/Default", Theme.GetFeedbackColor("GREEN"))
else
return TSM.UI.TexturePacks.GetColoredKey("iconPack.14x14/Close/Default", Theme.GetFeedbackColor("RED"))
end
end
function private.GetItemIcon(self, index)
local _, _, texture = TSM.Crafting.ProfessionUtil.GetMatInfo(self._spellId, index)
return texture
end
function private.GetItemText(self, index)
local itemLink = TSM.Crafting.ProfessionUtil.GetMatInfo(self._spellId, index)
local itemString = ItemString.Get(itemLink)
return TSM.UI.GetColoredItemName(itemString) or Theme.GetFeedbackColor("RED"):ColorText("?")
end
function private.GetItemTooltip(self, index)
local itemLink = TSM.Crafting.ProfessionUtil.GetMatInfo(self._spellId, index)
return ItemString.Get(itemLink)
end
function private.GetQty(self, index)
local itemLink, _, _, quantity = TSM.Crafting.ProfessionUtil.GetMatInfo(self._spellId, index)
local itemString = ItemString.Get(itemLink)
local bagQuantity = Inventory.GetBagQuantity(itemString)
if not TSM.IsWowClassic() then
bagQuantity = bagQuantity + Inventory.GetReagentBankQuantity(itemString) + Inventory.GetBankQuantity(itemString)
end
local color = bagQuantity >= quantity and Theme.GetFeedbackColor("GREEN") or Theme.GetFeedbackColor("RED")
return color:ColorText(format("%d / %d", bagQuantity, quantity))
end