Пример #1
0
 def method(self):
     """ """
     ctrl.release_editor_focus()
     node = self.get_host()
     if isinstance(node, Edge):
         node = node.end
     ctrl.free_drawing.add_sibling_for_constituentnode(node, add_left=False)
Пример #2
0
 def method(self):
     """ """
     ctrl.release_editor_focus()
     node = self.get_host()
     ctrl.free_drawing.unary_add_child_for_constituentnode(node,
                                                           add_left=False)
     ctrl.forest.forest_edited()
Пример #3
0
 def method(self):
     """ Remove selected node
     :return:
     """
     ctrl.release_editor_focus()
     node = self.get_host()
     ctrl.remove_from_selection(node)
     ctrl.free_drawing.delete_node(node, ignore_consequences=False)
Пример #4
0
 def method(self):
     """ """
     ctrl.release_editor_focus()
     node = self.get_host()
     if isinstance(node, Edge):
         node = node.end
     ctrl.free_drawing.add_sibling_for_constituentnode(node, add_left=False)
     ctrl.forest.forest_edited()
Пример #5
0
 def method(self):
     """ """
     ctrl.release_editor_focus()
     node = self.get_host()
     ctrl.free_drawing.merge_to_top(node.get_top_node(),
                                    node,
                                    merge_to_left=True)
     ctrl.forest.forest_edited()
Пример #6
0
 def method(self):
     """ Remove selected node
     :return:
     """
     ctrl.release_editor_focus()
     node = self.get_host()
     ctrl.remove_from_selection(node)
     ctrl.free_drawing.delete_node(node, touch_edges=True)
     ctrl.forest.forest_edited()
Пример #7
0
 def method(self, node_uid, left=True):
     """ Merge this node to left of topmost node of node's tree. It's internal merge!
     :param node_uid: int or str, node_uid for node to merge.
     """
     ctrl.release_editor_focus()
     node = ctrl.forest.nodes[node_uid]
     tops = node.get_highest()
     if len(tops) == 1:
         ctrl.drawing.merge_to_top(tops[0], node, merge_to_left=left)
         ctrl.forest.forest_edited()
Пример #8
0
 def method(self, node_uid: int):
     """ If triggered node is triangle node, restore it to normal
     :param node_uid: int or string, node's unique identifier
     :return: None
     """
     ctrl.release_editor_focus()
     node = ctrl.forest.nodes[node_uid]
     Triangle.remove_triangle_from(node)
     ctrl.deselect_objects()
     node.update_label()
Пример #9
0
 def method(self, node_uid):
     """ Turn triggering node into triangle node
     :param node_uid: int or string, node's unique identifier
     :return: None
     """
     ctrl.release_editor_focus()
     node = ctrl.forest.nodes[node_uid]
     Triangle.add_or_update_triangle_for(node)
     ctrl.deselect_objects()
     node.update_label()
Пример #10
0
 def method(self, node_uid):
     """ Remove given node
     :param node_uid: int or string, node's unique identifier
     :return:
     """
     ctrl.release_editor_focus()
     node = ctrl.forest.nodes[node_uid]
     ctrl.remove_from_selection(node)
     ctrl.drawing.delete_node(node, touch_edges=True)
     ctrl.forest.forest_edited()
Пример #11
0
 def method(self):
     """ """
     ctrl.release_editor_focus()
     top = self.get_host()
     label = ctrl.free_drawing.next_free_label()
     new_node = ctrl.free_drawing.create_node(label=label, relative=top)
     ctrl.free_drawing.merge_to_top(top,
                                    new_node,
                                    merge_to_left=False,
                                    pos=new_node.current_position)
     ctrl.forest.forest_edited()
Пример #12
0
 def method(self):
     """ If triggered node is triangle node, restore it to normal
     :return: None
     """
     ctrl.release_editor_focus()
     node = self.get_host()
     if not node:
         return
     log.info('unfolding from %s' % node.as_bracket_string())
     ctrl.free_drawing.remove_triangle_from(node)
     ctrl.deselect_objects()
Пример #13
0
 def method(self, node_uid):
     """ In cases where there another part of binary merge is removed,
     and a stub edge is left dangling, there is an option to remove the unnecessary
     merge -- this is the triggering host.
     :param node_uid: int or string, node's unique identifier
     :return: None
     """
     ctrl.release_editor_focus()
     node = ctrl.forest.nodes[node_uid]
     node.rotate_children()
     ctrl.forest.forest_edited()
