From 67ff81900d7835c52026c0ebe83ea79f8812a94c Mon Sep 17 00:00:00 2001 From: Daniel Weschke Date: Mon, 5 Apr 2021 22:19:20 +0200 Subject: [PATCH] add icon-image for svg icon buttons --- controldeck.py | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/controldeck.py b/controldeck.py index c3718b9..f26cbf3 100644 --- a/controldeck.py +++ b/controldeck.py @@ -4,7 +4,7 @@ from os import path, sep, makedirs from subprocess import Popen, PIPE, STDOUT from configparser import ConfigParser from re import search, IGNORECASE -from justpy import Div, I, WebPage, SetRoute, justpy +from justpy import Div, I, WebPage, SetRoute, parse_html, justpy APP_NAME = "ControlDeck" @@ -79,13 +79,13 @@ class Button(Div): if isinstance(self.command, (list)): # e.g.: [['pkill', 'ArdourGUI'], ['systemctl', '--user', 'restart', 'pipewire', 'pipewire-pulse'], ['ardour6', '-n', 'productive-pipewire']] if isinstance(self.command[0], (list)): - [process(i) for i in self.command] + [process(i, False) for i in self.command] else: # e.g.: ['pkill', 'ArdourGUI'] - process(self.command) + process(self.command, False) else: # e.g.: 'pkill ArdourGUI' - process(self.command) + process(self.command, False) self.on('click', click) class ButtonSound(Div): @@ -166,7 +166,8 @@ def application(request): 'color-bg': config.get(i, 'color-bg', fallback=''), 'color-fg': config.get(i, 'color-fg', fallback=''), 'command': config.get(i, 'command', fallback=None), - 'icon': config.get(i, 'icon', fallback=None)}] + 'icon': config.get(i, 'icon', fallback=''), + 'icon-image': config.get(i, 'icon-image', fallback='')}] try: button_dict[id] += tmp except KeyError: @@ -200,6 +201,29 @@ def application(request): vars()[var] = Div(classes="flex flex-wrap", a=wp) if j['type'] == 'empty': Button(empty=True, a=eval(var)) + elif 'icon-image' in j and j['icon-image'] != '': + svg = '' + if path.isfile(j['icon-image']): + try: + with open(j['icon-image']) as f: + svg = f.read() + except Exception as e: + print(f"{e}") + try: # svg with custom tags, as inkscape is using, cannot be interpreted + tmp = Button(style = color_bg, command=j['command'], a=eval(var)) + tmp_svg = parse_html(svg) + #print(dir(tmp_svg)) # add_attribute + #print(tmp2.attributes) + # set width and height to viewBox to update width and height for scaling + w = tmp_svg.width if hasattr(tmp_svg, 'width') else "64" + h = tmp_svg.height if hasattr(tmp_svg, 'height') else "64" + vb = tmp_svg.viewBox if hasattr(tmp_svg, 'viewBox') else '0 0 ' + w + ' ' + h + tmp_svg.viewBox = vb + tmp_svg.width = 64 + tmp_svg.height = 64 + tmp += tmp_svg + except Exception as e: + print(f"[Error SVG]: {e}") elif 'icon' in j and j['icon'] is not None: Button(inner_html=f"", style = color_bg + color_fg,