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
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
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
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
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