예제 #1
0
    def mouseMove(self, event: QKeyEvent):
        if not self.editType:
            return

        begin = self.curMemento.begin
        end = self.curMemento.end

        newPoint: QPoint = event.pos()
        if self.editType == 'BEGIN':
            # Shift pressed
            if event.modifiers() == Qt.ShiftModifier:
                # Parallel to x axis
                if getBiggerDiff(end, newPoint) == 'X':
                    newPoint = QPoint(newPoint.x(), end.y())
                else:
                    # Parallel to Y axis
                    newPoint = QPoint(end.x(), newPoint.y())

            self.selected.setBegin(newPoint)

        elif self.editType == 'END':
            # Shift pressed
            if event.modifiers() == Qt.ShiftModifier:
                # Parallel to x axis
                if getBiggerDiff(begin, newPoint) == 'X':
                    newPoint = QPoint(newPoint.x(), begin.y())
                else:
                    # Parallel to y axis
                    newPoint = QPoint(begin.x(), newPoint.y())

            self.selected.setEnd(newPoint)

        self.app.repaint()
예제 #2
0
 def keyPressEvent(self, event: QKeyEvent):
     super().keyPressEvent(event)
     if self.currentIndex():
         if event.key() == 16777220:
             if self.hasFocus():
                 self.contextMenuShowed.emit()
         elif event.key() == 16777219:
             self.contextMenuDeleted.emit()
예제 #3
0
    def _replace_current_word(self):
        self._current_lang = "ENG" if self._current_lang == "RUS" else "RUS"
        self._current_word = self.switch_charset(self._current_word,
                                                 self._current_lang)

        backspace = QKeyEvent(QEvent.KeyPress, Qt.Key_Backspace, Qt.NoModifier)
        events = [backspace for _ in range(len(self._current_word))]

        for c in self._current_word:
            key_event = QKeyEvent(QEvent.KeyPress, 0, Qt.NoModifier, c)
            events.append(key_event)

        return events
예제 #4
0
def key_press_release(widget, key, modifier=Qt.NoModifier):
    """
    Функция для отправления события нажатия кнопки.
    # Имитация нажатия на пробел:
    key_press_release(widget, Qt.Key_Space)
    """

    key_press = QKeyEvent(QKeyEvent.KeyPress, key, modifier, None, False, 0)
    QApplication.sendEvent(widget, key_press)

    key_release = QKeyEvent(QKeyEvent.KeyRelease, key, modifier, None, False,
                            0)
    QApplication.sendEvent(widget, key_release)
예제 #5
0
    def mouseMove(self, event: QKeyEvent):
        if not self.begin or not self.isDrawing:
            return

        if event.modifiers() == Qt.ShiftModifier:

            if getBiggerDiff(event.pos(), self.begin) == 'X':
                self.end = QPoint(event.pos().x(), self.begin.y())
            else:
                self.end = QPoint(self.begin.x(), event.pos().y())

        else:
            self.end = event.pos()

        self.app.repaint()
예제 #6
0
def scroll_line(key, window, focus_widget, key_filter, *args, **kwargs):
    if focus_widget is not None:
        with key_filter.disable_filtering:
            QApplication.sendEvent(
                focus_widget,
                QKeyEvent(QEvent.KeyPress, key, Qt.KeyboardModifiers(0)))
    return True
예제 #7
0
    def key_click(self,
                  widget: QWidget,
                  key: int = 0,
                  txt: str = "",
                  modifier: int = Qt.NoModifier,
                  delay: float = 0) -> None:
        """Send press key event to widget"""
        widget.setFocus()

        key_press = QKeyEvent(QEvent.KeyPress, key, modifier, txt, False)
        key_release = QKeyEvent(QEvent.KeyRelease, key, modifier, txt, False)

        QCoreApplication.postEvent(widget, key_press)
        QCoreApplication.postEvent(widget, key_release)

        self.sleep(delay)
예제 #8
0
def scroll_to_boundary(top, window, focus_widget, key_filter, *args, **kwargs):
    if focus_widget is not None:
        with key_filter.disable_filtering:
            key = Qt.Key_Home if top else Qt.Key_End
            QApplication.sendEvent(
                focus_widget,
                QKeyEvent(QEvent.KeyPress, key, Qt.KeyboardModifiers(0)))
    return True
