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_HEADER_MODE = "header_mode"
|
||||||
CONF_HOME = "home"
|
CONF_HOME = "home"
|
||||||
CONF_INITIAL_FOCUS = "initial_focus"
|
CONF_INITIAL_FOCUS = "initial_focus"
|
||||||
|
CONF_SELECTED_DIGIT = "selected_digit"
|
||||||
CONF_KEY_CODE = "key_code"
|
CONF_KEY_CODE = "key_code"
|
||||||
CONF_KEYPADS = "keypads"
|
CONF_KEYPADS = "keypads"
|
||||||
CONF_LAYOUT = "layout"
|
CONF_LAYOUT = "layout"
|
||||||
|
@@ -67,7 +67,6 @@ class Widget:
|
|||||||
self.type = wtype
|
self.type = wtype
|
||||||
self.config = config
|
self.config = config
|
||||||
self.scale = 1.0
|
self.scale = 1.0
|
||||||
self.step = 1.0
|
|
||||||
self.range_from = -sys.maxsize
|
self.range_from = -sys.maxsize
|
||||||
self.range_to = sys.maxsize
|
self.range_to = sys.maxsize
|
||||||
if wtype.is_compound():
|
if wtype.is_compound():
|
||||||
|
@@ -11,6 +11,7 @@ from ..defines import (
|
|||||||
CONF_ROLLOVER,
|
CONF_ROLLOVER,
|
||||||
CONF_SCROLLBAR,
|
CONF_SCROLLBAR,
|
||||||
CONF_SELECTED,
|
CONF_SELECTED,
|
||||||
|
CONF_SELECTED_DIGIT,
|
||||||
CONF_TEXTAREA_PLACEHOLDER,
|
CONF_TEXTAREA_PLACEHOLDER,
|
||||||
)
|
)
|
||||||
from ..lv_validation import lv_bool, lv_float
|
from ..lv_validation import lv_bool, lv_float
|
||||||
@@ -38,18 +39,24 @@ def validate_spinbox(config):
|
|||||||
min_val = -1 - max_val
|
min_val = -1 - max_val
|
||||||
range_from = int(config[CONF_RANGE_FROM])
|
range_from = int(config[CONF_RANGE_FROM])
|
||||||
range_to = int(config[CONF_RANGE_TO])
|
range_to = int(config[CONF_RANGE_TO])
|
||||||
step = int(config[CONF_STEP])
|
step = config[CONF_SELECTED_DIGIT]
|
||||||
|
digits = config[CONF_DIGITS]
|
||||||
if (
|
if (
|
||||||
range_from > max_val
|
range_from > max_val
|
||||||
or range_from < min_val
|
or range_from < min_val
|
||||||
or range_to > max_val
|
or range_to > max_val
|
||||||
or range_to < min_val
|
or range_to < min_val
|
||||||
):
|
):
|
||||||
raise cv.Invalid("Range outside allowed limits")
|
raise cv.Invalid("Range outside allowed limits", path=[CONF_RANGE_FROM])
|
||||||
if step <= 0 or step >= (range_to - range_from) / 2:
|
if digits <= config[CONF_DECIMAL_PLACES]:
|
||||||
raise cv.Invalid("Invalid step value")
|
raise cv.Invalid(
|
||||||
if config[CONF_DIGITS] <= config[CONF_DECIMAL_PLACES]:
|
"Number of digits must exceed number of decimal places", path=[CONF_DIGITS]
|
||||||
raise cv.Invalid("Number of digits must exceed number of decimal places")
|
)
|
||||||
|
if step >= digits:
|
||||||
|
raise cv.Invalid(
|
||||||
|
"Initial selected digit must be less than number of digits",
|
||||||
|
path=[CONF_SELECTED_DIGIT],
|
||||||
|
)
|
||||||
return config
|
return config
|
||||||
|
|
||||||
|
|
||||||
@@ -59,7 +66,10 @@ SPINBOX_SCHEMA = cv.Schema(
|
|||||||
cv.Optional(CONF_RANGE_FROM, default=0): cv.float_,
|
cv.Optional(CONF_RANGE_FROM, default=0): cv.float_,
|
||||||
cv.Optional(CONF_RANGE_TO, default=100): 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_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_DECIMAL_PLACES, default=0): cv.int_range(0, 6),
|
||||||
cv.Optional(CONF_ROLLOVER, default=False): lv_bool,
|
cv.Optional(CONF_ROLLOVER, default=False): lv_bool,
|
||||||
}
|
}
|
||||||
@@ -93,13 +103,12 @@ class SpinboxType(WidgetType):
|
|||||||
scale = 10 ** config[CONF_DECIMAL_PLACES]
|
scale = 10 ** config[CONF_DECIMAL_PLACES]
|
||||||
range_from = int(config[CONF_RANGE_FROM]) * scale
|
range_from = int(config[CONF_RANGE_FROM]) * scale
|
||||||
range_to = int(config[CONF_RANGE_TO]) * scale
|
range_to = int(config[CONF_RANGE_TO]) * scale
|
||||||
step = int(config[CONF_STEP]) * scale
|
step = config[CONF_SELECTED_DIGIT]
|
||||||
w.scale = scale
|
w.scale = scale
|
||||||
w.step = step
|
|
||||||
w.range_to = range_to
|
w.range_to = range_to
|
||||||
w.range_from = range_from
|
w.range_from = range_from
|
||||||
lv.spinbox_set_range(w.obj, range_from, range_to)
|
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)
|
await w.set_property(CONF_ROLLOVER, config)
|
||||||
lv.spinbox_set_digit_format(
|
lv.spinbox_set_digit_format(
|
||||||
w.obj, digits, digits - config[CONF_DECIMAL_PLACES]
|
w.obj, digits, digits - config[CONF_DECIMAL_PLACES]
|
||||||
@@ -120,7 +129,7 @@ class SpinboxType(WidgetType):
|
|||||||
return config[CONF_RANGE_FROM]
|
return config[CONF_RANGE_FROM]
|
||||||
|
|
||||||
def get_step(self, config: dict):
|
def get_step(self, config: dict):
|
||||||
return config[CONF_STEP]
|
return 10 ** config[CONF_SELECTED_DIGIT]
|
||||||
|
|
||||||
|
|
||||||
spinbox_spec = SpinboxType()
|
spinbox_spec = SpinboxType()
|
||||||
|
@@ -684,7 +684,7 @@ lvgl:
|
|||||||
width: 120
|
width: 120
|
||||||
range_from: -10
|
range_from: -10
|
||||||
range_to: 1000
|
range_to: 1000
|
||||||
step: 5.0
|
selected_digit: 2
|
||||||
rollover: false
|
rollover: false
|
||||||
digits: 6
|
digits: 6
|
||||||
decimal_places: 2
|
decimal_places: 2
|
||||||
|
Reference in New Issue
Block a user