Exemple #1
0
def association_item_inline_editor(item, view, pos=None) -> bool:
    """Text edit support for Named items."""

    @transactional
    def update_text(text):
        item.subject.name = text
        return True

    @transactional
    def update_end_text(text):
        assert end_item
        UML.parse(end_item.subject, text)
        return True

    subject = item.subject
    if not subject:
        return False

    end_item = None
    if pos and distance_point_point_fast(item.handles()[0].pos, pos) < 50:
        end_item = item.head_end
    elif pos and distance_point_point_fast(item.handles()[-1].pos, pos) < 50:
        end_item = item.tail_end

    if end_item:
        text = (
            UML.format(
                end_item.subject,
                visibility=True,
                is_derived=True,
                type=True,
                multiplicity=True,
                default=True,
            )
            or ""
        )

        def escape():
            assert end_item
            UML.parse(end_item.subject, text)

        entry = popup_entry(text, update_end_text)
        bb = end_item.name_bounds
        x, y = view.get_matrix_i2v(item).transform_point(bb.x, bb.y)
        box = Rectangle(x, y, 10, 10)
    else:
        text = item.subject.name or ""

        def escape():
            item.subject.name = text

        entry = popup_entry(text, update_text)
        box = editable_text_box(view, view.hovered_item)

    show_popover(entry, view, box, escape)
    return True
Exemple #2
0
def fork_node_item_inline_editor(item, view, pos=None) -> bool:
    """Text edit support for Named items."""
    @transactional
    def update_text(text):
        item.subject.joinSpec = text
        return True

    def escape():
        item.subject.joinSpec = join_spec

    subject = item.subject
    if not subject:
        return False

    join_spec = subject.joinSpec or ""
    box = view.get_item_bounding_box(view.hovered_item)
    entry = popup_entry(join_spec, update_text)
    show_popover(entry, view, box, escape)
    return True
Exemple #3
0
def CommentItemInlineEditor(item, view, pos=None) -> bool:
    @transactional
    def update_text():
        text = buffer.get_text(buffer.get_start_iter(),
                               buffer.get_end_iter(),
                               include_hidden_chars=True)
        item.subject.body = text
        return True

    def escape():
        subject.body = body

    subject = item.subject
    if not subject:
        return False

    body = subject.body or ""

    buffer = Gtk.TextBuffer()
    buffer.set_text(body, -1)
    startiter, enditer = buffer.get_bounds()
    buffer.move_mark_by_name("selection_bound", startiter)
    buffer.move_mark_by_name("insert", enditer)
    buffer.connect("changed", lambda _: update_text())

    text_view = Gtk.TextView.new_with_buffer(buffer)
    box = view.get_item_bounding_box(view.hovered_item)

    frame = Gtk.Frame()
    frame.add(text_view)

    text_view.show()
    frame.show()

    show_popover(frame, view, box, escape)
    return True
Exemple #4
0
def fork_node_item_inline_editor(item, view, pos=None) -> bool:
    """Text edit support for Named items."""
    @transactional
    def update_text(text):
        item.subject.joinSpec = text
        popover.popdown()
        return True

    subject = item.subject
    if not subject:
        return False

    box = view.get_item_bounding_box(view.hovered_item)
    entry = popup_entry(subject.joinSpec or "", update_text)
    popover = show_popover(entry, view, box)
    return True
Exemple #5
0
def CommentItemInlineEditor(item, view, pos=None) -> bool:
    @transactional
    def update_text():
        text = buffer.get_text(buffer.get_start_iter(),
                               buffer.get_end_iter(),
                               include_hidden_chars=True)
        item.subject.body = text
        popover.popdown()
        return True

    subject = item.subject
    if not subject:
        return False

    def on_key_press_event(widget, event):
        if event.keyval == Gdk.KEY_Return and not event.get_state() & (
                Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.SHIFT_MASK):
            update_text()
        elif event.keyval == Gdk.KEY_Escape:
            widget.get_toplevel().destroy()

    def on_focus_out_event(widget, event):
        update_text()

    buffer = Gtk.TextBuffer()
    buffer.set_text((subject.body or "") if subject else "", -1)
    startiter, enditer = buffer.get_bounds()
    buffer.move_mark_by_name("selection_bound", startiter)
    buffer.move_mark_by_name("insert", enditer)

    text_view = Gtk.TextView.new_with_buffer(buffer)
    text_view.connect("focus-out-event", on_focus_out_event)
    text_view.connect("key-press-event", on_key_press_event)
    box = view.get_item_bounding_box(view.hovered_item)

    frame = Gtk.Frame()
    frame.set_shadow_type(Gtk.ShadowType.IN)
    frame.add(text_view)

    text_view.show()
    frame.show()
    popover = show_popover(frame, view, box)
    return True