*** eric7

Tue, 19 Oct 2021 19:57:26 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 19 Oct 2021 19:57:26 +0200
branch
eric7
changeset 8702
131ef7267fd4
parent 8701
9a7ef33a4534
child 8703
3f1f67a9b179

***

eric7/EricWidgets/EricTextEditSearchWidget.py file | annotate | diff | comparison | revisions
eric7/HelpViewer/HelpViewerImplQTB.py file | annotate | diff | comparison | revisions
eric7/HelpViewer/HelpViewerImplQWE.py file | annotate | diff | comparison | revisions
eric7/HelpViewer/HelpViewerWidget.py file | annotate | diff | comparison | revisions
--- a/eric7/EricWidgets/EricTextEditSearchWidget.py	Tue Oct 19 19:55:21 2021 +0200
+++ b/eric7/EricWidgets/EricTextEditSearchWidget.py	Tue Oct 19 19:57:26 2021 +0200
@@ -9,7 +9,7 @@
 
 import enum
 
-from PyQt6.QtCore import pyqtSlot, Qt, QMetaObject, QSize
+from PyQt6.QtCore import pyqtSlot, pyqtSignal, Qt, QMetaObject, QSize
 from PyQt6.QtGui import QPalette, QBrush, QColor, QTextDocument, QTextCursor
 from PyQt6.QtWidgets import (
     QWidget, QVBoxLayout, QHBoxLayout, QLabel, QComboBox, QCheckBox,
@@ -32,7 +32,12 @@
 class EricTextEditSearchWidget(QWidget):
     """
     Class implementing a horizontal search widget for QTextEdit.
+    
+    @signal closePressed() emitted to indicate the closing of the widget via
+        the close button
     """
+    closePressed = pyqtSignal()
+    
     def __init__(self, parent=None, widthForHeight=True, enableClose=False):
         """
         Constructor
@@ -51,7 +56,7 @@
         
         self.__textedit = None
         self.__texteditType = EricTextEditType.UNKNOWN
-        self.__findBackwards = True
+        self.__findBackwards = False
         
         self.__defaultBaseColor = (
             self.findtextCombo.lineEdit().palette().color(
@@ -237,14 +242,34 @@
         self.__texteditType = EricTextEditType.UNKNOWN
     
     @pyqtSlot()
+    def activate(self):
+        """
+        Public slot to activate the widget.
+        """
+        self.show()
+        self.findtextCombo.setFocus(
+            Qt.FocusReason.ActiveWindowFocusReason)
+        self.findtextCombo.lineEdit().selectAll()
+    
+    @pyqtSlot()
+    def deactivate(self):
+        """
+        Public slot to deactivate the widget.
+        """
+        if self.__textedit:
+            self.__textedit.setFocus(Qt.FocusReason.ActiveWindowFocusReason)
+        if self.closeButton is not None:
+            self.hide()
+            self.closePressed.emit()
+    
+    @pyqtSlot()
     def __closeButtonClicked(self):
         """
         Private slot to close the widget.
         
         Note: The widget is just hidden.
         """
-        self.__textedit.setFocus(Qt.FocusReason.ActiveWindowFocusReason)
-        self.hide()
+        self.deactivate()
     
     def keyPressEvent(self, event):
         """
@@ -258,10 +283,7 @@
             modifiers = event.modifiers()
             
             if key == Qt.Key.Key_Escape:
-                self.__textedit.setFocus(
-                    Qt.FocusReason.ActiveWindowFocusReason)
-                if self.closeButton is not None:
-                    self.hide()
+                self.deactivate()
                 event.accept()
             
             elif key == Qt.Key.Key_F3:
@@ -318,6 +340,20 @@
         """
         self.__find(False)
     
+    @pyqtSlot()
+    def findPrev(self):
+        """
+        Public slot to find the previous occurrence of the current search term.
+        """
+        self.on_findPrevButton_clicked()
+    
+    @pyqtSlot()
+    def findNext(self):
+        """
+        Public slot to find the next occurrence of the current search term.
+        """
+        self.on_findNextButton_clicked()
+    
     def __find(self, backwards):
         """
         Private method to search the associated text edit.
--- a/eric7/HelpViewer/HelpViewerImplQTB.py	Tue Oct 19 19:55:21 2021 +0200
+++ b/eric7/HelpViewer/HelpViewerImplQTB.py	Tue Oct 19 19:57:26 2021 +0200
@@ -348,8 +348,9 @@
         @type QKeyEvent
         """
         key = evt.key()
-        isControlModifier = bool(
-            evt.modifiers() & Qt.KeyboardModifier.ControlModifier)
+        isControlModifier = (
+            evt.modifiers() == Qt.KeyboardModifier.ControlModifier
+        )
         
         if (
             key == Qt.Key.Key_ZoomIn or
@@ -375,6 +376,21 @@
         elif key == Qt.Key.Key_Right and isControlModifier:
             self.forward()
             evt.accept()
+        elif key == Qt.Key.Key_F and isControlModifier:
+            self.__helpViewerWidget.showHideSearch(True)
+            evt.accept()
+        elif (
+            key == Qt.Key.Key_F3 and
+            evt.modifiers() == Qt.KeyboardModifier.NoModifier
+        ):
+            self.__helpViewerWidget.searchNext()
+            evt.accept()
+        elif (
+            key == Qt.Key.Key_F3 and
+            evt.modifiers() == Qt.KeyboardModifier.ShiftModifier
+        ):
+            self.__helpViewerWidget.searchPrev()
+            evt.accept()
         else:
             super().keyPressEvent(evt)
     
--- a/eric7/HelpViewer/HelpViewerImplQWE.py	Tue Oct 19 19:55:21 2021 +0200
+++ b/eric7/HelpViewer/HelpViewerImplQWE.py	Tue Oct 19 19:57:26 2021 +0200
@@ -407,8 +407,9 @@
         @type QKeyEvent
         """
         key = evt.key()
-        isControlModifier = bool(
-            evt.modifiers() & Qt.KeyboardModifier.ControlModifier)
+        isControlModifier = (
+            evt.modifiers() == Qt.KeyboardModifier.ControlModifier
+        )
         
         if (
             key == Qt.Key.Key_ZoomIn or
@@ -434,6 +435,21 @@
         elif key == Qt.Key.Key_Right and isControlModifier:
             self.forward()
             evt.accept()
+        elif key == Qt.Key.Key_F and isControlModifier:
+            self.__helpViewerWidget.showHideSearch(True)
+            evt.accept()
+        elif (
+            key == Qt.Key.Key_F3 and
+            evt.modifiers() == Qt.KeyboardModifier.NoModifier
+        ):
+            self.__helpViewerWidget.searchNext()
+            evt.accept()
+        elif (
+            key == Qt.Key.Key_F3 and
+            evt.modifiers() == Qt.KeyboardModifier.ShiftModifier
+        ):
+            self.__helpViewerWidget.searchPrev()
+            evt.accept()
     
     def _mouseReleaseEvent(self, evt):
         """
--- a/eric7/HelpViewer/HelpViewerWidget.py	Tue Oct 19 19:55:21 2021 +0200
+++ b/eric7/HelpViewer/HelpViewerWidget.py	Tue Oct 19 19:57:26 2021 +0200
@@ -24,6 +24,9 @@
     WEBENGINE_AVAILABLE = False
 
 from EricWidgets import EricFileDialog, EricMessageBox
+from EricWidgets.EricTextEditSearchWidget import (
+    EricTextEditSearchWidget, EricTextEditType
+)
 
 import UI.PixmapCache
 import Utilities
@@ -167,7 +170,14 @@
         self.__buttonLine3.setFrameShadow(QFrame.Shadow.Sunken)
         self.__navButtonsLayout.addWidget(self.__buttonLine3)
         
-        # TODO: add find button to show the find widget
+        self.__searchButton = QToolButton(self)
+        self.__searchButton.setIcon(UI.PixmapCache.getIcon("find"))
+        self.__searchButton.setToolTip(
+            self.tr("Show or hide the search pane"))
+        self.__searchButton.setCheckable(True)
+        self.__searchButton.setChecked(False)
+        self.__searchButton.clicked.connect(self.showHideSearch)
+        self.__navButtonsLayout.addWidget(self.__searchButton)
         
         self.__navButtonsLayout.addStretch()
         
@@ -193,7 +203,11 @@
         
         ###################################################################
         
-        # TODO: addd a search widget (EricTextEditSearchWidget)
+        self.__searchWidget = EricTextEditSearchWidget(
+            self, widthForHeight=False, enableClose=True)
+        self.__layout.addWidget(self.__searchWidget)
+        self.__searchWidget.closePressed.connect(self.__searchWidgetClosed)
+        self.__searchWidget.hide()
         
         ###################################################################
         
@@ -436,7 +450,7 @@
         if url is None:
             url = QUrl("about:blank")
         
-        viewer = self.__newViewer()
+        viewer, viewerType = self.__newViewer()
         viewer.setLink(url)
         
         cv = self.currentViewer()
@@ -450,6 +464,7 @@
             self.__helpStack.addWidget(viewer)
             self.__openPagesList.addPage(viewer, background=background)
             viewer.setFocus(Qt.FocusReason.OtherFocusReason)
+            self.__searchWidget.attachTextEdit(viewer, editType=viewerType)
         
         return viewer
     
@@ -520,19 +535,22 @@
         """
         Private method to create a new help viewer.
         
-        @return help viewer
-        @rtype HelpViewerImpl
+        @return tuple containing the reference to the created help viewer
+            object and its type
+        @rtype tuple of (HelpViewerImpl, EricTextEditType)
         """
         if WEBENGINE_AVAILABLE:
             from .HelpViewerImplQWE import HelpViewerImplQWE
             viewer = HelpViewerImplQWE(self.__helpEngine, self)
+            viewerType = EricTextEditType.QWEBENGINEVIEW
         else:
             from .HelpViewerImplQTB import HelpViewerImplQTB
             viewer = HelpViewerImplQTB(self.__helpEngine, self)
+            viewerType = EricTextEditType.QTEXTBROWSER
         
         viewer.zoomChanged.connect(self.__checkActionButtons)
         
-        return viewer
+        return viewer, viewerType
     
     def currentViewer(self):
         """
@@ -791,6 +809,14 @@
         self.__checkActionButtons()
         cv = self.currentViewer()
         if cv:
+            self.__searchWidget.attachTextEdit(
+                cv,
+                editType=(
+                    EricTextEditType.QWEBENGINEVIEW
+                    if WEBENGINE_AVAILABLE else
+                    EricTextEditType.QTEXTBROWSER
+                )
+            )
             cv.setFocus(Qt.FocusReason.OtherFocusReason)
     
     #######################################################################
@@ -1138,6 +1164,45 @@
                 "PdfViewerEnabled"))
     
     #######################################################################
+    ## Search widget related methods below
+    #######################################################################
+    
+    @pyqtSlot()
+    def __searchWidgetClosed(self):
+        """
+        Private slot to handle the closing of the search widget.
+        """
+        self.__searchButton.setChecked(False)
+    
+    @pyqtSlot(bool)
+    def showHideSearch(self, visible):
+        """
+        Public slot to show or hide the search widget.
+        
+        @param visible flag indicating to show or hide the search widget
+        @type bool
+        """
+        self.__searchWidget.setVisible(visible)
+        if visible:
+            self.__searchWidget.activate()
+        else:
+            self.__searchWidget.deactivate()
+    
+    @pyqtSlot()
+    def searchPrev(self):
+        """
+        Public slot to find the previous occurrence of the current search term.
+        """
+        self.__searchWidget.findPrev()
+    
+    @pyqtSlot()
+    def searchNext(self):
+        """
+        Public slot to find the next occurrence of the current search term.
+        """
+        self.__searchWidget.findNext()
+    
+    #######################################################################
     ## Utility methods below
     #######################################################################
     

eric ide

mercurial