Beispiel #1
0
    def test_pickle_with_gtk_view_with_connection(self):
        canvas = create_canvas()
        box = canvas._tree.nodes[0]
        assert isinstance(box, Box)
        line = canvas._tree.nodes[2]
        assert isinstance(line, Line)

        view = GtkView(canvas=canvas)

        #        from gaphas.tool import ConnectHandleTool
        #        handle_tool = ConnectHandleTool()
        #        handle_tool.connect(view, line, line.handles()[0], (40, 0))
        #        assert line.handles()[0].connected_to is box, line.handles()[0].connected_to
        #        assert line.handles()[0].connection_data
        #        assert line.handles()[0].disconnect
        #        assert isinstance(line.handles()[0].disconnect, object), line.handles()[0].disconnect

        import io

        f = io.BytesIO()
        pickler = MyPickler(f)
        pickler.dump(canvas)
        pickled = f.getvalue()

        c2 = pickle.loads(pickled)

        from gi.repository import Gtk
        win = Gtk.Window()
        view = GtkView(canvas=c2)
        win.add(view)
        view.show()
        win.show()

        view.update()
Beispiel #2
0
def view(diagram):
    view = GtkView(model=diagram, selection=Selection())
    view._qtree.resize((-100, -100, 400, 400))
    item_painter = ItemPainter(view.selection)
    view.painter = item_painter
    view.bounding_box_painter = BoundingBoxPainter(item_painter)
    return view
Beispiel #3
0
    def test_item_removal(self):
        canvas = Canvas()
        view = GtkView(canvas)
        window = Gtk.Window.new(Gtk.WindowType.TOPLEVEL)
        window.add(view)
        window.show_all()

        box = Box()
        canvas.add(box)
        # No gtk main loop, so updates occur instantly
        assert not canvas.require_update()

        # Process pending (expose) events, which cause the canvas to be drawn.
        while Gtk.events_pending():
            Gtk.main_iteration()

        assert len(canvas.get_all_items()) == len(view._qtree)

        view.focused_item = box
        canvas.remove(box)

        assert len(canvas.get_all_items()) == 0
        assert len(view._qtree) == 0

        window.destroy()
Beispiel #4
0
def test_custom_selection_setter():
    custom_selection = CustomSelection()
    view = GtkView()

    view.selection = custom_selection

    assert view.selection is custom_selection
Beispiel #5
0
    def test_view_registration_2(self):
        """
        Test view registration and destroy when view is destroyed.
        """
        canvas = Canvas()
        view = GtkView(canvas)
        window = Gtk.Window.new(Gtk.WindowType.TOPLEVEL)
        window.add(view)
        window.show_all()

        box = Box()
        canvas.add(box)

        assert hasattr(box, '_matrix_i2v')
        assert hasattr(box, '_matrix_v2i')

        assert box._matrix_i2v[view]
        assert box._matrix_v2i[view]

        assert len(canvas._registered_views) == 1
        assert view in canvas._registered_views

        window.destroy()

        assert len(canvas._registered_views) == 0

        assert view not in box._matrix_i2v
        assert view not in box._matrix_v2i
Beispiel #6
0
    def test_get_item_at_point(self):
        """
        Hover tool only reacts on motion-notify events
        """
        canvas = Canvas()
        view = GtkView(canvas)
        window = Gtk.Window.new(Gtk.WindowType.TOPLEVEL)
        window.add(view)
        window.show_all()

        box = Box()
        canvas.add(box)
        # No gtk main loop, so updates occur instantly
        assert not canvas.require_update()
        box.width = 50
        box.height = 50

        # Process pending (expose) events, which cause the canvas to be drawn.
        while Gtk.events_pending():
            Gtk.main_iteration()

        assert len(view._qtree._ids) == 1
        assert not view._qtree._bucket.bounds == (
            0, 0, 0, 0), view._qtree._bucket.bounds

        assert view.get_item_at_point((10, 10)) is box
        assert view.get_item_at_point((60, 10)) is None

        window.destroy()
