Helpviewer/QtHelpFiltersDialog.py

changeset 1749
cfddfc179a2c
parent 1509
c0b5e693b0eb
child 2302
f29e9405c851
equal deleted inserted replaced
1748:f6169c7a5f65 1749:cfddfc179a2c
4 # 4 #
5 5
6 """ 6 """
7 Module implementing a dialog to manage the QtHelp filters. 7 Module implementing a dialog to manage the QtHelp filters.
8 """ 8 """
9
10 import sqlite3
9 11
10 from PyQt4.QtCore import pyqtSlot, Qt 12 from PyQt4.QtCore import pyqtSlot, Qt
11 from PyQt4.QtGui import QDialog, QTreeWidgetItem, QListWidgetItem, QInputDialog, QLineEdit 13 from PyQt4.QtGui import QDialog, QTreeWidgetItem, QListWidgetItem, QInputDialog, QLineEdit
12 from PyQt4.QtHelp import QHelpEngineCore 14 from PyQt4.QtHelp import QHelpEngineCore
13 15
39 help.setupData() 41 help.setupData()
40 42
41 self.__removedFilters = [] 43 self.__removedFilters = []
42 self.__filterMap = {} 44 self.__filterMap = {}
43 self.__filterMapBackup = {} 45 self.__filterMapBackup = {}
46 self.__removedAttributes = []
44 47
45 for filter in help.customFilters(): 48 for filter in help.customFilters():
46 atts = help.filterAttributes(filter) 49 atts = help.filterAttributes(filter)
47 self.__filterMapBackup[filter] = atts 50 self.__filterMapBackup[filter] = atts
48 if filter not in self.__filterMap: 51 if filter not in self.__filterMap:
127 del self.__filterMap[itm.text()] 130 del self.__filterMap[itm.text()]
128 self.__removedFilters.append(itm.text()) 131 self.__removedFilters.append(itm.text())
129 del itm 132 del itm
130 if self.filtersList.count(): 133 if self.filtersList.count():
131 self.filtersList.setCurrentRow(0) 134 self.filtersList.setCurrentRow(0)
135
136 @pyqtSlot()
137 def on_removeAttributeButton_clicked(self):
138 """
139 Private slot to remove a filter attribute.
140 """
141 itm = self.attributesList.takeTopLevelItem(
142 self.attributesList.indexOfTopLevelItem(
143 self.attributesList.currentItem()))
144 if itm is None:
145 return
146
147 attr = itm.text(0)
148 self.__removedAttributes.append(attr)
149 for filter in self.__filterMap:
150 if attr in self.__filterMap[filter]:
151 self.__filterMap[filter].remove(attr)
152
153 del itm
154
155 def __removeAttributes(self):
156 """
157 Private method to remove attributes from the Qt Help database.
158 """
159 try:
160 self.__db = sqlite3.connect(self.__engine.collectionFile())
161 except sqlite3.DatabaseError:
162 pass # ignore database errors
163
164 for attr in self.__removedAttributes:
165 self.__db.execute(
166 "DELETE FROM FilterAttributeTable WHERE Name = '{0}'".format(attr))
167 self.__db.commit()
168 self.__db.close()
132 169
133 @pyqtSlot() 170 @pyqtSlot()
134 def on_buttonBox_accepted(self): 171 def on_buttonBox_accepted(self):
135 """ 172 """
136 Private slot to update the database, if the dialog is accepted. 173 Private slot to update the database, if the dialog is accepted.
159 if filtersChanged: 196 if filtersChanged:
160 for filter in self.__removedFilters: 197 for filter in self.__removedFilters:
161 self.__engine.removeCustomFilter(filter) 198 self.__engine.removeCustomFilter(filter)
162 for filter in self.__filterMap: 199 for filter in self.__filterMap:
163 self.__engine.addCustomFilter(filter, self.__filterMap[filter]) 200 self.__engine.addCustomFilter(filter, self.__filterMap[filter])
164 201
202 if self.__removedAttributes:
203 self.__removeAttributes()
204
205 if filtersChanged or self.__removedAttributes:
165 self.__engine.setupData() 206 self.__engine.setupData()
166 207
167 self.accept() 208 self.accept()

eric ide

mercurial