generic_toolbar.xml 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <class name="GenericToolbar">
  2. <relationships>
  3. <inheritance class="Toolbar"/>
  4. <association name="buttons" class="Button"/>
  5. <association name="parent" class="A"/>
  6. </relationships>
  7. <constructor>
  8. <parameter name="parent"/>
  9. <super class="Toolbar">
  10. <parameter expr="parent"/>
  11. </super>
  12. <body>
  13. self.to_create = ["new", "open", "activity", "create_activity", "enact_process"]
  14. self.button_info = {"new": "Create a new model",
  15. "open": "Open an existing model",
  16. "activity": "Perform an activity",
  17. "create_activity": "Create a new activity",
  18. "enact_process": "Enact process",
  19. }
  20. self.buttons = {}
  21. tk.Label(self, text="Generic").pack(side=tk.LEFT)
  22. </body>
  23. </constructor>
  24. <destructor>
  25. <super class="Toolbar"/>
  26. </destructor>
  27. <scxml initial="init">
  28. <state id="init" initial="init_buttons">
  29. <onexit>
  30. <raise event="tk_widget" scope="narrow" target="'parent'">
  31. <parameter expr="self"/>
  32. </raise>
  33. </onexit>
  34. <state id="init_buttons">
  35. <onentry>
  36. <raise event="create_instance" scope="cd">
  37. <parameter expr="'buttons'"/>
  38. <parameter expr="'Button'"/>
  39. <parameter expr="{'parent': self, 'visual': ImageVisual('icons/%s.png' % self.to_create[0]), 'tooltip_text': self.button_info[self.to_create[0]], 'event_parameters': self.to_create[0]}"/>
  40. </raise>
  41. </onentry>
  42. <transition event="instance_created" target="../pack_button">
  43. <parameter name="association_name"/>
  44. <raise event="start_instance" scope="cd">
  45. <parameter expr="association_name"/>
  46. </raise>
  47. <script>
  48. self.buttons[self.to_create[0]] = association_name
  49. self.to_create.pop(0)
  50. </script>
  51. </transition>
  52. </state>
  53. <state id="pack_button">
  54. <transition event="tk_widget" target="../next_button">
  55. <parameter name="tk_elem"/>
  56. <script>
  57. tk_elem.pack(side=tk.LEFT)
  58. </script>
  59. </transition>
  60. </state>
  61. <state id="next_button">
  62. <transition cond="len(self.to_create) == 0" target="../../root"/>
  63. <transition cond="len(self.to_create) > 0" target="../init_buttons"/>
  64. </state>
  65. </state>
  66. <state id="root">
  67. <transition event="button_pressed" cond="event_name == 'new'" target=".">
  68. <parameter name="event_name"/>
  69. <raise event="create_new_model" scope="narrow" target="'parent'"/>
  70. </transition>
  71. <transition event="button_pressed" cond="event_name == 'open'" target=".">
  72. <parameter name="event_name"/>
  73. <raise event="open_model" scope="narrow" target="'parent'"/>
  74. </transition>
  75. <transition event="button_pressed" cond="event_name == 'activity'" target=".">
  76. <parameter name="event_name"/>
  77. <raise event="activity" scope="narrow" target="'parent'"/>
  78. </transition>
  79. <transition event="button_pressed" cond="event_name == 'create_activity'" target=".">
  80. <parameter name="event_name"/>
  81. <raise event="create_activity" scope="narrow" target="'parent'"/>
  82. </transition>
  83. <transition event="button_pressed" cond="event_name == 'enact_process'" target=".">
  84. <parameter name="event_name"/>
  85. <raise event="enact_process" scope="narrow" target="'parent'"/>
  86. </transition>
  87. <transition event="close" target="../closing"/>
  88. </state>
  89. <state id="closing">
  90. <onentry>
  91. <raise event="delete_instance" scope="cd">
  92. <parameter expr="self.buttons.popitem()[1]"/>
  93. </raise>
  94. </onentry>
  95. <transition event="instance_deleted" cond="len(self.buttons) > 0" target="../closing"/>
  96. <transition event="instance_deleted" cond="len(self.buttons) == 0" target="../close"/>
  97. </state>
  98. <state id="close">
  99. <onentry>
  100. <raise event="close_window" scope="narrow" target="'parent'"/>
  101. </onentry>
  102. </state>
  103. </scxml>
  104. </class>