Helpviewer/OpenSearch/OpenSearchDialog.py

changeset 0
de9c2efb9d02
child 12
1d8dd9706f46
equal deleted inserted replaced
-1:000000000000 0:de9c2efb9d02
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2009 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing a dialog for the configuration of search engines.
8 """
9
10 from PyQt4.QtGui import QDialog, QFileDialog, QMessageBox
11 from PyQt4.QtCore import pyqtSlot, SIGNAL
12
13 from E4Gui.E4ListView import E4ListView
14
15 from Helpviewer.HelpWebSearchWidget import HelpWebSearchWidget
16
17 from OpenSearchEngineModel import OpenSearchEngineModel
18 from OpenSearchEditDialog import OpenSearchEditDialog
19
20 from Ui_OpenSearchDialog import Ui_OpenSearchDialog
21
22 class OpenSearchDialog(QDialog, Ui_OpenSearchDialog):
23 """
24 Class implementing a dialog for the configuration of search engines.
25 """
26 def __init__(self, parent = None):
27 """
28 Constructor
29 """
30 QDialog.__init__(self, parent)
31 self.setupUi(self)
32
33 self.setModal(True)
34
35 self.__model = \
36 OpenSearchEngineModel(HelpWebSearchWidget.openSearchManager(), self)
37 self.enginesTable.setModel(self.__model)
38 self.enginesTable.horizontalHeader().resizeSection(0, 200)
39 self.enginesTable.horizontalHeader().setStretchLastSection(True)
40 self.enginesTable.verticalHeader().hide()
41 self.enginesTable.verticalHeader().setDefaultSectionSize(
42 1.2 * self.fontMetrics().height())
43
44 self.connect(self.enginesTable.selectionModel(),
45 SIGNAL("selectionChanged(const QItemSelection&, const QItemSelection&)"),
46 self.__selectionChanged)
47 self.editButton.setEnabled(False)
48
49 @pyqtSlot()
50 def on_addButton_clicked(self):
51 """
52 Private slot to add a new search engine.
53 """
54 fileNames = QFileDialog.getOpenFileNames(\
55 self,
56 self.trUtf8("Add search engine"),
57 "",
58 self.trUtf8("OpenSearch (*.xml);;All Files (*)"))
59
60 osm = HelpWebSearchWidget.openSearchManager()
61 for fileName in fileNames:
62 if not osm.addEngine(fileName):
63 QMessageBox.critical(self,
64 self.trUtf8("Add search engine"),
65 self.trUtf8("""{0} is not a valid OpenSearch 1.1 description or"""
66 """ is already on your list.""").format(fileName))
67
68 @pyqtSlot()
69 def on_deleteButton_clicked(self):
70 """
71 Private slot to delete the selected search engines.
72 """
73 if self.enginesTable.model().rowCount() == 1:
74 QMessageBox.critical(self,
75 self.trUtf8("Delete selected engines"),
76 self.trUtf8("""You must have at least one search engine."""))
77
78 self.enginesTable.removeSelected()
79
80 @pyqtSlot()
81 def on_restoreButton_clicked(self):
82 """
83 Private slot to restore the default search engines.
84 """
85 HelpWebSearchWidget.openSearchManager().restoreDefaults()
86
87 @pyqtSlot()
88 def on_editButton_clicked(self):
89 """
90 Private slot to edit the data of the current search engine.
91 """
92 rows = self.enginesTable.selectionModel().selectedRows()
93 if len(rows) == 0:
94 row = self.enginesTable.selectionModel().currentIndex().row()
95 else:
96 row = rows[0].row()
97
98 osm = HelpWebSearchWidget.openSearchManager()
99 engineName = osm.allEnginesNames()[row]
100 engine = osm.engine(engineName)
101 dlg = OpenSearchEditDialog(engine, self)
102 if dlg.exec_() == QDialog.Accepted:
103 osm.enginesChanged()
104
105 def __selectionChanged(self, selected, deselected):
106 """
107 Private slot to handle a change of the selection.
108
109 @param selected item selection of selected items (QItemSelection)
110 @param deselected item selection of deselected items (QItemSelection)
111 """
112 self.editButton.setEnabled(
113 len(self.enginesTable.selectionModel().selectedRows()) <= 1)

eric ide

mercurial