129 lines
4.1 KiB
Lua
129 lines
4.1 KiB
Lua
-- ------------------------------------------------------------------------------ --
|
|
-- 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
|