initial commit
This commit is contained in:
183
Core/UI/Elements/MyAuctionsScrollingTable.lua
Normal file
183
Core/UI/Elements/MyAuctionsScrollingTable.lua
Normal file
@@ -0,0 +1,183 @@
|
||||
-- ------------------------------------------------------------------------------ --
|
||||
-- TradeSkillMaster --
|
||||
-- https://tradeskillmaster.com --
|
||||
-- All Rights Reserved - Detailed license information included with addon. --
|
||||
-- ------------------------------------------------------------------------------ --
|
||||
|
||||
--- My Auctions Scrolling Table Class.
|
||||
-- A scrolling table containing the player's auctions. It is a subclass of the @{QueryScrollingTable} class.
|
||||
-- @classmod MyAuctionsScrollingTable
|
||||
|
||||
local _, TSM = ...
|
||||
local MyAuctionsScrollingTable = TSM.Include("LibTSMClass").DefineClass("MyAuctionsScrollingTable", TSM.UI.QueryScrollingTable)
|
||||
local TempTable = TSM.Include("Util.TempTable")
|
||||
local UIElements = TSM.Include("UI.UIElements")
|
||||
UIElements.Register(MyAuctionsScrollingTable)
|
||||
TSM.UI.MyAuctionsScrollingTable = MyAuctionsScrollingTable
|
||||
|
||||
|
||||
|
||||
-- ============================================================================
|
||||
-- Public Class Methods
|
||||
-- ============================================================================
|
||||
|
||||
function MyAuctionsScrollingTable.__init(self)
|
||||
self.__super:__init()
|
||||
self._selectionSortValue = nil
|
||||
self._selectionAuctionId = nil
|
||||
end
|
||||
|
||||
function MyAuctionsScrollingTable.Release(self)
|
||||
self._selectionSortValue = nil
|
||||
self._selectionAuctionId = nil
|
||||
self.__super:Release()
|
||||
end
|
||||
|
||||
--- Sets the selected record.
|
||||
-- @tparam MyAuctionsScrollingTable self The my auctions scrolling table object
|
||||
-- @param selection The selected record or nil to clear the selection
|
||||
-- @tparam[opt=false] bool redraw Whether or not to redraw the scrolling table
|
||||
-- @treturn MyAuctionsScrollingTable The my auctions scrolling table object
|
||||
function MyAuctionsScrollingTable.SetSelection(self, selection, redraw)
|
||||
self.__super:SetSelection(selection, redraw)
|
||||
if self._selection then
|
||||
local selectedRow = self:GetSelection()
|
||||
local sortField = TSM.IsWowClassic() and "index" or self._tableInfo:_GetSortFieldById(self._sortCol)
|
||||
self._selectionSortValue = selectedRow:GetField(sortField)
|
||||
if type(self._selectionSortValue) == "string" then
|
||||
self._selectionSortValue = strlower(self._selectionSortValue)
|
||||
end
|
||||
self._selectionAuctionId = selectedRow:GetField("auctionId")
|
||||
else
|
||||
self._selectionSortValue = nil
|
||||
self._selectionAuctionId = nil
|
||||
end
|
||||
return self
|
||||
end
|
||||
|
||||
--- Selects the next row.
|
||||
-- @tparam MyAuctionsScrollingTable self The my auctions scrolling table object
|
||||
-- @treturn MyAuctionsScrollingTable The my auctions scrolling table object
|
||||
function MyAuctionsScrollingTable.SelectNextRow(self)
|
||||
local newSelection = nil
|
||||
for i = 1, #self._data - 1 do
|
||||
if self._data[i] == self._selection then
|
||||
for j = i + 1, #self._data do
|
||||
if not self._selectionValidator or self:_selectionValidator(self._query:GetResultRowByUUID(self._data[j])) then
|
||||
newSelection = self._data[j]
|
||||
break
|
||||
end
|
||||
end
|
||||
break
|
||||
end
|
||||
end
|
||||
self:SetSelection(newSelection, true)
|
||||
return self
|
||||
end
|
||||
|
||||
|
||||
|
||||
-- ============================================================================
|
||||
-- Private Class Methods
|
||||
-- ============================================================================
|
||||
|
||||
function MyAuctionsScrollingTable._UpdateSortFromQuery(self)
|
||||
if self._tableInfo:_IsSortEnabled() then
|
||||
assert(not TSM.IsWowClassic())
|
||||
local sortField, sortAscending = self._query:GetOrderBy(2)
|
||||
if sortField then
|
||||
self._sortCol = self._tableInfo:_GetIdBySortField(sortField)
|
||||
self._sortAscending = sortAscending
|
||||
else
|
||||
self._sortCol = nil
|
||||
self._sortAscending = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function MyAuctionsScrollingTable._UpdateData(self)
|
||||
-- we need to fix up the data within the rows updated to avoid errors with trying to access old DatabaseQueryResultRows
|
||||
local prevRowIndex = TempTable.Acquire()
|
||||
local newRowData = TempTable.Acquire()
|
||||
for i, row in ipairs(self._rows) do
|
||||
if row:IsVisible() then
|
||||
prevRowIndex[row:GetData()] = i
|
||||
end
|
||||
end
|
||||
local prevSelection = self._selection
|
||||
wipe(self._data)
|
||||
self._selection = nil
|
||||
for _, uuid in self._query:UUIDIterator() do
|
||||
local row = self._query:GetResultRowByUUID(uuid)
|
||||
if (uuid == prevSelection or (row:GetField("auctionId") == self._selectionAuctionId)) and not row:GetField("isPending") then
|
||||
self._selection = uuid
|
||||
end
|
||||
if prevRowIndex[uuid] then
|
||||
newRowData[prevRowIndex[uuid]] = uuid
|
||||
end
|
||||
tinsert(self._data, uuid)
|
||||
end
|
||||
for i, row in ipairs(self._rows) do
|
||||
if row:IsVisible() then
|
||||
if newRowData[i] then
|
||||
row:SetData(newRowData[i])
|
||||
else
|
||||
row:ClearData()
|
||||
end
|
||||
end
|
||||
end
|
||||
TempTable.Release(prevRowIndex)
|
||||
TempTable.Release(newRowData)
|
||||
if prevSelection and not self._selection then
|
||||
local newSelection = nil
|
||||
-- try to select the next row based on the sorting
|
||||
local sortField = TSM.IsWowClassic() and "index" or self._tableInfo:_GetSortFieldById(self._sortCol)
|
||||
local sortAscending = not TSM.IsWowClassic() and self._sortAscending
|
||||
for _, uuid in ipairs(self._data) do
|
||||
local row = self._query:GetResultRowByUUID(uuid)
|
||||
local sortValue = row:GetField(sortField)
|
||||
if type(sortValue) == "string" then
|
||||
sortValue = strlower(sortValue)
|
||||
end
|
||||
if (sortAscending and sortValue > self._selectionSortValue) or (not sortAscending and sortValue < self._selectionSortValue) then
|
||||
if not self._selectionValidator or self:_selectionValidator(row) then
|
||||
newSelection = uuid
|
||||
break
|
||||
end
|
||||
elseif not TSM.IsWowClassic() and sortValue == self._selectionSortValue and row:GetField("auctionId") > self._selectionAuctionId then
|
||||
if not self._selectionValidator or self:_selectionValidator(row) then
|
||||
newSelection = uuid
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
-- select either the next row
|
||||
self:SetSelection(newSelection)
|
||||
end
|
||||
if self._onDataUpdated then
|
||||
self:_onDataUpdated()
|
||||
end
|
||||
end
|
||||
|
||||
function MyAuctionsScrollingTable._ToggleSort(self, id)
|
||||
local sortField = self._tableInfo:_GetSortFieldById(id)
|
||||
if not self._sortCol or not self._query or not sortField then
|
||||
-- sorting disabled so ignore
|
||||
return
|
||||
end
|
||||
|
||||
if id == self._sortCol then
|
||||
self._sortAscending = not self._sortAscending
|
||||
else
|
||||
self._sortCol = id
|
||||
self._sortAscending = true
|
||||
end
|
||||
|
||||
assert(not TSM.IsWowClassic())
|
||||
self._query:ResetOrderBy()
|
||||
:OrderBy("saleStatus", false)
|
||||
:OrderBy(sortField, self._sortAscending)
|
||||
:OrderBy("auctionId", true)
|
||||
self:_UpdateData()
|
||||
self:Draw()
|
||||
end
|
||||
Reference in New Issue
Block a user