Maxim Tuprikov d49cd2777e
Feature/progress (#17)
* improve example gui. Add simple pages

* return old progress bar with example

* base progress with steps, there is bug with step? 1 ~= 1, small delta?

* polish progress, check float error case

* add callback on end of "to" function, value check

* start of green/red in progress

* add first version of rich progress bar

* make green bar darker

* rich bar fixes

* add delay, before filling in rich progress

* PR fixes

* remove dublicate of 'progress_rich'
2019-04-03 23:23:06 +03:00

78 lines
1.8 KiB
Lua

local data = require("druid.data")
local formats = require("druid.helper.formats")
local helper = require("druid.helper")
local M = {}
M.interest = {
data.ON_UPDATE
}
local empty = function() end
function M.init(instance, node, seconds_from, seconds_to, callback)
instance.node = helper.get_node(node)
seconds_from = math.max(seconds_from, 0)
seconds_to = math.max(seconds_to or 0, 0)
callback = callback or empty
instance:set_to(seconds_from)
instance:set_interval(seconds_from, seconds_to)
instance.callback = callback
if seconds_to - seconds_from == 0 then
instance:set_state(false)
instance.callback(instance.parent.parent, instance)
end
return instance
end
--- Set text to text field
-- @param set_to - set value in seconds
function M.set_to(instance, set_to)
instance.last_value = set_to
gui.set_text(instance.node, formats.second_string_min(set_to))
end
--- Called when update
-- @param is_on - boolean is timer on
function M.set_state(instance, is_on)
instance.is_on = is_on
end
--- Set time interval
-- @param from - "from" time in seconds
-- @param to - "to" time in seconds
function M.set_interval(instance, from, to)
instance.from = from
instance.value = from
instance.temp = 0
instance.target = to
M.set_state(instance, true)
M.set_to(instance, from)
end
--- Called when update
-- @param dt - delta time
function M.update(instance, dt)
if instance.is_on then
instance.temp = instance.temp + dt
local dist = math.min(1, math.abs(instance.value - instance.target))
if instance.temp > dist then
instance.temp = instance.temp - dist
instance.value = helper.step(instance.value, instance.target, 1)
M.set_to(instance, instance.value)
if instance.value == instance.target then
instance:set_state(false)
instance.callback(instance.parent.parent, instance)
end
end
end
end
return M