add icon-image for svg icon buttons
This commit is contained in:
@@ -4,7 +4,7 @@ from os import path, sep, makedirs
|
|||||||
from subprocess import Popen, PIPE, STDOUT
|
from subprocess import Popen, PIPE, STDOUT
|
||||||
from configparser import ConfigParser
|
from configparser import ConfigParser
|
||||||
from re import search, IGNORECASE
|
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"
|
APP_NAME = "ControlDeck"
|
||||||
|
|
||||||
@@ -79,13 +79,13 @@ class Button(Div):
|
|||||||
if isinstance(self.command, (list)):
|
if isinstance(self.command, (list)):
|
||||||
# e.g.: [['pkill', 'ArdourGUI'], ['systemctl', '--user', 'restart', 'pipewire', 'pipewire-pulse'], ['ardour6', '-n', 'productive-pipewire']]
|
# e.g.: [['pkill', 'ArdourGUI'], ['systemctl', '--user', 'restart', 'pipewire', 'pipewire-pulse'], ['ardour6', '-n', 'productive-pipewire']]
|
||||||
if isinstance(self.command[0], (list)):
|
if isinstance(self.command[0], (list)):
|
||||||
[process(i) for i in self.command]
|
[process(i, False) for i in self.command]
|
||||||
else:
|
else:
|
||||||
# e.g.: ['pkill', 'ArdourGUI']
|
# e.g.: ['pkill', 'ArdourGUI']
|
||||||
process(self.command)
|
process(self.command, False)
|
||||||
else:
|
else:
|
||||||
# e.g.: 'pkill ArdourGUI'
|
# e.g.: 'pkill ArdourGUI'
|
||||||
process(self.command)
|
process(self.command, False)
|
||||||
self.on('click', click)
|
self.on('click', click)
|
||||||
|
|
||||||
class ButtonSound(Div):
|
class ButtonSound(Div):
|
||||||
@@ -166,7 +166,8 @@ def application(request):
|
|||||||
'color-bg': config.get(i, 'color-bg', fallback=''),
|
'color-bg': config.get(i, 'color-bg', fallback=''),
|
||||||
'color-fg': config.get(i, 'color-fg', fallback=''),
|
'color-fg': config.get(i, 'color-fg', fallback=''),
|
||||||
'command': config.get(i, 'command', fallback=None),
|
'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:
|
try:
|
||||||
button_dict[id] += tmp
|
button_dict[id] += tmp
|
||||||
except KeyError:
|
except KeyError:
|
||||||
@@ -200,6 +201,29 @@ def application(request):
|
|||||||
vars()[var] = Div(classes="flex flex-wrap", a=wp)
|
vars()[var] = Div(classes="flex flex-wrap", a=wp)
|
||||||
if j['type'] == 'empty':
|
if j['type'] == 'empty':
|
||||||
Button(empty=True, a=eval(var))
|
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:
|
elif 'icon' in j and j['icon'] is not None:
|
||||||
Button(inner_html=f"<i class='fa-2x {j['icon']}'><i>",
|
Button(inner_html=f"<i class='fa-2x {j['icon']}'><i>",
|
||||||
style = color_bg + color_fg,
|
style = color_bg + color_fg,
|
||||||
|
|||||||
Reference in New Issue
Block a user