Skip to content

Commit e241e64

Browse files
author
Davide Rosa
committed
Improving user interface.
1 parent ae3934a commit e241e64

File tree

4 files changed

+38
-18
lines changed

4 files changed

+38
-18
lines changed

generic_regexes.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ def d(s): #discard
1616
#index_value = "(?:[0-9]*|[\$a-z_A-Z]{1}[a-z_A-Z0-9\.]*)"
1717
index_value = "(?:[^,;\{\}]*)"
1818
index_3d = "\[ *%s *(?:, *%s *){0,2}\]"%(index_value, index_value)
19-
variable_name = c(r"[\$a-z_A-Z]{1}[a-z_A-Z0-9\.]* *" + nc(index_3d) + "?")
19+
subfield = r"\.[\$a-z_A-Z]{1}[a-z_A-Z0-9\.]*"
20+
variable_name = c(r"[\$a-z_A-Z]{1}[a-z_A-Z0-9\.]* *" + nc(index_3d) + "?" + nc(subfield) + "?")
2021
dat_name = c(r"[\$a-z_A-Z]{1}[a-z_A-Z0-9\.]* *")
2122
function_name = dat_name
2223
struct_name = dat_name
@@ -175,11 +176,18 @@ def split_varname_index(_var): #given potato[3,2] it returns 'potato','[3,2]',Tr
175176
size = ''
176177
is_array = False
177178
ret = re.search(c(index_3d), var)
179+
subindex = ''
178180
if not ret is None:
179181
size = ret.groups()[0]
180-
var = var.replace(size, '')
182+
#var = var.replace(size, '')
183+
_var = var
184+
var = _var.split(size)[0]
185+
try:
186+
subindex = _var.split(size)[1]
187+
except:
188+
pass
181189
is_array = True
182-
return var, size, is_array
190+
return var, size, subindex, is_array
183191

184192
def var_without_pointed_field(_var): #given potato.weight it returns 'potato', 'weight', is_pointed
185193
var = _var

