Helpviewer/QtHelpFiltersDialog.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 to manage the QtHelp filters.
8 """
9
10 from PyQt4.QtGui import *
11 from PyQt4.QtCore import *
12 from PyQt4.QtHelp import QHelpEngineCore
13
14 from Ui_QtHelpFiltersDialog import Ui_QtHelpFiltersDialog
15
16 class QtHelpFiltersDialog(QDialog, Ui_QtHelpFiltersDialog):
17 """
18 Class implementing a dialog to manage the QtHelp filters
19 """
20 def __init__(self, engine, parent = None):
21 """
22 Constructor
23
24 @param engine reference to the help engine (QHelpEngine)
25 @param parent reference to the parent widget (QWidget)
26 """
27 QDialog.__init__(self, parent)
28 self.setupUi(self)
29
30 self.__engine = engine
31
32 self.attributesList.header().hide()
33
34 self.filtersList.clear()
35 self.attributesList.clear()
36
37 help = QHelpEngineCore(self.__engine.collectionFile())
38 help.setupData()
39
40 self.__removedFilters = []
41 self.__filterMap = {}
42 self.__filterMapBackup = {}
43
44 for filter in help.customFilters():
45 atts = help.filterAttributes(filter)
46 self.__filterMapBackup[filter] = atts
47 if filter not in self.__filterMap:
48 self.__filterMap[filter] = atts
49
50 self.filtersList.addItems(sorted(self.__filterMap.keys()))
51 for attr in help.filterAttributes():
52 QTreeWidgetItem(self.attributesList, [attr])
53
54 if self.__filterMap:
55 self.filtersList.setCurrentRow(0)
56
57 @pyqtSlot(QListWidgetItem, QListWidgetItem)
58 def on_filtersList_currentItemChanged(self, current, previous):
59 """
60 Private slot to update the attributes depending on the current filter.
61
62 @param current reference to the current item (QListWidgetitem)
63 @param previous reference to the previous current item (QListWidgetItem)
64 """
65 checkedList = []
66 if current is not None:
67 checkedList = self.__filterMap[current.text()]
68 for index in range(0, self.attributesList.topLevelItemCount()):
69 itm = self.attributesList.topLevelItem(index)
70 if itm.text(0) in checkedList:
71 itm.setCheckState(0, Qt.Checked)
72 else:
73 itm.setCheckState(0, Qt.Unchecked)
74
75 @pyqtSlot(QTreeWidgetItem, int)
76 def on_attributesList_itemChanged(self, item, column):
77 """
78 Private slot to handle a change of an attribute.
79
80 @param item reference to the changed item (QTreeWidgetItem)
81 @param column column containing the change (integer)
82 """
83 if self.filtersList.currentItem() is None:
84 return
85
86 filter = self.filtersList.currentItem().text()
87 if filter not in self.__filterMap:
88 return
89
90 newAtts = []
91 for index in range(0, self.attributesList.topLevelItemCount()):
92 itm = self.attributesList.topLevelItem(index)
93 if itm.checkState(0) == Qt.Checked:
94 newAtts.append(itm.text(0))
95 self.__filterMap[filter] = newAtts
96
97 @pyqtSlot()
98 def on_addButton_clicked(self):
99 """
100 Private slot to add a new filter.
101 """
102 filter, ok = QInputDialog.getText(\
103 None,
104 self.trUtf8("Add Filter"),
105 self.trUtf8("Filter name:"),
106 QLineEdit.Normal)
107 if not filter:
108 return
109
110 if filter not in self.__filterMap:
111 self.__filterMap[filter] = []
112 self.filtersList.addItem(filter)
113
114 itm = self.filtersList.findItems(filter, Qt.MatchCaseSensitive)[0]
115 self.filtersList.setCurrentItem(itm)
116
117 @pyqtSlot()
118 def on_removeButton_clicked(self):
119 """
120 Private slot to remove a filter.
121 """
122 itm = self.filtersList.takeItem(self.filtersList.currentRow())
123 if itm is None:
124 return
125
126 del self.__filterMap[itm.text()]
127 self.__removedFilters.append(itm.text())
128 del itm
129 if self.filtersList.count():
130 self.filtersList.setCurrentRow(0)
131
132 @pyqtSlot()
133 def on_buttonBox_accepted(self):
134 """
135 Private slot to update the database, if the dialog is accepted.
136 """
137 filtersChanged = False
138 if len(self.__filterMapBackup) != len(self.__filterMap):
139 filtersChanged = True
140 else:
141 for filter in self.__filterMapBackup:
142 if filter not in self.__filterMap:
143 filtersChanged = True
144 else:
145 oldFilterAtts = self.__filterMapBackup[filter]
146 newFilterAtts = self.__filterMap[filter]
147 if len(oldFilterAtts) != len(newFilterAtts):
148 filtersChanged = True
149 else:
150 for attr in oldFilterAtts:
151 if attr not in newFilterAtts:
152 filtersChanged = True
153 break
154
155 if filtersChanged:
156 break
157
158 if filtersChanged:
159 for filter in self.__removedFilters:
160 self.__engine.removeCustomFilter(filter)
161 for filter in self.__filterMap:
162 self.__engine.addCustomFilter(filter, self.__filterMap[filter])
163
164 self.__engine.setupData()
165
166 self.accept()

eric ide

mercurial