-
Notifications
You must be signed in to change notification settings - Fork 0
/
TouchOSC.py
89 lines (70 loc) · 2.65 KB
/
TouchOSC.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import xml.etree.ElementTree as ET
import uuid
from enum import Enum
class ObjType(Enum):
LABEL = 0
class IterableType(Enum):
iterableButton = 0,
autoPager = 1,
iterableCamera = 2
def HexToColorTuple(hex_string: str):
if len(hex_string) < 8:
return (0,0,0,0)
r = int(hex_string[0:2], 16) / 255
g = int(hex_string[2:4], 16) / 255
b = int(hex_string[4:6], 16) / 255
a = int(hex_string[6:8], 16) / 255
return (r,g,b,a)
def GetProperty(element: ET.Element, name: str):
property = element.find(f".//*[key='{name}']")
return property[1].text
def SetProperty(element: ET.Element, name: str, value: str):
property = element.find(f".//*[key='{name}']")
property[1].text = value
def SetMidiCC(element: ET.Element, channel: int, controller: int):
midi_msg = element.find(".//*[type='CONTROLCHANGE']")
midi_msg[1].text = str(channel - 1)
midi_msg[2].text = str(controller)
def GetChildByName(element: ET.Element, name: str):
children = element.findall(".//node")
for child in children:
name_attribute = child.find(".//*[key='name']")
if name_attribute[1].text == name:
return child
def GetChildByType(element: ET.Element, type: ObjType):
children = element.findall(".//node")
for child in children:
if child.get('type') == type.name:
return child
def GetImmediateChild(element: ET.Element, tag: str):
for child in element:
if child.tag == tag:
return child
def SetColor(element: ET.Element, color: tuple):
if len(color) < 4:
return
color_attribute = element.find(".//*[key='color']")
for i in range(0, 4):
color_attribute[1][i].text = f'{color[i]:.6f}'
def GetTextValue(element: ET.Element):
text_element = element.find(".//*[key='text']")
return text_element[3].text
def SetTextValue(element: ET.Element, value: str):
text_element = element.find(".//*[key='text']")
text_element[3].text = value
def SetRect(element: ET.Element, rect_name: str, x: int, y: int, w: int, h: int):
rect = element.find(f".//*[key='{rect_name}']")
rect[1][0].text = str(x)
rect[1][1].text = str(y)
rect[1][2].text = str(w)
rect[1][3].text = str(h)
def GetRect(element: ET.Element, rect_name: str):
rect = element.find(f".//*[key='{rect_name}']")
return (rect[1][0].text, rect[1][1].text, rect[1][2].text, rect[1][3].text)
def GetFrame(element: ET.Element):
return GetRect(element, 'frame')
def SetNewUUIDs(element: ET.Element):
element.set('ID', str(uuid.uuid4()))
children = element.findall(".//node")
for child in children:
child.set('ID', str(uuid.uuid4()))