-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathui.py
115 lines (98 loc) · 3.08 KB
/
ui.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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
from typing import List
import imgui
from imgui.integrations.pyglet import create_renderer
class UISetting:
def __init__(
self,
dtype: str,
type: str,
value: float,
min: float = None,
max: float = None,
step: float = None,
format: str = None,
name: str = "No name",
description: str = None,
):
self.dtype = dtype
self.type = type
self.value = value
self.min = min
self.max = max
self.step = step
self.format = format
self.name = name
self.description = description
self.changed = False
def set_config(self):
desc=self.name if self.description is None else self.description
"""Missing some combinations"""
if self.dtype == "int" and self.type == "input":
self.changed, self.value = imgui.input_int(self.description, self.value)
elif self.dtype == "float" and self.type == "slider":
self.changed, self.value = imgui.slider_float(
desc, self.value, self.min, self.max, self.format, self.step
)
else:
raise Exception("Unknown type")
return self
class UISettings(List):
def __init__(self, cfg):
settings=[]
for key,arg in cfg.args.items():
settings.append(UISetting(
dtype="float",
type="slider",
value=arg[1],
min=arg[2],
max=arg[3],
step=(arg[3]-arg[2])/20,
format="%.2f",
name=key,
description=arg[0]
))
#arg.attach(self.callbak)
self.settings = settings
self._index = 0
#def callbak(self,arg):
# print(arg.name)
def __iter__(self):
for setting in self.settings:
yield setting
def __setitem__(self, item, value):
self.settings[item] = value
return self
def get_value(self, name: str):
out = None
for setting in self.settings:
if setting.name == name:
out = setting.value
if out is None:
raise KeyError("Setting not found")
return out
def get_changed(self, name: str):
out = None
for setting in self.settings:
if setting.name == name:
out = setting.changed
if out is None:
raise KeyError("Setting not found")
return out
class UI:
def __init__(
self, window, cfg:any,name: str = "Config"
):
imgui.create_context()
self.cfg=cfg
self.impl = create_renderer(window)
self.settings: UISettings = UISettings(cfg)
self.name = name
def render(self):#,names:List[str]=['C1','C2'],cb=None
imgui.new_frame()
imgui.begin(self.name)
for index, setting in enumerate(self.settings):
self.settings[index] = setting.set_config()
imgui.end()
imgui.end_frame()
imgui.render()
self.impl.render(imgui.get_draw_data())