109 lines
2.7 KiB
Lua
109 lines
2.7 KiB
Lua
|
-- mod-version:3
|
||
|
local core = require "core"
|
||
|
local style = require "core.style"
|
||
|
local command = require "core.command"
|
||
|
local common = require "core.common"
|
||
|
local config = require "core.config"
|
||
|
local View = require "core.view"
|
||
|
|
||
|
|
||
|
config.plugins.bigclock = common.merge({
|
||
|
time_format = "%H:%M:%S",
|
||
|
date_format = "%A, %d %B %Y",
|
||
|
scale = 1,
|
||
|
-- The config specification used by the settings gui
|
||
|
config_spec = {
|
||
|
name = "Big Clock",
|
||
|
{
|
||
|
label = "Time Format",
|
||
|
description = "Time specification defined with Lua date/time place holders.",
|
||
|
path = "time_format",
|
||
|
type = "string",
|
||
|
default = "%H:%M:%S"
|
||
|
},
|
||
|
{
|
||
|
label = "Date Format",
|
||
|
description = "Date specification defined with Lua date/time place holders.",
|
||
|
path = "date_format",
|
||
|
type = "string",
|
||
|
default = "%A, %d %B %Y",
|
||
|
},
|
||
|
{
|
||
|
label = "Scale",
|
||
|
description = "Size of the clock relative to screen.",
|
||
|
path = "scale",
|
||
|
type = "number",
|
||
|
default = 1,
|
||
|
min = 0.5,
|
||
|
max = 3.0,
|
||
|
step = 0.1
|
||
|
}
|
||
|
}
|
||
|
}, config.plugins.bigclock)
|
||
|
|
||
|
|
||
|
local ClockView = View:extend()
|
||
|
|
||
|
|
||
|
function ClockView:new()
|
||
|
ClockView.super.new(self)
|
||
|
self.time_text = ""
|
||
|
self.date_text = ""
|
||
|
self.last_scale = 0
|
||
|
end
|
||
|
|
||
|
|
||
|
function ClockView:get_name()
|
||
|
return "Big Clock"
|
||
|
end
|
||
|
|
||
|
|
||
|
function ClockView:update_fonts()
|
||
|
if self.last_scale ~= config.plugins.bigclock.scale then
|
||
|
self.last_scale = config.plugins.bigclock.scale
|
||
|
else
|
||
|
return
|
||
|
end
|
||
|
local size = math.floor(self.size.x * 0.15 / 15) * 15 * config.plugins.bigclock.scale
|
||
|
if self.font_size ~= size then
|
||
|
self.time_font = renderer.font.copy(style["font"], size)
|
||
|
self.date_font = renderer.font.copy(style["font"], size * 0.3)
|
||
|
self.font_size = size
|
||
|
collectgarbage()
|
||
|
end
|
||
|
end
|
||
|
|
||
|
|
||
|
function ClockView:update()
|
||
|
local time_text = os.date(config.plugins.bigclock.time_format)
|
||
|
local date_text = os.date(config.plugins.bigclock.date_format)
|
||
|
if self.time_text ~= time_text or self.date_text ~= date_text then
|
||
|
core.redraw = true
|
||
|
self.time_text = time_text
|
||
|
self.date_text = date_text
|
||
|
end
|
||
|
ClockView.super.update(self)
|
||
|
end
|
||
|
|
||
|
|
||
|
function ClockView:draw()
|
||
|
self:update_fonts()
|
||
|
self:draw_background(style.background)
|
||
|
local x, y = self.position.x, self.position.y
|
||
|
local w, h = self.size.x, self.size.y
|
||
|
local _, y = common.draw_text(self.time_font, style.text, self.time_text, "center", x, y, w, h)
|
||
|
local th = self.date_font:get_height()
|
||
|
common.draw_text(self.date_font, style.dim, self.date_text, "center", x, y, w, th)
|
||
|
end
|
||
|
|
||
|
|
||
|
command.add(nil, {
|
||
|
["big-clock:open"] = function()
|
||
|
local node = core.root_view:get_active_node()
|
||
|
node:add_view(ClockView())
|
||
|
end,
|
||
|
})
|
||
|
|
||
|
|
||
|
return ClockView
|