You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
action-manager/modules/toggle.py

58 lines
1.3 KiB

from .core import AbstractControl, WrappingControl, action
import abc
class ToggleAction(AbstractControl, metaclass=abc.ABCMeta):
def __init__(self, initial_state: bool = False):
super().__init__()
self.__state = initial_state
def dump_state(self):
return {'state': self.__state}
def load_state(self, state):
if 'state' in state:
self.state = state['state']
def toggle(self):
self.state = not self.state
@property
def state(self):
return self.__state
@state.setter
def state(self, state: bool):
if self.__state == state:
return
if state:
self.enable()
else:
self.disable()
self.__state = state
def enable(self):
pass
def disable(self):
pass
class ToggleControl(WrappingControl):
"""Implements a simple toggle button"""
def __init__(self, letter: str, toggle_action: ToggleAction):
super().__init__(toggle_action)
self.__letter = letter
def respond_to(self, command):
if command == ':toggle':
self.child.toggle()
return True
def __str__(self):
return action(
self.create_pipe_command(':toggle'),
self.__letter.upper() if self.child.state else self.__letter.lower()
)