示例#1
0
def test_key_events(editor):
    zoom = editor.zoom_level
    QTest.keyPress(editor, '+', QtCore.Qt.ControlModifier)
    assert editor.zoom_level > zoom
    QTest.keyPress(editor, '0', QtCore.Qt.ControlModifier)
    assert editor.zoom_level == zoom == 0
    QTest.keyPress(editor, '-', QtCore.Qt.ControlModifier)
    assert editor.zoom_level < zoom
    if os.environ['QT_API'].lower() == 'pyqt5':
        editor.wheelEvent(
            QtGui.QWheelEvent(QtCore.QPoint(10, 10),
                              editor.mapToGlobal(QtCore.QPoint(10, 10)),
                              QtCore.QPoint(0, 1), QtCore.QPoint(0, 1), 1,
                              QtCore.Qt.Vertical, QtCore.Qt.MidButton,
                              QtCore.Qt.ControlModifier))
    else:
        editor.wheelEvent(
            QtGui.QWheelEvent(QtCore.QPoint(10, 10), 1, QtCore.Qt.MidButton,
                              QtCore.Qt.ControlModifier))
    if os.environ['QT_API'].lower() == 'pyqt5':
        editor.wheelEvent(
            QtGui.QWheelEvent(QtCore.QPoint(10, 10),
                              editor.mapToGlobal(QtCore.QPoint(10, 10)),
                              QtCore.QPoint(0, -1), QtCore.QPoint(0, -1), -1,
                              QtCore.Qt.Vertical, QtCore.Qt.MidButton,
                              QtCore.Qt.ControlModifier))
    else:
        editor.wheelEvent(
            QtGui.QWheelEvent(QtCore.QPoint(10, 10), -1, QtCore.Qt.MidButton,
                              QtCore.Qt.ControlModifier))
示例#2
0
def toggle_fold_trigger(editor, line, panel):
    y_pos = TextHelper(editor).line_pos_from_number(line) + 5
    QTest.mouseMove(panel, QtCore.QPoint(3, y_pos))
    QTest.qWait(1000)
    QTest.mousePress(panel, QtCore.Qt.RightButton, QtCore.Qt.NoModifier,
                     QtCore.QPoint(3, y_pos))
    QTest.qWait(1000)
示例#3
0
 def cursorRect(self):
     r = self.textRect(' ')
     r.moveTopLeft(
         QtCore.QPoint(0, 0) +
         QtCore.QPoint(self._vt.cursor.x *
                       r.width(), self._vt.cursor.y * r.height()))
     return r
示例#4
0
def test_mouse_events(editor):
    editor.mousePressEvent(
        QtGui.QMouseEvent(QtCore.QEvent.MouseButtonPress,
                          QtCore.QPoint(10, 10), QtCore.Qt.RightButton,
                          QtCore.Qt.RightButton, QtCore.Qt.NoModifier))
    editor.mouseReleaseEvent(
        QtGui.QMouseEvent(QtCore.QEvent.MouseButtonRelease,
                          QtCore.QPoint(10, 10), QtCore.Qt.RightButton,
                          QtCore.Qt.RightButton, QtCore.Qt.NoModifier))
    if os.environ['QT_API'].lower() == 'pyqt5':
        editor.wheelEvent(
            QtGui.QWheelEvent(QtCore.QPoint(10, 10),
                              editor.mapToGlobal(QtCore.QPoint(10, 10)),
                              QtCore.QPoint(0, 1), QtCore.QPoint(0, 1), 1,
                              QtCore.Qt.Vertical, QtCore.Qt.MidButton,
                              QtCore.Qt.NoModifier))
    else:
        editor.wheelEvent(
            QtGui.QWheelEvent(QtCore.QPoint(10, 10), 1, QtCore.Qt.MidButton,
                              QtCore.Qt.NoModifier))
    editor.mouseMoveEvent(
        QtGui.QMouseEvent(QtCore.QEvent.MouseMove, QtCore.QPoint(10, 10),
                          QtCore.Qt.RightButton, QtCore.Qt.RightButton,
                          QtCore.Qt.NoModifier))
    editor.verticalScrollBar().setValue(editor.verticalScrollBar().maximum() /
                                        2.0)
示例#5
0
def test_mouse_move(editor):
    panel = get_panel(editor)
    panel.highlight_caret_scope = False
    nb_decos = len(editor.decorations)
    y_pos = TextHelper(editor).line_pos_from_number(8)
    QTest.mouseMove(panel, QtCore.QPoint(3, y_pos + 5))
    QTest.qWait(1000)
    assert len(editor.decorations) >= 2
    y_pos = TextHelper(editor).line_pos_from_number(14)
    QTest.mouseMove(panel, QtCore.QPoint(3, y_pos + 5))
    QTest.qWait(1000)
    assert len(editor.decorations) >= 4
    QTest.mouseMove(panel, QtCore.QPoint(0, 0))
    panel.leaveEvent(None)
    editor.setFocus()
    panel.highlight_caret_scope = True