Beispiel #7
0
    def construct(self):
        """
        Create the widget.
        
        Returns: the newly created widget, a DockItem.
        """
        assert self.diagram

        view = GtkView(canvas=self.diagram.canvas)
        view.drag_dest_set(gtk.DEST_DEFAULT_MOTION, DiagramTab.VIEW_DND_TARGETS,
                           gtk.gdk.ACTION_MOVE | gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_LINK)

        scrolled_window = gtk.ScrolledWindow()
        scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        scrolled_window.set_shadow_type(gtk.SHADOW_IN)
        scrolled_window.add(view)
        scrolled_window.show_all()

        view.connect('focus-changed', self._on_view_selection_changed)
        view.connect('selection-changed', self._on_view_selection_changed)
        view.connect_after('key-press-event', self._on_key_press_event)
        view.connect('drag-drop', self._on_drag_drop)
        view.connect('drag-data-received', self._on_drag_data_received)

        self.view = view
        
        self.toolbox = DiagramToolbox(self.diagram, view)
        
        item = DockItem(title=self.title, stock_id='gaphor-diagram')
        item.add(scrolled_window)

        self.widget = item

        return item
Beispiel #8
0
    def __init__(self):
        self.canvas = Canvas()

        self.box1 = Box()
        self.canvas.add(self.box1)
        self.box1.matrix.translate(100, 50)
        self.box1.width = 40
        self.box1.height = 40
        self.box1.request_update()

        self.box2 = Box()
        self.canvas.add(self.box2)
        self.box2.matrix.translate(100, 150)
        self.box2.width = 50
        self.box2.height = 50
        self.box2.request_update()

        self.line = Line()
        self.head = self.line.handles()[0]
        self.tail = self.line.handles()[-1]
        self.tail.pos = 100, 100
        self.canvas.add(self.line)

        self.canvas.update_now()
        self.view = GtkView()
        self.view.canvas = self.canvas

        self.win = Gtk.Window()
        self.win.add(self.view)
        self.view.show()
        self.view.update()
        self.win.show()

        self.tool = ConnectHandleTool(self.view)
Beispiel #9
0
    def test_bounding_box_calculations(self):
        """
        A view created before and after the canvas is populated should contain
        the same data.
        """
        canvas = Canvas()

        window1 = Gtk.Window.new(Gtk.WindowType.TOPLEVEL)
        view1 = GtkView(canvas=canvas)
        window1.add(view1)
        view1.realize()
        window1.show_all()

        box = Box()
        box.matrix = (1.0, 0.0, 0.0, 1, 10, 10)
        canvas.add(box)

        line = Line()
        line.fyzzyness = 1
        line.handles()[1].pos = (30, 30)
        #line.split_segment(0, 3)
        line.matrix.translate(30, 60)
        canvas.add(line)

        window2 = Gtk.Window.new(Gtk.WindowType.TOPLEVEL)
        view2 = GtkView(canvas=canvas)
        window2.add(view2)
        window2.show_all()

        # Process pending (expose) events, which cause the canvas to be drawn.
        while Gtk.events_pending():
            Gtk.main_iteration()

        try:
            assert view2.get_item_bounding_box(box)
            assert view1.get_item_bounding_box(box)
            assert view1.get_item_bounding_box(
                box) == view2.get_item_bounding_box(
                    box), '%s != %s' % (view1.get_item_bounding_box(box),
                                        view2.get_item_bounding_box(box))
            assert view1.get_item_bounding_box(
                line) == view2.get_item_bounding_box(
                    line), '%s != %s' % (view1.get_item_bounding_box(line),
                                         view2.get_item_bounding_box(line))
        finally:
            window1.destroy()
            window2.destroy()
