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() |