123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552 |
- """
- Generated by Statechart compiler by Glenn De Jonghe and Joeri Exelmans
- Date: Sun Dec 07 18:22:48 2014
- Model author: Raphael Mannadiar
- Model name: Traffic_Light
- Model description:
- PIM Traffic lights.
- """
- from python_runtime.statecharts_core import *
- from python_runtime.libs.ui import *
- from python_runtime.libs.utils import *
- # package "Traffic_Light"
- class TrafficLight(RuntimeClassBase):
- def __init__(self, controller, canvas):
- RuntimeClassBase.__init__(self, controller)
-
- self.semantics.big_step_maximality = StatechartSemantics.TakeMany
- self.semantics.internal_event_lifeline = StatechartSemantics.Queue
- self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
- self.semantics.priority = StatechartSemantics.SourceParent
- self.semantics.concurrency = StatechartSemantics.Single
-
- # Call user defined constructor
- TrafficLight.user_defined_constructor(self, canvas)
-
- def user_defined_constructor(self, canvas):
- size = 100
- offset = size + 5
- self.RED = 0
- self.YELLOW = 1
- self.GREEN = 2
- self.colors = ['#f00', '#ff0', '#0f0']
- self.lights = [canvas.add_rectangle(size / 2, size / 2, size, size, {'fill':'#000'}), canvas.add_rectangle(size / 2, size / 2 + offset, size, size, {'fill':'#000'}), canvas.add_rectangle(size / 2, size / 2 + 2 * offset, size, size, {'fill':'#000'})]
-
- def user_defined_destructor(self):
- pass
-
-
- # User defined method
- def setYellow(self):
- self.clear()
- self.lights[self.YELLOW].set_color(self.colors[self.YELLOW])
-
-
- # User defined method
- def setGreen(self):
- self.clear()
- self.lights[self.GREEN].set_color(self.colors[self.GREEN])
-
-
- # User defined method
- def clear(self):
- self.lights[self.RED].set_color('#000')
- self.lights[self.YELLOW].set_color('#000')
- self.lights[self.GREEN].set_color('#000')
-
-
- # User defined method
- def setRed(self):
- self.clear()
- self.lights[self.RED].set_color(self.colors[self.RED])
-
- def initializeStatechart(self):
- self.current_state[self.Root] = []
- self.current_state[self.Root_on] = []
- self.current_state[self.Root_on_interrupted] = []
- self.current_state[self.Root_on_normal] = []
-
- self.history_state[self.Root_on_normal] = []
-
- # Enter default state
- self.enterDefault_Root_on()
-
- # Unique IDs for all statechart nodes
- Root = 0
- Root_on = 1
- Root_on_interrupted = 2
- Root_on_normal = 3
- Root_on_interrupted_yellow = 4
- Root_on_interrupted_black = 5
- Root_on_normal_yellow = 6
- Root_on_normal_red = 7
- Root_on_normal_green = 8
- Root_off = 9
-
- # Statechart enter/exit action method(s)
-
- def enter_Root_on(self):
- self.current_state[self.Root].append(self.Root_on)
-
- def exit_Root_on(self):
- if self.Root_on_interrupted in self.current_state[self.Root_on]:
- self.exit_Root_on_interrupted()
- if self.Root_on_normal in self.current_state[self.Root_on]:
- self.exit_Root_on_normal()
- self.current_state[self.Root] = []
-
- def enter_Root_on_interrupted(self):
- self.current_state[self.Root_on].append(self.Root_on_interrupted)
-
- def exit_Root_on_interrupted(self):
- if self.Root_on_interrupted_yellow in self.current_state[self.Root_on_interrupted]:
- self.exit_Root_on_interrupted_yellow()
- if self.Root_on_interrupted_black in self.current_state[self.Root_on_interrupted]:
- self.exit_Root_on_interrupted_black()
- self.current_state[self.Root_on] = []
-
- def enter_Root_on_normal(self):
- self.current_state[self.Root_on].append(self.Root_on_normal)
-
- def exit_Root_on_normal(self):
- self.history_state[self.Root_on_normal] = self.current_state[self.Root_on_normal]
- if self.Root_on_normal_yellow in self.current_state[self.Root_on_normal]:
- self.exit_Root_on_normal_yellow()
- if self.Root_on_normal_red in self.current_state[self.Root_on_normal]:
- self.exit_Root_on_normal_red()
- if self.Root_on_normal_green in self.current_state[self.Root_on_normal]:
- self.exit_Root_on_normal_green()
- self.current_state[self.Root_on] = []
-
- def enter_Root_on_interrupted_yellow(self):
- self.timers[0] = 0.5
- self.setYellow()
- self.current_state[self.Root_on_interrupted].append(self.Root_on_interrupted_yellow)
-
- def exit_Root_on_interrupted_yellow(self):
- self.timers.pop(0, None)
- self.current_state[self.Root_on_interrupted] = []
-
- def enter_Root_on_interrupted_black(self):
- self.timers[1] = 0.5
- self.clear()
- self.current_state[self.Root_on_interrupted].append(self.Root_on_interrupted_black)
-
- def exit_Root_on_interrupted_black(self):
- self.timers.pop(1, None)
- self.current_state[self.Root_on_interrupted] = []
-
- def enter_Root_on_normal_yellow(self):
- self.timers[2] = 1.0
- self.setYellow()
- self.current_state[self.Root_on_normal].append(self.Root_on_normal_yellow)
-
- def exit_Root_on_normal_yellow(self):
- self.timers.pop(2, None)
- self.current_state[self.Root_on_normal] = []
-
- def enter_Root_on_normal_red(self):
- self.timers[3] = 3.0
- self.setRed()
- self.current_state[self.Root_on_normal].append(self.Root_on_normal_red)
-
- def exit_Root_on_normal_red(self):
- self.timers.pop(3, None)
- self.current_state[self.Root_on_normal] = []
-
- def enter_Root_on_normal_green(self):
- self.timers[4] = 2.0
- self.setGreen()
- self.current_state[self.Root_on_normal].append(self.Root_on_normal_green)
-
- def exit_Root_on_normal_green(self):
- self.timers.pop(4, None)
- self.current_state[self.Root_on_normal] = []
-
- def enter_Root_off(self):
- self.clear()
- self.current_state[self.Root].append(self.Root_off)
-
- def exit_Root_off(self):
- self.current_state[self.Root] = []
-
- # Statechart enter/exit default method(s)
-
- def enterDefault_Root_on(self):
- self.enter_Root_on()
- self.enterDefault_Root_on_normal()
-
- def enterDefault_Root_on_interrupted(self):
- self.enter_Root_on_interrupted()
- self.enter_Root_on_interrupted_yellow()
-
- def enterDefault_Root_on_normal(self):
- self.enter_Root_on_normal()
- self.enter_Root_on_normal_red()
-
- # Statechart enter/exit history method(s)
-
- def enterHistoryShallow_Root_on_normal(self):
- if len(self.history_state[self.Root_on_normal]) == 0:
- self.enter_Root_on_normal_red()
- else:
- if self.Root_on_normal_yellow in self.history_state[self.Root_on_normal]:
- self.enter_Root_on_normal_yellow()
- if self.Root_on_normal_red in self.history_state[self.Root_on_normal]:
- self.enter_Root_on_normal_red()
- if self.Root_on_normal_green in self.history_state[self.Root_on_normal]:
- self.enter_Root_on_normal_green()
-
- # Statechart transitions
-
- def generateCandidatesChildren_Root(self):
- if self.current_state[self.Root][0] == self.Root_on:
- return self.generateCandidates_Root_on()
- elif self.current_state[self.Root][0] == self.Root_off:
- return self.generateCandidates_Root_off()
- return False
-
- def generateCandidates_Root(self):
- if not self.combo_step.isArenaChanged(self.Root):
- return self.generateCandidatesChildren_Root()
- return False
-
- def generateCandidatesChildren_Root_on(self):
- if self.current_state[self.Root_on][0] == self.Root_on_interrupted:
- return self.generateCandidates_Root_on_interrupted()
- elif self.current_state[self.Root_on][0] == self.Root_on_normal:
- return self.generateCandidates_Root_on_normal()
- return False
-
- def generateCandidatesCurrent_Root_on(self):
- enabled_events = self.getEnabledEvents()
- for e in enabled_events:
- if (e.name == "stop_clicked") and (e.port == "ui"):
- self.small_step.addCandidate(self.transition_Root_on_1, e.parameters)
- return True
- return False
-
- def generateCandidates_Root_on(self):
- branch_done = False
- if not self.combo_step.isArenaChanged(self.Root_on):
- if self.semantics.priority == StatechartSemantics.SourceParent:
- branch_done = self.generateCandidatesCurrent_Root_on()
- if not branch_done:
- branch_done = self.generateCandidatesChildren_Root_on()
- elif self.semantics.priority == StatechartSemantics.SourceChild:
- branch_done = self.generateCandidatesChildren_Root_on()
- if not branch_done:
- branch_done = self.generateCandidatesCurrent_Root_on()
- return branch_done
-
- def transition_Root_on_1(self, parameters):
- self.exit_Root_on()
- self.combo_step.setArenaChanged(self.Root)
- self.enter_Root_off()
-
- def generateCandidatesChildren_Root_on_interrupted(self):
- if self.current_state[self.Root_on_interrupted][0] == self.Root_on_interrupted_yellow:
- return self.generateCandidates_Root_on_interrupted_yellow()
- elif self.current_state[self.Root_on_interrupted][0] == self.Root_on_interrupted_black:
- return self.generateCandidates_Root_on_interrupted_black()
- return False
-
- def generateCandidatesCurrent_Root_on_interrupted(self):
- enabled_events = self.getEnabledEvents()
- for e in enabled_events:
- if (e.name == "police_interrupt_clicked") and (e.port == "ui"):
- self.small_step.addCandidate(self.transition_Root_on_interrupted_1, e.parameters)
- return True
- return False
-
- def generateCandidates_Root_on_interrupted(self):
- branch_done = False
- if not self.combo_step.isArenaChanged(self.Root_on_interrupted):
- if self.semantics.priority == StatechartSemantics.SourceParent:
- branch_done = self.generateCandidatesCurrent_Root_on_interrupted()
- if not branch_done:
- branch_done = self.generateCandidatesChildren_Root_on_interrupted()
- elif self.semantics.priority == StatechartSemantics.SourceChild:
- branch_done = self.generateCandidatesChildren_Root_on_interrupted()
- if not branch_done:
- branch_done = self.generateCandidatesCurrent_Root_on_interrupted()
- return branch_done
-
- def transition_Root_on_interrupted_1(self, parameters):
- self.exit_Root_on_interrupted()
- self.combo_step.setArenaChanged(self.Root_on)
- self.enter_Root_on_normal()
- self.enterHistoryShallow_Root_on_normal()
-
- def generateCandidatesCurrent_Root_on_interrupted_yellow(self):
- enabled_events = self.getEnabledEvents()
- for e in enabled_events:
- if e.name == "_0after":
- self.small_step.addCandidate(self.transition_Root_on_interrupted_yellow_1, e.parameters)
- return True
- return False
-
- def generateCandidates_Root_on_interrupted_yellow(self):
- if not self.combo_step.isArenaChanged(self.Root_on_interrupted_yellow):
- return self.generateCandidatesCurrent_Root_on_interrupted_yellow()
- return False
-
- def transition_Root_on_interrupted_yellow_1(self, parameters):
- self.exit_Root_on_interrupted_yellow()
- self.combo_step.setArenaChanged(self.Root_on_interrupted)
- self.enter_Root_on_interrupted_black()
-
- def generateCandidatesCurrent_Root_on_interrupted_black(self):
- enabled_events = self.getEnabledEvents()
- for e in enabled_events:
- if e.name == "_1after":
- self.small_step.addCandidate(self.transition_Root_on_interrupted_black_1, e.parameters)
- return True
- return False
-
- def generateCandidates_Root_on_interrupted_black(self):
- if not self.combo_step.isArenaChanged(self.Root_on_interrupted_black):
- return self.generateCandidatesCurrent_Root_on_interrupted_black()
- return False
-
- def transition_Root_on_interrupted_black_1(self, parameters):
- self.exit_Root_on_interrupted_black()
- self.combo_step.setArenaChanged(self.Root_on_interrupted)
- self.enter_Root_on_interrupted_yellow()
-
- def generateCandidatesChildren_Root_on_normal(self):
- if self.current_state[self.Root_on_normal][0] == self.Root_on_normal_yellow:
- return self.generateCandidates_Root_on_normal_yellow()
- elif self.current_state[self.Root_on_normal][0] == self.Root_on_normal_red:
- return self.generateCandidates_Root_on_normal_red()
- elif self.current_state[self.Root_on_normal][0] == self.Root_on_normal_green:
- return self.generateCandidates_Root_on_normal_green()
- return False
-
- def generateCandidatesCurrent_Root_on_normal(self):
- enabled_events = self.getEnabledEvents()
- for e in enabled_events:
- if (e.name == "police_interrupt_clicked") and (e.port == "ui"):
- self.small_step.addCandidate(self.transition_Root_on_normal_1, e.parameters)
- return True
- return False
-
- def generateCandidates_Root_on_normal(self):
- branch_done = False
- if not self.combo_step.isArenaChanged(self.Root_on_normal):
- if self.semantics.priority == StatechartSemantics.SourceParent:
- branch_done = self.generateCandidatesCurrent_Root_on_normal()
- if not branch_done:
- branch_done = self.generateCandidatesChildren_Root_on_normal()
- elif self.semantics.priority == StatechartSemantics.SourceChild:
- branch_done = self.generateCandidatesChildren_Root_on_normal()
- if not branch_done:
- branch_done = self.generateCandidatesCurrent_Root_on_normal()
- return branch_done
-
- def transition_Root_on_normal_1(self, parameters):
- self.exit_Root_on_normal()
- self.combo_step.setArenaChanged(self.Root_on)
- self.enterDefault_Root_on_interrupted()
-
- def generateCandidatesCurrent_Root_on_normal_yellow(self):
- enabled_events = self.getEnabledEvents()
- for e in enabled_events:
- if e.name == "_2after":
- self.small_step.addCandidate(self.transition_Root_on_normal_yellow_1, e.parameters)
- return True
- return False
-
- def generateCandidates_Root_on_normal_yellow(self):
- if not self.combo_step.isArenaChanged(self.Root_on_normal_yellow):
- return self.generateCandidatesCurrent_Root_on_normal_yellow()
- return False
-
- def transition_Root_on_normal_yellow_1(self, parameters):
- self.exit_Root_on_normal_yellow()
- self.combo_step.setArenaChanged(self.Root_on_normal)
- self.enter_Root_on_normal_red()
-
- def generateCandidatesCurrent_Root_on_normal_red(self):
- enabled_events = self.getEnabledEvents()
- for e in enabled_events:
- if e.name == "_3after":
- self.small_step.addCandidate(self.transition_Root_on_normal_red_1, e.parameters)
- return True
- return False
-
- def generateCandidates_Root_on_normal_red(self):
- if not self.combo_step.isArenaChanged(self.Root_on_normal_red):
- return self.generateCandidatesCurrent_Root_on_normal_red()
- return False
-
- def transition_Root_on_normal_red_1(self, parameters):
- self.exit_Root_on_normal_red()
- self.combo_step.setArenaChanged(self.Root_on_normal)
- self.enter_Root_on_normal_green()
-
- def generateCandidatesCurrent_Root_on_normal_green(self):
- enabled_events = self.getEnabledEvents()
- for e in enabled_events:
- if e.name == "_4after":
- self.small_step.addCandidate(self.transition_Root_on_normal_green_1, e.parameters)
- return True
- return False
-
- def generateCandidates_Root_on_normal_green(self):
- if not self.combo_step.isArenaChanged(self.Root_on_normal_green):
- return self.generateCandidatesCurrent_Root_on_normal_green()
- return False
-
- def transition_Root_on_normal_green_1(self, parameters):
- self.exit_Root_on_normal_green()
- self.combo_step.setArenaChanged(self.Root_on_normal)
- self.enter_Root_on_normal_yellow()
-
- def generateCandidates_Root_off(self):
- return False
-
- # Generate transition candidates for current small step
- def generateCandidates(self):
- self.generateCandidates_Root()
- class MainApp(RuntimeClassBase):
- def __init__(self, controller):
- RuntimeClassBase.__init__(self, controller)
-
- self.semantics.big_step_maximality = StatechartSemantics.TakeMany
- self.semantics.internal_event_lifeline = StatechartSemantics.Queue
- self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
- self.semantics.priority = StatechartSemantics.SourceParent
- self.semantics.concurrency = StatechartSemantics.Single
-
- # Call user defined constructor
- MainApp.user_defined_constructor(self)
-
- def user_defined_constructor(self):
- self.canvas = ui.append_canvas(ui.window, 100, 310, {'background':'#eee'})
- police_button = ui.append_button(ui.window, 'Police interrupt')
- stop_button = ui.append_button(ui.window, 'Stop')
- ui.bind_event(police_button.element, ui.EVENTS.MOUSE_CLICK, self.controller, 'police_interrupt_clicked')
- ui.bind_event(stop_button.element, ui.EVENTS.MOUSE_CLICK, self.controller, 'stop_clicked')
-
- def user_defined_destructor(self):
- pass
-
- def initializeStatechart(self):
- self.current_state[self.Root] = []
-
- # Enter default state
- self.enter_Root_initializing()
-
- # Unique IDs for all statechart nodes
- Root = 0
- Root_initialized = 1
- Root_initializing = 2
- Root_creating = 3
-
- # Statechart enter/exit action method(s)
-
- def enter_Root_initialized(self):
- self.current_state[self.Root].append(self.Root_initialized)
-
- def exit_Root_initialized(self):
- self.current_state[self.Root] = []
-
- def enter_Root_initializing(self):
- self.current_state[self.Root].append(self.Root_initializing)
-
- def exit_Root_initializing(self):
- self.current_state[self.Root] = []
-
- def enter_Root_creating(self):
- self.current_state[self.Root].append(self.Root_creating)
-
- def exit_Root_creating(self):
- self.current_state[self.Root] = []
-
- # Statechart transitions
-
- def generateCandidatesChildren_Root(self):
- if self.current_state[self.Root][0] == self.Root_initialized:
- return self.generateCandidates_Root_initialized()
- elif self.current_state[self.Root][0] == self.Root_initializing:
- return self.generateCandidates_Root_initializing()
- elif self.current_state[self.Root][0] == self.Root_creating:
- return self.generateCandidates_Root_creating()
- return False
-
- def generateCandidates_Root(self):
- if not self.combo_step.isArenaChanged(self.Root):
- return self.generateCandidatesChildren_Root()
- return False
-
- def generateCandidates_Root_initialized(self):
- return False
-
- def generateCandidatesCurrent_Root_initializing(self):
- enabled_events = self.getEnabledEvents()
- self.small_step.addCandidate(self.transition_Root_initializing_1, [])
- return True
- return False
-
- def generateCandidates_Root_initializing(self):
- if not self.combo_step.isArenaChanged(self.Root_initializing):
- return self.generateCandidatesCurrent_Root_initializing()
- return False
-
- def transition_Root_initializing_1(self, parameters):
- self.exit_Root_initializing()
- self.big_step.outputEventOM(Event("create_instance", None, [self, 'trafficlight', 'TrafficLight', self.canvas]))
- self.combo_step.setArenaChanged(self.Root)
- self.enter_Root_creating()
-
- def generateCandidatesCurrent_Root_creating(self):
- enabled_events = self.getEnabledEvents()
- for e in enabled_events:
- if e.name == "instance_created":
- self.small_step.addCandidate(self.transition_Root_creating_1, e.parameters)
- return True
- return False
-
- def generateCandidates_Root_creating(self):
- if not self.combo_step.isArenaChanged(self.Root_creating):
- return self.generateCandidatesCurrent_Root_creating()
- return False
-
- def transition_Root_creating_1(self, parameters):
- association_name = parameters[0]
- self.exit_Root_creating()
- self.big_step.outputEventOM(Event("start_instance", None, [self, association_name]))
- self.big_step.outputEventOM(Event("narrow_cast", None, [self, association_name, Event("set_association_name", None, [association_name])]))
- self.combo_step.setArenaChanged(self.Root)
- self.enter_Root_initialized()
-
- # Generate transition candidates for current small step
- def generateCandidates(self):
- self.generateCandidates_Root()
- class ObjectManager(ObjectManagerBase):
- def __init__(self, controller):
- ObjectManagerBase.__init__(self, controller)
-
- def instantiate(self, class_name, construct_params):
- if class_name == "TrafficLight":
- instance = TrafficLight(self.controller, construct_params[0])
- instance.associations = {}
- elif class_name == "MainApp":
- instance = MainApp(self.controller)
- instance.associations = {}
- instance.associations["trafficlight"] = Association("TrafficLight", 0, -1)
- return instance
- class Controller(GameLoopControllerBase):
- def __init__(self):
- GameLoopControllerBase.__init__(self, ObjectManager(self))
- self.addInputPort("ui")
- self.object_manager.createInstance("MainApp", [])
|