예제 #9
0
def scroll_page(up, window, focus_widget, key_filter, *args, **kwargs):
    if focus_widget is not None:
        with key_filter.disable_filtering:
            key = Qt.Key_PageUp if up else Qt.Key_PageDown
            QApplication.sendEvent(
                focus_widget,
                QKeyEvent(QEvent.KeyPress, key, Qt.KeyboardModifiers(0)))
    return True
예제 #10
0
 def keyPressEvent(self, event: QKeyEvent):
     if event.key() == Qt.Key_Delete:
         item = self.currentItem()
         row_idx = item.row()
         if row_idx < self.rowCount() - 1:
             self.takeItem(row_idx, 0)
             self.takeItem(row_idx, 1)
             self.removeRow(row_idx)
     else:
         super(QTableWidgetMaterial, self).keyPressEvent(event)
예제 #11
0
 def checkKey(self, ev: Qt.QKeyEvent):
     if ev.key() == QtCore.Qt.Key_Backspace:
         if self.activePoints[0] and self.activePoints[1]:
             self.activePoints[1] = False
             self.grphEnd.scene().removeItem(self.ellipsi[1])
             self.grphEnd.show()
         elif self.activePoints[0] and self.activePoints[1] is False:
             self.activePoints[0] = False
             self.grphStart.scene().removeItem(self.ellipsi[0])
             self.grphStart.show()
예제 #12
0
 def keyReleaseEvent(self, _event: QKeyEvent):
     key = _event.key()
     if key == QtCore.Qt.Key_Up:
         self.wizard.zoomIn()
     elif key == QtCore.Qt.Key_Down:
         self.wizard.zoomOut()
     elif key == QtCore.Qt.Key_Left:
         self.wizard.scrollLeft()
     elif key == QtCore.Qt.Key_Right:
         self.wizard.scrollRight()
     else:
         pass
예제 #13
0
    def keyPressEvent(self, evt: QKeyEvent):
        """
        Ignore escape key event, because it would close startup window.
        Any other key will be passed to the super class key event handler for further
        processing.

        :param evt: key event
        :return:
        """
        if evt.key() == QtCore.Qt.Key_Escape:
            self.request_close_dialog()
        else:
            super().keyPressEvent(evt)
예제 #14
0
    def keyPressEvent(self, evt: QKeyEvent):
        """
        Ignore escape key event, because it would close startup window.
        Any other key will be passed to the super class key event handler for further
        processing.

        :param evt: key event
        :return:
        """
        if evt.key() == QtCore.Qt.Key_Escape:
            pass
        else:
            super().keyPressEvent(evt)
예제 #15
0
 def send_text_using_keys(self, text):
     if self.host_widget is not None and not sip.isdeleted(
             self.host_widget):
         self.host_widget.setFocus(Qt.OtherFocusReason)
         with QApplication.instance().key_filter.disable_filtering:
             for ch in text:
                 key = getattr(Qt, f'Key_{ch.upper()}', Qt.Key_A)
                 QApplication.sendEvent(
                     self.host_widget,
                     QKeyEvent(QKeyEvent.KeyPress, key,
                               Qt.KeyboardModifiers(0), ch))
             # Ensure key events are delivered before any other processing
             while QApplication.instance().processEvents():
                 pass
예제 #16
0
 def keyReleaseEvent(self, _event: QKeyEvent):
     """
     implement the key interaction
     """
     key = _event.key()
     if key == QtCore.Qt.Key_Up:
         self.wizard.zoomIn()
     elif key == QtCore.Qt.Key_Down:
         self.wizard.zoomOut()
     elif key == QtCore.Qt.Key_Left:
         self.wizard.scrollLeft()
     elif key == QtCore.Qt.Key_Right:
         self.wizard.scrollRight()
     else:
         pass
예제 #17
0
    def mouseMove(self, event: QKeyEvent):
        if not self.begin or not self.isDrawing:
            return

        end = event.pos()

        if event.modifiers() & Qt.ShiftModifier:
            # if shift then draw square with bigger size
            if getBiggerDiff(event.pos(), self.begin) == 'X':
                end = QPoint(end.x(),
                             end.x() - self.begin.x() + self.begin.y())
            else:
                end = QPoint(end.y() - self.begin.y() + self.begin.x(),
                             end.y())

        if event.modifiers() & Qt.AltModifier:
            # calculate new end point
            newEndX = end.x() + (end.x() - self.begin.x())
            newEndY = end.y() + (end.y() - self.begin.y())

            end = QPoint(newEndX, newEndY)

        self.end = end
        self.app.repaint()
