123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- <?xml version="1.0" ?>
- <diagram author="Sam Pieters" name="Timer (Eventloop Version)">
- <top>
- from sccd.runtime.libs.ui import ui
- import time
- CANVAS_DIMS = (350, 300)
- </top>
-
- <inport name="ui" />
- <outport name="ui"/>
- <class name="MainApp" default="true">
- <attribute name="window_id" />
- <attribute name="canvas_id" />
- <attribute name="clock_id" />
- <attribute name="actual_clock_id" />
- <attribute name="button_id" />
- <attribute name="starting_time" />
- <inport name="field_ui"/>
- <scxml initial="creating_window">
- <state id="creating_window">
- <onentry>
- <raise port="ui" event="create_window">
- <parameter expr="CANVAS_DIMS[0]"/>
- <parameter expr="CANVAS_DIMS[1]"/>
- <parameter expr='"Timer"'/>
- <parameter expr="self.inports['field_ui']"/>
- </raise>
- </onentry>
- <transition event="window_created" target="../creating_canvas">
- <parameter name="window_id" type="int" />
- <script>
- <![CDATA[
- self.window_id = window_id
- self.starting_time = time.time()
- ]]>
- </script>
- <raise port="ui" event="bind_event">
- <parameter expr="window_id"/>
- <parameter expr="ui.EVENTS.WINDOW_CLOSE"/>
- <parameter expr="'window_close'"/>
- <parameter expr="self.inports['field_ui']"/>
- </raise>
- <raise port="ui" event="bind_event">
- <parameter expr="window_id"/>
- <parameter expr="ui.EVENTS.KEY_PRESS"/>
- <parameter expr="'key_press'"/>
- <parameter expr="self.inports['field_ui']"/>
- </raise>
- </transition>
- </state>
- <state id="creating_canvas">
- <onentry>
- <raise port="ui" event="create_canvas">
- <parameter expr="self.window_id"/>
- <parameter expr="CANVAS_DIMS[0]"/>
- <parameter expr="CANVAS_DIMS[1] - 200"/>
- <parameter expr="{'background':'#222222'}"/>
- <parameter expr="self.inports['field_ui']"/>
- </raise>
- </onentry>
- <transition event="canvas_created" target="../creating_clock_text">
- <parameter name="canvas_id" type="int"/>
- <script>
- <![CDATA[
- self.canvas_id = canvas_id
- ]]>
- </script>
- </transition>
- </state>
- <state id="creating_clock_text">
- <onentry>
- <raise port="ui" event="create_text">
- <parameter expr="self.canvas_id" />
- <parameter expr="50" />
- <parameter expr="50" />
- <parameter expr="''" />
- <parameter expr="self.inports['field_ui']" />
- </raise>
- </onentry>
- <transition event="text_created" target="../creating_actual_clock_text">
- <parameter name="canvas_id" type="int"/>
- <parameter name="text_id" type="int" />
- <script>
- self.clock_id = text_id
- </script>
- </transition>
- </state>
- <state id="creating_actual_clock_text">
- <onentry>
- <raise port="ui" event="create_text">
- <parameter expr="self.canvas_id" />
- <parameter expr="50" />
- <parameter expr="100" />
- <parameter expr="''" />
- <parameter expr="self.inports['field_ui']" />
- </raise>
- </onentry>
- <transition event="text_created" target="../creating_interrupt_button">
- <parameter name="canvas_id" type="int"/>
- <parameter name="text_id" type="int" />
- <script>
- self.actual_clock_id = text_id
- </script>
- </transition>
- </state>
- <state id="creating_interrupt_button">
- <onentry>
- <raise port="ui" event="create_button">
- <parameter expr="self.window_id" />
- <parameter expr="'INTERRUPT/CONTINUE'" />
- <parameter expr="self.inports['field_ui']" />
- </raise>
- </onentry>
- <transition event="button_created" target="../running">
- <parameter name="button_id" type="int"/>
- <script>
- self.button_id = button_id
- </script>
- <raise port="ui" event="bind_event">
- <parameter expr="button_id"/>
- <parameter expr="ui.EVENTS.MOUSE_CLICK"/>
- <parameter expr='"mouse_click"'/>
- <parameter expr="self.inports['field_ui']"/>
- </raise>
- </transition>
- </state>
- <state id="running">
- <transition target="." after="0.05">
- <raise port="ui" event="update_text">
- <parameter expr="self.canvas_id" />
- <parameter expr="self.clock_id" />
- <parameter expr="str('%.2f' % (self.getSimulatedTime() / 1000.0))" />
- <parameter expr="self.inports['field_ui']" />
- </raise>
- <raise port="ui" event="update_text">
- <parameter expr="self.canvas_id" />
- <parameter expr="self.actual_clock_id" />
- <parameter expr="str('%.2f' % (time.time() - self.starting_time))" />
- <parameter expr="self.inports['field_ui']" />
- </raise>
- </transition>
- <transition port='field_ui' event="mouse_click" target='../interrupted' cond="button == ui.MOUSE_BUTTONS.LEFT">
- <parameter name="x" />
- <parameter name="y" />
- <parameter name="button" />
- </transition>
- </state>
- <state id="interrupted">
- <transition port='field_ui' event="mouse_click" target='../running' cond="button == ui.MOUSE_BUTTONS.LEFT">
- <parameter name="x" />
- <parameter name="y" />
- <parameter name="button" />
- </transition>
- </state>
- </scxml>
- </class>
- </diagram>
|