You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

113 lines
2.5 KiB

--[[
View.lua
@Author : DengSir (tdaddon@163.com)
@Link : https://dengsir.github.io
]]
local MAJOR, MINOR = 'View', 1
local GUI = LibStub('tdGUI-1.0')
local View, oldminor = GUI:NewEmbed(MAJOR, MINOR)
if not View then return end
function View:SetItemList(itemList)
self._itemList = itemList
end
function View:GetItemList()
return self._itemList
end
function View:SetItemHeight(itemHeight)
self._itemHeight = itemHeight
end
function View:GetItemHeight()
return self._itemHeight or 20
end
function View:SetItemWidth(itemWidth)
self._itemWidth = itemWidth
end
function View:GetItemWidth()
return self._itemWidth
end
function View:SetItemSpacing(itemSpacing)
self._itemSpacing = itemSpacing
end
function View:GetItemSpacing()
return self._itemSpacing or 0
end
function View:SetPadding(...)
self._leftPadding,
self._rightPadding,
self._topPadding,
self._bottomPadding = ...
end
function View:GetPadding()
return self._leftPadding or 0,
self._rightPadding or self._leftPadding or 0,
self._topPadding or self._leftPadding or 0,
self._bottomPadding or self._leftPadding or 0
end
function View:SetItemClass(itemClass)
self._itemClass = itemClass
end
function View:GetItemClass()
return self._itemClass or GUI:GetClass('ViewItem')
end
function View:GetItem(index)
-- return (self._filterList or self._itemList)[index]
if self._filterList then
return self._filterList[index]
elseif self._itemList then
return self._itemList[index]
end
end
function View:GetItemCount()
return self._filterList and #self._filterList or self._itemList and #self._itemList or 0
end
function View:GetButton(index)
if not self._buttons[index] then
local parent = self.scrollChild or self
local button = self:GetItemClass():New(parent)
button:Hide()
button:SetOwner(self)
button:SetFrameLevel(parent:GetFrameLevel() + 1)
self._buttons[index] = button
self:UpdateItemPosition(index)
self:Fire('OnItemCreated', button, index)
end
return self._buttons[index]
end
local mixins = {
'SetItemList',
'GetItemList',
'SetItemHeight',
'GetItemHeight',
'SetItemWidth',
'GetItemWidth',
'SetItemSpacing',
'GetItemSpacing',
'SetPadding',
'GetPadding',
'SetItemClass',
'GetItemClass',
'GetItem',
'GetItemCount',
'GetButton',
}
View.Embed = GUI:EmbedFactory(View, mixins)