|
@@ -26,6 +26,7 @@ username = "test"
|
|
root = Tk()
|
|
root = Tk()
|
|
names = {}
|
|
names = {}
|
|
event_entry = StringVar()
|
|
event_entry = StringVar()
|
|
|
|
+setting_initial = False
|
|
|
|
|
|
canvas = Canvas(root, width=MAX_WIDTH, height=MAX_HEIGHT, bg="white")
|
|
canvas = Canvas(root, width=MAX_WIDTH, height=MAX_HEIGHT, bg="white")
|
|
|
|
|
|
@@ -50,7 +51,7 @@ class FakeLayer():
|
|
def set_attribute(self, name, attr, value):
|
|
def set_attribute(self, name, attr, value):
|
|
self.attrs.setdefault(name, {})[attr] = value
|
|
self.attrs.setdefault(name, {})[attr] = value
|
|
|
|
|
|
- def instantiate_block(self, name, block_type):
|
|
|
|
|
|
+ def instantiate_element(self, name, block_type):
|
|
self.types[name] = block_type
|
|
self.types[name] = block_type
|
|
|
|
|
|
def instantiate_link(self, name, link_type, source, target):
|
|
def instantiate_link(self, name, link_type, source, target):
|
|
@@ -68,6 +69,12 @@ class FakeLayer():
|
|
def delete(self):
|
|
def delete(self):
|
|
pass
|
|
pass
|
|
|
|
|
|
|
|
+ def switch_initial(self, name):
|
|
|
|
+ pass
|
|
|
|
+
|
|
|
|
+ def auto_sanitize(self, auto):
|
|
|
|
+ pass
|
|
|
|
+
|
|
attribute = []
|
|
attribute = []
|
|
available_attrs = []
|
|
available_attrs = []
|
|
simulation = []
|
|
simulation = []
|
|
@@ -143,7 +150,7 @@ class MvLayer():
|
|
urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": "set_input", "value": '"%s"' % attr, "username": username}))).read()
|
|
urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": "set_input", "value": '"%s"' % attr, "username": username}))).read()
|
|
urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": "set_input", "value": json.dumps(value), "username": username}))).read()
|
|
urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": "set_input", "value": json.dumps(value), "username": username}))).read()
|
|
|
|
|
|
- def instantiate_block(self, name, block_type):
|
|
|
|
|
|
+ def instantiate_element(self, name, block_type):
|
|
urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": "set_input", "value": '"instantiate_node"', "username": username}))).read()
|
|
urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": "set_input", "value": '"instantiate_node"', "username": username}))).read()
|
|
urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": "set_input", "value": '"%s"' % (block_type), "username": username}))).read()
|
|
urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": "set_input", "value": '"%s"' % (block_type), "username": username}))).read()
|
|
urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": "set_input", "value": '"%s"' % (name), "username": username}))).read()
|
|
urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": "set_input", "value": '"%s"' % (name), "username": username}))).read()
|
|
@@ -169,6 +176,14 @@ class MvLayer():
|
|
urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": "set_input", "value": '"delete_element"', "username": username}))).read()
|
|
urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": "set_input", "value": '"delete_element"', "username": username}))).read()
|
|
urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": "set_input", "value": '"%s"' % (block), "username": username}))).read()
|
|
urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": "set_input", "value": '"%s"' % (block), "username": username}))).read()
|
|
|
|
|
|
|
|
+ def switch_initial(self, name):
|
|
|
|
+ urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": "set_input", "value": '"switch_initial"', "username": username}))).read()
|
|
|
|
+ urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": "set_input", "value": '"%s"' % (name), "username": username}))).read()
|
|
|
|
+
|
|
|
|
+ def auto_sanitize(self, auto):
|
|
|
|
+ urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": "set_input", "value": '"auto_sanitize"', "username": username}))).read()
|
|
|
|
+ urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": "set_input", "value": "true" if auto else "false", "username": username}))).read()
|
|
|
|
+
|
|
def lower(value):
|
|
def lower(value):
|
|
return value / JUMP * JUMP
|
|
return value / JUMP * JUMP
|
|
|
|
|
|
@@ -209,6 +224,7 @@ class InterfaceCore():
|
|
old_value = None
|
|
old_value = None
|
|
|
|
|
|
new_value = tkSimpleDialog.askstring("Attribute modification", attr, initialvalue=old_value)
|
|
new_value = tkSimpleDialog.askstring("Attribute modification", attr, initialvalue=old_value)
|
|
|
|
+ canvas.focus_set()
|
|
if t == "Float":
|
|
if t == "Float":
|
|
new_value = float(new_value)
|
|
new_value = float(new_value)
|
|
elif t == "String":
|
|
elif t == "String":
|
|
@@ -231,13 +247,24 @@ class InterfaceCore():
|
|
global name
|
|
global name
|
|
x = event.x
|
|
x = event.x
|
|
y = event.y
|
|
y = event.y
|
|
- self.mv.instantiate_block(str(name), "State")
|
|
|
|
|
|
+ self.mv.instantiate_element(str(name), "State")
|
|
r = canvas.create_oval(lower(x), lower(y), upper(x), upper(y), fill="white")
|
|
r = canvas.create_oval(lower(x), lower(y), upper(x), upper(y), fill="white")
|
|
b = (lower(x), lower(y), upper(x), upper(y), str(name), "NODE")
|
|
b = (lower(x), lower(y), upper(x), upper(y), str(name), "NODE")
|
|
self.drawn.add(b)
|
|
self.drawn.add(b)
|
|
self.refs[str(name)] = [r]
|
|
self.refs[str(name)] = [r]
|
|
name += 1
|
|
name += 1
|
|
|
|
|
|
|
|
+ def switch_initial(self, evt):
|
|
|
|
+ if self.find((evt.x, evt.y)):
|
|
|
|
+ lname = self.find((evt.x, evt.y))
|
|
|
|
+ self.mv.switch_initial(lname)
|
|
|
|
+
|
|
|
|
+ # Update visual representation
|
|
|
|
+ for f in self.refs.values():
|
|
|
|
+ self.canvas.itemconfigure(f, width=1)
|
|
|
|
+
|
|
|
|
+ self.canvas.itemconfigure(self.refs[lname], width=4)
|
|
|
|
+
|
|
def find(self, location):
|
|
def find(self, location):
|
|
def sqrt(a):
|
|
def sqrt(a):
|
|
return a**0.5
|
|
return a**0.5
|
|
@@ -279,7 +306,10 @@ class InterfaceCore():
|
|
core = InterfaceCore()
|
|
core = InterfaceCore()
|
|
|
|
|
|
def clicked(event):
|
|
def clicked(event):
|
|
- core.clicked(event)
|
|
|
|
|
|
+ if setting_initial:
|
|
|
|
+ core.switch_initial(event)
|
|
|
|
+ else:
|
|
|
|
+ core.clicked(event)
|
|
|
|
|
|
def draw(event):
|
|
def draw(event):
|
|
global start_location
|
|
global start_location
|
|
@@ -300,9 +330,27 @@ def delete(event):
|
|
def add_event():
|
|
def add_event():
|
|
core.add_event(event_entry.get())
|
|
core.add_event(event_entry.get())
|
|
|
|
|
|
|
|
+def control_released(evt):
|
|
|
|
+ print("Control released")
|
|
|
|
+ global setting_initial
|
|
|
|
+ setting_initial = False
|
|
|
|
+
|
|
|
|
+def control_pressed(evt):
|
|
|
|
+ print("Control pressed")
|
|
|
|
+ global setting_initial
|
|
|
|
+ setting_initial = True
|
|
|
|
+
|
|
|
|
+def auto_sanitize():
|
|
|
|
+ core.mv.auto_sanitize(True)
|
|
|
|
+
|
|
|
|
+def manual_sanitize():
|
|
|
|
+ core.mv.auto_sanitize(False)
|
|
|
|
+
|
|
buttons = [
|
|
buttons = [
|
|
Button(root, text="START", command=simulate),
|
|
Button(root, text="START", command=simulate),
|
|
Button(root, text="PAUSE", command=pause),
|
|
Button(root, text="PAUSE", command=pause),
|
|
|
|
+ Button(root, text="AUTO", command=auto_sanitize),
|
|
|
|
+ Button(root, text="MANUAL", command=manual_sanitize),
|
|
Entry(root, textvariable=event_entry),
|
|
Entry(root, textvariable=event_entry),
|
|
Button(root, text="EVENT", command=add_event),
|
|
Button(root, text="EVENT", command=add_event),
|
|
]
|
|
]
|
|
@@ -319,6 +367,9 @@ for i in range(JUMP, MAX_HEIGHT, JUMP):
|
|
for i in range(JUMP, MAX_WIDTH, JUMP):
|
|
for i in range(JUMP, MAX_WIDTH, JUMP):
|
|
canvas.create_line(i, 0, i, MAX_WIDTH, fill="grey")
|
|
canvas.create_line(i, 0, i, MAX_WIDTH, fill="grey")
|
|
|
|
|
|
|
|
+canvas.focus_set()
|
|
|
|
+canvas.bind("<KeyPress-Control_L>", control_pressed)
|
|
|
|
+canvas.bind("<KeyRelease-Control_L>", control_released)
|
|
canvas.bind("<Button-1>", clicked)
|
|
canvas.bind("<Button-1>", clicked)
|
|
canvas.bind("<Button-2>", delete)
|
|
canvas.bind("<Button-2>", delete)
|
|
canvas.bind("<Button-3>", draw)
|
|
canvas.bind("<Button-3>", draw)
|