Пример #14
0
 def method(self):
     """ Turn triggering node into triangle node
     :return: None
     """
     ctrl.release_editor_focus()
     node = self.get_host()
     if not node:
         return
     log.info('folding in %s' % node.as_bracket_string())
     ctrl.free_drawing.add_triangle_to(node)
     node.update_label()
     ctrl.deselect_objects()
Пример #15
0
    def set_quick_editing(self, value):
        """  Toggle quick editing on and off for this label. Quick editing is toggled on when
        the label is clicked or navigated into with the keyboard. The label and its editor takes
        focus and many things behave differently while editing, so please keep make sure that
        quick editing is switched off properly, using this method.
        :param value:
        :return:
        """
        if value:
            if self._quick_editing:
                return
            self._quick_editing = True
            self._host.update_label_visibility()
            if ctrl.text_editor_focus:
                ctrl.release_editor_focus()
            ctrl.text_editor_focus = self
            self.editable_part.setTextInteractionFlags(
                QtCore.Qt.TextEditorInteraction)
            self.prepareGeometryChange()
            if self.is_card():
                self.editable_doc.setTextWidth(self.card_size[0])
            else:
                self.editable_doc.setTextWidth(-1)
            self.edited_field, self.editable_html = \
                self._host.compose_html_for_editing()
            self.setCursor(QtGui.QCursor(QtCore.Qt.IBeamCursor))

            ctrl.ui.add_quick_edit_buttons_for(self._host, self.editable_doc)
            self.editable_part.setHtml(self.editable_html)
            self.editable_doc.cursorPositionChanged.connect(
                self.cursor_position_changed)

            self.resize_label()
            self.editable_part.setAcceptDrops(True)
            ctrl.graph_view.setFocus()
            self.editable_part.setFocus()
            self._fresh_focus = True

        elif self._quick_editing:
            if self.editable_doc.isModified():
                self.parse_document_to_field()
                self.editable_doc.setModified(False)
            ctrl.text_editor_focus = None
            self._quick_editing = False
            ctrl.ui.remove_quick_edit_buttons()
            self._host.update_label()
            self.editable_part.setCursor(
                QtGui.QCursor(QtCore.Qt.PointingHandCursor))
            self.editable_part.setAcceptDrops(False)
            self.editable_part.setTextInteractionFlags(
                QtCore.Qt.NoTextInteraction)
            self.editable_part.clearFocus()
            self._fresh_focus = False
Пример #16
0
 def method(self):
     """ If triggered node is triangle node, restore it to normal
     :return: None
     """
     ctrl.release_editor_focus()
     node = self.get_host()
     if not node:
         return
     log.info('unfolding from %s' % node.as_bracket_string())
     ctrl.free_drawing.remove_triangle_from(node)
     ctrl.deselect_objects()
     node.update_label()
Пример #17
0
 def method(self):
     """ Turn triggering node into triangle node
     :return: None
     """
     ctrl.release_editor_focus()
     node = self.get_host()
     if not node:
         return
     log.info('folding in %s' % node.as_bracket_string())
     ctrl.free_drawing.add_or_update_triangle_for(node)
     ctrl.deselect_objects()
     node.update_label()
Пример #18
0
 def method(self):
     """ In cases where there another part of binary merge is removed,
     and a stub edge is left dangling,
     there is an option to remove the unnecessary merge -- it is the
     triggering host.
     :return: None
     """
     ctrl.release_editor_focus()
     node = self.get_host()
     if not node:
         return
     ctrl.remove_from_selection(node)
     ctrl.free_drawing.delete_unnecessary_merger(node)
Пример #19
0
 def method(self):
     """ In cases where there another part of binary merge is removed,
     and a stub edge is left dangling,
     there is an option to remove the unnecessary merge -- it is the
     triggering host.
     :return: None
     """
     ctrl.release_editor_focus()
     node = self.get_host()
     if not node:
         return
     ctrl.remove_from_selection(node)
     ctrl.free_drawing.delete_unnecessary_merger(node)
     ctrl.forest.forest_edited()
Пример #20
0
    def update_label_shape(self):
        shape = ctrl.settings.get('label_shape')
        ctrl.release_editor_focus()
        for node in self.nodes.values():
            if node.node_type == g.CONSTITUENT_NODE:
                node.label_object.label_shape = shape
                node.label_object.update_label()

        parents = []
        for node in self.nodes.values():
            node.update_relations(parents)
        for parent in parents:
            parent.gather_children()
        self.prepare_width_map()