Beispiel #10
0
    def test_scroll_adjustments(self):
        sc = gtk.ScrolledWindow()
        view = GtkView(Canvas())
        sc.add(view)

        print sc.get_hadjustment(), view.hadjustment
        assert sc.get_hadjustment() is view.hadjustment
        assert sc.get_vadjustment() is view.vadjustment
Beispiel #11
0
    def test_scroll_adjustments_signal(self):
        def handler(self, hadj, vadj):
            self.handled = True

        sc = gtk.ScrolledWindow()
        view = GtkView(Canvas())
        view.connect('set-scroll-adjustments', handler)
        sc.add(view)

        assert view.handled
Beispiel #12
0
 def __init__(self):
     self.canvas = Canvas()
     self.view = GtkView(self.canvas)
     self.window = Gtk.Window()
     self.window.add(self.view)
     self.window.show_all()
     self.line = Line()
     self.canvas.add(self.line)
     self.e1 = Element()
     self.e2 = Element()
     self.e3 = Element()
Beispiel #13
0
    def construct(self):
        """
        Create the widget.

        Returns: the newly created widget.
        """
        assert self.diagram

        view = GtkView(canvas=self.diagram.canvas)
        try:
            view.set_css_name("diagramview")
        except AttributeError:
            pass  # Gtk.Widget.set_css_name() is added in 3.20
        view.drag_dest_set(
            Gtk.DestDefaults.ALL,
            DiagramPage.VIEW_DND_TARGETS,
            Gdk.DragAction.MOVE | Gdk.DragAction.COPY | Gdk.DragAction.LINK,
        )

        scrolled_window = Gtk.ScrolledWindow()
        scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC,
                                   Gtk.PolicyType.AUTOMATIC)
        scrolled_window.set_shadow_type(Gtk.ShadowType.IN)
        scrolled_window.add(view)
        scrolled_window.show_all()
        self.widget = scrolled_window

        view.connect("focus-changed", self._on_view_selection_changed)
        view.connect("selection-changed", self._on_view_selection_changed)
        view.connect_after("key-press-event", self._on_key_press_event)
        view.connect("drag-data-received", self._on_drag_data_received)

        self.view = view

        self.widget.action_group = create_action_group(self, "diagram")

        shortcuts = self.get_toolbox_shortcuts()

        def shortcut_action(widget, event):
            action_name = shortcuts.get((event.keyval, event.state))
            if action_name:
                widget.get_toplevel().get_action_group(
                    "diagram").lookup_action("select-tool").change_state(
                        GLib.Variant.new_string(action_name))

        self.widget.connect("key-press-event", shortcut_action)
        self._on_sloppy_lines()
        self.select_tool("toolbox-pointer")

        self.set_drawing_style(self.properties.get("diagram.sloppiness", 0))

        return self.widget
Beispiel #14
0
def test_pickle_with_gtk_view(canvas_fixture):
    pickled = pickle.dumps(canvas_fixture.canvas)

    c2 = pickle.loads(pickled)

    win = Gtk.Window()
    view = GtkView(canvas=c2)
    win.add(view)

    view.show()
    win.show()

    view.update()
Beispiel #15
0
    def __init__(self):
        self.session = Session(services=self.services)
        self.element_factory = self.session.get_service("element_factory")
        self.modeling_language = self.session.get_service("modeling_language")
        assert len(list(self.element_factory.select())) == 0, list(
            self.element_factory.select())
        self.diagram = self.element_factory.create(UML.Diagram)

        # We need to hook up a view for now, so updates are done instantly
        self.view = GtkView(self.diagram, selection=Selection())
        self.view.painter = ItemPainter(self.view.selection)
        self.view.bounding_box_painter = BoundingBoxPainter(self.view.painter)
        assert len(list(self.element_factory.select())) == 1, list(
            self.element_factory.select())
