Esempio n. 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)
Esempio n. 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()
Esempio n. 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)
Esempio n. 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()
Esempio n. 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()
Esempio n. 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()
Esempio n. 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()
Esempio n. 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()
Esempio n. 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()
Esempio n. 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()
Esempio n. 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()
Esempio n. 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()
Esempio n. 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()
Esempio n. 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()
Esempio n. 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
Esempio n. 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()
Esempio n. 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()
Esempio n. 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)
Esempio n. 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()
Esempio n. 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()
Esempio n. 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
Esempio n. 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()
Esempio n. 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()
Esempio n. 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)
Esempio n. 25
0
 def method(self):
     """ """
     ctrl.release_editor_focus()
     node = self.get_host()
     ctrl.free_drawing.add_sibling_for_constituentnode(node, add_left=False)
Esempio n. 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)
Esempio n. 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)
Esempio n. 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()