initial commit
This commit is contained in:
141
Core/UI/Elements/CraftingMatList.lua
Normal file
141
Core/UI/Elements/CraftingMatList.lua
Normal file
@@ -0,0 +1,141 @@
|
||||
-- ------------------------------------------------------------------------------ --
|
||||
-- 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
|
||||
Reference in New Issue
Block a user