Beispiel #16
0
    def __init__(self):
        self.canvas = Canvas()
        self.view = GtkView(self.canvas)
        self.window = Gtk.Window.new(Gtk.WindowType.TOPLEVEL)
        self.window.add(self.view)
        self.window.show_all()

        self.box = Box()
        self.canvas.add(self.box)
        # No gtk main loop, so updates occur instantly
        assert not self.canvas.require_update()

        # Process pending (expose) events, which cause the canvas to be drawn.
        while Gtk.events_pending():
            Gtk.main_iteration()
Beispiel #17
0
def test_pickle_demo():
    canvas = demo.create_canvas()

    pickled = pickle.dumps(canvas)

    c2 = pickle.loads(pickled)

    win = Gtk.Window()
    view = GtkView(canvas=c2)
    win.add(view)

    view.show()
    win.show()

    view.update()
Beispiel #18
0
    def test_pickle_with_gtk_view(self):
        canvas = create_canvas()

        pickled = pickle.dumps(canvas)

        c2 = pickle.loads(pickled)

        from gi.repository import Gtk
        win = Gtk.Window()
        view = GtkView(canvas=c2)
        win.add(view)

        view.show()
        win.show()

        view.update()
Beispiel #19
0
    def test_get_handle_at_point(self):
        canvas = Canvas()
        view = GtkView(canvas)
        window = Gtk.Window.new(Gtk.WindowType.TOPLEVEL)
        window.add(view)
        window.show_all()

        box = Box()
        box.min_width = 20
        box.min_height = 30
        box.matrix.translate(20, 20)
        box.matrix.rotate(old_div(math.pi, 1.5))
        canvas.add(box)

        i, h = view.get_handle_at_point((20, 20))
        assert i is box
        assert h is box.handles()[0]
Beispiel #20
0
    def test_pickle_demo(self):
        import demo

        canvas = demo.create_canvas()

        pickled = pickle.dumps(canvas)

        c2 = pickle.loads(pickled)

        import gtk
        win = gtk.Window()
        view = GtkView(canvas=c2)
        win.add(view)

        view.show()
        win.show()

        view.update()
Beispiel #21
0
    def construct(self):
        """
        Create the widget.

        Returns: the newly created widget.
        """
        assert self.diagram

        view = GtkView(canvas=self.diagram.canvas)
        try:
            view.set_css_name("diagramview")
        except AttributeError:
            pass  # Gtk.Widget.set_css_name() is added in 3.20
        view.drag_dest_set(
            Gtk.DestDefaults.ALL,
            DiagramPage.VIEW_DND_TARGETS,
            Gdk.DragAction.MOVE | Gdk.DragAction.COPY | Gdk.DragAction.LINK,
        )

        scrolled_window = Gtk.ScrolledWindow()
        scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC,
                                   Gtk.PolicyType.AUTOMATIC)
        scrolled_window.set_shadow_type(Gtk.ShadowType.IN)
        scrolled_window.add(view)
        scrolled_window.show_all()
        self.widget = scrolled_window

        view.connect("focus-changed", self._on_view_selection_changed)
        view.connect("selection-changed", self._on_view_selection_changed)
        view.connect_after("key-press-event", self._on_key_press_event)
        # view.connect("drag-drop", self._on_drag_drop)
        view.connect("drag-data-received", self._on_drag_data_received)

        self.view = view

        self.toolbox = DiagramToolbox(
            self.diagram,
            view,
            self.element_factory,
            self.event_manager,
            self.properties,
        )

        return self.widget
Beispiel #22
0
    def test_scroll_adjustments_signal(self):
        sc = Gtk.ScrolledWindow()
        view = GtkView(Canvas())
        sc.add(view)

        assert view.hadjustment
        assert view.vadjustment
        assert view.hadjustment.get_value() == 0.0
        assert view.hadjustment.get_lower() == 0.0
        assert view.hadjustment.get_upper() == 1.0
        assert view.hadjustment.get_step_increment() == 0.0
        assert view.hadjustment.get_page_increment() == 1.0
        assert view.hadjustment.get_page_size() == 1.0
        assert view.vadjustment.get_value() == 0.0
        assert view.vadjustment.get_lower() == 0.0
        assert view.vadjustment.get_upper() == 1.0
        assert view.vadjustment.get_step_increment() == 0.0
        assert view.vadjustment.get_page_increment() == 1.0
        assert view.vadjustment.get_page_size() == 1.0
