Helpviewer/OpenSearch/OpenSearchDialog.py

changeset 0
de9c2efb9d02
child 12
1d8dd9706f46
diff -r 000000000000 -r de9c2efb9d02 Helpviewer/OpenSearch/OpenSearchDialog.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Helpviewer/OpenSearch/OpenSearchDialog.py	Mon Dec 28 16:03:33 2009 +0000
@@ -0,0 +1,113 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2009 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog for the configuration of search engines.
+"""
+
+from PyQt4.QtGui import QDialog, QFileDialog, QMessageBox
+from PyQt4.QtCore import pyqtSlot, SIGNAL
+
+from E4Gui.E4ListView import E4ListView
+
+from Helpviewer.HelpWebSearchWidget import HelpWebSearchWidget
+
+from OpenSearchEngineModel import OpenSearchEngineModel
+from OpenSearchEditDialog import OpenSearchEditDialog
+
+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
+        """
+        QDialog.__init__(self, parent)
+        self.setupUi(self)
+        
+        self.setModal(True)
+        
+        self.__model = \
+            OpenSearchEngineModel(HelpWebSearchWidget.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.connect(self.enginesTable.selectionModel(), 
+                     SIGNAL("selectionChanged(const QItemSelection&, const QItemSelection&)"), 
+                     self.__selectionChanged)
+        self.editButton.setEnabled(False)
+    
+    @pyqtSlot()
+    def on_addButton_clicked(self):
+        """
+        Private slot to add a new search engine.
+        """
+        fileNames = QFileDialog.getOpenFileNames(\
+            self,
+            self.trUtf8("Add search engine"),
+            "",
+            self.trUtf8("OpenSearch (*.xml);;All Files (*)"))
+        
+        osm = HelpWebSearchWidget.openSearchManager()
+        for fileName in fileNames:
+            if not osm.addEngine(fileName):
+                QMessageBox.critical(self,
+                    self.trUtf8("Add search engine"),
+                    self.trUtf8("""{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:
+            QMessageBox.critical(self,
+                self.trUtf8("Delete selected engines"),
+                self.trUtf8("""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.
+        """
+        HelpWebSearchWidget.openSearchManager().restoreDefaults()
+    
+    @pyqtSlot()
+    def on_editButton_clicked(self):
+        """
+        Private slot to edit the data of the current search engine.
+        """
+        rows = self.enginesTable.selectionModel().selectedRows()
+        if len(rows) == 0:
+            row = self.enginesTable.selectionModel().currentIndex().row()
+        else:
+            row = rows[0].row()
+        
+        osm = HelpWebSearchWidget.openSearchManager()
+        engineName = osm.allEnginesNames()[row]
+        engine = osm.engine(engineName)
+        dlg = OpenSearchEditDialog(engine, self)
+        if dlg.exec_() == QDialog.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