| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- <class name="ConcreteSyntaxToolbar">
- <relationships>
- <inheritance class="Toolbar"/>
- <association name="buttons" class="Button"/>
- <association name="parent" class="A"/>
- </relationships>
- <constructor>
- <parameter name="parent"/>
- <parameter name="allowed_mappers"/>
- <parameter name="allowed_rendered"/>
- <super class="Toolbar">
- <parameter expr="parent"/>
- </super>
- <body>
- self.to_create = ["rerender", "new_rendered", "object_diagrams"]
- self.button_info = {"rerender": "Rerender the current model using the specified mapper and visualized model.",
- "new_rendered": "Create a new 'vanilla' visualized model of the same Abstract Syntax model.",
- "object_diagrams": "Bind the Object Diagrams visualization to this model.",
- }
- self.buttons = {}
- tk.Label(self, text="Visualization").pack(side=tk.LEFT)
- # Mapper
- global current_mapper
- selected_mapper = tk.StringVar(self)
- selected_mapper.set(current_mapper if current_mapper is not None else "(none)")
- om = tk.OptionMenu(self, selected_mapper, *list(allowed_mappers) if allowed_mappers else "(none)")
- if not allowed_mappers:
- om.configure(state=tk.DISABLED)
- om.pack(side=tk.LEFT)
- selected_mapper.trace('w', lambda name, index, mode: self.controller.addInput(Event("changed_mapper", "input", [id(self), selected_mapper.get()])))
- # Rendered
- global current_rendered_model
- selected_rendered = tk.StringVar(self)
- selected_rendered.set(current_rendered_model if current_rendered_model is not None else "(none)")
- om = tk.OptionMenu(self, selected_rendered, *list(allowed_rendered) if allowed_rendered else "(none)")
- if not allowed_rendered:
- om.configure(state=tk.DISABLED)
- om.pack(side=tk.LEFT)
- selected_rendered.trace('w', lambda name, index, mode: self.controller.addInput(Event("changed_rendered", "input", [id(self), selected_rendered.get()])))
- </body>
- </constructor>
- <destructor>
- <super class="Toolbar"/>
- </destructor>
- <scxml initial="init">
- <state id="init" initial="init_buttons">
- <onexit>
- <raise event="tk_widget" scope="narrow" target="'parent'">
- <parameter expr="self"/>
- </raise>
- </onexit>
- <state id="init_buttons">
- <onentry>
- <raise event="create_instance" scope="cd">
- <parameter expr="'buttons'"/>
- <parameter expr="'Button'"/>
- <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]}"/>
- </raise>
- </onentry>
- <transition event="instance_created" target="../pack_button">
- <parameter name="association_name"/>
- <raise event="start_instance" scope="cd">
- <parameter expr="association_name"/>
- </raise>
- <script>
- self.buttons[self.to_create[0]] = association_name
- self.to_create.pop(0)
- </script>
- </transition>
- </state>
- <state id="pack_button">
- <transition event="tk_widget" target="../next_button">
- <parameter name="tk_elem"/>
- <script>
- tk_elem.pack(side=tk.LEFT)
- </script>
- </transition>
- </state>
- <state id="next_button">
- <transition cond="len(self.to_create) == 0" target="../../root"/>
- <transition cond="len(self.to_create) > 0" target="../init_buttons"/>
- </state>
- </state>
- <state id="root">
- <transition event="button_pressed" cond="event_name == 'rerender'" target=".">
- <parameter name="event_name"/>
- <raise event="rerender_model" scope="narrow" target="'parent'"/>
- </transition>
- <transition event="button_pressed" cond="event_name == 'new_rendered'" target=".">
- <parameter name="event_name"/>
- <raise event="new_rendered" scope="narrow" target="'parent'"/>
- </transition>
- <transition event="button_pressed" cond="event_name == 'object_diagrams'" target=".">
- <parameter name="event_name"/>
- <raise event="add_object_diagrams" scope="narrow" target="'parent'"/>
- </transition>
- <transition event="changed_mapper" cond="ID == id(self) and new_mapper != current_mapper" target=".">
- <parameter name="ID"/>
- <parameter name="new_mapper"/>
- <raise event="change_mapper" scope="narrow" target="'parent'">
- <parameter expr="new_mapper"/>
- </raise>
- </transition>
- <transition event="changed_rendered" cond="ID == id(self) and new_rendered != current_rendered_model" target=".">
- <parameter name="ID"/>
- <parameter name="new_rendered"/>
- <raise event="change_rendered" scope="narrow" target="'parent'">
- <parameter expr="new_rendered"/>
- </raise>
- </transition>
- <transition event="close" target="../closing"/>
- </state>
- <state id="closing">
- <onentry>
- <raise event="delete_instance" scope="cd">
- <parameter expr="self.buttons.popitem()[1]"/>
- </raise>
- </onentry>
- <transition event="instance_deleted" cond="len(self.buttons) > 0" target="../closing"/>
- <transition event="instance_deleted" cond="len(self.buttons) == 0" target="../close"/>
- </state>
-
- <state id="close">
- <onentry>
- <raise event="close_window" scope="narrow" target="'parent'"/>
- </onentry>
- </state>
- </scxml>
- </class>
|