Beispiel #23
0
    def test_view_registration(self):
        canvas = Canvas()

        # Simple views do not register on the canvas

        view = View(canvas)
        assert len(canvas._registered_views) == 0

        box = Box()
        canvas.add(box)

        # By default no complex updating/calculations are done:
        assert not box._matrix_i2v.has_key(view)
        assert not box._matrix_v2i.has_key(view)

        # GTK view does register for updates though

        view = GtkView(canvas)
        assert len(canvas._registered_views) == 1

        # No entry, since GtkView is not realized and has no window
        assert not box._matrix_i2v.has_key(view)
        assert not box._matrix_v2i.has_key(view)

        window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        window.add(view)
        window.show_all()

        # Now everything is realized and updated
        assert box._matrix_i2v.has_key(view)
        assert box._matrix_v2i.has_key(view)

        view.canvas = None
        assert len(canvas._registered_views) == 0

        assert not box._matrix_i2v.has_key(view)
        assert not box._matrix_v2i.has_key(view)

        view.canvas = canvas
        assert len(canvas._registered_views) == 1

        assert box._matrix_i2v.has_key(view)
        assert box._matrix_v2i.has_key(view)
Beispiel #24
0
    def test_get_handle_at_point_at_pi_div_2(self):
        canvas = Canvas()
        view = GtkView(canvas)
        window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        window.add(view)
        window.show_all()

        box = Box()
        box.min_width = 20
        box.min_height = 30
        box.matrix.translate(20, 20)
        box.matrix.rotate(math.pi / 2)
        canvas.add(box)

        p = canvas.get_matrix_i2c(box).transform_point(0, 20)
        p = canvas.get_matrix_c2i(box).transform_point(20, 20)
        i, h = view.get_handle_at_point((20, 20))
        assert i is box
        assert h is box.handles()[0]
Beispiel #25
0
def test_view_registration(view_fixture):
    canvas = Canvas()

    # Simple views do not register on the canvas

    view = View(canvas)
    assert len(canvas._registered_views) == 0

    box = Box()
    canvas.add(box)

    # By default no complex updating/calculations are done:
    assert view not in box._matrix_i2v
    assert view not in box._matrix_v2i

    # GTK view does register for updates though

    view = GtkView(canvas)
    assert len(canvas._registered_views) == 1

    # No entry, since GtkView is not realized and has no window
    assert view not in box._matrix_i2v
    assert view not in box._matrix_v2i

    window = Gtk.Window.new(Gtk.WindowType.TOPLEVEL)
    window.add(view)
    window.show_all()

    # Now everything is realized and updated
    assert view in box._matrix_i2v
    assert view in box._matrix_v2i

    view.canvas = None
    assert len(canvas._registered_views) == 0

    assert view not in box._matrix_i2v
    assert view not in box._matrix_v2i

    view.canvas = canvas
    assert len(canvas._registered_views) == 1

    assert view in box._matrix_i2v
    assert view in box._matrix_v2i
Beispiel #26
0
def test_pickle_with_gtk_view_with_connection(canvas_fixture):
    box = canvas_fixture.canvas._tree.nodes[0]
    assert isinstance(box, Box)
    line = canvas_fixture.canvas._tree.nodes[2]
    assert isinstance(line, Line)

    f = io.BytesIO()
    pickler = MyPickler(f)
    pickler.dump(canvas_fixture.canvas)
    pickled = f.getvalue()

    c2 = pickle.loads(pickled)

    win = Gtk.Window()
    view = GtkView(canvas=c2)
    win.add(view)
    view.show()
    win.show()

    view.update()