示例#6
0
 def _display_tooltip(self, tooltip, top):
     """
     Display tooltip at the specified top position.
     """
     QtWidgets.QToolTip.showText(
         self.mapToGlobal(QtCore.QPoint(self.sizeHint().width(), top)),
         tooltip, self)
 def _display_tooltip(self, call, col):
     if not call or self._is_last_chard_end_of_word():
         return
     # create a formatted calltip (current index appear in bold)
     calltip = "<p style='white-space:pre'>{0}.{1}(".format(
         call['call.module.name'], call['call.call_name'])
     for i, param in enumerate(call['call.params']):
         if i < len(call['call.params']) - 1 and not param.endswith(','):
             param += ", "
         if param.endswith(','):
             param += ' '  # pep8 calltip
         if i == call['call.index']:
             calltip += "<b>"
         calltip += param
         if i == call['call.index']:
             calltip += "</b>"
     calltip += ')</p>'
     # set tool tip position at the start of the bracket
     char_width = self.editor.fontMetrics().width('A')
     w_offset = (col - call['call.bracket_start'][1]) * char_width
     position = QtCore.QPoint(
         self.editor.cursorRect().x() - w_offset,
         self.editor.cursorRect().y() + char_width +
         self.editor.panels.margin_size(0))
     position = self.editor.mapToGlobal(position)
     # show tooltip
     QtWidgets.QToolTip.showText(position, calltip, self.editor)
示例#8
0
 def paintEvent(self, event):
     p = QtGui.QPainter()
     p.begin(self)
     pal = self.palette()
     p.fillRect(QtCore.QRect(QtCore.QPoint(), self.size()),
                pal.color(pal.Background))
     textSize = self.textRect(' ' * self._vt.columns).size()
     bound = QtCore.QRect(QtCore.QPoint(), textSize)
     flags = QtCore.Qt.AlignLeft | QtCore.Qt.AlignBottom
     for line in self._vt.display:
         p.drawText(bound, flags, line)
         bound.translate(0, bound.height())
     if self.hasFocus():
         p.fillRect(self.cursorRect(), pal.color(pal.Foreground))
     else:
         p.drawRect(self.cursorRect())
     p.end()
示例#9
0
 def _show_popup(self):
     parent_pos = self.main_tab_widget.pos()
     parent_size = self.main_tab_widget.size()
     size = self.popup.size()
     x, y = parent_pos.x(), parent_pos.y()
     pw, ph = parent_size.width(), parent_size.height()
     w = size.width()
     x += pw / 2 - w / 2
     y += ph / 10
     self.popup.move(self.mapToGlobal(QtCore.QPoint(x, y)))
     self.popup.set_filenames(
         [editor.file.path for editor in self.widgets()])
     self.popup.show()
def test_word_selection(editor):
    QTest.qWait(1000)
    mode = get_mode(editor)
    TextHelper(editor).goto_line(8, 29)
    QTest.qWait(1000)
    try:
        event = QtGui.QMouseEvent(QtCore.QEvent.MouseButtonDblClick,
                                  QtCore.QPointF(0, 0), QtCore.Qt.LeftButton,
                                  QtCore.Qt.LeftButton, QtCore.Qt.NoModifier)
    except TypeError:
        event = QtGui.QMouseEvent(QtCore.QEvent.MouseButtonDblClick,
                                  QtCore.QPoint(0, 0), QtCore.Qt.LeftButton,
                                  QtCore.Qt.LeftButton, QtCore.Qt.NoModifier)
    mode._on_double_click(event)
    assert editor.textCursor().selectedText() == 'modes'
    QTest.qWait(1000)
示例#11
0
def test_mouse_press(editor):
    panel = get_panel(editor)
    panel.highlight_caret_scope = False
    # fold child block
    toggle_fold_trigger(editor, 15, panel)
    block = editor.document().findBlockByNumber(14)
    assert TextBlockHelper.is_fold_trigger(block) is True
    assert TextBlockHelper.is_collapsed(block) is True
    block = block.next()
    while block.blockNumber() < 21:
        assert block.isVisible() is False
        block = block.next()
    # fold top level block
    toggle_fold_trigger(editor, 9, panel)
    block = editor.document().findBlockByNumber(8)
    assert TextBlockHelper.is_fold_trigger(block)
    block = block.next()
    while block.blockNumber() < 27:
        if block.blockNumber() == 14:
            assert TextBlockHelper.is_fold_trigger(block) is True
            assert TextBlockHelper.is_collapsed(block) is True
        assert block.isVisible() is False
        block = block.next()
    # unfold it top level block
    toggle_fold_trigger(editor, 9, panel)
    block = editor.document().findBlockByNumber(8)
    assert TextBlockHelper.is_fold_trigger(block)
    block = block.next()
    while block.blockNumber() < 27:
        if 14 < block.blockNumber() < 22:
            assert block.isVisible() is False
        else:
            assert block.isVisible() is True
        block = block.next()

    # cleanup
    QTest.mouseMove(panel, QtCore.QPoint(0, 0))
    panel.leaveEvent(None)
    editor.setFocus()
    panel.highlight_caret_scope = True
