142 lines
4.8 KiB
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
|