Helpviewer/OpenSearch/OpenSearchDialog.py

Sat, 23 Jan 2010 15:34:56 +0000

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 23 Jan 2010 15:34:56 +0000
changeset 82
78fc26d3e43b
parent 55
b5c84934de9c
child 96
9624a110667d
permissions
-rw-r--r--

Added code to fix a spurous problem where an open search engines is deleted prematurely.

# -*- coding: utf-8 -*-

# Copyright (c) 2009 - 2010 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 E5Gui.E5ListView import E5ListView

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