mirror of
https://github.com/esphome/esphome.git
synced 2025-09-01 10:52:19 +01:00
[lvgl] Replace spinbox step with selected_digit (#10349)
Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
This commit is contained in:
@@ -451,6 +451,7 @@ CONF_GRID_ROWS = "grid_rows"
|
||||
CONF_HEADER_MODE = "header_mode"
|
||||
CONF_HOME = "home"
|
||||
CONF_INITIAL_FOCUS = "initial_focus"
|
||||
CONF_SELECTED_DIGIT = "selected_digit"
|
||||
CONF_KEY_CODE = "key_code"
|
||||
CONF_KEYPADS = "keypads"
|
||||
CONF_LAYOUT = "layout"
|
||||
|
@@ -67,7 +67,6 @@ class Widget:
|
||||
self.type = wtype
|
||||
self.config = config
|
||||
self.scale = 1.0
|
||||
self.step = 1.0
|
||||
self.range_from = -sys.maxsize
|
||||
self.range_to = sys.maxsize
|
||||
if wtype.is_compound():
|
||||
|
@@ -11,6 +11,7 @@ from ..defines import (
|
||||
CONF_ROLLOVER,
|
||||
CONF_SCROLLBAR,
|
||||
CONF_SELECTED,
|
||||
CONF_SELECTED_DIGIT,
|
||||
CONF_TEXTAREA_PLACEHOLDER,
|
||||
)
|
||||
from ..lv_validation import lv_bool, lv_float
|
||||
@@ -38,18 +39,24 @@ def validate_spinbox(config):
|
||||
min_val = -1 - max_val
|
||||
range_from = int(config[CONF_RANGE_FROM])
|
||||
range_to = int(config[CONF_RANGE_TO])
|
||||
step = int(config[CONF_STEP])
|
||||
step = config[CONF_SELECTED_DIGIT]
|
||||
digits = config[CONF_DIGITS]
|
||||
if (
|
||||
range_from > max_val
|
||||
or range_from < min_val
|
||||
or range_to > max_val
|
||||
or range_to < min_val
|
||||
):
|
||||
raise cv.Invalid("Range outside allowed limits")
|
||||
if step <= 0 or step >= (range_to - range_from) / 2:
|
||||
raise cv.Invalid("Invalid step value")
|
||||
if config[CONF_DIGITS] <= config[CONF_DECIMAL_PLACES]:
|
||||
raise cv.Invalid("Number of digits must exceed number of decimal places")
|
||||
raise cv.Invalid("Range outside allowed limits", path=[CONF_RANGE_FROM])
|
||||
if digits <= config[CONF_DECIMAL_PLACES]:
|
||||
raise cv.Invalid(
|
||||
"Number of digits must exceed number of decimal places", path=[CONF_DIGITS]
|
||||
)
|
||||
if step >= digits:
|
||||
raise cv.Invalid(
|
||||
"Initial selected digit must be less than number of digits",
|
||||
path=[CONF_SELECTED_DIGIT],
|
||||
)
|
||||
return config
|
||||
|
||||
|
||||
@@ -59,7 +66,10 @@ SPINBOX_SCHEMA = cv.Schema(
|
||||
cv.Optional(CONF_RANGE_FROM, default=0): cv.float_,
|
||||
cv.Optional(CONF_RANGE_TO, default=100): cv.float_,
|
||||
cv.Optional(CONF_DIGITS, default=4): cv.int_range(1, 10),
|
||||
cv.Optional(CONF_STEP, default=1.0): cv.positive_float,
|
||||
cv.Optional(CONF_STEP): cv.invalid(
|
||||
f"{CONF_STEP} has been replaced by {CONF_SELECTED_DIGIT}"
|
||||
),
|
||||
cv.Optional(CONF_SELECTED_DIGIT, default=0): cv.positive_int,
|
||||
cv.Optional(CONF_DECIMAL_PLACES, default=0): cv.int_range(0, 6),
|
||||
cv.Optional(CONF_ROLLOVER, default=False): lv_bool,
|
||||
}
|
||||
@@ -93,13 +103,12 @@ class SpinboxType(WidgetType):
|
||||
scale = 10 ** config[CONF_DECIMAL_PLACES]
|
||||
range_from = int(config[CONF_RANGE_FROM]) * scale
|
||||
range_to = int(config[CONF_RANGE_TO]) * scale
|
||||
step = int(config[CONF_STEP]) * scale
|
||||
step = config[CONF_SELECTED_DIGIT]
|
||||
w.scale = scale
|
||||
w.step = step
|
||||
w.range_to = range_to
|
||||
w.range_from = range_from
|
||||
lv.spinbox_set_range(w.obj, range_from, range_to)
|
||||
await w.set_property(CONF_STEP, step)
|
||||
await w.set_property("step", 10**step)
|
||||
await w.set_property(CONF_ROLLOVER, config)
|
||||
lv.spinbox_set_digit_format(
|
||||
w.obj, digits, digits - config[CONF_DECIMAL_PLACES]
|
||||
@@ -120,7 +129,7 @@ class SpinboxType(WidgetType):
|
||||
return config[CONF_RANGE_FROM]
|
||||
|
||||
def get_step(self, config: dict):
|
||||
return config[CONF_STEP]
|
||||
return 10 ** config[CONF_SELECTED_DIGIT]
|
||||
|
||||
|
||||
spinbox_spec = SpinboxType()
|
||||
|
@@ -684,7 +684,7 @@ lvgl:
|
||||
width: 120
|
||||
range_from: -10
|
||||
range_to: 1000
|
||||
step: 5.0
|
||||
selected_digit: 2
|
||||
rollover: false
|
||||
digits: 6
|
||||
decimal_places: 2
|
||||
|
Reference in New Issue
Block a user