Better capture of the tab, return and enter keys in the editor and search function
This commit is contained in:
+38
-11
@@ -641,24 +641,36 @@ class GuiDocEditor(QTextEdit):
|
|||||||
def keyPressEvent(self, keyEvent):
|
def keyPressEvent(self, keyEvent):
|
||||||
"""Intercept key press events.
|
"""Intercept key press events.
|
||||||
We need to intercept a few key sequences:
|
We need to intercept a few key sequences:
|
||||||
* The return key redirects here even if the search box has
|
* The return and enter key redirects here even if the search
|
||||||
focus. Since we need the return key to continue search, we
|
box has focus. Since we need these keys to continue search,
|
||||||
block any further interaction here while it's in focus.
|
we block any further interaction here while it's in focus.
|
||||||
* The undo sequence bypasses the doAction pathway from the
|
* The undo/redo sequences bypasses the doAction pathway from
|
||||||
menu, so we redirect it back from here.
|
the menu, so we redirect them back from here.
|
||||||
* The default redo sequence is Ctrl+Shift+Z, which we don't
|
|
||||||
use, so we block it.
|
|
||||||
"""
|
"""
|
||||||
if self.docSearch.searchBox.hasFocus():
|
isReturn = keyEvent.key() == Qt.Key_Return
|
||||||
|
isReturn |= keyEvent.key() == Qt.Key_Enter
|
||||||
|
if isReturn and self.docSearch.searchBox.hasFocus():
|
||||||
return
|
return
|
||||||
elif keyEvent == QKeySequence.Redo:
|
elif keyEvent == QKeySequence.Redo:
|
||||||
return
|
self.docAction(nwDocAction.REDO)
|
||||||
elif keyEvent == QKeySequence.Undo:
|
elif keyEvent == QKeySequence.Undo:
|
||||||
self.docAction(nwDocAction.UNDO)
|
self.docAction(nwDocAction.UNDO)
|
||||||
else:
|
else:
|
||||||
QTextEdit.keyPressEvent(self, keyEvent)
|
QTextEdit.keyPressEvent(self, keyEvent)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
def focusNextPrevChild(self, toNext):
|
||||||
|
"""Capture the focus request from the tab key on the text
|
||||||
|
editor. If the editor has focus, we do not change focus and
|
||||||
|
allow the editor to insert a tab. If the search bar has focus,
|
||||||
|
we forward the call to the search object.
|
||||||
|
"""
|
||||||
|
if self.hasFocus():
|
||||||
|
return False
|
||||||
|
elif self.docSearch.isVisible():
|
||||||
|
return self.docSearch.cycleFocus(toNext)
|
||||||
|
return True
|
||||||
|
|
||||||
def mouseReleaseEvent(self, mEvent):
|
def mouseReleaseEvent(self, mEvent):
|
||||||
"""If the mouse button is released and the control key is
|
"""If the mouse button is released and the control key is
|
||||||
pressed, check if we're clicking on a tag, and trigger the
|
pressed, check if we're clicking on a tag, and trigger the
|
||||||
@@ -1204,6 +1216,8 @@ class GuiDocEditor(QTextEdit):
|
|||||||
theCursor = self.textCursor()
|
theCursor = self.textCursor()
|
||||||
if theCursor.hasSelection():
|
if theCursor.hasSelection():
|
||||||
self.docSearch.setSearchText(theCursor.selectedText())
|
self.docSearch.setSearchText(theCursor.selectedText())
|
||||||
|
else:
|
||||||
|
self.docSearch.setSearchText(None)
|
||||||
self.docSearch.setReplaceText("")
|
self.docSearch.setReplaceText("")
|
||||||
self.updateDocMargins()
|
self.updateDocMargins()
|
||||||
return
|
return
|
||||||
@@ -1403,12 +1417,12 @@ class GuiDocEditSearch(QFrame):
|
|||||||
|
|
||||||
# Text Boxes
|
# Text Boxes
|
||||||
# ==========
|
# ==========
|
||||||
self.searchBox = QLineEdit()
|
self.searchBox = QLineEdit(self)
|
||||||
self.searchBox.setFont(boxFont)
|
self.searchBox.setFont(boxFont)
|
||||||
self.searchBox.setPlaceholderText("Search")
|
self.searchBox.setPlaceholderText("Search")
|
||||||
self.searchBox.returnPressed.connect(self._doSearch)
|
self.searchBox.returnPressed.connect(self._doSearch)
|
||||||
|
|
||||||
self.replaceBox = QLineEdit()
|
self.replaceBox = QLineEdit(self)
|
||||||
self.replaceBox.setFont(boxFont)
|
self.replaceBox.setFont(boxFont)
|
||||||
self.replaceBox.setPlaceholderText("Replace")
|
self.replaceBox.setPlaceholderText("Replace")
|
||||||
self.replaceBox.returnPressed.connect(self._doSearch)
|
self.replaceBox.returnPressed.connect(self._doSearch)
|
||||||
@@ -1564,6 +1578,19 @@ class GuiDocEditSearch(QFrame):
|
|||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
def cycleFocus(self, toNext):
|
||||||
|
"""The tab key just alternates focus between the two input
|
||||||
|
boxes, if the replace box is visible.
|
||||||
|
"""
|
||||||
|
if self.replaceBox.isVisible():
|
||||||
|
if self.searchBox.hasFocus():
|
||||||
|
self.replaceBox.setFocus(True)
|
||||||
|
return True
|
||||||
|
elif self.replaceBox.hasFocus():
|
||||||
|
self.searchBox.setFocus(True)
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
##
|
##
|
||||||
# Get and Set Functions
|
# Get and Set Functions
|
||||||
##
|
##
|
||||||
|
|||||||
Reference in New Issue
Block a user