from .action import Action
from . import debug_print
import time
+import threading
from transitions.extensions import HierarchicalMachine as Machine
class Key(ButtonBehavior, Widget):
'failed',
{
'name': 'loaded',
- 'children': ['no_config', 'no_actions', 'running']
+ 'children': [
+ 'no_config',
+ 'no_actions',
+ 'running',
+ 'protecting_repeat'
+ ]
}
]
{
'trigger': 'finish',
'source': 'loaded_running',
+ 'dest': 'loaded_protecting_repeat'
+ },
+ {
+ 'trigger': 'repeat_protection_finished',
+ 'source': 'loaded_protecting_repeat',
'dest': 'loaded'
- }
+ },
]
key_sym = StringProperty(None)
def get_alias_color(self):
if self.is_loaded_inactive():
return [1, 1, 1, 1]
+ elif self.is_loaded_protecting_repeat():
+ return [*self.custom_color, 100/255]
elif self.is_loaded(allow_substates=True):
return [*self.custom_color, 1]
elif self.is_failed():
self.parent.finished_running(self, start_time)
+ def on_enter_loaded_protecting_repeat(self, modifiers):
+ if 'repeat_delay' in self.config['properties']:
+ self.protecting_repeat_timer = threading.Timer(
+ self.config['properties']['repeat_delay'],
+ self.repeat_protection_finished)
+ self.protecting_repeat_timer.start()
+ else:
+ self.repeat_protection_finished()
+
# This one cannot be in the Machine state since it would be queued to run
# *after* the loop is ended...
def interrupt(self):