def element_factory():
    event_manager = EventManager()
    event_manager.subscribe(handler)
    clear_events()
    factory = ElementFactory(event_manager)
    yield factory
    clear_events()
Exemple #2
0
    def test_uml_associations(self):

        from gaphor.core.modeling.event import AssociationUpdated
        from gaphor.core.modeling.properties import association, derivedunion
        from gaphor.UML import Element

        event_manager = EventManager()
        undo_manager = UndoManager(event_manager)
        element_factory = ElementFactory(event_manager)

        class A(Element):
            is_unlinked = False

            def unlink(self):
                self.is_unlinked = True
                Element.unlink(self)

        A.a1 = association("a1", A, upper=1)
        A.a2 = association("a2", A, upper=1)
        A.b1 = association("b1", A, upper="*")
        A.b2 = association("b2", A, upper="*")
        A.b3 = association("b3", A, upper=1)

        A.derived_a = derivedunion("derived_a", A, 0, 1, A.a1, A.a2)
        A.derived_b = derivedunion("derived_b", A, 0, "*", A.b1, A.b2, A.b3)

        events = []

        @event_handler(AssociationUpdated)
        def handler(event, events=events):
            events.append(event)

        event_manager.subscribe(handler)
        try:
            a = element_factory.create(A)

            undo_manager.begin_transaction()

            a.a1 = element_factory.create(A)
            undo_manager.commit_transaction()

            assert (
                len(events) == 2
            ), events  # both  AssociationSet and DerivedSet events
            assert events[0].property is A.a1
            assert undo_manager.can_undo()

            undo_manager.undo_transaction()
            assert not undo_manager.can_undo()
            assert undo_manager.can_redo()
            assert len(events) == 4, events
            assert events[2].property is A.a1

        finally:
            event_manager.unsubscribe(handler)
            undo_manager.shutdown()
Exemple #3
0
    def __init__(self, event_manager: EventManager, element_factory: ElementFactory):
        self.event_manager = event_manager
        self.element_factory = element_factory
        self.model = Gtk.TreeStore.new([object])

        event_manager.subscribe(self.refresh)
        event_manager.subscribe(self._on_element_create)
        event_manager.subscribe(self._on_element_delete)
        event_manager.subscribe(self._on_association_set)
        event_manager.subscribe(self._on_attribute_change)
Exemple #4
0
def event_manager():
    event_manager = EventManager()

    event_manager.subscribe(handle_begins)
    event_manager.subscribe(handle_commits)
    event_manager.subscribe(handle_rollback)

    del begins[:]
    del commits[:]
    del rollbacks[:]

    yield event_manager

    event_manager.unsubscribe(handle_begins)
    event_manager.unsubscribe(handle_commits)
    event_manager.unsubscribe(handle_rollback)