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)