metamodelling_toolbar.xml 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <class name="MetamodellingToolbar">
  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="selected_metamodel"/>
  10. <parameter name="metamodels"/>
  11. <super class="Toolbar">
  12. <parameter expr="parent"/>
  13. </super>
  14. <body>
  15. self.to_create = ["verify", "custom_MM", "conf_bottom", "upload_MVC"]
  16. self.button_info = {"verify": "Verify if the current model conforms to the current metamodel.",
  17. "custom_MM": "Browse for a custom metamodel for the current model.",
  18. "conf_bottom": "Open the current model as its physical graph representation.",
  19. "upload_MVC": "Replace the current model with a textual representation.",
  20. }
  21. self.buttons = {}
  22. tk.Label(self, text="Management").pack(side=tk.LEFT)
  23. strvar = tk.StringVar(self)
  24. strvar.set(selected_metamodel)
  25. selected_metamodel = strvar
  26. tk.OptionMenu(self, selected_metamodel, *list(metamodels)).pack(side=tk.LEFT)
  27. selected_metamodel.trace('w', lambda name, index, mode: self.controller.addInput(Event("changed_metamodel", "input", [id(self), selected_metamodel.get()])))
  28. </body>
  29. </constructor>
  30. <destructor>
  31. <super class="Toolbar"/>
  32. </destructor>
  33. <scxml initial="init">
  34. <state id="init" initial="init_buttons">
  35. <onexit>
  36. <raise event="tk_widget" scope="narrow" target="'parent'">
  37. <parameter expr="self"/>
  38. </raise>
  39. </onexit>
  40. <state id="init_buttons">
  41. <onentry>
  42. <raise event="create_instance" scope="cd">
  43. <parameter expr="'buttons'"/>
  44. <parameter expr="'Button'"/>
  45. <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]}"/>
  46. </raise>
  47. </onentry>
  48. <transition event="instance_created" target="../pack_button">
  49. <parameter name="association_name"/>
  50. <raise event="start_instance" scope="cd">
  51. <parameter expr="association_name"/>
  52. </raise>
  53. <script>
  54. self.buttons[self.to_create[0]] = association_name
  55. self.to_create.pop(0)
  56. </script>
  57. </transition>
  58. </state>
  59. <state id="pack_button">
  60. <transition event="tk_widget" target="../next_button">
  61. <parameter name="tk_elem"/>
  62. <script>
  63. tk_elem.pack(side=tk.LEFT)
  64. </script>
  65. </transition>
  66. </state>
  67. <state id="next_button">
  68. <transition cond="len(self.to_create) == 0" target="../../root"/>
  69. <transition cond="len(self.to_create) > 0" target="../init_buttons"/>
  70. </state>
  71. </state>
  72. <state id="root">
  73. <transition event="button_pressed" cond="event_name == 'verify'" target=".">
  74. <parameter name="event_name"/>
  75. <raise event="verify" scope="narrow" target="'parent'"/>
  76. </transition>
  77. <transition event="button_pressed" cond="event_name == 'conf_bottom'" target=".">
  78. <parameter name="event_name"/>
  79. <raise event="conf_bottom" scope="narrow" target="'parent'"/>
  80. </transition>
  81. <transition event="button_pressed" cond="event_name == 'custom_MM'" target=".">
  82. <parameter name="event_name"/>
  83. <raise event="custom_MM" scope="narrow" target="'parent'"/>
  84. </transition>
  85. <transition event="button_pressed" cond="event_name == 'upload_MVC'" target=".">
  86. <parameter name="event_name"/>
  87. <raise event="upload_MVC" scope="narrow" target="'parent'"/>
  88. </transition>
  89. <transition event="changed_metamodel" cond="ID == id(self) and new_metamodel != current_metamodel" target=".">
  90. <parameter name="ID"/>
  91. <parameter name="new_metamodel"/>
  92. <raise event="change_metamodel" scope="narrow" target="'parent'">
  93. <parameter expr="new_metamodel"/>
  94. </raise>
  95. </transition>
  96. <transition event="close" target="../closing"/>
  97. </state>
  98. <state id="closing">
  99. <onentry>
  100. <raise event="delete_instance" scope="cd">
  101. <parameter expr="self.buttons.popitem()[1]"/>
  102. </raise>
  103. </onentry>
  104. <transition event="instance_deleted" cond="len(self.buttons) > 0" target="../closing"/>
  105. <transition event="instance_deleted" cond="len(self.buttons) == 0" target="../close"/>
  106. </state>
  107. <state id="close">
  108. <onentry>
  109. <raise event="close_window" scope="narrow" target="'parent'"/>
  110. </onentry>
  111. </state>
  112. </scxml>
  113. </class>