target.py 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427
  1. """
  2. Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration) and Sam Pieters (DEVS)
  3. Model author: Sam Pieters
  4. Model name: TrafficLight
  5. Model description:
  6. Tkinter frame with Traffic light in a single statechart (with history).
  7. """
  8. from sccd.runtime.DEVS_statecharts_core import *
  9. from sccd.runtime.libs import ui_v2 as ui
  10. CANVAS_DIMS = (100, 350)
  11. # package "TrafficLight"
  12. class MainAppInstance(RuntimeClassBase):
  13. def __init__(self, atomdevs, id, start_port_id):
  14. RuntimeClassBase.__init__(self, atomdevs, id)
  15. self.semantics.big_step_maximality = StatechartSemantics.TakeMany
  16. self.semantics.internal_event_lifeline = StatechartSemantics.Queue
  17. self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
  18. self.semantics.priority = StatechartSemantics.SourceParent
  19. self.semantics.concurrency = StatechartSemantics.Single
  20. # build Statechart structure
  21. self.build_statechart_structure()
  22. # user defined attributes
  23. self.window_id = None
  24. self.canvas_id = None
  25. self.green_id = None
  26. self.yellow_id = None
  27. self.red_id = None
  28. self.police_button_id = None
  29. # call user defined constructor
  30. MainAppInstance.user_defined_constructor(self)
  31. port_name = addInputPort("ui", start_port_id, True)
  32. atomdevs.state.port_mappings[port_name] = id
  33. port_name = addInputPort("<narrow_cast>", start_port_id)
  34. atomdevs.state.port_mappings[port_name] = id
  35. port_name = addInputPort("field_ui", start_port_id + 1)
  36. atomdevs.state.port_mappings[port_name] = id
  37. self.inports["field_ui"] = port_name
  38. def user_defined_constructor(self):
  39. pass
  40. def user_defined_destructor(self):
  41. pass
  42. # builds Statechart structure
  43. def build_statechart_structure(self):
  44. # state <root>
  45. self.states[""] = State(0, "", self)
  46. # state /creating_window
  47. self.states["/creating_window"] = State(1, "/creating_window", self)
  48. self.states["/creating_window"].setEnter(self._creating_window_enter)
  49. # state /creating_canvas
  50. self.states["/creating_canvas"] = State(2, "/creating_canvas", self)
  51. self.states["/creating_canvas"].setEnter(self._creating_canvas_enter)
  52. # state /creating_trafficlight
  53. self.states["/creating_trafficlight"] = State(3, "/creating_trafficlight", self)
  54. # state /creating_trafficlight/creating_greenlight
  55. self.states["/creating_trafficlight/creating_greenlight"] = State(4, "/creating_trafficlight/creating_greenlight", self)
  56. self.states["/creating_trafficlight/creating_greenlight"].setEnter(self._creating_trafficlight_creating_greenlight_enter)
  57. # state /creating_trafficlight/creating_yellowlight
  58. self.states["/creating_trafficlight/creating_yellowlight"] = State(5, "/creating_trafficlight/creating_yellowlight", self)
  59. self.states["/creating_trafficlight/creating_yellowlight"].setEnter(self._creating_trafficlight_creating_yellowlight_enter)
  60. # state /creating_trafficlight/creating_redlight
  61. self.states["/creating_trafficlight/creating_redlight"] = State(6, "/creating_trafficlight/creating_redlight", self)
  62. self.states["/creating_trafficlight/creating_redlight"].setEnter(self._creating_trafficlight_creating_redlight_enter)
  63. # state /creating_interrupt_button
  64. self.states["/creating_interrupt_button"] = State(7, "/creating_interrupt_button", self)
  65. self.states["/creating_interrupt_button"].setEnter(self._creating_interrupt_button_enter)
  66. # state /creating_quit_button
  67. self.states["/creating_quit_button"] = State(8, "/creating_quit_button", self)
  68. self.states["/creating_quit_button"].setEnter(self._creating_quit_button_enter)
  69. # state /on
  70. self.states["/on"] = State(9, "/on", self)
  71. # state /on/normal
  72. self.states["/on/normal"] = State(10, "/on/normal", self)
  73. # state /on/normal/red
  74. self.states["/on/normal/red"] = State(11, "/on/normal/red", self)
  75. self.states["/on/normal/red"].setEnter(self._on_normal_red_enter)
  76. self.states["/on/normal/red"].setExit(self._on_normal_red_exit)
  77. # state /on/normal/green
  78. self.states["/on/normal/green"] = State(12, "/on/normal/green", self)
  79. self.states["/on/normal/green"].setEnter(self._on_normal_green_enter)
  80. self.states["/on/normal/green"].setExit(self._on_normal_green_exit)
  81. # state /on/normal/yellow
  82. self.states["/on/normal/yellow"] = State(13, "/on/normal/yellow", self)
  83. self.states["/on/normal/yellow"].setEnter(self._on_normal_yellow_enter)
  84. self.states["/on/normal/yellow"].setExit(self._on_normal_yellow_exit)
  85. # state /on/normal/history
  86. self.states["/on/normal/history"] = ShallowHistoryState(14, "/on/normal/history", self)
  87. # state /on/interrupted
  88. self.states["/on/interrupted"] = State(15, "/on/interrupted", self)
  89. # state /on/interrupted/yellow
  90. self.states["/on/interrupted/yellow"] = State(16, "/on/interrupted/yellow", self)
  91. self.states["/on/interrupted/yellow"].setEnter(self._on_interrupted_yellow_enter)
  92. self.states["/on/interrupted/yellow"].setExit(self._on_interrupted_yellow_exit)
  93. # state /on/interrupted/black
  94. self.states["/on/interrupted/black"] = State(17, "/on/interrupted/black", self)
  95. self.states["/on/interrupted/black"].setEnter(self._on_interrupted_black_enter)
  96. self.states["/on/interrupted/black"].setExit(self._on_interrupted_black_exit)
  97. # state /off
  98. self.states["/off"] = State(18, "/off", self)
  99. self.states["/off"].setEnter(self._off_enter)
  100. # state /deleted
  101. self.states["/deleted"] = State(19, "/deleted", self)
  102. # add children
  103. self.states[""].addChild(self.states["/creating_window"])
  104. self.states[""].addChild(self.states["/creating_canvas"])
  105. self.states[""].addChild(self.states["/creating_trafficlight"])
  106. self.states[""].addChild(self.states["/creating_interrupt_button"])
  107. self.states[""].addChild(self.states["/creating_quit_button"])
  108. self.states[""].addChild(self.states["/on"])
  109. self.states[""].addChild(self.states["/off"])
  110. self.states[""].addChild(self.states["/deleted"])
  111. self.states["/creating_trafficlight"].addChild(self.states["/creating_trafficlight/creating_greenlight"])
  112. self.states["/creating_trafficlight"].addChild(self.states["/creating_trafficlight/creating_yellowlight"])
  113. self.states["/creating_trafficlight"].addChild(self.states["/creating_trafficlight/creating_redlight"])
  114. self.states["/on"].addChild(self.states["/on/normal"])
  115. self.states["/on"].addChild(self.states["/on/interrupted"])
  116. self.states["/on/normal"].addChild(self.states["/on/normal/red"])
  117. self.states["/on/normal"].addChild(self.states["/on/normal/green"])
  118. self.states["/on/normal"].addChild(self.states["/on/normal/yellow"])
  119. self.states["/on/normal"].addChild(self.states["/on/normal/history"])
  120. self.states["/on/interrupted"].addChild(self.states["/on/interrupted/yellow"])
  121. self.states["/on/interrupted"].addChild(self.states["/on/interrupted/black"])
  122. self.states[""].fixTree()
  123. self.states[""].default_state = self.states["/creating_window"]
  124. self.states["/creating_trafficlight"].default_state = self.states["/creating_trafficlight/creating_greenlight"]
  125. self.states["/on"].default_state = self.states["/on/normal"]
  126. self.states["/on/normal"].default_state = self.states["/on/normal/red"]
  127. self.states["/on/interrupted"].default_state = self.states["/on/interrupted/yellow"]
  128. # transition /creating_window
  129. _creating_window_0 = Transition(self, self.states["/creating_window"], [self.states["/creating_canvas"]])
  130. _creating_window_0.setAction(self._creating_window_0_exec)
  131. _creating_window_0.setTrigger(Event("window_created", None))
  132. self.states["/creating_window"].addTransition(_creating_window_0)
  133. # transition /creating_canvas
  134. _creating_canvas_0 = Transition(self, self.states["/creating_canvas"], [self.states["/creating_trafficlight"]])
  135. _creating_canvas_0.setAction(self._creating_canvas_0_exec)
  136. _creating_canvas_0.setTrigger(Event("canvas_created", None))
  137. self.states["/creating_canvas"].addTransition(_creating_canvas_0)
  138. # transition /creating_trafficlight/creating_greenlight
  139. _creating_trafficlight_creating_greenlight_0 = Transition(self, self.states["/creating_trafficlight/creating_greenlight"], [self.states["/creating_trafficlight/creating_yellowlight"]])
  140. _creating_trafficlight_creating_greenlight_0.setAction(self._creating_trafficlight_creating_greenlight_0_exec)
  141. _creating_trafficlight_creating_greenlight_0.setTrigger(Event("rectangle_created", None))
  142. self.states["/creating_trafficlight/creating_greenlight"].addTransition(_creating_trafficlight_creating_greenlight_0)
  143. # transition /creating_trafficlight/creating_yellowlight
  144. _creating_trafficlight_creating_yellowlight_0 = Transition(self, self.states["/creating_trafficlight/creating_yellowlight"], [self.states["/creating_trafficlight/creating_redlight"]])
  145. _creating_trafficlight_creating_yellowlight_0.setAction(self._creating_trafficlight_creating_yellowlight_0_exec)
  146. _creating_trafficlight_creating_yellowlight_0.setTrigger(Event("rectangle_created", None))
  147. self.states["/creating_trafficlight/creating_yellowlight"].addTransition(_creating_trafficlight_creating_yellowlight_0)
  148. # transition /creating_trafficlight/creating_redlight
  149. _creating_trafficlight_creating_redlight_0 = Transition(self, self.states["/creating_trafficlight/creating_redlight"], [self.states["/creating_interrupt_button"]])
  150. _creating_trafficlight_creating_redlight_0.setAction(self._creating_trafficlight_creating_redlight_0_exec)
  151. _creating_trafficlight_creating_redlight_0.setTrigger(Event("rectangle_created", None))
  152. self.states["/creating_trafficlight/creating_redlight"].addTransition(_creating_trafficlight_creating_redlight_0)
  153. # transition /creating_interrupt_button
  154. _creating_interrupt_button_0 = Transition(self, self.states["/creating_interrupt_button"], [self.states["/creating_quit_button"]])
  155. _creating_interrupt_button_0.setAction(self._creating_interrupt_button_0_exec)
  156. _creating_interrupt_button_0.setTrigger(Event("button_created", None))
  157. self.states["/creating_interrupt_button"].addTransition(_creating_interrupt_button_0)
  158. # transition /creating_quit_button
  159. _creating_quit_button_0 = Transition(self, self.states["/creating_quit_button"], [self.states["/on"]])
  160. _creating_quit_button_0.setAction(self._creating_quit_button_0_exec)
  161. _creating_quit_button_0.setTrigger(Event("button_created", None))
  162. self.states["/creating_quit_button"].addTransition(_creating_quit_button_0)
  163. # transition /on/normal/red
  164. _on_normal_red_0 = Transition(self, self.states["/on/normal/red"], [self.states["/on/normal/green"]])
  165. _on_normal_red_0.setTrigger(Event("_0after"))
  166. self.states["/on/normal/red"].addTransition(_on_normal_red_0)
  167. # transition /on/normal/green
  168. _on_normal_green_0 = Transition(self, self.states["/on/normal/green"], [self.states["/on/normal/yellow"]])
  169. _on_normal_green_0.setTrigger(Event("_1after"))
  170. self.states["/on/normal/green"].addTransition(_on_normal_green_0)
  171. # transition /on/normal/yellow
  172. _on_normal_yellow_0 = Transition(self, self.states["/on/normal/yellow"], [self.states["/on/normal/red"]])
  173. _on_normal_yellow_0.setTrigger(Event("_2after"))
  174. self.states["/on/normal/yellow"].addTransition(_on_normal_yellow_0)
  175. # transition /on/interrupted/yellow
  176. _on_interrupted_yellow_0 = Transition(self, self.states["/on/interrupted/yellow"], [self.states["/on/interrupted/black"]])
  177. _on_interrupted_yellow_0.setTrigger(Event("_3after"))
  178. self.states["/on/interrupted/yellow"].addTransition(_on_interrupted_yellow_0)
  179. # transition /on/interrupted/black
  180. _on_interrupted_black_0 = Transition(self, self.states["/on/interrupted/black"], [self.states["/on/interrupted/yellow"]])
  181. _on_interrupted_black_0.setTrigger(Event("_4after"))
  182. self.states["/on/interrupted/black"].addTransition(_on_interrupted_black_0)
  183. # transition /on/normal
  184. _on_normal_0 = Transition(self, self.states["/on/normal"], [self.states["/deleted"]])
  185. _on_normal_0.setAction(self._on_normal_0_exec)
  186. _on_normal_0.setTrigger(Event("window_close", self.getInPortName("field_ui")))
  187. self.states["/on/normal"].addTransition(_on_normal_0)
  188. _on_normal_1 = Transition(self, self.states["/on/normal"], [self.states["/off"]])
  189. _on_normal_1.setTrigger(Event("quit_clicked", self.getInPortName("field_ui")))
  190. _on_normal_1.setGuard(self._on_normal_1_guard)
  191. self.states["/on/normal"].addTransition(_on_normal_1)
  192. _on_normal_2 = Transition(self, self.states["/on/normal"], [self.states["/on/interrupted"]])
  193. _on_normal_2.setAction(self._on_normal_2_exec)
  194. _on_normal_2.setTrigger(Event("interrupt_clicked", self.getInPortName("field_ui")))
  195. _on_normal_2.setGuard(self._on_normal_2_guard)
  196. self.states["/on/normal"].addTransition(_on_normal_2)
  197. # transition /on/interrupted
  198. _on_interrupted_0 = Transition(self, self.states["/on/interrupted"], [self.states["/on/normal/history"]])
  199. _on_interrupted_0.setTrigger(Event("interrupt_clicked", self.getInPortName("field_ui")))
  200. _on_interrupted_0.setGuard(self._on_interrupted_0_guard)
  201. self.states["/on/interrupted"].addTransition(_on_interrupted_0)
  202. def _creating_window_enter(self):
  203. self.big_step.outputEvent(Event("create_window", self.getOutPortName("ui"), [CANVAS_DIMS[0], CANVAS_DIMS[1], "Traffic Light", self.inports['field_ui']]))
  204. def _creating_canvas_enter(self):
  205. self.big_step.outputEvent(Event("create_canvas", self.getOutPortName("ui"), [self.window_id, CANVAS_DIMS[0], CANVAS_DIMS[1] - 100, {'background':'#222222'}, self.inports['field_ui']]))
  206. def _creating_trafficlight_creating_greenlight_enter(self):
  207. self.big_step.outputEvent(Event("create_rectangle", self.getOutPortName("ui"), [self.canvas_id, 50, 50, 50, 50, {'fill':'#000'}, self.inports['field_ui']]))
  208. def _creating_trafficlight_creating_yellowlight_enter(self):
  209. self.big_step.outputEvent(Event("create_rectangle", self.getOutPortName("ui"), [self.canvas_id, 50, 110, 50, 50, {'fill':'#000'}, self.inports['field_ui']]))
  210. def _creating_trafficlight_creating_redlight_enter(self):
  211. self.big_step.outputEvent(Event("create_rectangle", self.getOutPortName("ui"), [self.canvas_id, 50, 170, 50, 50, {'fill':'#000'}, self.inports['field_ui']]))
  212. def _creating_interrupt_button_enter(self):
  213. self.big_step.outputEvent(Event("create_button", self.getOutPortName("ui"), [self.window_id, 'Police Interrupt', self.inports['field_ui']]))
  214. def _creating_quit_button_enter(self):
  215. self.big_step.outputEvent(Event("create_button", self.getOutPortName("ui"), [self.window_id, 'Quit', self.inports['field_ui']]))
  216. def _on_normal_red_enter(self):
  217. self.big_step.outputEvent(Event("set_element_color", self.getOutPortName("ui"), [self.canvas_id, self.yellow_id, 'black']))
  218. self.big_step.outputEvent(Event("set_element_color", self.getOutPortName("ui"), [self.canvas_id, self.red_id, 'red']))
  219. self.addTimer(0, 3)
  220. def _on_normal_red_exit(self):
  221. self.removeTimer(0)
  222. def _on_normal_green_enter(self):
  223. self.big_step.outputEvent(Event("set_element_color", self.getOutPortName("ui"), [self.canvas_id, self.red_id, 'black']))
  224. self.big_step.outputEvent(Event("set_element_color", self.getOutPortName("ui"), [self.canvas_id, self.green_id, 'green']))
  225. self.addTimer(1, 2)
  226. def _on_normal_green_exit(self):
  227. self.removeTimer(1)
  228. def _on_normal_yellow_enter(self):
  229. self.big_step.outputEvent(Event("set_element_color", self.getOutPortName("ui"), [self.canvas_id, self.green_id, 'black']))
  230. self.big_step.outputEvent(Event("set_element_color", self.getOutPortName("ui"), [self.canvas_id, self.yellow_id, 'yellow']))
  231. self.addTimer(2, 1)
  232. def _on_normal_yellow_exit(self):
  233. self.removeTimer(2)
  234. def _on_interrupted_yellow_enter(self):
  235. self.big_step.outputEvent(Event("set_element_color", self.getOutPortName("ui"), [self.canvas_id, self.yellow_id, 'yellow']))
  236. self.addTimer(3, .5)
  237. def _on_interrupted_yellow_exit(self):
  238. self.removeTimer(3)
  239. def _on_interrupted_black_enter(self):
  240. self.big_step.outputEvent(Event("set_element_color", self.getOutPortName("ui"), [self.canvas_id, self.yellow_id, 'black']))
  241. self.addTimer(4, .5)
  242. def _on_interrupted_black_exit(self):
  243. self.removeTimer(4)
  244. def _off_enter(self):
  245. self.big_step.outputEvent(Event("set_element_color", self.getOutPortName("ui"), [self.canvas_id, self.green_id, 'black']))
  246. self.big_step.outputEvent(Event("set_element_color", self.getOutPortName("ui"), [self.canvas_id, self.yellow_id, 'black']))
  247. self.big_step.outputEvent(Event("set_element_color", self.getOutPortName("ui"), [self.canvas_id, self.red_id, 'black']))
  248. def _on_normal_0_exec(self, parameters):
  249. self.big_step.outputEvent(Event("destroy_all", self.getOutPortName("ui"), []))
  250. def _on_normal_1_guard(self, parameters):
  251. x = parameters[0]
  252. y = parameters[1]
  253. button = parameters[2]
  254. return button == ui.MOUSE_BUTTONS.LEFT
  255. def _on_normal_2_exec(self, parameters):
  256. x = parameters[0]
  257. y = parameters[1]
  258. button = parameters[2]
  259. self.big_step.outputEvent(Event("set_element_color", self.getOutPortName("ui"), [self.canvas_id, self.green_id, 'black']))
  260. self.big_step.outputEvent(Event("set_element_color", self.getOutPortName("ui"), [self.canvas_id, self.yellow_id, 'black']))
  261. self.big_step.outputEvent(Event("set_element_color", self.getOutPortName("ui"), [self.canvas_id, self.red_id, 'black']))
  262. def _on_normal_2_guard(self, parameters):
  263. x = parameters[0]
  264. y = parameters[1]
  265. button = parameters[2]
  266. return button == ui.MOUSE_BUTTONS.LEFT
  267. def _on_interrupted_0_guard(self, parameters):
  268. x = parameters[0]
  269. y = parameters[1]
  270. button = parameters[2]
  271. return button == ui.MOUSE_BUTTONS.LEFT
  272. def _creating_window_0_exec(self, parameters):
  273. window_id = parameters[0]
  274. self.window_id = window_id
  275. self.big_step.outputEvent(Event("bind_event", self.getOutPortName("ui"), [window_id, ui.EVENTS.WINDOW_CLOSE, 'window_close', self.inports['field_ui']]))
  276. def _creating_canvas_0_exec(self, parameters):
  277. canvas_id = parameters[0]
  278. self.canvas_id = canvas_id
  279. def _creating_trafficlight_creating_greenlight_0_exec(self, parameters):
  280. canvas_id = parameters[0]
  281. green_id = parameters[1]
  282. self.green_id = green_id
  283. def _creating_trafficlight_creating_yellowlight_0_exec(self, parameters):
  284. canvas_id = parameters[0]
  285. yellow_id = parameters[1]
  286. self.yellow_id = yellow_id
  287. def _creating_trafficlight_creating_redlight_0_exec(self, parameters):
  288. canvas_id = parameters[0]
  289. red_id = parameters[1]
  290. self.red_id = red_id
  291. def _creating_interrupt_button_0_exec(self, parameters):
  292. button_id = parameters[0]
  293. self.police_button_id = button_id
  294. self.big_step.outputEvent(Event("bind_event", self.getOutPortName("ui"), [button_id, ui.EVENTS.MOUSE_CLICK, "interrupt_clicked", self.inports['field_ui']]))
  295. def _creating_quit_button_0_exec(self, parameters):
  296. button_id = parameters[0]
  297. self.quit_button_id = button_id
  298. self.big_step.outputEvent(Event("bind_event", self.getOutPortName("ui"), [button_id, ui.EVENTS.MOUSE_CLICK, "quit_clicked", self.inports['field_ui']]))
  299. def initializeStatechart(self):
  300. # enter default state
  301. self.default_targets = self.states["/creating_window"].getEffectiveTargetStates()
  302. RuntimeClassBase.initializeStatechart(self)
  303. class MainApp(ClassBase):
  304. def __init__(self, name):
  305. ClassBase.__init__(self, name)
  306. self.input = self.addInPort("input")
  307. self.glob_outputs["ui"] = self.addOutPort("ui")
  308. self.field_ui = self.addInPort("field_ui")
  309. new_instance = self.constructObject(0, 0, [])
  310. self.state.instances[new_instance.instance_id] = new_instance
  311. new_instance.start()
  312. self.state.next_time = 0
  313. def constructObject(self, id, start_port_id, parameters):
  314. new_instance = MainAppInstance(self, id, start_port_id)
  315. return new_instance
  316. def instantiate(self, class_name, construct_params):
  317. instance = {}
  318. instance["name"] = class_name
  319. if class_name == "MainApp":
  320. self.narrow_cast_id = self.narrow_cast_id + 1
  321. instance["associations"] = {}
  322. else:
  323. raise Exception("Cannot instantiate class " + class_name)
  324. return instance
  325. ObjectManagerState.instantiate = instantiate
  326. class ObjectManager(ObjectManagerBase):
  327. def __init__(self, name):
  328. ObjectManagerBase.__init__(self, name)
  329. self.state = ObjectManagerState()
  330. self.input = self.addInPort("input")
  331. self.output["MainApp"] = self.addOutPort()
  332. self.state.createInstance("MainApp", [])
  333. class Controller(CoupledDEVS):
  334. def __init__(self, name):
  335. CoupledDEVS.__init__(self, name)
  336. self.in_ui = self.addInPort("ui")
  337. self.out_ui = self.addOutPort("ui")
  338. self.objectmanager = self.addSubModel(ObjectManager("ObjectManager"))
  339. self.atomics = []
  340. self.atomics.append(self.addSubModel(MainApp("MainApp")))
  341. self.connectPorts(self.atomics[0].obj_manager_out, self.objectmanager.input)
  342. self.connectPorts(self.objectmanager.output["MainApp"], self.atomics[0].obj_manager_in)
  343. self.connectPorts(self.atomics[0].glob_outputs["ui"], self.out_ui)
  344. self.connectPorts(self.in_ui, self.atomics[0].input)