36 self.__subscription = subscription |
36 self.__subscription = subscription |
37 self.__topItem = None |
37 self.__topItem = None |
38 self.__ruleToBeSelected = "" |
38 self.__ruleToBeSelected = "" |
39 self.__itemChangingBlock = False |
39 self.__itemChangingBlock = False |
40 |
40 |
41 self.setContextMenuPolicy(Qt.CustomContextMenu) |
41 self.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu) |
42 self.setDefaultItemShowMode(E5TreeWidget.ItemsExpanded) |
42 self.setDefaultItemShowMode(E5TreeWidget.ItemsExpanded) |
43 self.setHeaderHidden(True) |
43 self.setHeaderHidden(True) |
44 self.setAlternatingRowColors(True) |
44 self.setAlternatingRowColors(True) |
45 |
45 |
46 self.customContextMenuRequested.connect(self.__contextMenuRequested) |
46 self.customContextMenuRequested.connect(self.__contextMenuRequested) |
65 @type AdBlockRule |
65 @type AdBlockRule |
66 """ |
66 """ |
67 if not bool(self.__topItem) and bool(rule): |
67 if not bool(self.__topItem) and bool(rule): |
68 self.__ruleToBeSelected = rule.filter() |
68 self.__ruleToBeSelected = rule.filter() |
69 elif self.__ruleToBeSelected: |
69 elif self.__ruleToBeSelected: |
70 items = self.findItems(self.__ruleToBeSelected, Qt.MatchRecursive) |
70 items = self.findItems( |
|
71 self.__ruleToBeSelected, Qt.MatchFlag.MatchRecursive) |
71 if items: |
72 if items: |
72 item = items[0] |
73 item = items[0] |
73 self.setCurrentItem(item) |
74 self.setCurrentItem(item) |
74 self.scrollToItem(item, QAbstractItemView.PositionAtCenter) |
75 self.scrollToItem( |
|
76 item, QAbstractItemView.ScrollHint.PositionAtCenter) |
75 |
77 |
76 self.__ruleToBeSelected = "" |
78 self.__ruleToBeSelected = "" |
77 |
79 |
78 def refresh(self): |
80 def refresh(self): |
79 """ |
81 """ |
95 |
97 |
96 index = 0 |
98 index = 0 |
97 for rule in allRules: |
99 for rule in allRules: |
98 item = QTreeWidgetItem(self.__topItem) |
100 item = QTreeWidgetItem(self.__topItem) |
99 item.setText(0, rule.filter()) |
101 item.setText(0, rule.filter()) |
100 item.setData(0, Qt.UserRole, index) |
102 item.setData(0, Qt.ItemDataRole.UserRole, index) |
101 if self.__subscription.canEditRules(): |
103 if self.__subscription.canEditRules(): |
102 item.setFlags(item.flags() | Qt.ItemIsEditable) |
104 item.setFlags(item.flags() | Qt.ItemFlag.ItemIsEditable) |
103 self.__adjustItemFeatures(item, rule) |
105 self.__adjustItemFeatures(item, rule) |
104 index += 1 |
106 index += 1 |
105 |
107 |
106 self.expandAll() |
108 self.expandAll() |
107 self.showRule(None) |
109 self.showRule(None) |
120 if not filterRule: |
122 if not filterRule: |
121 filterRule, ok = QInputDialog.getText( |
123 filterRule, ok = QInputDialog.getText( |
122 self, |
124 self, |
123 self.tr("Add Custom Rule"), |
125 self.tr("Add Custom Rule"), |
124 self.tr("Write your rule here:"), |
126 self.tr("Write your rule here:"), |
125 QLineEdit.Normal) |
127 QLineEdit.EchoMode.Normal) |
126 if not ok or filterRule == "": |
128 if not ok or filterRule == "": |
127 return |
129 return |
128 |
130 |
129 from .AdBlockRule import AdBlockRule |
131 from .AdBlockRule import AdBlockRule |
130 rule = AdBlockRule(filterRule, self.__subscription) |
132 rule = AdBlockRule(filterRule, self.__subscription) |
140 not self.__subscription.canEditRules() or |
142 not self.__subscription.canEditRules() or |
141 item == self.__topItem |
143 item == self.__topItem |
142 ): |
144 ): |
143 return |
145 return |
144 |
146 |
145 offset = item.data(0, Qt.UserRole) |
147 offset = item.data(0, Qt.ItemDataRole.UserRole) |
146 self.__subscription.removeRule(offset) |
148 self.__subscription.removeRule(offset) |
147 self.deleteItem(item) |
149 self.deleteItem(item) |
148 |
150 |
149 def __contextMenuRequested(self, pos): |
151 def __contextMenuRequested(self, pos): |
150 """ |
152 """ |
179 if itm is None or self.__itemChangingBlock: |
181 if itm is None or self.__itemChangingBlock: |
180 return |
182 return |
181 |
183 |
182 self.__itemChangingBlock = True |
184 self.__itemChangingBlock = True |
183 |
185 |
184 offset = itm.data(0, Qt.UserRole) |
186 offset = itm.data(0, Qt.ItemDataRole.UserRole) |
185 oldRule = self.__subscription.rule(offset) |
187 oldRule = self.__subscription.rule(offset) |
186 |
188 |
187 if itm.checkState(0) == Qt.Unchecked and oldRule.isEnabled(): |
189 if ( |
|
190 itm.checkState(0) == Qt.CheckState.Unchecked and |
|
191 oldRule.isEnabled() |
|
192 ): |
188 # Disable rule |
193 # Disable rule |
189 rule = self.__subscription.setRuleEnabled(offset, False) |
194 rule = self.__subscription.setRuleEnabled(offset, False) |
190 self.__adjustItemFeatures(itm, rule) |
195 self.__adjustItemFeatures(itm, rule) |
191 elif itm.checkState(0) == Qt.Checked and not oldRule.isEnabled(): |
196 elif ( |
|
197 itm.checkState(0) == Qt.CheckState.Checked and |
|
198 not oldRule.isEnabled() |
|
199 ): |
192 # Enable rule |
200 # Enable rule |
193 rule = self.__subscription.setRuleEnabled(offset, True) |
201 rule = self.__subscription.setRuleEnabled(offset, True) |
194 self.__adjustItemFeatures(itm, rule) |
202 self.__adjustItemFeatures(itm, rule) |
195 elif self.__subscription.canEditRules(): |
203 elif self.__subscription.canEditRules(): |
196 from .AdBlockRule import AdBlockRule |
204 from .AdBlockRule import AdBlockRule |
231 @type AdBlockRule |
239 @type AdBlockRule |
232 """ |
240 """ |
233 if not rule.isEnabled(): |
241 if not rule.isEnabled(): |
234 font = QFont() |
242 font = QFont() |
235 font.setItalic(True) |
243 font.setItalic(True) |
236 itm.setForeground(0, QColor(Qt.gray)) |
244 itm.setForeground(0, QColor(Qt.GlobalColor.gray)) |
237 |
245 |
238 if not rule.isComment() and not rule.isHeader(): |
246 if not rule.isComment() and not rule.isHeader(): |
239 itm.setFlags(itm.flags() | Qt.ItemIsUserCheckable) |
247 itm.setFlags(itm.flags() | Qt.ItemFlag.ItemIsUserCheckable) |
240 itm.setCheckState(0, Qt.Unchecked) |
248 itm.setCheckState(0, Qt.CheckState.Unchecked) |
241 itm.setFont(0, font) |
249 itm.setFont(0, font) |
242 |
250 |
243 return |
251 return |
244 |
252 |
245 itm.setFlags(itm.flags() | Qt.ItemIsUserCheckable) |
253 itm.setFlags(itm.flags() | Qt.ItemFlag.ItemIsUserCheckable) |
246 itm.setCheckState(0, Qt.Checked) |
254 itm.setCheckState(0, Qt.CheckState.Checked) |
247 |
255 |
248 if rule.isCSSRule(): |
256 if rule.isCSSRule(): |
249 itm.setForeground(0, QColor(Qt.darkBlue)) |
257 itm.setForeground(0, QColor(Qt.GlobalColor.darkBlue)) |
250 itm.setFont(0, QFont()) |
258 itm.setFont(0, QFont()) |
251 elif rule.isException(): |
259 elif rule.isException(): |
252 itm.setForeground(0, QColor(Qt.darkGreen)) |
260 itm.setForeground(0, QColor(Qt.GlobalColor.darkGreen)) |
253 itm.setFont(0, QFont()) |
261 itm.setFont(0, QFont()) |
254 else: |
262 else: |
255 itm.setForeground(0, QColor()) |
263 itm.setForeground(0, QColor()) |
256 itm.setFont(0, QFont()) |
264 itm.setFont(0, QFont()) |
257 |
265 |
261 |
269 |
262 @param evt key press event |
270 @param evt key press event |
263 @type QKeyEvent |
271 @type QKeyEvent |
264 """ |
272 """ |
265 if ( |
273 if ( |
266 evt.key() == Qt.Key_C and |
274 evt.key() == Qt.Key.Key_C and |
267 evt.modifiers() & Qt.ControlModifier |
275 evt.modifiers() & Qt.KeyboardModifier.ControlModifier |
268 ): |
276 ): |
269 self.__copyFilter() |
277 self.__copyFilter() |
270 elif evt.key() == Qt.Key_Delete: |
278 elif evt.key() == Qt.Key.Key_Delete: |
271 self.removeRule() |
279 self.removeRule() |
272 else: |
280 else: |
273 super(AdBlockTreeWidget, self).keyPressEvent(evt) |
281 super(AdBlockTreeWidget, self).keyPressEvent(evt) |