main_app.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,16 +47,19 @@ def __init__(self, project_folder):
4747
4848
parser_module.KRLModule('ir_stopm', '', src_path_and_file=self.r1_files['ir_stopm.src'], imports_to_prepend = _i('global_defs')),
4949
"""
50+
5051
self.modules.extend( [
5152
parser_module.KRLModule('sample_program', self.r1_files['sample_program.dat'], src_path_and_file=self.r1_files['sample_program.src'], imports_to_prepend = _i('global_defs') + _i('config') + _i('operate_r1'))
5253
])
53-
"""self.modules.extend( [
54+
"""
55+
self.modules.extend( [
5456
parser_module.KRLModule('sample_program', self.r1_files['sample_program.dat'], src_path_and_file=self.r1_files['sample_program.src'], imports_to_prepend = _i('global_defs') + _i('config') + _i('operate_r1')),
5557
parser_module.KRLModule('geometrylib', self.r1_files['geometrylib.dat'], src_path_and_file=self.r1_files['geometrylib.src'], imports_to_prepend = _i('global_defs') + _i('config') + _i('operate_r1')),
5658
parser_module.KRLModule('sds7000', self.r1_files['sds7000.dat'], src_path_and_file=self.r1_files['sds7000.src'], imports_to_prepend = _i('global_defs') + _i('config') + _i('operate_r1') + _i('geometrylib'))
5759
])
5860
"""
5961

62+
6063
def get_module(self, name):
6164
for m in self.modules:
6265
if m.name == name:
@@ -114,4 +117,4 @@ def run_program(self):
114117

115118
if __name__ == "__main__":
116119
# starts the webserver
117-
start(MyApp, address='127.0.0.1', port=8081, start_browser=True, username=None, password=None)
120+
start(MyApp, address='127.0.0.1', port=8081, start_browser=True, username=None, password=None, update_interval=0.005)

parser_instructions.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ def parse_single_instruction(self, code_line_original, code_line, instruction_na
152152

153153

154154

155-
if "print('0')" in code_line_original:
155+
if "profileRobotMeasures" in code_line_original:
156156
print("brakepoint")
157157

158158

@@ -232,7 +232,7 @@ def parse_single_instruction(self, code_line_original, code_line, instruction_na
232232

233233
#if the variable (struc field) is an array, we replace the type with a multi_dimensional_array
234234
for var, type_name in variables_names_with_types.items():
235-
var, size, is_array = generic_regexes.split_varname_index(var)
235+
var, size, subindex, is_array = generic_regexes.split_varname_index(var)
236236
if is_array:
237237
type_name = "multi_dimensional_array(%s, %s)"%(type_name,size)
238238
translation_result_tmp.append(" %s = %s"%(var,type_name))
@@ -377,7 +377,7 @@ def parse_single_instruction(self, code_line_original, code_line, instruction_na
377377
#if the variable is not declared as parameter, declare it in procedure/function body
378378
#if actual_code_block is None or (not re.sub(generic_regexes.index_3d, '', var) in actual_code_block.param_names):
379379
parent_function = self.get_parent_function()
380-
var, size, is_array = generic_regexes.split_varname_index(var)
380+
var, size, subindex, is_array = generic_regexes.split_varname_index(var)
381381

382382
if not parent_function is None:
383383
parent_function.local_variables[var] = type_name
@@ -414,13 +414,13 @@ def parse_single_instruction(self, code_line_original, code_line, instruction_na
414414
type_name = elements[2]
415415
var = elements[3].strip()
416416
value = elements[4].strip()
417-
var, size, is_array = generic_regexes.split_varname_index(var)
417+
var, size, subindex, is_array = generic_regexes.split_varname_index(var)
418418

419419
parent_function = self.get_parent_function()
420420

421421
if not type_name is None:
422422
type_name = type_name.strip()
423-
translation_result_tmp.append("%s%s = %s(%s)"%(var, size, type_name, value))
423+
translation_result_tmp.append("%s%s%s = %s(%s)"%(var, size, subindex, type_name, value))
424424

425425
#if there is a parent function, the variable name have to be appended to local_variables dictionary
426426
if not parent_function is None:
@@ -432,11 +432,11 @@ def parse_single_instruction(self, code_line_original, code_line, instruction_na
432432
parent_function.global_variables.append(generic_regexes.var_without_pointed_field(var)[0])
433433

434434
if is_array:
435-
translation_result_tmp.append("%s%s = %s"%(var, size, value))
435+
translation_result_tmp.append("%s%s%s = %s"%(var, size, subindex, value))
436436
else:
437-
translation_result_tmp.append("%s = %s"%(var, value))
437+
translation_result_tmp.append("%s%s = %s"%(var, subindex, value))
438438

439-
node = flow_chart_graphics.FlowInstruction('%s = %s'%(var if not is_array else "%s%s"%(var, size), value))
439+
node = flow_chart_graphics.FlowInstruction('%s%s = %s'%(var if not is_array else "%s%s"%(var, size), subindex, value))
440440
self.append(node)
441441

442442

parser_module.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ def fread_lines(file_path_and_name):
1919

2020
class MouseNavArea(gui.Container):
2121
zoom_absolute_position = 1.0
22+
zoom_min_value = 0.0
2223
def __init__(self, *args, **kwargs):
2324
gui.Container.__init__(self, *args, **kwargs)
2425
self.style['overflow'] = 'hidden'
@@ -60,7 +61,9 @@ def center_view(self, emitter, x, y):
6061
left = offset/2 -(wchild+offset-wself) * (x/wself)
6162
#left = left + offset/2 - offset * (x/wself)
6263
c.css_left = gui.to_pix( left / self.zoom_absolute_position )
63-
64+
else:
65+
c.css_left = "0px"
66+
6467
hchild = hself
6568
try:
6669
hchild = gui.from_pix(c.css_height)
@@ -71,9 +74,11 @@ def center_view(self, emitter, x, y):
7174
top = offset/2-(hchild+offset-hself) * (y/hself)
7275
#top = top + offset/2 - offset * (y/hself)
7376
c.css_top = gui.to_pix( top / self.zoom_absolute_position )
77+
else:
78+
c.css_top = "0px"
7479

7580
def zoom(self, emitter, relative_value):
76-
self.zoom_absolute_position = min(max(0, self.zoom_absolute_position - float(relative_value)*0.0003), 2.0)
81+
self.zoom_absolute_position = min(max(self.zoom_min_value, self.zoom_absolute_position - float(relative_value)*0.0003), 2.0)
7782
self.set_zoom( self.zoom_absolute_position )
7883

7984
def set_zoom(self, value):
@@ -95,8 +100,10 @@ def __init__(self, file_path_name):
95100

96101
gui.HBox.__init__(self)
97102
self.css_align_items = 'flex-start'
98-
self.append(gui.ListView(width=300), 'list')
99-
self.append(MouseNavArea(width=800, height=900), 'container')
103+
self.style['outline'] = '2px solid gray'
104+
#self.css_background_color = 'lightgray'
105+
self.append(gui.ListView(width=200, style={'margin': '0px'}), 'list')
106+
self.append(MouseNavArea(width=1000, height=650), 'container')
100107

101108
self.children['list'].onselection.do(self.on_proc_list_selected)
102109

@@ -107,6 +114,7 @@ def on_proc_list_selected(self, widget, selected_key):
107114
widget.children[selected_key].node.draw()
108115
best_zoom = min(w/float(widget.children[selected_key].node.attr_width), h/float(widget.children[selected_key].node.attr_height))
109116
self.children['container'].set_zoom(best_zoom)
117+
self.children['container'].zoom_min_value = best_zoom
110118

111119

112120
def parse_single_instruction(self, code_line_original, code_line, instruction_name, match_groups, file_lines):
@@ -176,7 +184,8 @@ class KRLModule(gui.VBox):
176184
module_src = None # KRLSrc instance
177185
def __init__(self, module_name, dat_path_and_file = '', src_path_and_file = '', imports_to_prepend = '', *args, **kwargs):
178186
super(KRLModule, self).__init__(*args, **kwargs)
179-
self.append(gui.Label("MODULE: %s"%module_name))
187+
self.css_align_items = 'flex-start'
188+
self.append(gui.Label("MODULE: %s"%module_name, style={'font-weight':'bolder', 'font-size':'20px'}))
180189
self.name = module_name
181190
if len(dat_path_and_file):
182191
self.module_dat = KRLModuleDatFileParser(dat_path_and_file)

0 commit comments

Comments
 (0)