"""Settings model for ATOMS3 MacroPad.""" from utils.constants import ( DEFAULT_HOLD_MS, DEFAULT_TYPE_DELAY, DEFAULT_ORIENTATION, DEFAULT_RESUME_DELAY, DEFAULT_COMBO_PRE_MS, DEFAULT_COMBO_POST_MS, DEFAULT_PROBE_TIMEOUT_MS, DEFAULT_MEDIA_HOLD_MS, DEFAULT_TYPE_SHIFT_EXTRA_MS, DEFAULT_TYPE_SETTLE_MS, DEFAULT_PAUSE_MARGIN_LEFT, DEFAULT_PAUSE_MARGIN_RIGHT, DEFAULT_PAUSE_MARGIN_TOP, DEFAULT_PAUSE_MARGIN_BOTTOM, ) class Settings: def __init__(self): self.hold_ms: int = DEFAULT_HOLD_MS self.type_delay: int = DEFAULT_TYPE_DELAY self.orientation: int = DEFAULT_ORIENTATION self.resume_delay: int = DEFAULT_RESUME_DELAY self.combo_pre_ms: int = DEFAULT_COMBO_PRE_MS self.combo_post_ms: int = DEFAULT_COMBO_POST_MS self.probe_timeout_ms: int = DEFAULT_PROBE_TIMEOUT_MS self.media_hold_ms: int = DEFAULT_MEDIA_HOLD_MS self.type_shift_extra_ms: int = DEFAULT_TYPE_SHIFT_EXTRA_MS self.type_settle_ms: int = DEFAULT_TYPE_SETTLE_MS self.pause_margin_left: int = DEFAULT_PAUSE_MARGIN_LEFT self.pause_margin_right: int = DEFAULT_PAUSE_MARGIN_RIGHT self.pause_margin_top: int = DEFAULT_PAUSE_MARGIN_TOP self.pause_margin_bottom: int = DEFAULT_PAUSE_MARGIN_BOTTOM def to_dict(self) -> dict: return { "hold_ms": self.hold_ms, "type_delay": self.type_delay, "orientation": self.orientation, "resume_delay": self.resume_delay, "combo_pre_ms": self.combo_pre_ms, "combo_post_ms": self.combo_post_ms, "probe_timeout_ms": self.probe_timeout_ms, "media_hold_ms": self.media_hold_ms, "type_shift_extra_ms": self.type_shift_extra_ms, "type_settle_ms": self.type_settle_ms, "pause_margin_left": self.pause_margin_left, "pause_margin_right": self.pause_margin_right, "pause_margin_top": self.pause_margin_top, "pause_margin_bottom": self.pause_margin_bottom, } @classmethod def from_dict(cls, d: dict) -> "Settings": s = cls() s.hold_ms = d.get("hold_ms", DEFAULT_HOLD_MS) s.type_delay = d.get("type_delay", DEFAULT_TYPE_DELAY) s.orientation = d.get("orientation", DEFAULT_ORIENTATION) s.resume_delay = d.get("resume_delay", DEFAULT_RESUME_DELAY) s.combo_pre_ms = d.get("combo_pre_ms", DEFAULT_COMBO_PRE_MS) s.combo_post_ms = d.get("combo_post_ms", DEFAULT_COMBO_POST_MS) s.probe_timeout_ms = d.get("probe_timeout_ms", DEFAULT_PROBE_TIMEOUT_MS) s.media_hold_ms = d.get("media_hold_ms", DEFAULT_MEDIA_HOLD_MS) s.type_shift_extra_ms = d.get("type_shift_extra_ms", DEFAULT_TYPE_SHIFT_EXTRA_MS) s.type_settle_ms = d.get("type_settle_ms", DEFAULT_TYPE_SETTLE_MS) s.pause_margin_left = d.get("pause_margin_left", DEFAULT_PAUSE_MARGIN_LEFT) s.pause_margin_right = d.get("pause_margin_right", DEFAULT_PAUSE_MARGIN_RIGHT) s.pause_margin_top = d.get("pause_margin_top", DEFAULT_PAUSE_MARGIN_TOP) s.pause_margin_bottom = d.get("pause_margin_bottom", DEFAULT_PAUSE_MARGIN_BOTTOM) return s