diff --git a/controldeck.py b/controldeck.py index 6246449..50102b7 100644 --- a/controldeck.py +++ b/controldeck.py @@ -17,17 +17,27 @@ from cairosvg import svg2svg APP_NAME = "ControlDeck" STATUS_DIV = Div() -STATUS_DIV.classes = " border-2 border-gray-800 bg-gray-900 text-gray-600 h-40 m-2 pt-1 pl-2 mr-16 rounded-lg flex" +STATUS_DIV.classes = " border-2 border-gray-800 bg-gray-900 text-gray-600 h-40 m-2 pt-1 pl-2 mr-16 rounded-lg flex overflow-y-auto" +STATUS_DIV.style = "scrollbar-width: thin;" def tohtml(text): return text.replace("\n", "
") def mouseenter_status(self, msg): + """Div style see STATUS_DIV.classes""" STATUS_DIV.inner_html = "
" STATUS_DIV.inner_html += "
command
" STATUS_DIV.inner_html += f"
{tohtml(self.command.strip())}
" + STATUS_DIV.inner_html += "
command-alt
" + STATUS_DIV.inner_html += f"
{tohtml(self.command_alt.strip())}
" STATUS_DIV.inner_html += "
state
" STATUS_DIV.inner_html += f"
{tohtml(self.state.strip())}
" + STATUS_DIV.inner_html += "
state-pattern
" + STATUS_DIV.inner_html += f"
{tohtml(self.state_pattern.strip())}
" + #STATUS_DIV.inner_html += "
state-pattern-alt
" + #STATUS_DIV.inner_html += f"
{tohtml(self.state_pattern_alt.strip())}
" + STATUS_DIV.inner_html += "
switched
" + STATUS_DIV.inner_html += f"
{str(self.switched)}
" STATUS_DIV.inner_html += "
" def process(args, output=True): @@ -190,8 +200,8 @@ class Button(Div): text_normal = '' text_alt = '' btype = None - command = None - command_alt = None + command = '' + command_alt = '' color_bg = '' color_fg = '' icon = '' @@ -205,6 +215,32 @@ class Button(Div): state_pattern_alt = '' state_command = '' state_command_alt = '' + switched = False + def update_state(self): + self.state = process(self.state_command) + # update switched state + if self.state_pattern != '': + if search(self.state_pattern, self.state): + # search is None if search has no match otherwise re.Match object + self.switched = False + else: + self.switched = True + # change text / icon + if not self.switched: + if self.image: + self.components[0] = self.image_element + elif self.icon: + self.inner_html = f"" + else: + self.text = self.text_normal + else: + if self.image_alt: + self.components[0] = self.image_alt_element + elif self.icon_alt: + self.inner_html = f"" + elif self.text_alt: + self.text = self.text_alt + def __init__(self, **kwargs): super().__init__(**kwargs) self.text_normal = str(self.text) @@ -220,28 +256,21 @@ class Button(Div): self.style = f"background-color:{self.color_bg};" if ishexcolor(self.color_bg) else '' self.style += f"color:{self.color_fg};" if ishexcolor(self.color_fg) else '' - if self.command is not None: + if self.command != '': def click(self, msg): self.state = process(self.state_command) - if search(self.state_pattern, self.state): - if self.command_alt is None: - process_shell(self.command) - else: - process_shell(self.command_alt) - if self.image_alt: - self.components[0] = self.image_alt_element - elif self.icon_alt: - self.inner_html = f"" - elif self.text_alt: - self.text = self.text_alt - else: + # run command + if not self.switched: process_shell(self.command) - if self.image: - self.components[0] = self.image_element - elif self.icon: - self.inner_html = f"" + else: + if self.command_alt != '': + process_shell(self.command_alt) else: - self.text = self.text_normal + process_shell(self.command) + # update switched state + if self.state_pattern == '': + self.switched = not self.switched + self.update_state() self.on('click', click) self.state = process(self.state_command) @@ -253,18 +282,17 @@ class Button(Div): self.add(self.image_alt_element) else: self.add(self.image_element) - elif self.icon: if self.icon_alt and not search(self.state_pattern, self.state): self.inner_html = f"" else: self.inner_html = f"" - else: if self.text_alt and not search(self.state_pattern, self.state): self.text = self.text_alt else: self.text = self.text_normal + self.update_state() class ButtonsSound(Div): div = None @@ -457,8 +485,8 @@ def application(request): 'text-alt': config.get(i, 'text-alt', fallback=''), 'color-bg': config.get(i, 'color-bg', fallback=''), 'color-fg': config.get(i, 'color-fg', fallback=''), - 'command': config.get(i, 'command', fallback=None), - 'command-alt': config.get(i, 'command-alt', fallback=None), + 'command': config.get(i, 'command', fallback=''), + 'command-alt': config.get(i, 'command-alt', fallback=''), 'state': config.get(i, 'state', fallback=''), 'state-alt': config.get(i, 'state-alt', fallback=''), 'state-command': config.get(i, 'state-command', fallback=''),