Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com>
43 lines
1.1 KiB
Python
43 lines
1.1 KiB
Python
import esphome.config_validation as cv
|
|
|
|
from ..defines import CONF_ARC_LENGTH, CONF_INDICATOR, CONF_MAIN, CONF_SPIN_TIME
|
|
from ..lv_validation import lv_angle_degrees, lv_milliseconds
|
|
from ..lvcode import lv
|
|
from ..types import LvType
|
|
from . import Widget, WidgetType
|
|
from .arc import CONF_ARC
|
|
|
|
CONF_SPINNER = "spinner"
|
|
|
|
SPINNER_SCHEMA = cv.Schema(
|
|
{
|
|
cv.Optional(CONF_ARC_LENGTH, default=200): cv.All(
|
|
lv_angle_degrees, cv.int_range(min=0, max=360)
|
|
),
|
|
cv.Optional(CONF_SPIN_TIME, default="2s"): lv_milliseconds,
|
|
}
|
|
)
|
|
|
|
|
|
class SpinnerType(WidgetType):
|
|
def __init__(self):
|
|
super().__init__(
|
|
CONF_SPINNER,
|
|
LvType("lv_spinner_t"),
|
|
(CONF_MAIN, CONF_INDICATOR),
|
|
SPINNER_SCHEMA,
|
|
)
|
|
|
|
async def to_code(self, w: Widget, config):
|
|
spin_time = await lv_milliseconds.process(config.get(CONF_SPIN_TIME))
|
|
arc_length = int(config[CONF_ARC_LENGTH])
|
|
if arc_length < 180:
|
|
arc_length += 180
|
|
lv.spinner_set_anim_params(w.obj, spin_time, arc_length)
|
|
|
|
def get_uses(self):
|
|
return (CONF_ARC,)
|
|
|
|
|
|
spinner_spec = SpinnerType()
|