ui overhaul
This commit is contained in:
60
sys/apis/ui/components/ScrollingGrid.lua
Normal file
60
sys/apis/ui/components/ScrollingGrid.lua
Normal file
@@ -0,0 +1,60 @@
|
||||
local class = require('class')
|
||||
local UI = require('ui')
|
||||
local Util = require('util')
|
||||
|
||||
--[[-- ScrollingGrid --]]--
|
||||
UI.ScrollingGrid = class(UI.Grid)
|
||||
UI.ScrollingGrid.defaults = {
|
||||
UIElement = 'ScrollingGrid',
|
||||
scrollOffset = 0,
|
||||
marginRight = 1,
|
||||
}
|
||||
function UI.ScrollingGrid:postInit()
|
||||
self.scrollBar = UI.ScrollBar()
|
||||
end
|
||||
|
||||
function UI.ScrollingGrid:drawRows()
|
||||
UI.Grid.drawRows(self)
|
||||
self.scrollBar:draw()
|
||||
end
|
||||
|
||||
function UI.ScrollingGrid:getViewArea()
|
||||
local y = 1
|
||||
if not self.disableHeader then
|
||||
y = y + self.headerHeight
|
||||
end
|
||||
|
||||
return {
|
||||
static = true, -- the container doesn't scroll
|
||||
y = y, -- scrollbar Y
|
||||
height = self.pageSize, -- viewable height
|
||||
totalHeight = Util.size(self.values), -- total height
|
||||
offsetY = self.scrollOffset, -- scroll offset
|
||||
}
|
||||
end
|
||||
|
||||
function UI.ScrollingGrid:getStartRow()
|
||||
local ts = Util.size(self.values)
|
||||
if ts < self.pageSize then
|
||||
self.scrollOffset = 0
|
||||
end
|
||||
return self.scrollOffset + 1
|
||||
end
|
||||
|
||||
function UI.ScrollingGrid:setIndex(index)
|
||||
if index < self.scrollOffset + 1 then
|
||||
self.scrollOffset = index - 1
|
||||
elseif index - self.scrollOffset > self.pageSize then
|
||||
self.scrollOffset = index - self.pageSize
|
||||
end
|
||||
|
||||
if self.scrollOffset < 0 then
|
||||
self.scrollOffset = 0
|
||||
else
|
||||
local ts = Util.size(self.values)
|
||||
if self.pageSize + self.scrollOffset + 1 > ts then
|
||||
self.scrollOffset = math.max(0, ts - self.pageSize)
|
||||
end
|
||||
end
|
||||
UI.Grid.setIndex(self, index)
|
||||
end
|
||||
Reference in New Issue
Block a user