예제 #18
0
    def key_clicks(self,
                   widget: QWidget,
                   txt: str = "",
                   modifier: int = Qt.NoModifier,
                   delay: float = 0) -> None:
        """Send string to widget"""
        timeout: float = self._tests_delay_key if delay else 0
        if not self.is_interactive():
            timeout = 0

        for char in txt:
            key = QKeyEvent(QEvent.KeyPress, 0, modifier, char, False)
            QCoreApplication.postEvent(widget, key)
            if timeout:
                self.sleep(timeout)

        self.sleep(delay)
예제 #19
0
 def keyPressEvent(self, keyPressed: QKeyEvent, *args, **kwargs):
     key = keyPressed.key()
     if key == Qt.Key_Escape:
         self.searchEdit.clearFocus()
         return False
     elif key == Qt.Key_Up:
         self.map.move_on_map(CONST.MOVE_UP)
     elif key == Qt.Key_Down:
         self.map.move_on_map(CONST.MOVE_DOWN)
     elif key == Qt.Key_Left:
         self.map.move_on_map(CONST.MOVE_LEFT)
     elif key == Qt.Key_Right:
         self.map.move_on_map(CONST.MOVE_RIGHT)
     elif key == Qt.Key_PageUp:
         self.map.setScale(CONST.UP_SCALE)
     elif key == Qt.Key_PageDown:
         self.map.setScale(CONST.DOWN_SCALE)
     else:
         return False
예제 #20
0
 def keyPressEvent(self, e: Qt.QKeyEvent):
     if e.key() == Qt.Qt.Key_Escape:
         self.close()
예제 #21
0
파일: search_box.py 프로젝트: rakyi/calibre
 def paste_and_search(self):
     self.paste()
     ev = QKeyEvent(QKeyEvent.KeyPress, Qt.Key_Enter, Qt.NoModifier)
     self.keyPressEvent(ev)
예제 #22
0
 def keyReleaseEvent(self, event: QKeyEvent):
     if event.key() == Qt.Key_Q:
         self.close()
