traffic.py.xml 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. <?xml version="1.0" ?>
  2. <diagram name="Traffic_Light" author="Raphael Mannadiar">
  3. <description>
  4. PIM Traffic lights.
  5. </description>
  6. <inport name="ui"/>
  7. <top>
  8. from python_runtime.libs.ui import *
  9. from python_runtime.libs.utils import *
  10. </top>
  11. <class name="TrafficLight">
  12. <method name="TrafficLight">
  13. <parameter name="canvas"/>
  14. <body>
  15. <![CDATA[
  16. size = 100
  17. offset = size + 5
  18. self.RED = 0
  19. self.YELLOW = 1
  20. self.GREEN = 2
  21. self.colors = ['#f00', '#ff0', '#0f0']
  22. 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'})]
  23. ]]>
  24. </body>
  25. </method>
  26. <method name="setYellow">
  27. <body>
  28. <![CDATA[
  29. self.clear()
  30. self.lights[self.YELLOW].set_color(self.colors[self.YELLOW])
  31. ]]>
  32. </body>
  33. </method>
  34. <method name="setGreen">
  35. <body>
  36. <![CDATA[
  37. self.clear()
  38. self.lights[self.GREEN].set_color(self.colors[self.GREEN])
  39. ]]>
  40. </body>
  41. </method>
  42. <method name="clear">
  43. <body>
  44. <![CDATA[
  45. self.lights[self.RED].set_color('#000')
  46. self.lights[self.YELLOW].set_color('#000')
  47. self.lights[self.GREEN].set_color('#000')
  48. ]]>
  49. </body>
  50. </method>
  51. <method name="setRed">
  52. <body>
  53. <![CDATA[
  54. self.clear()
  55. self.lights[self.RED].set_color(self.colors[self.RED])
  56. ]]>
  57. </body>
  58. </method>
  59. <scxml initial="on">
  60. <state id="on" initial="normal">
  61. <transition port="ui" target="../off" event="stop_clicked">
  62. </transition>
  63. <state id="interrupted" initial="yellow">
  64. <transition port="ui" target="../normal/history" event="police_interrupt_clicked">
  65. </transition>
  66. <state id="yellow">
  67. <onentry>
  68. <script>
  69. <![CDATA[
  70. self.setYellow()
  71. ]]>
  72. </script>
  73. </onentry>
  74. <transition after="0.5" target="../black">
  75. </transition>
  76. </state>
  77. <state id="black">
  78. <onentry>
  79. <script>
  80. <![CDATA[
  81. self.clear()
  82. ]]>
  83. </script>
  84. </onentry>
  85. <transition after="0.5" target="../yellow">
  86. </transition>
  87. </state>
  88. </state>
  89. <state id="normal" initial="red">
  90. <transition port="ui" target="../interrupted" event="police_interrupt_clicked">
  91. </transition>
  92. <history id="history"/>
  93. <state id="yellow">
  94. <onentry>
  95. <script>
  96. <![CDATA[
  97. self.setYellow()
  98. ]]>
  99. </script>
  100. </onentry>
  101. <transition after="1.0" target="../red">
  102. </transition>
  103. </state>
  104. <state id="red">
  105. <onentry>
  106. <script>
  107. <![CDATA[
  108. self.setRed()
  109. ]]>
  110. </script>
  111. </onentry>
  112. <transition after="3.0" target="../green">
  113. </transition>
  114. </state>
  115. <state id="green">
  116. <onentry>
  117. <script>
  118. <![CDATA[
  119. self.setGreen()
  120. ]]>
  121. </script>
  122. </onentry>
  123. <transition after="2.0" target="../yellow">
  124. </transition>
  125. </state>
  126. </state>
  127. </state>
  128. <state id="off">
  129. <onentry>
  130. <script>
  131. <![CDATA[
  132. self.clear()
  133. ]]>
  134. </script>
  135. </onentry>
  136. </state>
  137. </scxml>
  138. </class>
  139. <class name="MainApp" default="True">
  140. <relationships>
  141. <association name="trafficlight" class="TrafficLight"/>
  142. </relationships>
  143. <method name="MainApp">
  144. <body>
  145. <![CDATA[
  146. self.canvas = ui.append_canvas(ui.window, 100, 310, {'background':'#eee'})
  147. police_button = ui.append_button(ui.window, 'Police interrupt')
  148. stop_button = ui.append_button(ui.window, 'Stop')
  149. ui.bind_event(police_button.element, ui.EVENTS.MOUSE_CLICK, self.controller, 'police_interrupt_clicked')
  150. ui.bind_event(stop_button.element, ui.EVENTS.MOUSE_CLICK, self.controller, 'stop_clicked')
  151. ]]>
  152. </body>
  153. </method>
  154. <scxml initial="initializing">
  155. <state id="initialized">
  156. </state>
  157. <state id="initializing">
  158. <transition target="../creating">
  159. <raise event="create_instance" scope="cd">
  160. <parameter expr="'trafficlight'"/>
  161. <parameter expr="'TrafficLight'"/>
  162. <parameter expr="self.canvas"/>
  163. </raise>
  164. </transition>
  165. </state>
  166. <state id="creating">
  167. <transition target="../initialized" event="instance_created">
  168. <parameter name="association_name" type="string"/>
  169. <raise event="start_instance" scope="cd">
  170. <parameter expr="association_name"/>
  171. </raise>
  172. <raise event="set_association_name" scope="narrow" target="association_name">
  173. <parameter expr="association_name"/>
  174. </raise>
  175. </transition>
  176. </state>
  177. </scxml>
  178. </class>
  179. </diagram>