Пример #21
0
    def set_quick_editing(self, value):
        """  Toggle quick editing on and off for this label. Quick editing is toggled on when
        the label is clicked or navigated into with the keyboard. The label and its editor takes
        focus and many things behave differently while editing, so please keep make sure that
        quick editing is switched off properly, using this method.
        :param value:
        :return:
        """
        if value:
            if self._quick_editing:
                return
            self._quick_editing = True
            self._host.update_label_visibility()
            if ctrl.text_editor_focus:
                ctrl.release_editor_focus()
            ctrl.text_editor_focus = self
            self.editable_part.setTextInteractionFlags(QtCore.Qt.TextEditorInteraction)
            self.prepareGeometryChange()
            if self.is_card():
                self.editable_doc.setTextWidth(self.card_size[0])
            else:
                self.editable_doc.setTextWidth(-1)
            self.edited_field, self.editable_html = self._host.compose_html_for_editing()
            self.editable_html = self.editable_html.replace('\n', '<br/>')
            self.setCursor(QtGui.QCursor(QtCore.Qt.IBeamCursor))

            ctrl.ui.add_quick_edit_buttons_for(self._host, self.editable_doc)
            self.editable_part.setHtml(self.editable_html)
            self.editable_doc.cursorPositionChanged.connect(self.cursor_position_changed)

            self.resize_label()
            self.editable_part.setAcceptDrops(True)
            ctrl.graph_view.setFocus()
            self.editable_part.setFocus()
            self._fresh_focus = True

        elif self._quick_editing:
            if self.editable_doc.isModified():
                self.parse_document_to_field()
                self.editable_doc.setModified(False)
            ctrl.text_editor_focus = None
            self._quick_editing = False
            ctrl.ui.remove_quick_edit_buttons()
            self._host.update_label()
            self.editable_part.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
            self.editable_part.setAcceptDrops(False)
            self.editable_part.setTextInteractionFlags(QtCore.Qt.NoTextInteraction)
            self.editable_part.clearFocus()
            self._fresh_focus = False
Пример #22
0
 def update_label_shape(self):
     shape = ctrl.settings.get('label_shape')
     ctrl.release_editor_focus()
     for node in self.nodes.values():
         if node.node_type == g.CONSTITUENT_NODE:
             node.label_object.label_shape = shape
             node.update_label()
         if node.is_triangle_host():
             ctrl.free_drawing.add_or_update_triangle_for(node)
     parents = []
     for node in self.nodes.values():
         node.update_relations(parents)
     for parent in parents:
         parent.gather_children()
     self.prepare_width_map()
Пример #23
0
 def method(self, node_uid):
     """ In cases where there another part of binary merge is removed,
     and a stub edge is left dangling, there is an option to remove the unnecessary
     merge -- this is the triggering host.
     :param node_uid: int or string, node's unique identifier
     :return: None
     """
     ctrl.release_editor_focus()
     node = ctrl.forest.nodes[node_uid]
     children = node.get_children(similar=True)
     if len(children) != 1:
         log.warn('Trying to remove an intermediate monobranch node, but node "%s" '
                  'is not such node.' % node)
     ctrl.remove_from_selection(node)
     ctrl.drawing.delete_unnecessary_merger(node)
     ctrl.forest.forest_edited()
Пример #24
0
 def method(self):
     """ """
     ctrl.release_editor_focus()
     node = self.get_host()
     ctrl.free_drawing.merge_to_top(node.get_top_node(), node, merge_to_left=True)
Пример #25
0
 def method(self):
     """ """
     ctrl.release_editor_focus()
     node = self.get_host()
     ctrl.free_drawing.add_sibling_for_constituentnode(node, add_left=False)
Пример #26
0
 def method(self):
     """ """
     ctrl.release_editor_focus()
     node = self.get_host()
     ctrl.free_drawing.unary_add_child_for_constituentnode(node, add_left=True)
Пример #27
0
 def method(self):
     """ """
     ctrl.release_editor_focus()
     top = self.get_host()
     new_node = ctrl.free_drawing.create_node(relative=top)
     ctrl.free_drawing.merge_to_top(top, new_node, merge_to_left=False, pos=new_node.current_position)
Пример #28
0
 def method(self):
     """ """
     ctrl.release_editor_focus()
     node = self.get_host()
     ctrl.free_drawing.add_sibling_for_constituentnode(node, add_left=True)
     ctrl.forest.forest_edited()