-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathboxes.py
executable file
·121 lines (103 loc) · 4.13 KB
/
boxes.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
116
117
118
119
120
121
"""Python library for Numworks python GUIs"""
from ion import *
from lined import *
import time
keyDelay = 0.2
#Defining UI Widgets
class Box:
elements = list()
keyPressTime = 0
def __init__(self):
self.boxBasis = Element(self, posy=0, height=0)
self.elements.append(self.boxBasis)
self.selectedIndex = 0
self.run = True
def renderBackground(self):
print("backg")
pass
def renderElements(self):
for element in self.elements:
element.render()
def selectIndex(self, index):
self.elements[self.selectedIndex].select(False)
self.selectedIndex = index
self.elements[self.selectedIndex].select(True)
def stop(self):
self.run = False
def mainLoop(self):
self.run = True
self.elements.pop(0)
self.selectIndex(self.selectedIndex)
self.renderBackground()
self.renderElements()
while self.run:
if keydown(KEY_TOOLBOX):
self.run = False
if keydown(KEY_OK) and time.monotonic()-self.keyPressTime>keyDelay*3:
self.elements[self.selectedIndex].doCommand()
self.renderElements()
if keydown(KEY_UP) and time.monotonic()-self.keyPressTime>keyDelay:
self.keyPressTime = time.monotonic()
self.selectIndex(self.selectedIndex-1 if self.selectedIndex>0 else len(self.elements)-1)
self.renderElements()
if keydown(KEY_DOWN) and time.monotonic()-self.keyPressTime>keyDelay:
self.keyPressTime = time.monotonic()
self.selectIndex(self.selectedIndex+1 if self.selectedIndex+1<len(self.elements) else 0)
self.renderElements()
time.sleep(0.03)
self.elements.insert(0, self.boxBasis)
class Element:
def __init__(self,box:Box, posx=None, posy=None, height=None, width=None):
self.box = box
self.posx = posx
self.posy = posy
self.height = height
self.width = width
self.selectable = False
def pack(self):
self.posx = 160-round(self.width/2)
self.posy = self.box.elements[-1].posy+self.box.elements[-1].height+1
self.box.elements.append(self)
class Selectable:
def __init__(self, command=None):
self.command = command
def doCommand(self):
if callable(self.command):
self.command()
self.box.renderBackground()
self.box.renderElements()
class Button(Element, Selectable):
def __init__(self, box:Box, text:str="",
command=None, param:list=(),
color=(120,120,120), boundaryColor=(192,192,192),
selectedColor=(208,208,208), selectedBoundaryColor=(192,192,192),
fontColor=(255,255,255), selectedFontColor=(0,0,0)):
Element.__init__(self, box)
Selectable.__init__(self, command)
self.text = text
self.textWidth = len(text)*12
self.height = 18+4*2+2*2
self.width = self.textWidth+2*2+1*2
self.color = color
self.boundaryColor = boundaryColor
self.selectedColor = selectedColor
self.fontColor = fontColor
self.selectedFontColor = selectedFontColor
self.selectedBoundaryColor = selectedBoundaryColor
self.renderColor = color
self.renderBoundaryColor = boundaryColor
self.renderFontColor = fontColor
self.selectable = True
def select(self, selectBool:bool):
if selectBool:
self.renderColor = self.selectedColor
self.renderBoundaryColor = self.selectedBoundaryColor
self.renderFontColor = self.selectedFontColor
else:
self.renderColor = self.color
self.renderBoundaryColor = self.boundaryColor
self.renderFontColor = self.fontColor
def render(self):
draw_box(self.posx,self.posy,self.textWidth+4*2+2*2,18+4*2+2*2,self.renderBoundaryColor)
draw_rect(self.posx+2, self.posy+2, self.textWidth+4*2, 18+4*2, self.renderColor)
draw_string(self.text, self.posx+4+2, self.posy+4+2, self.renderFontColor, self.renderColor)