Skip to content

Commit 2064f0f

Browse files
committed
v250210.1
1 parent 776cc94 commit 2064f0f

File tree

8 files changed

+78
-50
lines changed

8 files changed

+78
-50
lines changed
-32.3 KB
Binary file not shown.
32.5 KB
Binary file not shown.
Binary file not shown.

easycoder/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@
99
from .ec_timestamp import *
1010
from .ec_value import *
1111

12-
__version__ = "250204.1"
12+
__version__ = "250210.1"

easycoder/ec_core.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -706,9 +706,12 @@ def k_load(self, command):
706706
def r_load(self, command):
707707
target = self.getVariable(command['target'])
708708
file = self.getRuntimeValue(command['file'])
709-
f = open(file, 'r')
710-
content = f.read()
711-
f.close()
709+
try:
710+
with open(file, 'r') as f:
711+
content = f.read()
712+
except:
713+
content=None
714+
if content != None and file.endswith('.json'): content = json.loads(content)
712715
value = {}
713716
value['type'] = 'text'
714717
value['content'] = content
@@ -1217,9 +1220,9 @@ def k_save(self, command):
12171220
def r_save(self, command):
12181221
content = self.getRuntimeValue(command['content'])
12191222
file = self.getRuntimeValue(command['file'])
1220-
f = open(file, 'w')
1221-
f.write(content)
1222-
f.close()
1223+
if file.endswith('.json'): content = json.dumps(content)
1224+
with open(file, 'w') as f:
1225+
f.write(content)
12231226
return self.nextPC()
12241227

12251228
# Send a message to a module
@@ -1996,6 +1999,10 @@ def v_decode(self, v):
19961999
base64_bytes = content.encode('ascii')
19972000
message_bytes = base64.b64decode(base64_bytes)
19982001
value['content'] = message_bytes.decode('ascii')
2002+
elif self.encoding == 'hex':
2003+
hex_bytes = content.encode('utf-8')
2004+
message_bytes = binascii.unhexlify(hex_bytes)
2005+
value['content'] = message_bytes.decode('utf-8')
19992006
else:
20002007
value = v
20012008
return value
@@ -2039,6 +2046,10 @@ def v_encode(self, v):
20392046
data_bytes = content.encode('ascii')
20402047
base64_bytes = base64.b64encode(data_bytes)
20412048
value['content'] = base64_bytes.decode('ascii')
2049+
elif self.encoding == 'hex':
2050+
data_bytes = content.encode('utf-8')
2051+
hex_bytes = binascii.hexlify(data_bytes)
2052+
value['content'] = hex_bytes.decode('utf-8')
20422053
else:
20432054
value = v
20442055
return value

easycoder/ec_graphics.py

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def k_add(self, command):
2929
command['name'] = name
3030
command['type'] = token
3131
if self.peek() == 'to':
32-
command['args'] = []
32+
command['args'] = name
3333
else:
3434
command['args'] = self.utils.getArgs(self)
3535
else:
@@ -45,28 +45,37 @@ def k_add(self, command):
4545
return False
4646

4747
def r_add(self, command):
48+
def create(type, layout, args2, target):
49+
args = self.utils.getDefaultArgs(type)
50+
for n in range(0, len(args2)):
51+
try:
52+
self.utils.decode(self, args, args2[n])
53+
except Exception as e:
54+
RuntimeError(self.program, e)
55+
item = self.utils.createWidget(type, layout, args)
56+
target['layout'].append(item)
57+
4858
target = self.getVariable(command['target'])
4959
type = command['type']
5060
args = command['args']
51-
param= None
5261
if not 'layout' in target:
5362
target['layout'] = []
54-
if args[0] == '{':
63+
if len(args) > 0 and args[0] == '{':
64+
args = json.loads(self.getRuntimeValue(json.loads(args)))
5565
if type in ['Column', 'Frame', 'Tab']:
5666
record = self.getVariable(command['name'])
57-
param = record['layout']
58-
layout = json.loads(self.getRuntimeValue(json.loads(args)))
59-
default = self.utils.getDefaultArgs(type)
60-
for n in range(0, len(layout)):
61-
try:
62-
args = self.utils.decode(self, default, layout[n])
63-
except Exception as e:
64-
RuntimeError(self.program, e)
65-
item = self.utils.createWidget(type, param, args)
66-
target['layout'].append(item)
67+
layout = record['layout']
68+
create(type, layout, args, target)
69+
else:
70+
create(type, None, args, target)
6771
else:
68-
v = self.getVariable(args)
69-
target['layout'].append(v['layout'])
72+
if type in ['Column', 'Frame', 'Tab']:
73+
record = self.getVariable(command['name'])
74+
layout = record['layout']
75+
create(type, layout, args, target)
76+
else:
77+
v = self.getVariable(args)
78+
target['layout'].append(v['layout'])
7079
return self.nextPC()
7180

7281
def k_close(self, command):

easycoder/ec_gutils.py

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,6 @@ def decode(self, handler, args, text):
4444
if value != None: value = value['content']
4545
else: raise Exception('Variable has no value')
4646
args[key] = value
47-
return args
48-
return None
4947