示例#12
0
def test_events(editor):
    mode = get_mode(editor)
    mode._add_decoration(editor.textCursor())
    pt = QtCore.QPoint(10, TextHelper(editor).line_pos_from_number(0))
    if os.environ['QT_API'] == 'pyqt5':
        QTest.mouseMove(editor, pt)
        QTest.mousePress(editor, QtCore.Qt.LeftButton,
                         QtCore.Qt.ControlModifier, pt)
        QTest.mouseMove(editor, pt)
    else:
        editor.mouseMoveEvent(
            QtGui.QMouseEvent(QtCore.QEvent.MouseMove, pt,
                              QtCore.Qt.RightButton, QtCore.Qt.RightButton,
                              QtCore.Qt.ControlModifier))
        # here we have a deco, try to click on it.
        editor.mousePressEvent(
            QtGui.QMouseEvent(QtCore.QEvent.MouseButtonPress, pt,
                              QtCore.Qt.LeftButton, QtCore.Qt.RightButton,
                              QtCore.Qt.NoModifier))
        # move window without control -> remove deco
        editor.mouseMoveEvent(
            QtGui.QMouseEvent(QtCore.QEvent.MouseMove, pt,
                              QtCore.Qt.RightButton, QtCore.Qt.RightButton,
                              QtCore.Qt.NoModifier))
示例#13
0
    def __init__(self, parent=None, create_default_actions=True):
        """
        :param parent: Parent widget

        :param create_default_actions: True to create the default context
            menu actions (copy, paste, edit)
        """
        super(CodeEdit, self).__init__(parent)
        self.clones = []
        self._default_font_size = 10
        self._backend = BackendManager(self)
        self._file = FileManager(self)
        self._modes = ModesManager(self)
        self._panels = PanelsManager(self)
        self._decorations = TextDecorationsManager(self)
        self.document().modificationChanged.connect(self._emit_dirty_changed)

        self._word_separators = [
            '~', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '+', '{',
            '}', '|', ':', '"', "'", "<", ">", "?", ",", ".", "/", ";", '[',
            ']', '\\', '\n', '\t', '=', '-', ' '
        ]
        self._save_on_focus_out = False
        self._use_spaces_instead_of_tabs = True
        self._whitespaces_foreground = None
        self._sel_background = None
        self._show_whitespaces = False
        self._foreground = None
        self._sel_foreground = None
        self._tab_length = 4
        self._zoom_level = 0
        self._font_size = 10
        self._background = None
        QtGui.QFontDatabase.addApplicationFont(
            ':/fonts/rc/SourceCodePro-Regular.ttf')
        QtGui.QFontDatabase.addApplicationFont(
            ':/fonts/rc/SourceCodePro-Bold.ttf')
        self._font_family = self._DEFAULT_FONT
        self._mimetypes = []

        # Flags/Working variables
        self._last_mouse_pos = QtCore.QPoint(0, 0)
        self._modified_lines = set()
        self._cleaning = False
        self._visible_blocks = []
        self._tooltips_runner = DelayJobRunner(delay=700)
        self._prev_tooltip_block_nbr = -1
        self._original_text = ""

        self._dirty = False

        # setup context menu
        self._actions = []
        self._menus = []
        if create_default_actions:
            self._init_actions()
        self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.customContextMenuRequested.connect(self._show_context_menu)
        self._mnu = None  # bug with PySide (github #63)

        # init settings and styles from global settings/style modules
        self._init_settings()
        self._init_style()

        # connect slots
        self.textChanged.connect(self._on_text_changed)
        self.blockCountChanged.connect(self.update)
        self.cursorPositionChanged.connect(self.update)
        self.selectionChanged.connect(self.update)

        self.setMouseTracking(True)
        self.setCenterOnScroll(True)
        self.setLineWrapMode(self.NoWrap)
示例#14
0
def test_show_tooltip(editor):
    editor.show_tooltip(QtCore.QPoint(0, 0), 'A tooltip')
示例#15
0
 def textRect(self, text):
     textSize = QtGui.QFontMetrics(self.font()).size(0, text)
     return QtCore.QRect(QtCore.QPoint(), textSize)
示例#16
0
def test_show_context_menu(editor):
    assert isinstance(editor, QtWidgets.QPlainTextEdit)
    editor.customContextMenuRequested.emit(QtCore.QPoint(10, 10))
    editor._mnu.hide()
示例#17
0
 def __init__(self, parent):
     super(DraggableTabBar, self).__init__(parent)
     self._pos = QtCore.QPoint()
     self.setAcceptDrops(True)
     self.setMouseTracking(True)
     self.setElideMode(QtCore.Qt.ElideNone)