Beispiel #27
0
    def construct(self):
        """
        Create the widget.

        Returns: the newly created widget.
        """
        assert self.diagram

        view = GtkView(canvas=self.diagram.canvas)
        view.drag_dest_set(
            Gtk.DestDefaults.ALL,
            DiagramPage.VIEW_DND_TARGETS,
            Gdk.DragAction.MOVE | Gdk.DragAction.COPY | Gdk.DragAction.LINK,
        )
        self.diagram_css = Gtk.CssProvider.new()
        view.get_style_context().add_provider(self.diagram_css,
                                              Gtk.STYLE_PROVIDER_PRIORITY_USER)

        scrolled_window = Gtk.ScrolledWindow()
        scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC,
                                   Gtk.PolicyType.AUTOMATIC)
        scrolled_window.set_shadow_type(Gtk.ShadowType.IN)
        scrolled_window.add(view)
        scrolled_window.show_all()
        self.widget = scrolled_window

        view.connect("focus-changed", self._on_view_selection_changed)
        view.connect("selection-changed", self._on_view_selection_changed)
        view.connect_after("key-press-event", self._on_key_press_event)
        view.connect("drag-data-received", self._on_drag_data_received)

        self.view = view

        self.widget.action_group = create_action_group(self, "diagram")

        self.widget.connect_after("key-press-event", self._on_shortcut_action)
        self.select_tool("toolbox-pointer")

        self.set_drawing_style()

        return self.widget
Beispiel #28
0
def test_view_registration():
    canvas = Canvas()

    # GTK view does register for updates though

    view = GtkView(canvas)
    assert len(canvas._registered_views) == 1

    if Gtk.get_major_version() == 3:
        window = Gtk.Window.new(Gtk.WindowType.TOPLEVEL)
        window.add(view)
        window.show_all()
    else:
        window = Gtk.Window.new()
        window.set_child(view)

    view.model = None
    assert len(canvas._registered_views) == 0

    view.model = canvas
    assert len(canvas._registered_views) == 1
Beispiel #29
0
def test_bounding_box_calculations(view_fixture):
    """A view created before and after the canvas is populated should contain
    the same data.

    """
    view_fixture.view.realize()
    view_fixture.box.matrix = (1.0, 0.0, 0.0, 1, 10, 10)

    line = Line()
    line.fuzziness = 1
    line.handles()[1].pos = (30, 30)
    line.matrix.translate(30, 60)
    view_fixture.canvas.add(line)

    window2 = Gtk.Window.new(Gtk.WindowType.TOPLEVEL)
    view2 = GtkView(canvas=view_fixture.canvas)
    window2.add(view2)
    window2.show_all()

    # Process pending (expose) events, which cause the canvas to be drawn.
    while Gtk.events_pending():
        Gtk.main_iteration()

    try:
        assert view2.get_item_bounding_box(view_fixture.box)
        assert view_fixture.view.get_item_bounding_box(view_fixture.box)
        assert view_fixture.view.get_item_bounding_box(
            view_fixture.box) == view2.get_item_bounding_box(
                view_fixture.box), ("%s != %s" % (
                    view_fixture.view.get_item_bounding_box(view_fixture.box),
                    view2.get_item_bounding_box(view_fixture.box),
                ))
        assert view_fixture.view.get_item_bounding_box(
            line) == view2.get_item_bounding_box(line), ("%s != %s" % (
                view_fixture.view.get_item_bounding_box(line),
                view2.get_item_bounding_box(line),
            ))
    finally:
        view_fixture.window.destroy()
        window2.destroy()
Beispiel #30
0
 def setUp(self):
     self.canvas = Canvas()
     self.view = GtkView(self.canvas)
     self.window = gtk.Window()
     self.window.add(self.view)
     self.window.show_all()