Skip to content

Commit 89af753

Browse files
committed
SearchReplaceFrame: improve key handling
- Bump to 0.0.37
1 parent 98190af commit 89af753

File tree

2 files changed

+42
-20
lines changed

2 files changed

+42
-20
lines changed

pyqt_code_editor/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22

33
from ._settings import settings
44

5-
__version__ = '0.0.36'
5+
__version__ = '0.0.37'

pyqt_code_editor/widgets/search_replace_frame.py

Lines changed: 41 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@
33
QLineEdit, QPushButton, QCheckBox, QLabel
44
)
55
from qtpy.QtCore import Qt, Signal
6+
from qtpy.QtGui import QKeyEvent
67
from .. import settings
78

8-
9+
910
class SearchReplaceFrame(QFrame):
1011
"""
1112
A small widget containing 'Find' and optionally 'Replace' fields,
@@ -16,10 +17,10 @@ class SearchReplaceFrame(QFrame):
1617
findPrevRequested = Signal()
1718
replaceOneRequested = Signal()
1819
replaceAllRequested = Signal()
19-
20+
2021
def __init__(self, parent=None):
2122
super().__init__(parent)
22-
23+
2324
self.setFrameShape(QFrame.StyledPanel)
2425
self.setFrameShadow(QFrame.Raised)
2526
editor = parent
@@ -51,14 +52,14 @@ def __init__(self, parent=None):
5152
}}
5253
''')
5354
self.setWindowFlags(Qt.SubWindow | Qt.FramelessWindowHint)
54-
55+
5556
# Layout
5657
layout = QVBoxLayout(self)
5758
layout.setContentsMargins(5, 5, 5, 5)
58-
59+
5960
# Find row
6061
findRow = QHBoxLayout()
61-
62+
6263
self.findLabel = QLabel("Find:", self)
6364
self.matchCountLabel = QLabel("0 of 0", self)
6465
self.findEdit = QLineEdit(self)
@@ -68,10 +69,10 @@ def __init__(self, parent=None):
6869
self.regexBox.setToolTip("Use Regular Expressions")
6970
self.wholeWordBox = QCheckBox("\\b", self)
7071
self.wholeWordBox.setToolTip("Match Whole Word")
71-
72+
7273
self.findNextBtn = QPushButton("Next", self)
7374
self.findPrevBtn = QPushButton("Prev", self)
74-
75+
7576
findRow.addWidget(self.findLabel)
7677
findRow.addWidget(self.findEdit)
7778
findRow.addWidget(self.matchCountLabel)
@@ -80,34 +81,56 @@ def __init__(self, parent=None):
8081
findRow.addWidget(self.wholeWordBox)
8182
findRow.addWidget(self.findNextBtn)
8283
findRow.addWidget(self.findPrevBtn)
83-
84+
8485
layout.addLayout(findRow)
85-
86+
8687
# Replace row
8788
replaceRow = QHBoxLayout()
8889
self.replaceLabel = QLabel("Replace:", self)
8990
self.replaceEdit = QLineEdit(self)
9091
self.replaceBtn = QPushButton("Replace", self)
9192
self.replaceAllBtn = QPushButton("Replace All", self)
92-
93+
9394
replaceRow.addWidget(self.replaceLabel)
9495
replaceRow.addWidget(self.replaceEdit)
9596
replaceRow.addWidget(self.replaceBtn)
9697
replaceRow.addWidget(self.replaceAllBtn)
97-
98+
9899
layout.addLayout(replaceRow)
99-
100+
100101
self.replaceRowWidget = replaceRow # Keep reference to manage visibility
101-
102+
102103
# Connections
103104
self.findNextBtn.clicked.connect(self.findNextRequested)
104105
self.findPrevBtn.clicked.connect(self.findPrevRequested)
105106
self.replaceBtn.clicked.connect(self.replaceOneRequested)
106107
self.replaceAllBtn.clicked.connect(self.replaceAllRequested)
107-
108+
109+
# Install event filter to handle Shift+Enter
110+
self.findEdit.installEventFilter(self)
111+
self.replaceEdit.installEventFilter(self)
112+
108113
# Default: searching only, so hide the "replace" row
109114
self.showSearchOnly()
110-
115+
116+
def eventFilter(self, obj, event):
117+
"""Handle key events for find and replace fields"""
118+
if event.type() == QKeyEvent.KeyPress:
119+
if event.key() == Qt.Key_Return or event.key() == Qt.Key_Enter:
120+
if event.modifiers() & Qt.ShiftModifier:
121+
# Shift+Enter triggers find previous
122+
self.findPrevRequested.emit()
123+
return True
124+
elif obj == self.findEdit:
125+
# Enter in find field triggers find next
126+
self.findNextRequested.emit()
127+
return True
128+
elif obj == self.replaceEdit:
129+
# Enter in replace field triggers replace
130+
self.replaceOneRequested.emit()
131+
return True
132+
return super().eventFilter(obj, event)
133+
111134
def showSearchOnly(self):
112135
# Hide replace UI
113136
self.replaceLabel.setVisible(False)
@@ -116,13 +139,12 @@ def showSearchOnly(self):
116139
self.replaceAllBtn.setVisible(False)
117140
self.adjustSize()
118141
self.resize(self.sizeHint())
119-
142+
120143
def showSearchReplace(self):
121144
# Show replace UI
122145
self.replaceLabel.setVisible(True)
123146
self.replaceEdit.setVisible(True)
124147
self.replaceBtn.setVisible(True)
125148
self.replaceAllBtn.setVisible(True)
126149
self.adjustSize()
127-
self.resize(self.sizeHint())
128-
150+
self.resize(self.sizeHint())

0 commit comments

Comments
 (0)