예제 #1
0
    def construct(self):
        item = self.item
        subject = item.subject

        if not subject or item.is_communication():
            return

        builder = new_builder("message-editor")

        sort_data = self.MESSAGE_SORT
        lifeline = get_lifeline(item, item.tail)

        # disallow connecting two delete messages to a lifeline
        if (lifeline and lifeline.is_destroyed
                and subject.messageSort != "deleteMessage"):
            sort_data = list(sort_data)
            assert sort_data[4][1] == "deleteMessage"
            del sort_data[4]

        self.model = ComboModel(sort_data)
        combo = builder.get_object("message-combo")
        combo.set_model(self.model)

        index = self.model.get_index(subject.messageSort)
        combo.set_active(index)

        builder.connect_signals(
            {"message-combo-changed": (self._on_message_sort_change, )})
        return builder.get_object("message-editor")
예제 #2
0
    def construct(self):
        dependency_combo = self.builder.get_object("dependency-combo")
        model = ComboModel(self.DEPENDENCY_TYPES)
        dependency_combo.set_model(model)

        automatic = self.builder.get_object("automatic")
        automatic.set_active(self.item.auto_dependency)

        self.update()

        self.watcher.watch("subject", self._on_subject_change)

        self.builder.connect_signals({
            "dependency-type-changed": (self._on_dependency_type_change, ),
            "automatic-changed": (self._on_auto_dependency_change, ),
            "dependency-type-destroy": (self.watcher.unsubscribe_all, ),
        })

        return self.builder.get_object("dependency-editor")
예제 #3
0
class MessagePropertyPage(PropertyPageBase):
    """Property page for editing message items.

    When message is on communication diagram, then additional messages can
    be added. On sequence diagram sort of message can be changed.
    """

    order = 15

    MESSAGE_SORT = [
        ("Call", "synchCall"),
        ("Asynchronous", "asynchCall"),
        ("Signal", "asynchSignal"),
        ("Create", "createMessage"),
        ("Delete", "deleteMessage"),
        ("Reply", "reply"),
    ]

    def __init__(self, item):
        self.item = item

    def construct(self):
        item = self.item
        subject = item.subject

        if not subject or item.is_communication():
            return

        builder = new_builder("message-editor")

        sort_data = self.MESSAGE_SORT
        lifeline = get_lifeline(item, item.tail)

        # disallow connecting two delete messages to a lifeline
        if (lifeline and lifeline.is_destroyed
                and subject.messageSort != "deleteMessage"):
            sort_data = list(sort_data)
            assert sort_data[4][1] == "deleteMessage"
            del sort_data[4]

        self.model = ComboModel(sort_data)
        combo = builder.get_object("message-combo")
        combo.set_model(self.model)

        index = self.model.get_index(subject.messageSort)
        combo.set_active(index)

        builder.connect_signals(
            {"message-combo-changed": (self._on_message_sort_change, )})
        return builder.get_object("message-editor")

    @transactional
    def _on_message_sort_change(self, combo):
        """Update message item's message sort information."""

        ms = self.model.get_value(combo.get_active())

        item = self.item
        subject = item.subject
        lifeline = get_lifeline(item, item.tail)

        # allow only one delete message to connect to lifeline's lifetime
        # destroyed status can be changed only by delete message itself
        if lifeline and (subject.messageSort == "deleteMessage"
                         or not lifeline.is_destroyed):
            is_destroyed = ms == "deleteMessage"
            lifeline.is_destroyed = is_destroyed
            lifeline.request_update()

        subject.messageSort = ms
        item.request_update()