generic_toolbar.xml 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <class name="GenericToolbar">
  2. <relationships>
  3. <inheritance class="tk.Frame" priority="1"/>
  4. <inheritance class="MvKWidget" priority="0"/>
  5. <association name="buttons" class="Button"/>
  6. <association name="parent" class="A"/>
  7. </relationships>
  8. <constructor>
  9. <parameter name="parent"/>
  10. <super class="tk.Frame">
  11. <parameter expr="parent"/>
  12. </super>
  13. <super class="MvKWidget"/>
  14. <body>
  15. self.to_create = ["new", "open"]
  16. self.button_info = {"new": "Create a new model",
  17. "open": "Open an existing model"}
  18. self.buttons = {}
  19. </body>
  20. </constructor>
  21. <destructor>
  22. <body>
  23. self.destroy()
  24. </body>
  25. </destructor>
  26. <scxml initial="init">
  27. <state id="init" initial="init_buttons">
  28. <onexit>
  29. <script>
  30. self.pack()
  31. </script>
  32. </onexit>
  33. <state id="init_buttons">
  34. <onentry>
  35. <raise event="create_instance" scope="cd">
  36. <parameter expr="'buttons'"/>
  37. <parameter expr="'Button'"/>
  38. <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], 'packing': {'side': tk.LEFT}}"/>
  39. </raise>
  40. </onentry>
  41. <transition event="instance_created" target="../next_button">
  42. <parameter name="association_name"/>
  43. <raise event="start_instance" scope="cd">
  44. <parameter expr="association_name"/>
  45. </raise>
  46. <script>
  47. self.buttons[self.to_create[0]] = association_name
  48. self.to_create.pop(0)
  49. </script>
  50. </transition>
  51. </state>
  52. <state id="next_button">
  53. <transition cond="len(self.to_create) == 0" target="../../root"/>
  54. <transition cond="len(self.to_create) > 0" target="../init_buttons"/>
  55. </state>
  56. </state>
  57. <state id="root">
  58. <transition event="button_pressed" cond="event_name == 'new'" target=".">
  59. <parameter name="event_name"/>
  60. <raise event="create_new_model" scope="narrow" target="'parent'"/>
  61. </transition>
  62. <transition event="button_pressed" cond="event_name == 'open'" target=".">
  63. <parameter name="event_name"/>
  64. <raise event="open_model" scope="narrow" target="'parent'"/>
  65. </transition>
  66. <transition event="close" target="../closing"/>
  67. </state>
  68. <state id="closing">
  69. <onentry>
  70. <raise event="delete_instance" scope="cd">
  71. <parameter expr="self.buttons.popitem()[1]"/>
  72. </raise>
  73. </onentry>
  74. <transition event="instance_deleted" cond="len(self.buttons) > 0" target="../closing"/>
  75. <transition event="instance_deleted" cond="len(self.buttons) == 0" target="../close"/>
  76. </state>
  77. <state id="close">
  78. <onentry>
  79. <raise event="close_window" scope="narrow" target="'parent'"/>
  80. </onentry>
  81. </state>
  82. </scxml>
  83. </class>