Helpviewer/AdBlock/AdBlockDialog.py

changeset 0
de9c2efb9d02
child 12
1d8dd9706f46
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Helpviewer/AdBlock/AdBlockDialog.py	Mon Dec 28 16:03:33 2009 +0000
@@ -0,0 +1,155 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2009 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the AdBlock configuration dialog.
+"""
+
+from PyQt4.QtCore import *
+from PyQt4.QtGui import *
+
+from E4Gui.E4TreeSortFilterProxyModel import E4TreeSortFilterProxyModel
+
+import Helpviewer.HelpWindow
+
+from Ui_AdBlockDialog import Ui_AdBlockDialog
+
+from AdBlockModel import AdBlockModel
+from AdBlockRule import AdBlockRule
+
+import UI.PixmapCache
+
+class AdBlockDialog(QDialog, Ui_AdBlockDialog):
+    """
+    Class implementing the AdBlock configuration dialog.
+    """
+    def __init__(self, parent = None):
+        """
+        Constructor
+        """
+        QDialog.__init__(self, parent)
+        self.setupUi(self)
+        
+        self.clearButton.setIcon(UI.PixmapCache.getIcon("clearLeft.png"))
+        
+        self.__adBlockModel = AdBlockModel(self)
+        self.__proxyModel = E4TreeSortFilterProxyModel(self)
+        self.__proxyModel.setSourceModel(self.__adBlockModel)
+        self.subscriptionsTree.setModel(self.__proxyModel)
+        
+        self.connect(self.searchEdit, SIGNAL("textChanged(QString)"), 
+                     self.__proxyModel.setFilterFixedString)
+        
+        manager = Helpviewer.HelpWindow.HelpWindow.adblockManager()
+        self.adBlockGroup.setChecked(manager.isEnabled())
+        self.connect(self.adBlockGroup, SIGNAL("toggled(bool)"), 
+                     manager.setEnabled)
+        
+        menu = QMenu(self)
+        self.connect(menu, SIGNAL("aboutToShow()"), self.__aboutToShowActionMenu)
+        self.actionButton.setMenu(menu)
+        self.actionButton.setIcon(UI.PixmapCache.getIcon("adBlockAction.png"))
+        self.actionButton.setPopupMode(QToolButton.InstantPopup)
+        
+        subscription = manager.customRules()
+        subscriptionIndex = self.__adBlockModel.subscriptionIndex(subscription)
+        self.subscriptionsTree.expand(self.__proxyModel.mapFromSource(subscriptionIndex))
+    
+    def model(self):
+        """
+        Public method to return a reference to the subscriptions tree model.
+        """
+        return self.subscriptionsTree.model()
+    
+    def setCurrentIndex(self, index):
+        """
+        Private slot to set the current index of the subscriptions tree.
+        
+        @param index index to be set (QModelIndex)
+        """
+        self.subscriptionsTree.setCurrentIndex(index)
+    
+    def __aboutToShowActionMenu(self):
+        """
+        Private slot to show the actions menu.
+        """
+        menu = self.actionButton.menu()
+        menu.clear()
+        
+        menu.addAction(self.trUtf8("Add Custom Rule"), self.addCustomRule)
+        
+        menu.addAction(self.trUtf8("Learn more about writing rules..."), 
+                       self.__learnAboutWritingFilters)
+        
+        menu.addSeparator()
+        
+        idx = self.__proxyModel.mapToSource(self.subscriptionsTree.currentIndex())
+        
+        act = menu.addAction(self.trUtf8("Update Subscription"), 
+                             self.__updateSubscription)
+        act.setEnabled(idx.isValid())
+        
+        menu.addAction(self.trUtf8("Browse Subscriptions..."), self.__browseSubscriptions)
+        
+        menu.addSeparator()
+        
+        act = menu.addAction(self.trUtf8("Remove Subscription"), 
+                             self.__removeSubscription)
+        act.setEnabled(idx.isValid())
+    
+    def addCustomRule(self, rule):
+        """
+        Public slot to add a custom AdBlock rule.
+        
+        @param rule string defining the rule to be added (string)
+        """
+        manager = Helpviewer.HelpWindow.HelpWindow.adblockManager()
+        subscription = manager.customRules()
+        assert subscription is not None
+        subscription.addRule(AdBlockRule(rule))
+        QApplication.processEvents()
+        
+        parent = self.__adBlockModel.subscriptionIndex(subscription)
+        cnt = self.__adBlockModel.rowCount(parent)
+        ruleIndex = self.__adBlockModel.index(cnt - 1, 0, parent)
+        self.subscriptionsTree.expand(self.__proxyModel.mapFromSource(parent))
+        self.subscriptionsTree.edit(self.__proxyModel.mapFromSource(ruleIndex))
+    
+    def __updateSubscription(self):
+        """
+        Private slot to update the selected subscription.
+        """
+        idx = self.__proxyModel.mapToSource(self.subscriptionsTree.currentIndex())
+        if not idx.isValid():
+            return
+        if idx.parent().isValid():
+            idx = idx.parent()
+        subscription = self.__adBlockModel.subscription(idx)
+        subscription.updateNow()
+    
+    def __browseSubscriptions(self):
+        """
+        Private slot to browse the list of available AdBlock subscriptions.
+        """
+        QDesktopServices.openUrl(QUrl("http://adblockplus.org/en/subscriptions"))
+    
+    def __learnAboutWritingFilters(self):
+        """
+        Private slot to show the web page about how to write filters.
+        """
+        QDesktopServices.openUrl(QUrl("http://adblockplus.org/en/filters"))
+    
+    def __removeSubscription(self):
+        """
+        Private slot to remove the selected subscription.
+        """
+        idx = self.__proxyModel.mapToSource(self.subscriptionsTree.currentIndex())
+        if not idx.isValid():
+            return
+        if idx.parent().isValid():
+            idx = idx.parent()
+        subscription = self.__adBlockModel.subscription(idx)
+        manager = Helpviewer.HelpWindow.HelpWindow.adblockManager()
+        manager.removeSubscription(subscription)

eric ide

mercurial