|
@@ -4457,6 +4457,7 @@ class AttributeEditor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
|
|
|
self.associations_optional = {}
|
|
|
self.associations_delete = {}
|
|
|
self.dirty = None
|
|
|
+ self.name_to_id = {}
|
|
|
|
|
|
def user_defined_destructor(self):
|
|
|
self.destroy()
|
|
@@ -4518,98 +4519,102 @@ class AttributeEditor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
|
|
|
self.states["/all/init/create_entries/create_entry"].setEnter(self._all_init_create_entries_create_entry_enter)
|
|
|
self.states["/all/init/create_entries/create_entry"].setExit(self._all_init_create_entries_create_entry_exit)
|
|
|
|
|
|
+ # state /all/init/create_entries/create_entry/resolve_entry
|
|
|
+ self.states["/all/init/create_entries/create_entry/resolve_entry"] = State(11, "/all/init/create_entries/create_entry/resolve_entry", self)
|
|
|
+ self.states["/all/init/create_entries/create_entry/resolve_entry"].setEnter(self._all_init_create_entries_create_entry_resolve_entry_enter)
|
|
|
+
|
|
|
# state /all/init/create_entries/create_entry/name_entry
|
|
|
- self.states["/all/init/create_entries/create_entry/name_entry"] = State(11, "/all/init/create_entries/create_entry/name_entry", self)
|
|
|
+ self.states["/all/init/create_entries/create_entry/name_entry"] = State(12, "/all/init/create_entries/create_entry/name_entry", self)
|
|
|
|
|
|
# state /all/init/create_entries/create_entry/name_entry/create
|
|
|
- self.states["/all/init/create_entries/create_entry/name_entry/create"] = State(12, "/all/init/create_entries/create_entry/name_entry/create", self)
|
|
|
+ self.states["/all/init/create_entries/create_entry/name_entry/create"] = State(13, "/all/init/create_entries/create_entry/name_entry/create", self)
|
|
|
self.states["/all/init/create_entries/create_entry/name_entry/create"].setEnter(self._all_init_create_entries_create_entry_name_entry_create_enter)
|
|
|
|
|
|
# state /all/init/create_entries/create_entry/name_entry/pack
|
|
|
- self.states["/all/init/create_entries/create_entry/name_entry/pack"] = State(13, "/all/init/create_entries/create_entry/name_entry/pack", self)
|
|
|
+ self.states["/all/init/create_entries/create_entry/name_entry/pack"] = State(14, "/all/init/create_entries/create_entry/name_entry/pack", self)
|
|
|
|
|
|
# state /all/init/create_entries/create_entry/type_dropdown
|
|
|
- self.states["/all/init/create_entries/create_entry/type_dropdown"] = State(14, "/all/init/create_entries/create_entry/type_dropdown", self)
|
|
|
+ self.states["/all/init/create_entries/create_entry/type_dropdown"] = State(15, "/all/init/create_entries/create_entry/type_dropdown", self)
|
|
|
|
|
|
# state /all/init/create_entries/create_entry/type_dropdown/create
|
|
|
- self.states["/all/init/create_entries/create_entry/type_dropdown/create"] = State(15, "/all/init/create_entries/create_entry/type_dropdown/create", self)
|
|
|
+ self.states["/all/init/create_entries/create_entry/type_dropdown/create"] = State(16, "/all/init/create_entries/create_entry/type_dropdown/create", self)
|
|
|
self.states["/all/init/create_entries/create_entry/type_dropdown/create"].setEnter(self._all_init_create_entries_create_entry_type_dropdown_create_enter)
|
|
|
|
|
|
# state /all/init/create_entries/create_entry/type_dropdown/pack
|
|
|
- self.states["/all/init/create_entries/create_entry/type_dropdown/pack"] = State(16, "/all/init/create_entries/create_entry/type_dropdown/pack", self)
|
|
|
+ self.states["/all/init/create_entries/create_entry/type_dropdown/pack"] = State(17, "/all/init/create_entries/create_entry/type_dropdown/pack", self)
|
|
|
|
|
|
# state /all/init/create_entries/create_entry/optional_button
|
|
|
- self.states["/all/init/create_entries/create_entry/optional_button"] = State(17, "/all/init/create_entries/create_entry/optional_button", self)
|
|
|
+ self.states["/all/init/create_entries/create_entry/optional_button"] = State(18, "/all/init/create_entries/create_entry/optional_button", self)
|
|
|
|
|
|
# state /all/init/create_entries/create_entry/optional_button/create
|
|
|
- self.states["/all/init/create_entries/create_entry/optional_button/create"] = State(18, "/all/init/create_entries/create_entry/optional_button/create", self)
|
|
|
+ self.states["/all/init/create_entries/create_entry/optional_button/create"] = State(19, "/all/init/create_entries/create_entry/optional_button/create", self)
|
|
|
self.states["/all/init/create_entries/create_entry/optional_button/create"].setEnter(self._all_init_create_entries_create_entry_optional_button_create_enter)
|
|
|
|
|
|
# state /all/init/create_entries/create_entry/optional_button/pack
|
|
|
- self.states["/all/init/create_entries/create_entry/optional_button/pack"] = State(19, "/all/init/create_entries/create_entry/optional_button/pack", self)
|
|
|
+ self.states["/all/init/create_entries/create_entry/optional_button/pack"] = State(20, "/all/init/create_entries/create_entry/optional_button/pack", self)
|
|
|
|
|
|
# state /all/init/create_entries/create_entry/delete_button
|
|
|
- self.states["/all/init/create_entries/create_entry/delete_button"] = State(20, "/all/init/create_entries/create_entry/delete_button", self)
|
|
|
+ self.states["/all/init/create_entries/create_entry/delete_button"] = State(21, "/all/init/create_entries/create_entry/delete_button", self)
|
|
|
|
|
|
# state /all/init/create_entries/create_entry/delete_button/create
|
|
|
- self.states["/all/init/create_entries/create_entry/delete_button/create"] = State(21, "/all/init/create_entries/create_entry/delete_button/create", self)
|
|
|
+ self.states["/all/init/create_entries/create_entry/delete_button/create"] = State(22, "/all/init/create_entries/create_entry/delete_button/create", self)
|
|
|
self.states["/all/init/create_entries/create_entry/delete_button/create"].setEnter(self._all_init_create_entries_create_entry_delete_button_create_enter)
|
|
|
|
|
|
# state /all/init/create_entries/create_entry/delete_button/pack
|
|
|
- self.states["/all/init/create_entries/create_entry/delete_button/pack"] = State(22, "/all/init/create_entries/create_entry/delete_button/pack", self)
|
|
|
+ self.states["/all/init/create_entries/create_entry/delete_button/pack"] = State(23, "/all/init/create_entries/create_entry/delete_button/pack", self)
|
|
|
|
|
|
# state /all/init/add_new_attribute
|
|
|
- self.states["/all/init/add_new_attribute"] = State(23, "/all/init/add_new_attribute", self)
|
|
|
+ self.states["/all/init/add_new_attribute"] = State(24, "/all/init/add_new_attribute", self)
|
|
|
|
|
|
# state /all/init/add_new_attribute/create
|
|
|
- self.states["/all/init/add_new_attribute/create"] = State(24, "/all/init/add_new_attribute/create", self)
|
|
|
+ self.states["/all/init/add_new_attribute/create"] = State(25, "/all/init/add_new_attribute/create", self)
|
|
|
self.states["/all/init/add_new_attribute/create"].setEnter(self._all_init_add_new_attribute_create_enter)
|
|
|
|
|
|
# state /all/init/add_new_attribute/pack
|
|
|
- self.states["/all/init/add_new_attribute/pack"] = State(25, "/all/init/add_new_attribute/pack", self)
|
|
|
+ self.states["/all/init/add_new_attribute/pack"] = State(26, "/all/init/add_new_attribute/pack", self)
|
|
|
|
|
|
# state /all/running
|
|
|
- self.states["/all/running"] = State(26, "/all/running", self)
|
|
|
+ self.states["/all/running"] = State(27, "/all/running", self)
|
|
|
|
|
|
# state /all/change_type
|
|
|
- self.states["/all/change_type"] = State(27, "/all/change_type", self)
|
|
|
+ self.states["/all/change_type"] = State(28, "/all/change_type", self)
|
|
|
self.states["/all/change_type"].setEnter(self._all_change_type_enter)
|
|
|
|
|
|
# state /all/change_name
|
|
|
- self.states["/all/change_name"] = State(28, "/all/change_name", self)
|
|
|
+ self.states["/all/change_name"] = State(29, "/all/change_name", self)
|
|
|
self.states["/all/change_name"].setEnter(self._all_change_name_enter)
|
|
|
|
|
|
# state /all/change_name/waiting
|
|
|
- self.states["/all/change_name/waiting"] = State(29, "/all/change_name/waiting", self)
|
|
|
+ self.states["/all/change_name/waiting"] = State(30, "/all/change_name/waiting", self)
|
|
|
self.states["/all/change_name/waiting"].setEnter(self._all_change_name_waiting_enter)
|
|
|
self.states["/all/change_name/waiting"].setExit(self._all_change_name_waiting_exit)
|
|
|
|
|
|
# state /all/change_name/commit
|
|
|
- self.states["/all/change_name/commit"] = State(30, "/all/change_name/commit", self)
|
|
|
+ self.states["/all/change_name/commit"] = State(31, "/all/change_name/commit", self)
|
|
|
self.states["/all/change_name/commit"].setEnter(self._all_change_name_commit_enter)
|
|
|
|
|
|
# state /all/create_new_entry
|
|
|
- self.states["/all/create_new_entry"] = State(31, "/all/create_new_entry", self)
|
|
|
+ self.states["/all/create_new_entry"] = State(32, "/all/create_new_entry", self)
|
|
|
self.states["/all/create_new_entry"].setEnter(self._all_create_new_entry_enter)
|
|
|
|
|
|
# state /all/make_optional
|
|
|
- self.states["/all/make_optional"] = State(32, "/all/make_optional", self)
|
|
|
+ self.states["/all/make_optional"] = State(33, "/all/make_optional", self)
|
|
|
self.states["/all/make_optional"].setEnter(self._all_make_optional_enter)
|
|
|
|
|
|
# state /all/make_mandatory
|
|
|
- self.states["/all/make_mandatory"] = State(33, "/all/make_mandatory", self)
|
|
|
+ self.states["/all/make_mandatory"] = State(34, "/all/make_mandatory", self)
|
|
|
self.states["/all/make_mandatory"].setEnter(self._all_make_mandatory_enter)
|
|
|
|
|
|
# state /all/delete_entry
|
|
|
- self.states["/all/delete_entry"] = State(34, "/all/delete_entry", self)
|
|
|
+ self.states["/all/delete_entry"] = State(35, "/all/delete_entry", self)
|
|
|
self.states["/all/delete_entry"].setEnter(self._all_delete_entry_enter)
|
|
|
|
|
|
# state /all/closing
|
|
|
- self.states["/all/closing"] = State(35, "/all/closing", self)
|
|
|
+ self.states["/all/closing"] = State(36, "/all/closing", self)
|
|
|
self.states["/all/closing"].setEnter(self._all_closing_enter)
|
|
|
|
|
|
# state /all/close
|
|
|
- self.states["/all/close"] = State(36, "/all/close", self)
|
|
|
+ self.states["/all/close"] = State(37, "/all/close", self)
|
|
|
self.states["/all/close"].setEnter(self._all_close_enter)
|
|
|
|
|
|
# add children
|
|
@@ -4633,6 +4638,7 @@ class AttributeEditor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
|
|
|
self.states["/all/init/resolve_name_of_attr_type"].addChild(self.states["/all/init/resolve_name_of_attr_type/response"])
|
|
|
self.states["/all/init/create_entries"].addChild(self.states["/all/init/create_entries/check_list"])
|
|
|
self.states["/all/init/create_entries"].addChild(self.states["/all/init/create_entries/create_entry"])
|
|
|
+ self.states["/all/init/create_entries/create_entry"].addChild(self.states["/all/init/create_entries/create_entry/resolve_entry"])
|
|
|
self.states["/all/init/create_entries/create_entry"].addChild(self.states["/all/init/create_entries/create_entry/name_entry"])
|
|
|
self.states["/all/init/create_entries/create_entry"].addChild(self.states["/all/init/create_entries/create_entry/type_dropdown"])
|
|
|
self.states["/all/init/create_entries/create_entry"].addChild(self.states["/all/init/create_entries/create_entry/optional_button"])
|
|
@@ -4655,7 +4661,7 @@ class AttributeEditor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
|
|
|
self.states["/all/init"].default_state = self.states["/all/init/get_attr_types"]
|
|
|
self.states["/all/init/resolve_name_of_attr_type"].default_state = self.states["/all/init/resolve_name_of_attr_type/request"]
|
|
|
self.states["/all/init/create_entries"].default_state = self.states["/all/init/create_entries/check_list"]
|
|
|
- self.states["/all/init/create_entries/create_entry"].default_state = self.states["/all/init/create_entries/create_entry/name_entry"]
|
|
|
+ self.states["/all/init/create_entries/create_entry"].default_state = self.states["/all/init/create_entries/create_entry/resolve_entry"]
|
|
|
self.states["/all/init/create_entries/create_entry/name_entry"].default_state = self.states["/all/init/create_entries/create_entry/name_entry/create"]
|
|
|
self.states["/all/init/create_entries/create_entry/type_dropdown"].default_state = self.states["/all/init/create_entries/create_entry/type_dropdown/create"]
|
|
|
self.states["/all/init/create_entries/create_entry/optional_button"].default_state = self.states["/all/init/create_entries/create_entry/optional_button/create"]
|
|
@@ -4703,6 +4709,12 @@ class AttributeEditor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
|
|
|
_all_init_create_entries_check_list_1.setGuard(self._all_init_create_entries_check_list_1_guard)
|
|
|
self.states["/all/init/create_entries/check_list"].addTransition(_all_init_create_entries_check_list_1)
|
|
|
|
|
|
+ # transition /all/init/create_entries/create_entry/resolve_entry
|
|
|
+ _all_init_create_entries_create_entry_resolve_entry_0 = Transition(self, self.states["/all/init/create_entries/create_entry/resolve_entry"], [self.states["/all/init/create_entries/create_entry/name_entry"]])
|
|
|
+ _all_init_create_entries_create_entry_resolve_entry_0.setAction(self._all_init_create_entries_create_entry_resolve_entry_0_exec)
|
|
|
+ _all_init_create_entries_create_entry_resolve_entry_0.setTrigger(Event("mv_response", None))
|
|
|
+ self.states["/all/init/create_entries/create_entry/resolve_entry"].addTransition(_all_init_create_entries_create_entry_resolve_entry_0)
|
|
|
+
|
|
|
# transition /all/init/create_entries/create_entry/name_entry/create
|
|
|
_all_init_create_entries_create_entry_name_entry_create_0 = Transition(self, self.states["/all/init/create_entries/create_entry/name_entry/create"], [self.states["/all/init/create_entries/create_entry/name_entry/pack"]])
|
|
|
_all_init_create_entries_create_entry_name_entry_create_0.setAction(self._all_init_create_entries_create_entry_name_entry_create_0_exec)
|
|
@@ -4862,7 +4874,6 @@ class AttributeEditor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
|
|
|
self.current_attr = {'name': current_attr[0], 'type': current_attr[1][0], 'optional': current_attr[1][1]}
|
|
|
|
|
|
def _all_init_create_entries_create_entry_exit(self):
|
|
|
- print("INC counter")
|
|
|
self.counter += 1
|
|
|
|
|
|
def _all_change_name_enter(self):
|
|
@@ -4874,6 +4885,9 @@ class AttributeEditor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
|
|
|
def _all_init_get_defined_attrs_enter(self):
|
|
|
self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['read_defined_attrs', [current_model, self.as_element]])]))
|
|
|
|
|
|
+ def _all_init_create_entries_create_entry_resolve_entry_enter(self):
|
|
|
+ self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['read_attrs', [current_model, self.current_attr['type']]])]))
|
|
|
+
|
|
|
def _all_init_create_entries_create_entry_name_entry_create_enter(self):
|
|
|
self.big_step.outputEventOM(Event("create_instance", None, [self, 'names', 'Entry', {'parent': self, 'name': self.current_attr['name'], 'value': self.current_attr['name']}]))
|
|
|
|
|
@@ -4969,6 +4983,12 @@ class AttributeEditor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
|
|
|
def _all_init_create_entries_check_list_1_guard(self, parameters):
|
|
|
return not self.attrs_modify
|
|
|
|
|
|
+ def _all_init_create_entries_create_entry_resolve_entry_0_exec(self, parameters):
|
|
|
+ response = parameters[0]
|
|
|
+ self.name_to_id[response['name']] = self.current_attr['type']
|
|
|
+ print("NAME TO ID: " + str(self.name_to_id))
|
|
|
+ self.current_attr['type'] = response['name']
|
|
|
+
|
|
|
def _all_init_create_entries_create_entry_name_entry_create_0_exec(self, parameters):
|
|
|
assoc_name = parameters[0]
|
|
|
self.big_step.outputEventOM(Event("start_instance", None, [self, assoc_name]))
|
|
@@ -5049,7 +5069,7 @@ class AttributeEditor(RuntimeClassBase, tk.Toplevel, SCCDWidget):
|
|
|
def _all_running_4_exec(self, parameters):
|
|
|
event_name = parameters[0]
|
|
|
new_name = parameters[1]
|
|
|
- self.parameter = (event_name, new_name)
|
|
|
+ self.parameter = (event_name, self.name_to_id[new_name])
|
|
|
|
|
|
def _all_running_5_exec(self, parameters):
|
|
|
original_name = parameters[0]
|
|
@@ -6811,6 +6831,18 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
|
|
|
groups = {}
|
|
|
edges = []
|
|
|
|
|
|
+ defined_attributes = {}
|
|
|
+ names = {}
|
|
|
+ if current_metamodel == "formalisms/SimpleClassDiagrams":
|
|
|
+ for elem in result:
|
|
|
+ if elem["__type"] == "AttributeLink":
|
|
|
+ defined_attributes.setdefault(elem["__source"], []).append((elem["name"], elem["__target"], True if elem["optional"] == True else False))
|
|
|
+ if "name" in elem:
|
|
|
+ names[elem["__id"]] = elem["name"]
|
|
|
+
|
|
|
+ print("Got defined attributes: " + str(defined_attributes))
|
|
|
+ print("Got names: " + str(names))
|
|
|
+
|
|
|
for elem in list(result):
|
|
|
is_edge = False
|
|
|
attrs = {}
|
|
@@ -6835,9 +6867,10 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
|
|
|
edge_edge = False
|
|
|
|
|
|
if is_edge:
|
|
|
- cs_elem_id = str(uuid.uuid4())
|
|
|
- edges.append({"id": cs_elem_id, "type": "ConnectingLine", "offsetSourceX": 0 if edge_edge else 100, "offsetSourceY": 0 if edge_edge else 30, "offsetTargetX": 100, "offsetTargetY": 30, "lineWidth": 3, "lineColour": "black", "arrow": True, "__asid": element_id, "layer": 0, "__source": element_source, "__target": element_target})
|
|
|
- groups[element_id] = cs_elem_id
|
|
|
+ if not (elem["__type"] == "AttributeLink" and current_metamodel == "formalisms/SimpleClassDiagrams"):
|
|
|
+ cs_elem_id = str(uuid.uuid4())
|
|
|
+ edges.append({"id": cs_elem_id, "type": "ConnectingLine", "offsetSourceX": 0 if edge_edge else 100, "offsetSourceY": 0 if edge_edge else 30, "offsetTargetX": 100, "offsetTargetY": 30, "lineWidth": 3, "lineColour": "black", "arrow": True, "__asid": element_id, "layer": 0, "__source": element_source, "__target": element_target})
|
|
|
+ groups[element_id] = cs_elem_id
|
|
|
else:
|
|
|
# Add the group
|
|
|
x, y = self.locations.get(element_id, (30 + (group_counter * 250) % 1000, 30 + ((group_counter / 4) * 250)))
|
|
@@ -6854,7 +6887,21 @@ class MainWindow(RuntimeClassBase, tk.Toplevel, SCCDWidget):
|
|
|
self.rendered.append({"id": str(uuid.uuid4()), "type": "contains", "__source": group_id, "__target": cs_elem_id})
|
|
|
max_text = max(len("%s : %s" % (element_id, element_type)), max_text)
|
|
|
# Then the attributes
|
|
|
- text_counter = 0
|
|
|
+ text_counter = 1
|
|
|
+
|
|
|
+ for name, attr_type, optional in defined_attributes.get(elem["__id"], []):
|
|
|
+ cs_elem_id = str(uuid.uuid4())
|
|
|
+ text = "%s : %s" % (name, names.get(attr_type, "(%s)" % attr_type))
|
|
|
+ if optional:
|
|
|
+ text = text.replace(" : ", " ?: ")
|
|
|
+ self.rendered.append({"id": cs_elem_id, "type": "Text", "x": 10, "y": 25 + text_counter * 11, "text": text, "lineWidth": 3, "lineColour": "black", "layer": 2})
|
|
|
+ max_text = max(len(text), max_text)
|
|
|
+ self.rendered.append({"id": str(uuid.uuid4()), "type": "contains", "__source": group_id, "__target": cs_elem_id})
|
|
|
+ text_counter += 1
|
|
|
+
|
|
|
+ if text_counter > 1:
|
|
|
+ text_counter += 1
|
|
|
+
|
|
|
for key, value in attrs.items():
|
|
|
cs_elem_id = str(uuid.uuid4())
|
|
|
if isinstance(value, dict):
|