initial commit
This commit is contained in:
128
Core/UI/Elements/SniperScrollingTable.lua
Normal file
128
Core/UI/Elements/SniperScrollingTable.lua
Normal file
@@ -0,0 +1,128 @@
|
||||
-- ------------------------------------------------------------------------------ --
|
||||
-- TradeSkillMaster --
|
||||
-- https://tradeskillmaster.com --
|
||||
-- All Rights Reserved - Detailed license information included with addon. --
|
||||
-- ------------------------------------------------------------------------------ --
|
||||
|
||||
--- SniperScrollingTable UI Element Class.
|
||||
-- A special shopping scrolling table used for sniper which has an extra icon column on the left. It is a subclass of
|
||||
-- the @{AuctionScrollingTable} class.
|
||||
-- @classmod SniperScrollingTable
|
||||
|
||||
local _, TSM = ...
|
||||
local SniperScrollingTable = TSM.Include("LibTSMClass").DefineClass("SniperScrollingTable", TSM.UI.AuctionScrollingTable)
|
||||
local UIElements = TSM.Include("UI.UIElements")
|
||||
UIElements.Register(SniperScrollingTable)
|
||||
TSM.UI.SniperScrollingTable = SniperScrollingTable
|
||||
local private = {}
|
||||
|
||||
|
||||
|
||||
-- ============================================================================
|
||||
-- Public Class Methods
|
||||
-- ============================================================================
|
||||
|
||||
function SniperScrollingTable.__init(self)
|
||||
self.__super:__init()
|
||||
|
||||
self._highestBrowseId = 0
|
||||
self._onRowRemovedHandler = nil
|
||||
end
|
||||
|
||||
function SniperScrollingTable.Acquire(self)
|
||||
self.__super:Acquire()
|
||||
self:GetScrollingTableInfo()
|
||||
:NewColumn("icon", true)
|
||||
:SetTitleIcon("iconPack.14x14/Attention")
|
||||
:SetIconSize(14)
|
||||
:SetIconHoverEnabled(true)
|
||||
:SetIconClickHandler(private.RemoveIconClickHandler)
|
||||
:SetIconFunction(private.RemoveIconFunction)
|
||||
:SetJustifyH("CENTER")
|
||||
:SetFont("BODY_BODY3")
|
||||
:Commit()
|
||||
:RemoveColumn("timeLeft")
|
||||
:Commit()
|
||||
if TSM.IsWowClassic() then
|
||||
self._sortCol = "icon"
|
||||
self._sortAscending = true
|
||||
end
|
||||
self._highestBrowseId = 0
|
||||
end
|
||||
|
||||
function SniperScrollingTable.Release(self)
|
||||
self._onRowRemovedHandler = nil
|
||||
self.__super:Release()
|
||||
end
|
||||
|
||||
--- Registers a script handler.
|
||||
-- @tparam SniperScrollingTable self The sniper scrolling table object
|
||||
-- @tparam string script The script to register for (supported scripts: `OnRowRemoved`)
|
||||
-- @tparam function handler The script handler which will be called with the sniper scrolling table object followed by
|
||||
-- any arguments to the script
|
||||
-- @treturn SniperScrollingTable The sniper scrolling table object
|
||||
function SniperScrollingTable.SetScript(self, script, handler)
|
||||
if script == "OnRowRemoved" then
|
||||
self._onRowRemovedHandler = handler
|
||||
else
|
||||
self.__super:SetScript(script, handler)
|
||||
end
|
||||
return self
|
||||
end
|
||||
|
||||
|
||||
|
||||
-- ============================================================================
|
||||
-- Private Class Methods
|
||||
-- ============================================================================
|
||||
|
||||
function SniperScrollingTable._UpdateData(self, queryChanged)
|
||||
self.__super:_UpdateData(queryChanged)
|
||||
self._highestBrowseId = 0
|
||||
for _, row in ipairs(self._data) do
|
||||
if row:IsSubRow() then
|
||||
local _, _, browseId = row:GetListingInfo()
|
||||
self._highestBrowseId = max(self._highestBrowseId, browseId or 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function SniperScrollingTable._GetSortValue(self, row, id, isAscending)
|
||||
if id == "icon" then
|
||||
if not row:IsSubRow() then
|
||||
return 0
|
||||
end
|
||||
local _, _, browseId = row:GetListingInfo()
|
||||
return -browseId
|
||||
else
|
||||
return self.__super:_GetSortValue(row, id, isAscending)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
-- ============================================================================
|
||||
-- Private Helper Functions
|
||||
-- ============================================================================
|
||||
|
||||
function private.RemoveIconClickHandler(self, subRow)
|
||||
if not subRow:IsSubRow() then
|
||||
local baseItemString = subRow:GetBaseItemString()
|
||||
subRow = self._firstSubRowByItem[baseItemString] or subRow
|
||||
end
|
||||
if self._onRowRemovedHandler then
|
||||
self:_onRowRemovedHandler(subRow)
|
||||
end
|
||||
end
|
||||
|
||||
function private.RemoveIconFunction(self, row, isMouseOver)
|
||||
if isMouseOver then
|
||||
return "iconPack.14x14/Close/Default"
|
||||
end
|
||||
local isRecent = true
|
||||
if row:IsSubRow() then
|
||||
local _, _, browseId = row:GetListingInfo()
|
||||
isRecent = self._highestBrowseId == browseId
|
||||
end
|
||||
return isRecent and "iconPack.14x14/Attention" or "iconPack.14x14/Close/Default"
|
||||
end
|
||||
Reference in New Issue
Block a user