예제 #23
0
    def test_key_press(self):
        self.text = self.editor._view.text
        self.test.sleep()

        # ---------------------------------------------------------------------
        # Qt.Key_L
        key_event = QKeyEvent(QEvent.KeyPress, Qt.Key_L, Qt.ControlModifier,
                              "", False)
        self.spell._enabled_all = False
        result = self.keyswitcher.key_press(key_event)
        self.assertEqual(result, [])
        self.spell._enabled_all = True

        # ---------------------------------------------------------------------
        def key_switcher_params(widget):
            test = QTestHelper()
            test.sleep()
            test.mouse_click(widget.controls[-1], QPoint(1, 1))

        self.test.handle_modal_widget(key_switcher_params)
        result = self.keyswitcher.key_press(key_event)
        self.assertEqual(result, [])
        self.test.sleep(1)

        # ---------------------------------------------------------------------
        # Qt.Key_F12
        self.test.wrd_d_click(self.editor._view.text, "hello1")
        self.test.sleep(1)
        key_event = QKeyEvent(QEvent.KeyPress, Qt.Key_F12, Qt.NoModifier, "",
                              False)
        point = self.test.get_xy_for_word(self.editor._view.text, "hello1")
        x = point.x()
        self.assertTrue(x)
        result = self.keyswitcher.key_press(key_event)
        self.assertEqual(result, [])

        point = self.test.get_xy_for_word(self.editor._view.text, "hello1")
        self.assertFalse(point.x())
        point = self.test.get_xy_for_word(self.editor._view.text,
                                          "руддщ1")  # i18n
        self.assertEqual(point.x(), x)

        # no selection -> no change
        cursor = self.text.textCursor()
        cursor.clearSelection()
        self.text.setTextCursor(cursor)
        self.keyswitcher._replace_selection()
        self.assertEqual(point.x(), x)
        self.test.sleep(1)

        # ---------------------------------------------------------------------
        # not enabled keyswitcher
        key_event = QKeyEvent(QEvent.KeyPress, Qt.Key_Backspace, Qt.NoModifier,
                              "", False)
        self.keyswitcher._enabled = False
        result = self.keyswitcher.key_press(key_event)
        self.assertEqual(result[0], key_event)

        # ---------------------------------------------------------------------
        # Qt.Key_Backspace
        self.keyswitcher._enabled = True
        self.test.wrd_d_click(self.editor._view.text, "2")
        self.test.sleep()
        self.editor._view.text.setFocus()
        self.editor._view.text.setFocus()
        with patch.object(self.text, 'hasFocus', return_value=True):
            self.test.key_clicks(self.text, " wo")
        self.test.sleep()
        self.assertEqual(self.keyswitcher._current_word, "wo")
        self.test.sleep()
        with patch.object(self.text, 'hasFocus', return_value=True):
            self.test.key_click(self.text, Qt.Key_Backspace)
        self.assertEqual(result[0], key_event)
        self.assertEqual(self.keyswitcher._current_word, "w")
        self.test.sleep()

        # ---------------------------------------------------------------------
        # not char
        key_event = QKeyEvent(QEvent.KeyPress, Qt.Key_Up, Qt.NoModifier, "",
                              False)
        result = self.keyswitcher.key_press(key_event)
        self.assertEqual(result[0], key_event)
        self.assertEqual(self.keyswitcher._current_word, "")
        self.test.sleep()

        # ---------------------------------------------------------------------
        # char and there was mouse movement
        with patch.object(self.text, 'hasFocus', return_value=True):
            self.test.key_clicks(self.text, " wo")
        self.assertEqual(self.keyswitcher._current_word, "wo")
        self.test.wrd_click(self.editor._view.text, "")
        self.test.key_click(self.editor._view.text, Qt.Key_A, "A")
        self.assertEqual(self.keyswitcher._current_word, "")
        self.test.sleep()

        # ---------------------------------------------------------------------
        # add char to current word
        self.assertEqual(self.keyswitcher._current_lang, "ENG")
        self.test.wrd_d_click(self.editor._view.text, "wo")
        with patch.object(self.text, 'hasFocus', return_value=True):
            self.test.key_clicks(self.text, " a")
            self.test.key_clicks(self.text, "ф")  # i18n
        self.assertEqual(self.keyswitcher._current_word, "aa")
        self.test.sleep()

        # ---------------------------------------------------------------------
        # check switch lang
        self.test.wrd_d_click(self.editor._view.text, "aa")
        with patch.object(self.text, 'hasFocus', return_value=True):
            self.test.key_clicks(self.text, " 123")  # no switch
        self.test.sleep()

        self.test.wrd_d_click(self.editor._view.text, "123")
        with patch.object(self.text, 'hasFocus', return_value=True):
            self.test.key_clicks(self.text, " rybu")
        self.test.sleep()
        self.assertEqual(self.keyswitcher._current_word, "книг")  # i18n

        self.test.wrd_d_click(self.editor._view.text, "книг")  # i18n
        self.test.sleep()
        with patch.object(self.text, 'hasFocus', return_value=True):
            self.test.key_clicks(self.text, " рудд")  # i18n
        self.test.sleep()
        self.assertEqual(self.keyswitcher._current_word, "hell")

        # ---------------------------------------------------------------------
        self.keyswitcher.set_enabled(False)
        with patch.object(self.text, 'hasFocus', return_value=True):
            self.test.key_clicks(self.text, " фFфF")  # i18n
        self.keyswitcher.set_enabled(True)
        self.keyswitcher._current_word = "фFфF"  # i18n
        with patch.object(self.text, 'hasFocus', return_value=True):
            self.test.key_clicks(self.text, "1")
        self.assertEqual(self.keyswitcher._current_word, "фFфF1")  # i18n
        self.test.sleep()
예제 #24
0
 def keyPressEvent(self, event: QKeyEvent):
     super().keyPressEvent(event)
     if self.currentIndex():
         if event.key() == 16777219:
             self.model().removeRow(int(self.currentIndex().row()))
