eric7/HelpViewer/HelpViewerWidget.py

branch
eric7
changeset 8679
fd172973428e
parent 8678
85a83e4e7f18
child 8680
85503ff2fce9
diff -r 85a83e4e7f18 -r fd172973428e eric7/HelpViewer/HelpViewerWidget.py
--- a/eric7/HelpViewer/HelpViewerWidget.py	Wed Oct 06 20:00:29 2021 +0200
+++ b/eric7/HelpViewer/HelpViewerWidget.py	Thu Oct 07 20:22:02 2021 +0200
@@ -7,10 +7,17 @@
 Module implementing an embedded viewer for QtHelp and local HTML files.
 """
 
+from PyQt6.QtCore import pyqtSlot, QUrl
+from PyQt6.QtGui import QTextDocument
 from PyQt6.QtWidgets import (
-    QWidget, QVBoxLayout, QComboBox, QSizePolicy, QStackedWidget
+    QWidget, QHBoxLayout, QVBoxLayout, QComboBox, QSizePolicy, QStackedWidget,
+    QToolButton, QButtonGroup, QAbstractButton
 )
 
+import UI.PixmapCache
+
+from .OpenPagesWidget import OpenPagesWidget
+
 
 class HelpViewerWidget(QWidget):
     """
@@ -30,29 +37,90 @@
         self.__layout.setObjectName("MainLayout")
         self.__layout.setContentsMargins(0, 3, 0, 0)
         
+        ###################################################################
+        
+        self.__selectorLayout = QHBoxLayout()
+        
         self.__helpSelector = QComboBox(self)
         self.__helpSelector.setSizePolicy(
             QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred)
-        self.__layout.addWidget(self.__helpSelector)
+        self.__selectorLayout.addWidget(self.__helpSelector)
         self.__populateHelpSelector()
         
+        self.__openButton = QToolButton(self)
+        self.__openButton.setIcon(UI.PixmapCache.getIcon("open"))
+        self.__openButton.setToolTip(self.tr("Open a local file"))
+        self.__openButton.clicked.connect(self.__openFile)
+        self.__selectorLayout.addWidget(self.__openButton)
+        
+        self.__layout.addLayout(self.__selectorLayout)
+        
+        ###################################################################
+        
         self.__helpStack = QStackedWidget(self)
         self.__helpStack.setSizePolicy(
             QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
         self.__layout.addWidget(self.__helpStack)
         
+        ###################################################################
+        
         self.__helpNavigationStack = QStackedWidget(self)
         self.__helpNavigationStack.setSizePolicy(
             QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred)
+        self.__helpNavigationStack.setMaximumHeight(200)
         self.__layout.addWidget(self.__helpNavigationStack)
         self.__populateNavigationStack()
         
+        ###################################################################
+        
+        self.__buttonLayout = QHBoxLayout()
+        
+        self.__buttonGroup = QButtonGroup(self)
+        self.__buttonGroup.setExclusive(True)
+        self.__buttonGroup.buttonClicked.connect(
+            self.__selectNavigationWidget)
+        
+        self.__buttonLayout.addStretch()
+        
+        self.__openPagesButton = QToolButton(self)
+        self.__openPagesButton.setIcon(UI.PixmapCache.getIcon("fileMisc"))
+        self.__openPagesButton.setToolTip(self.tr("Show list of open pages"))
+        self.__openPagesButton.setCheckable(True)
+        self.__buttonGroup.addButton(self.__openPagesButton)
+        self.__buttonLayout.addWidget(self.__openPagesButton)
+        
+        self.__buttonLayout.addStretch()
+        
+        self.__layout.addLayout(self.__buttonLayout)
+        
+        ###################################################################
+        
         self.setLayout(self.__layout)
+        
+        self.__openPagesButton.setChecked(True)
+        
+        self.addPage()
     
     def __populateNavigationStack(self):
         """
         Private method to populate the stack of navigation widgets.
         """
+        self.__openPagesList = OpenPagesWidget(self.__helpStack, self)
+        self.__helpNavigationStack.addWidget(self.__openPagesList)
+        
+        # TODO: not yet implemented
+    
+    @pyqtSlot(QAbstractButton)
+    def __selectNavigationWidget(self, button):
+        """
+        Private slot to select the navigation widget.
+        
+        @param button reference to the clicked button
+        @type QAbstractButton
+        """
+        if button == self.__openPagesButton:
+            self.__helpNavigationStack.setCurrentWidget(self.__openPagesList)
+        
         # TODO: not yet implemented
     
     def __populateHelpSelector(self):
@@ -81,3 +149,29 @@
         
         if searchWord:
             self.searchQtHelp(searchWord)
+    
+    @pyqtSlot()
+    def __openFile(self):
+        """
+        Private slot to open a local help file (*.html).
+        """
+        # TODO: not yet implemented
+    
+    def addPage(self, url=QUrl("about:blank")):
+        """
+        Public method to add a new help page with the given URL.
+        
+        @param url requested URL (defaults to QUrl("about:blank"))
+        @type QUrl (optional)
+        """
+        try:
+            from .HelpViewerImpl_qwe import HelpViewerImpl_qwe
+            viewer = HelpViewerImpl_qwe(self)
+        except ImportError:
+            from .HelpViewerImpl_qtb import HelpViewerImpl_qtb
+            viewer = HelpViewerImpl_qtb(self)
+        
+        self.__helpStack.addWidget(viewer)
+        self.__openPagesList.addPage(viewer)
+        
+        viewer.setSource(url, QTextDocument.ResourceType.HtmlResource)

eric ide

mercurial