concretesyntax_toolbar.xml 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <class name="ConcreteSyntaxToolbar">
  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. <parameter name="allowed_mappers"/>
  10. <parameter name="allowed_rendered"/>
  11. <super class="Toolbar">
  12. <parameter expr="parent"/>
  13. </super>
  14. <body>
  15. self.to_create = ["rerender", "new_rendered", "object_diagrams"]
  16. self.button_info = {"rerender": "Rerender the current model using the specified mapper and visualized model.",
  17. "new_rendered": "TODO",
  18. "object_diagrams": "TODO",
  19. }
  20. self.buttons = {}
  21. tk.Label(self, text="Visualization").pack(side=tk.LEFT)
  22. # Mapper
  23. global current_mapper
  24. selected_mapper = tk.StringVar(self)
  25. selected_mapper.set(current_mapper)
  26. tk.OptionMenu(self, selected_mapper, *list(allowed_mappers)).pack(side=tk.LEFT)
  27. selected_mapper.trace('w', lambda name, index, mode: self.controller.addInput(Event("changed_mapper", "input", [id(self), selected_mapper.get()])))
  28. # Rendered
  29. global current_rendered_model
  30. selected_rendered = tk.StringVar(self)
  31. selected_rendered.set(current_rendered_model)
  32. tk.OptionMenu(self, selected_rendered, *list(allowed_rendered)).pack(side=tk.LEFT)
  33. selected_rendered.trace('w', lambda name, index, mode: self.controller.addInput(Event("changed_rendered", "input", [id(self), selected_rendered.get()])))
  34. </body>
  35. </constructor>
  36. <destructor>
  37. <super class="Toolbar"/>
  38. </destructor>
  39. <scxml initial="init">
  40. <state id="init" initial="init_buttons">
  41. <onexit>
  42. <raise event="tk_widget" scope="narrow" target="'parent'">
  43. <parameter expr="self"/>
  44. </raise>
  45. </onexit>
  46. <state id="init_buttons">
  47. <onentry>
  48. <raise event="create_instance" scope="cd">
  49. <parameter expr="'buttons'"/>
  50. <parameter expr="'Button'"/>
  51. <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]}"/>
  52. </raise>
  53. </onentry>
  54. <transition event="instance_created" target="../pack_button">
  55. <parameter name="association_name"/>
  56. <raise event="start_instance" scope="cd">
  57. <parameter expr="association_name"/>
  58. </raise>
  59. <script>
  60. self.buttons[self.to_create[0]] = association_name
  61. self.to_create.pop(0)
  62. </script>
  63. </transition>
  64. </state>
  65. <state id="pack_button">
  66. <transition event="tk_widget" target="../next_button">
  67. <parameter name="tk_elem"/>
  68. <script>
  69. tk_elem.pack(side=tk.LEFT)
  70. </script>
  71. </transition>
  72. </state>
  73. <state id="next_button">
  74. <transition cond="len(self.to_create) == 0" target="../../root"/>
  75. <transition cond="len(self.to_create) > 0" target="../init_buttons"/>
  76. </state>
  77. </state>
  78. <state id="root">
  79. <transition event="button_pressed" cond="event_name == 'rerender'" target=".">
  80. <parameter name="event_name"/>
  81. <raise event="rerender_model" scope="narrow" target="'parent'"/>
  82. </transition>
  83. <transition event="close" target="../closing"/>
  84. </state>
  85. <state id="closing">
  86. <onentry>
  87. <raise event="delete_instance" scope="cd">
  88. <parameter expr="self.buttons.popitem()[1]"/>
  89. </raise>
  90. </onentry>
  91. <transition event="instance_deleted" cond="len(self.buttons) > 0" target="../closing"/>
  92. <transition event="instance_deleted" cond="len(self.buttons) == 0" target="../close"/>
  93. </state>
  94. <state id="close">
  95. <onentry>
  96. <raise event="close_window" scope="narrow" target="'parent'"/>
  97. </onentry>
  98. </state>
  99. </scxml>
  100. </class>