예제 #25
0
    def key_press(self, event: QKeyEvent):

        if event.key() == Qt.Key_L and event.modifiers() & Qt.ControlModifier:
            if not self._spell.enabled():
                return []
            f_param = KeySwitcherParams(self._textedit, self._current_lang,
                                        self._enabled)
            if f_param.exec_():
                self._enabled = f_param.params["enabled"]
                self._current_lang = "ENG" if f_param.params["eng"] else "RUS"
            return []

        if event.key() == Qt.Key_F12:
            self._replace_selection()
            return []

        if not self._enabled:
            return [event]

        if event.key() == Qt.Key_Backspace:
            if self._current_word.strip():
                self._current_word = self._current_word.strip()[:-1]
            return [event]

        char = event.text().strip()

        if not char:
            shift = event.modifiers() & Qt.ShiftModifier
            ctrl = event.modifiers() & Qt.ControlModifier
            if not (shift or ctrl):
                self._current_word = ""
            return [event]

        # ---------------------------------------------------------------------
        # check the current word, if there was any movement, e.g. mouse
        old_cur = self._textedit.textCursor()
        cursor = self._textedit.textCursor()
        cursor.select(QTextCursor.WordUnderCursor)
        word = cursor.selectedText()
        self._textedit.setTextCursor(old_cur)
        if self._current_word.strip() != word.strip():
            self._current_word = ""
            return [event]
        # ---------------------------------------------------------------------

        # detect char language
        char_lang = "UNKNOWN"
        if char.lower() in KeySwitcher.RUSSIAN:
            char_lang = "RUS"
        if char.lower() in KeySwitcher.ENGLISH:
            char_lang = "ENG"

        # add char to current word
        if self._current_lang != char_lang:  # and char_lang != "UNKNOWN":
            char = KeySwitcher.switch_charset(char, self._current_lang)
            event = QKeyEvent(QEvent.KeyPress, event.key(), event.modifiers(),
                              char)
        self._current_word += char

        # early to check language
        if len(self._current_word) < 2:
            return [event]

        # detect language
        rus_chars = 0
        eng_chars = 0
        for char in set(self._current_word.lower()):
            if char in KeySwitcher.RUSSIAN:
                rus_chars += 1
            if char in KeySwitcher.ENGLISH:
                eng_chars += 1
        if rus_chars and eng_chars:
            return [event]

        if not self._ok_locale(
                self._current_word,
                KeySwitcher.switch_charset(self._current_word,
                                           "ENG" if rus_chars else "RUS")):
            return [event] + self._replace_current_word()

        return [event]
예제 #26
0
 def editDelete(self):
     ev = QKeyEvent(QEvent.KeyPress, Qt.Key_Delete, Qt.NoModifier)
     QApplication.sendEvent(self, ev)