5048
# Reduce the event properties to a list of strings
5149
def getEventProperties(self, window, values):
@@ -59,14 +57,14 @@ def getEventProperties(self, window, values):
5957
values[key] = v
6058

6159
# Create a widget
62-
def createWidget(self, type, param, args):
63-
if type == 'Button': return self.createButton(param, args)
64-
elif type == 'Checkbox': return self.createCheckbox(param, args)
65-
elif type == 'Column': return self.createColumn(param, args)
66-
elif type == 'Input': return self.createInput(param, args)
67-
elif type == 'Listbox': return self.createListbox(param, args)
68-
elif type == 'Multiline': return self.createMultiline(param, args)
69-
elif type == 'Text': return self.createText(param, args)
60+
def createWidget(self, type, layout, args):
61+
if type == 'Button': return self.createButton(layout, args)
62+
elif type == 'Checkbox': return self.createCheckbox(layout, args)
63+
elif type == 'Column': return self.createColumn(layout, args)
64+
elif type == 'Input': return self.createInput(layout, args)
65+
elif type == 'Listbox': return self.createListbox(layout, args)
66+
elif type == 'Multiline': return self.createMultiline(layout, args)
67+
elif type == 'Text': return self.createText(layout, args)
7068
else: return None
7169

7270
# Get the current value of a widget
@@ -97,6 +95,13 @@ def updateProperty(self, element, property, value):
9795
elif property == 'values':
9896
element.update(values=value)
9997

98+
def getPad(self, args):
99+
pad = args['pad']
100+
if pad == (None, None):
101+
return pad
102+
pad = pad.split()
103+
return (pad[0], pad[1])
104+
100105
def getSize(self, args):
101106
size = args['size']
102107
if size == (None, None):
@@ -109,7 +114,7 @@ def getDefaultButton(self, args):
109114
args['disabled'] = False
110115
args['size'] = (None, None)
111116

112-
def createButton(self, param, args):
117+
def createButton(self, layout, args):
113118
return psg.Button(button_text=args['button_text'], disabled=args['disabled'], size=self.getSize(args))
114119

115120
def getDefaultCheckbox(self, args):
@@ -118,39 +123,40 @@ def getDefaultCheckbox(self, args):
118123
args['size'] = (None, None)
119124
args['expand_x'] = False
120125

121-
def createCheckbox(self, param, args):
126+
def createCheckbox(self, layout, args):
122127
return psg.Checkbox(args['text'], key=args['key'], expand_x=args['expand_x'], size=self.getSize(args))
123128

124129
def getDefaultColumn(self, args):
125130
args['expand_x'] = False
126-
args['pad'] = (0, 0)
131+
args['pad'] = (None, None)
127132

128-
def createColumn(self, param, args):
129-
return psg.Column(param, expand_x=args['expand_x'], pad=args['pad'])
133+
def createColumn(self, layout, args):
134+
return psg.Column(layout, expand_x=args['expand_x'], pad=self.getPad(args))
130135

131136
def getDefaultInput(self, args):
132137
args['default_text'] = ''
133138
args['key'] = None
134139
args['size'] = (None, None)
135140

136-
def createInput(self, param, args):
141+
def createInput(self, layout, args):
137142
return psg.Input(default_text=args['default_text'], key=args['key'], size=self.getSize(args))
138143

139144
def getDefaultListbox(self, args):
140145
args['list'] = []
141146
args['key'] = [None]
142147
args['size'] = '10 2'
148+
args['pad'] = (None, None)
143149
args['select_mode'] = None
144150

145-
def createListbox(self, param, args):
146-
return psg.Listbox([], key=args['key'], size=self.getSize(args))
151+
def createListbox(self, layout, args):
152+
return psg.Listbox([], key=args['key'], pad=self.getPad(args), size=self.getSize(args))
147153

148154
def getDefaultMultiline(self, args):
149155
args['default_text'] = ''
150156
args['key'] = None
151157
args['size'] = (None, None)
152158

153-
def createMultiline(self, param, args):
159+
def createMultiline(self, layout, args):
154160
return psg.Multiline(default_text=args['default_text'], key=args['key'], size=self.getSize(args))
155161

156162
def getDefaultText(self, args):
@@ -159,6 +165,6 @@ def getDefaultText(self, args):
159165
args['size'] = (None, None)
160166
args['expand_x'] = False
161167

162-
def createText(self, param, args):
168+
def createText(self, layouts, args):
163169
return psg.Text(text=args['text'], expand_x=args['expand_x'], key=args['key'], size=self.getSize(args))
164170

scripts/test.ecs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22

33
script Test
44

5-
variable M
6-
put 0 into M
7-
while true
8-
begin
9-
print M
10-
increment M
11-
wait 5
12-
end
5+
variable File
6+
variable Segment
7+
8+
set the encoding to `hex`
9+
load File from `/data/Projects/rbr/roombyroom/Controller/home/orangepi/firmware/NOW/config.py`
10+
put left 200 of File into Segment
11+
print Segment
12+
put encode Segment into Segment
13+
print Segment
14+
exit

0 commit comments

Comments
 (0)