Merge pull request #412 from vkbo/editor_focus
Editor Focus and Enter Key Behaviour
This commit is contained in:
@@ -350,6 +350,7 @@ Most features are available as keyboard shortcuts. These are as follows:
|
|||||||
":kbd:`Ctrl`:kbd:`Shift`:kbd:`R`", "Close the document viewer."
|
":kbd:`Ctrl`:kbd:`Shift`:kbd:`R`", "Close the document viewer."
|
||||||
":kbd:`Ctrl`:kbd:`Shift`:kbd:`S`", "Save the current project."
|
":kbd:`Ctrl`:kbd:`Shift`:kbd:`S`", "Save the current project."
|
||||||
":kbd:`Ctrl`:kbd:`Shift`:kbd:`W`", "Close the current project."
|
":kbd:`Ctrl`:kbd:`Shift`:kbd:`W`", "Close the current project."
|
||||||
|
":kbd:`Ctrl`:kbd:`Shift`:kbd:`Z`", "Alternative sequence for redo last undo."
|
||||||
":kbd:`Ctrl`:kbd:`Shift`:kbd:`Up`", "Move item one step up in the project tree."
|
":kbd:`Ctrl`:kbd:`Shift`:kbd:`Up`", "Move item one step up in the project tree."
|
||||||
":kbd:`Ctrl`:kbd:`Shift`:kbd:`Down`", "Move item one step down in the project tree."
|
":kbd:`Ctrl`:kbd:`Shift`:kbd:`Down`", "Move item one step down in the project tree."
|
||||||
":kbd:`F1`", "Open the documentation. This will either open the Qt Assistant, if available, or send you to the documentation website."
|
":kbd:`F1`", "Open the documentation. This will either open the Qt Assistant, if available, or send you to the documentation website."
|
||||||
|
|||||||
+42
-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
|
||||||
@@ -891,6 +903,10 @@ class GuiDocEditor(QTextEdit):
|
|||||||
else:
|
else:
|
||||||
theCursor.insertText(self.typSQClose)
|
theCursor.insertText(self.typSQClose)
|
||||||
|
|
||||||
|
elif self.mainConf.doReplaceDash and theThree == "---":
|
||||||
|
theCursor.movePosition(QTextCursor.Left, QTextCursor.KeepAnchor, 3)
|
||||||
|
theCursor.insertText(nwUnicode.U_EMDASH)
|
||||||
|
|
||||||
elif self.mainConf.doReplaceDash and theTwo == "--":
|
elif self.mainConf.doReplaceDash and theTwo == "--":
|
||||||
theCursor.movePosition(QTextCursor.Left, QTextCursor.KeepAnchor, 2)
|
theCursor.movePosition(QTextCursor.Left, QTextCursor.KeepAnchor, 2)
|
||||||
theCursor.insertText(nwUnicode.U_ENDASH)
|
theCursor.insertText(nwUnicode.U_ENDASH)
|
||||||
@@ -1200,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
|
||||||
@@ -1399,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)
|
||||||
@@ -1560,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