GUI: add button to obstruct door + add figures and such to assignment HTML
This commit is contained in:
parent
fffd65370f
commit
8ffb3e097f
15 changed files with 497 additions and 8 deletions
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:sgraph="http://www.yakindu.org/sct/sgraph/2.0.0">
|
||||
<sgraph:Statechart xmi:id="_KuVP4GBDEe2R-oGCKnTAVw" specification="// DO NOT CHANGE
@EventDriven
@SuperSteps(no)
@ParentFirstExecution

// DO NOT CHANGE THE SEMANTICS
@EventDriven
@SuperSteps(no)
@ParentFirstExecution


interface:
	// DOT CHANGE THE INTERFACE

	// You can use these values in your Statechart
	// and in your tests:
	const LOW: integer = 0
	const HIGH: integer = 1 
	const LOW_LVL: integer = 500
	const HIGH_LVL: integer = 1500

	in event requestLvlChange
	in event waterLvl: integer
	in event resume
	
	in event doorObstructed: integer

	out event setRequestPending: boolean
	out event setSensorBroken
	out event openFlow: integer
	out event closeFlow: integer
	out event openDoors: integer
	out event closeDoors: integer
	out event greenLight: integer
	out event redLight: integer
	
internal:
	// You are allowed (and probably should)
	// declare internal events and internal variables
	// in this section..." name="LockController">
|
||||
<sgraph:Statechart xmi:id="_KuVP4GBDEe2R-oGCKnTAVw" specification="// DO NOT CHANGE
@EventDriven
@SuperSteps(no)
@ParentFirstExecution

// DO NOT CHANGE THE SEMANTICS
@EventDriven
@SuperSteps(no)
@ParentFirstExecution


interface:
	// DOT CHANGE THE INTERFACE

	// You can use these values in your Statechart
	// and in your tests:
	const LOW: integer = 0
	const HIGH: integer = 1 
	const LOW_LVL: integer = 500
	const HIGH_LVL: integer = 1500

	in event requestLvlChange
	in event waterLvl: integer
	in event resume
	
	in event doorObstructed

	out event setRequestPending: boolean
	out event setSensorBroken
	out event openFlow: integer
	out event closeFlow: integer
	out event openDoors: integer
	out event closeDoors: integer
	out event greenLight: integer
	out event redLight: integer
	
internal:
	// You are allowed (and probably should)
	// declare internal events and internal variables
	// in this section..." name="LockController">
|
||||
<regions xmi:id="_Kuavc2BDEe2R-oGCKnTAVw" name="main region">
|
||||
<vertices xsi:type="sgraph:State" xmi:id="_BZTF4GTzEe22Ao6AjWtBXA" name="O" incomingTransitions="_dzToYGTzEe22Ao6AjWtBXA">
|
||||
<regions xmi:id="_BZTs8mTzEe22Ao6AjWtBXA" name="r1">
|
||||
|
|
|
|||
|
|
@ -114,6 +114,7 @@ class GUI:
|
|||
sim_frame.pack(side=tkinter.LEFT)
|
||||
|
||||
request_frame = tkinter.LabelFrame(toplevel, text="Actions")
|
||||
self.button_obstruct = tkinter.Button(request_frame, text="Obstruct door", command=lambda: sim.add_input_now(self.sc, "door_obstructed"), width=18).pack()
|
||||
self.button_change_lvl = tkinter.Button(request_frame, command=lambda: self.sim.add_input_now(self.sc, "request_lvl_change"), width=18)
|
||||
self.button_change_lvl.pack()
|
||||
self.button_resume = tkinter.Button(request_frame, text="Resume (make sure sensor is repaired first!)",
|
||||
|
|
@ -196,7 +197,7 @@ class GUI:
|
|||
if value:
|
||||
self.button_change_lvl.config(state=tkinter.DISABLED, text="Change requested")
|
||||
else:
|
||||
self.button_change_lvl.config(state=tkinter.NORMAL, text="Change water level")
|
||||
self.button_change_lvl.config(state=tkinter.NORMAL, text="Request water lvl change")
|
||||
|
||||
def on_water_level_reading(self, water_level):
|
||||
# the measured water level - can be nonsense if sensor is broken
|
||||
|
|
|
|||
|
|
@ -229,4 +229,4 @@ INITIAL = [
|
|||
]
|
||||
|
||||
if __name__ == "__main__":
|
||||
run_scenarios(SCENARIOS, LockController, INITIAL, IDEMPOTENT)
|
||||
run_scenarios(SCENARIOS, LockController, INITIAL, IDEMPOTENT, verbose=False)
|
||||
|
|
|
|||
|
|
@ -41,7 +41,6 @@ class LockController:
|
|||
self.water_lvl_value = None
|
||||
self.resume = None
|
||||
self.door_obstructed = None
|
||||
self.door_obstructed_value = None
|
||||
self.set_request_pending = None
|
||||
self.set_request_pending_value = None
|
||||
self.set_request_pending_observable = Observable()
|
||||
|
|
@ -174,17 +173,16 @@ class LockController:
|
|||
"""
|
||||
self.resume = True
|
||||
|
||||
def raise_door_obstructed(self, value):
|
||||
def raise_door_obstructed(self):
|
||||
"""Raise method for event door_obstructed.
|
||||
"""
|
||||
self.in_event_queue.put(lambda: self.__raise_door_obstructed_call(value))
|
||||
self.in_event_queue.put(self.__raise_door_obstructed_call)
|
||||
self.run_cycle()
|
||||
|
||||
def __raise_door_obstructed_call(self, value):
|
||||
def __raise_door_obstructed_call(self):
|
||||
"""Raise callback for event door_obstructed.
|
||||
"""
|
||||
self.door_obstructed = True
|
||||
self.door_obstructed_value = value
|
||||
|
||||
def __entry_action_main_region_o_r1_a(self):
|
||||
"""Entry action for state 'A'..
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue