sccd.xml 6.7 KB

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