예제 #27
0
    def eventFilter(self, obj, event):  # noqa C901
        '''
        @param obj QObject
        @param event QEvent
        @return: bool
        '''
        # Event filter based on QCompleter::eventFilter from qcompleter.cpp
        if obj == self or obj == self._view or not self.isVisible():
            return False

        evtType = event.type()
        if obj == self._view.viewport():
            if evtType == QEvent.MouseButtonRelease:
                # QMouseEvent
                e = event
                index = self._view.indexAt(e.pos())
                if not index.isValid():
                    return False

                # Qt::MouseButton
                button = e.button()
                # Qt::KeyboardModifiers
                modifiers = e.modifiers()

                if button == Qt.LeftButton and modifiers == Qt.NoModifier:
                    self.indexActivated.emit(index)
                    return True

                if button == Qt.MiddleButton or (button == Qt.LeftButton
                                                 and modifiers
                                                 == Qt.ControlModifier):
                    self.indexCtrlActivated.emit(index)
                    return True

                if button == Qt.LeftButton and modifiers == Qt.ShiftModifier:
                    self.indexShiftActivated.emit(index)
                    return True

            return False

        if evtType == QEvent.KeyPress:
            # QKeyEvent
            keyEvent = event
            evtKey = keyEvent.key()
            modifiers = keyEvent.modifiers()
            index = self._view.currentIndex()
            item = self.model().index(0, 0)
            if item.data(LocationCompleterModel.VisitSearchItemRole):
                visitSearchIndex = item
            else:
                visitSearchIndex = QModelIndex()

            if (evtKey == Qt.Key_Up or evtKey == Qt.Key_Down) and \
                    self._view.currentIndex() != index:
                self._view.setCurrentIndex(index)  # TODO: ?

            if evtKey in (Qt.Key_Return, Qt.Key_Enter):
                if index.isValid():
                    if modifiers == Qt.NoModifier or modifiers == Qt.KeypadModifier:
                        self.indexActivated.emit(index)
                        return True

                    if modifiers == Qt.ControlModifier:
                        self.indexCtrlActivated.emit(index)
                        return True

                    if modifiers == Qt.ShiftModifier:
                        self.indexShiftActivated.emit(index)
                        return True

            elif evtKey == Qt.Key_End:
                if modifiers & Qt.ControlModifier:
                    self._view.setCurrentIndex(self.model().index(
                        self.model().rowCount() - 1, 0))
                    return True
                else:
                    self.close()

            elif evtKey == Qt.Key_Home:
                if modifiers & Qt.ControlModifier:
                    self._view.setCurrentIndex(self.model().index(0, 0))
                    self._view.scrollToTop()
                    return True
                else:
                    self.close()

            elif evtKey == Qt.Key_Escape:
                self.close()
                return True

            elif evtKey == Qt.Key_F4:
                if modifiers == Qt.AltModifier:
                    self.close()
                    return False

            elif evtKey in (Qt.Key_Tab, Qt.Key_Backtab):
                if modifiers != Qt.NoModifier and modifiers != Qt.ShiftModifier:
                    return False
                isBack = evtKey == Qt.Key_Backtab
                if evtKey == Qt.Key_Tab and modifiers == Qt.ShiftModifier:
                    isBack = True
                ev = QKeyEvent(QKeyEvent.KeyPress, isBack and Qt.Key_Up
                               or Qt.Key_Down, Qt.NoModifier)
                QApplication.sendEvent(self.focusProxy(), ev)
                return True

            elif evtKey in (Qt.Key_Up, Qt.Key_PageUp):
                if modifiers != Qt.NoModifier:
                    return False
                step = evtKey == Qt.Key_PageUp and 5 or 1
                if not index.isValid() or index == visitSearchIndex:
                    rowCount = self.model().rowCount()
                    lastIndex = self.model().index(rowCount - 1, 0)
                    self._view.setCurrentIndex(lastIndex)
                elif index.row() == 0:
                    self._view.setCurrentIndex(QModelIndex())
                else:
                    row = max(0, index.row() - step)
                    self._view.setCurrentIndex(self.model().index(row, 0))
                return True

            elif evtKey in (Qt.Key_Down, Qt.Key_PageDown):
                if modifiers != Qt.NoModifier:
                    return False
                step = evtKey == Qt.Key_PageDown and 5 or 1
                if not index.isValid():
                    firstIndex = self.model().index(0, 0)
                    self._view.setCurrentIndex(firstIndex)
                elif index != visitSearchIndex and index.row(
                ) == self.model().rowCount() - 1:
                    self._view.setCurrentIndex(visitSearchIndex)
                    self._view.scrollToTop()
                else:
                    row = min(self.model().rowCount() - 1, index.row() + step)
                    self._view.setCurrentIndex(self.model().index(row, 0))
                return True

            elif evtKey == Qt.Key_Delete:
                if index != visitSearchIndex and self._view.viewport().rect(
                ).contains(self._view.visualRect(index)):
                    self.indexDeleteRequested.emit(index)
                    return True

            elif evtKey == Qt.Key_Shift:
                self._delegate.setForceVisitItem(True)
                self._view.viewport().update()

            # end of switch evtKey

            if self.focusProxy():
                self.focusProxy().event(keyEvent)

            return True

        elif evtType == QEvent.KeyRelease:
            if event.key() == Qt.Key_Shift:
                self._delegate.setForceVisitItem(False)
                self._view.viewport().update()
                return True

        elif evtType in (QEvent.Wheel, QEvent.MouseButtonPress):
            if not self.underMouse():
                self.close()
                return False

        elif evtType == QEvent.FocusOut:
            # QFocusEvent
            focusEvent = event
            reason = focusEvent.reason()
            if reason != Qt.PopupFocusReason and reason != Qt.MouseFocusReason:
                self.close()

        elif evtType in (QEvent.Move, QEvent.Resize):
            w = obj
            if isinstance(w, QWidget) and w.isWindow() and self.focusProxy(
            ) and w == self.focusProxy().window():
                self.close()

        # end of switch evtType
        return False