eric7/WebBrowser/OpenSearch/OpenSearchDialog.py

branch
eric7
changeset 8312
800c432b34c8
parent 8260
2161475d9639
child 8318
962bce857696
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/WebBrowser/OpenSearch/OpenSearchDialog.py	Sat May 15 18:45:04 2021 +0200
@@ -0,0 +1,120 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2009 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog for the configuration of search engines.
+"""
+
+from PyQt5.QtWidgets import QDialog
+from PyQt5.QtCore import pyqtSlot
+
+from E5Gui import E5MessageBox, E5FileDialog
+
+from .OpenSearchEngineModel import OpenSearchEngineModel
+
+from .Ui_OpenSearchDialog import Ui_OpenSearchDialog
+
+
+class OpenSearchDialog(QDialog, Ui_OpenSearchDialog):
+    """
+    Class implementing a dialog for the configuration of search engines.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent object (QWidget)
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+        
+        self.setModal(True)
+        
+        self.__mw = parent
+        
+        self.__model = OpenSearchEngineModel(
+            self.__mw.openSearchManager(), self)
+        self.enginesTable.setModel(self.__model)
+        self.enginesTable.horizontalHeader().resizeSection(0, 200)
+        self.enginesTable.horizontalHeader().setStretchLastSection(True)
+        self.enginesTable.verticalHeader().hide()
+        self.enginesTable.verticalHeader().setDefaultSectionSize(
+            1.2 * self.fontMetrics().height())
+        
+        self.enginesTable.selectionModel().selectionChanged.connect(
+            self.__selectionChanged)
+        self.editButton.setEnabled(False)
+    
+    @pyqtSlot()
+    def on_addButton_clicked(self):
+        """
+        Private slot to add a new search engine.
+        """
+        fileNames = E5FileDialog.getOpenFileNames(
+            self,
+            self.tr("Add search engine"),
+            "",
+            self.tr("OpenSearch (*.xml);;All Files (*)"))
+        
+        osm = self.__mw.openSearchManager()
+        for fileName in fileNames:
+            if not osm.addEngine(fileName):
+                E5MessageBox.critical(
+                    self,
+                    self.tr("Add search engine"),
+                    self.tr(
+                        """{0} is not a valid OpenSearch 1.1 description or"""
+                        """ is already on your list.""").format(fileName))
+    
+    @pyqtSlot()
+    def on_deleteButton_clicked(self):
+        """
+        Private slot to delete the selected search engines.
+        """
+        if self.enginesTable.model().rowCount() == 1:
+            E5MessageBox.critical(
+                self,
+                self.tr("Delete selected engines"),
+                self.tr("""You must have at least one search engine."""))
+        
+        self.enginesTable.removeSelected()
+    
+    @pyqtSlot()
+    def on_restoreButton_clicked(self):
+        """
+        Private slot to restore the default search engines.
+        """
+        self.__mw.openSearchManager().restoreDefaults()
+    
+    @pyqtSlot()
+    def on_editButton_clicked(self):
+        """
+        Private slot to edit the data of the current search engine.
+        """
+        from .OpenSearchEditDialog import OpenSearchEditDialog
+        
+        rows = self.enginesTable.selectionModel().selectedRows()
+        row = (
+            self.enginesTable.selectionModel().currentIndex().row()
+            if len(rows) == 0 else
+            rows[0].row()
+        )
+        
+        osm = self.__mw.openSearchManager()
+        engineName = osm.allEnginesNames()[row]
+        engine = osm.engine(engineName)
+        dlg = OpenSearchEditDialog(engine, self)
+        if dlg.exec() == QDialog.DialogCode.Accepted:
+            osm.enginesChanged()
+    
+    def __selectionChanged(self, selected, deselected):
+        """
+        Private slot to handle a change of the selection.
+        
+        @param selected item selection of selected items (QItemSelection)
+        @param deselected item selection of deselected items (QItemSelection)
+        """
+        self.editButton.setEnabled(
+            len(self.enginesTable.selectionModel().selectedRows()) <= 1)

eric ide

mercurial