PGRData/Script/matrix/xui/xuicommon/xuidynamictable/XDynamicTableCurve.lua

225 lines
4.9 KiB
Lua
Raw Normal View History

XDynamicTableCurve = {}
function XDynamicTableCurve.New(gameObject)
if gameObject == nil then
return nil
end
local dynamicTable = {}
setmetatable(dynamicTable, { __index = XDynamicTableCurve })
local imp = dynamicTable:Init(gameObject)
if not imp then
return nil
end
return dynamicTable
end
--初始化
function XDynamicTableCurve:Init(gameObject)
local imp = gameObject:GetComponent(typeof(CS.XDynamicTableCurve))
if not imp then
return false
end
self.Proxy = nil
self.ProxyMap = {}
self.ProxyImpMap = {}
self.DataSource = {}
self.DynamicEventDelegate = nil
self.Imp = imp
self.Imp.DynamicTableGridDelegate = function(event, index, grid)
self:OnDynamicTableEvent(event, index, grid)
end
return true
end
--获取实体组件
function XDynamicTableCurve:GetImpl()
return self.Imp
end
--设置回调主体
function XDynamicTableCurve:SetDelegate(delegate)
if not self.Imp then
return
end
-- self.Imp:SetDelegate(self)
self.Delegate = delegate
end
--事件回调
function XDynamicTableCurve:OnDynamicTableEvent(event, index, grid)
if not self.Proxy then
XLog.Warning("XDynamicTableCurve Proxy is nil,Please Setup First!!")
return
end
if not self.Delegate then
XLog.Warning("XDynamicTableCurve Delegate is nil,Please Setup First!!")
return
end
if not self.Delegate.OnDynamicTableEvent then
XLog.Warning("XDynamicTableCurve Delegate func OnDynamicTableEvent is nil,Please Setup First!!")
return
end
--使用代理器Lua代理器是一个 Table,IL使用C#脚本
local proxy = nil
if grid ~= nil then
proxy = self.ProxyMap[grid]
if not proxy then
proxy = self.Proxy.New(grid)
self.ProxyMap[grid] = proxy
--初始化只调动一次
proxy.Index = index
proxy.DynamicGrid = grid
if self.DynamicEventDelegate then
self.DynamicEventDelegate(DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT, index, proxy)
else
self.Delegate.OnDynamicTableEvent(self.Delegate, DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT, index, proxy)
end
end
end
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
proxy.Index = index
proxy.DynamicGrid = grid
self.ProxyImpMap[index] = proxy
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_RECYCLE then
proxy.Index = -1
proxy.DynamicGrid = nil
self.ProxyImpMap[index] = nil
end
if self.DynamicEventDelegate then
self.DynamicEventDelegate(event, index, proxy)
else
self.Delegate.OnDynamicTableEvent(self.Delegate, event, index, proxy)
end
end
--设置事件回调
function XDynamicTableCurve:SetDynamicEventDelegate(fun)
self.DynamicEventDelegate = fun
end
--设置代理器
function XDynamicTableCurve:SetProxy(proxy)
self.ProxyMap = {}
self.ProxyImpMap = {}
self.Proxy = proxy
end
--设置总数
function XDynamicTableCurve:SetTotalCount(totalCout)
if not self.Imp then
return
end
self.Imp.TotalCount = totalCout
end
--设置总数
function XDynamicTableCurve:SetDataSource(datas)
if not datas or not self.Imp then
return
end
self.DataSource = datas
self.Imp.TotalCount = #self.DataSource
end
--获取代理器
function XDynamicTableCurve:GetGridByIndex(index)
return self.ProxyImpMap[index]
end
--获取所有代理器
function XDynamicTableCurve:GetGrids()
return self.ProxyImpMap
end
--设置可视区域
function XDynamicTableCurve:SetViewSize(viewSize)
if not self.Imp then
return
end
self.Imp:SetViewSize(viewSize)
end
--重载数据
function XDynamicTableCurve:ReloadData(startIndex)
startIndex = startIndex or -1
if not self.Imp then
return
end
self.Imp:ReloadData(startIndex)
end
--回收所有节点
function XDynamicTableCurve:RecycleAllTableGrid()
if not self.Imp then
return
end
self.Imp:RecycleAllTableGrid()
end
--清空节点
function XDynamicTableCurve:Clear()
if not self.Imp then
return
end
self.Imp:Clear()
end
--设置节点大小
function XDynamicTableCurve:SetGridSize(GridSize)
if not self.Imp then
return
end
self.Imp.OriginGridSize = GridSize
end
function XDynamicTableCurve:GetGridSize()
return self.Imp and self.Imp.GridSize
end
-- 跳转到指定节点
function XDynamicTableCurve:TweenToIndex(index)
if not self.Imp then
return
end
self.Imp:TweenToIndex(index)
end
function XDynamicTableCurve:GetTweenIndex()
if not self.Imp then
return 0
end
return self.Imp.StartIndex
end
--todo 其他布局接口这里暂时不一一实现,因为布局属性在编辑阶段已经设置过
return XDynamicTableCurve