76 lines
1.7 KiB
Lua
76 lines
1.7 KiB
Lua
local core = require "core"
|
|
local style = require "core.style"
|
|
local View = require "core.view"
|
|
|
|
|
|
local LogView = View:extend()
|
|
|
|
LogView.context = "session"
|
|
|
|
function LogView:new()
|
|
LogView.super.new(self)
|
|
self.last_item = core.log_items[#core.log_items]
|
|
self.scrollable = true
|
|
self.yoffset = 0
|
|
end
|
|
|
|
|
|
function LogView:get_name()
|
|
return "Log"
|
|
end
|
|
|
|
|
|
function LogView:update()
|
|
local item = core.log_items[#core.log_items]
|
|
if self.last_item ~= item then
|
|
self.last_item = item
|
|
self.scroll.to.y = 0
|
|
self.yoffset = -(style.font:get_height() + style.padding.y)
|
|
end
|
|
|
|
self:move_towards("yoffset", 0)
|
|
|
|
LogView.super.update(self)
|
|
end
|
|
|
|
|
|
local function draw_text_multiline(font, text, x, y, color)
|
|
local th = font:get_height()
|
|
local resx, resy = x, y
|
|
for line in text:gmatch("[^\n]+") do
|
|
resy = y
|
|
resx = renderer.draw_text(style.font, line, x, y, color)
|
|
y = y + th
|
|
end
|
|
return resx, resy
|
|
end
|
|
|
|
|
|
function LogView:draw()
|
|
self:draw_background(style.background)
|
|
|
|
local ox, oy = self:get_content_offset()
|
|
local th = style.font:get_height()
|
|
local y = oy + style.padding.y + self.yoffset
|
|
|
|
for i = #core.log_items, 1, -1 do
|
|
local x = ox + style.padding.x
|
|
local item = core.log_items[i]
|
|
local time = os.date(nil, item.time)
|
|
x = renderer.draw_text(style.font, time, x, y, style.dim)
|
|
x = x + style.padding.x
|
|
local subx = x
|
|
x, y = draw_text_multiline(style.font, item.text, x, y, style.text)
|
|
renderer.draw_text(style.font, " at " .. item.at, x, y, style.dim)
|
|
y = y + th
|
|
if item.info then
|
|
subx, y = draw_text_multiline(style.font, item.info, subx, y, style.dim)
|
|
y = y + th
|
|
end
|
|
y = y + style.padding.y
|
|
end
|
|
end
|
|
|
|
|
|
return LogView
|