mirror of
https://github.com/kepler155c/opus
synced 2024-11-16 05:34:49 +00:00
61 lines
1.5 KiB
Lua
61 lines
1.5 KiB
Lua
|
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
|