Helpviewer/QtHelpFiltersDialog.py

changeset 1749
cfddfc179a2c
parent 1509
c0b5e693b0eb
child 2302
f29e9405c851
diff -r f6169c7a5f65 -r cfddfc179a2c Helpviewer/QtHelpFiltersDialog.py
--- a/Helpviewer/QtHelpFiltersDialog.py	Sat Mar 31 15:22:50 2012 +0200
+++ b/Helpviewer/QtHelpFiltersDialog.py	Sat Mar 31 19:15:17 2012 +0200
@@ -7,6 +7,8 @@
 Module implementing a dialog to manage the QtHelp filters.
 """
 
+import sqlite3
+
 from PyQt4.QtCore import pyqtSlot, Qt
 from PyQt4.QtGui import QDialog, QTreeWidgetItem, QListWidgetItem, QInputDialog, QLineEdit
 from PyQt4.QtHelp import QHelpEngineCore
@@ -41,6 +43,7 @@
         self.__removedFilters = []
         self.__filterMap = {}
         self.__filterMapBackup = {}
+        self.__removedAttributes = []
         
         for filter in help.customFilters():
             atts = help.filterAttributes(filter)
@@ -131,6 +134,40 @@
             self.filtersList.setCurrentRow(0)
     
     @pyqtSlot()
+    def on_removeAttributeButton_clicked(self):
+        """
+        Private slot to remove a filter attribute.
+        """
+        itm = self.attributesList.takeTopLevelItem(
+            self.attributesList.indexOfTopLevelItem(
+                self.attributesList.currentItem()))
+        if itm is None:
+            return
+        
+        attr = itm.text(0)
+        self.__removedAttributes.append(attr)
+        for filter in self.__filterMap:
+            if attr in self.__filterMap[filter]:
+                self.__filterMap[filter].remove(attr)
+        
+        del itm
+    
+    def __removeAttributes(self):
+        """
+        Private method to remove attributes from the Qt Help database.
+        """
+        try:
+            self.__db = sqlite3.connect(self.__engine.collectionFile())
+        except sqlite3.DatabaseError:
+            pass        # ignore database errors
+        
+        for attr in self.__removedAttributes:
+            self.__db.execute(
+                "DELETE FROM FilterAttributeTable WHERE Name = '{0}'".format(attr))
+        self.__db.commit()
+        self.__db.close()
+    
+    @pyqtSlot()
     def on_buttonBox_accepted(self):
         """
         Private slot to update the database, if the dialog is accepted.
@@ -161,7 +198,11 @@
                 self.__engine.removeCustomFilter(filter)
             for filter in self.__filterMap:
                 self.__engine.addCustomFilter(filter, self.__filterMap[filter])
-            
+        
+        if self.__removedAttributes:
+            self.__removeAttributes()
+        
+        if filtersChanged or self.__removedAttributes:
             self.__engine.setupData()
         
         self.accept()

eric ide

mercurial