|
1 # -*- coding: utf-8 -*- |
|
2 |
|
3 # Copyright (c) 2002 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> |
|
4 # |
|
5 |
|
6 """ |
|
7 Module implementing the variables filter dialog. |
|
8 """ |
|
9 |
|
10 from PyQt5.QtCore import Qt |
|
11 from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QListWidgetItem |
|
12 |
|
13 from Debugger.Config import ConfigVarTypeDispStrings |
|
14 import Preferences |
|
15 |
|
16 from .Ui_VariablesFilterDialog import Ui_VariablesFilterDialog |
|
17 |
|
18 |
|
19 class VariablesFilterDialog(QDialog, Ui_VariablesFilterDialog): |
|
20 """ |
|
21 Class implementing the variables filter dialog. |
|
22 |
|
23 It opens a dialog window for the configuration of the variables type |
|
24 filter to be applied during a debugging session. |
|
25 """ |
|
26 def __init__(self, parent=None, name=None, modal=False): |
|
27 """ |
|
28 Constructor |
|
29 |
|
30 @param parent parent widget of this dialog (QWidget) |
|
31 @param name name of this dialog (string) |
|
32 @param modal flag to indicate a modal dialog (boolean) |
|
33 """ |
|
34 super().__init__(parent) |
|
35 if name: |
|
36 self.setObjectName(name) |
|
37 self.setModal(modal) |
|
38 self.setupUi(self) |
|
39 |
|
40 self.defaultButton = self.buttonBox.addButton( |
|
41 self.tr("Save Default"), QDialogButtonBox.ButtonRole.ActionRole) |
|
42 |
|
43 #populate the list widgets and set the default selection |
|
44 for widget in self.localsList, self.globalsList: |
|
45 for varType, varTypeStr in ConfigVarTypeDispStrings.items(): |
|
46 itm = QListWidgetItem(self.tr(varTypeStr), widget) |
|
47 itm.setData(Qt.ItemDataRole.UserRole, varType) |
|
48 itm.setFlags(Qt.ItemFlag.ItemIsEnabled | |
|
49 Qt.ItemFlag.ItemIsUserCheckable) |
|
50 itm.setCheckState(Qt.CheckState.Unchecked) |
|
51 widget.addItem(itm) |
|
52 |
|
53 lDefaultFilter, gDefaultFilter = Preferences.getVarFilters() |
|
54 self.setSelection(lDefaultFilter, gDefaultFilter) |
|
55 |
|
56 def getSelection(self): |
|
57 """ |
|
58 Public slot to retrieve the current selections. |
|
59 |
|
60 @return tuple of lists containing the variable filters. The first list |
|
61 is the locals variables filter, the second the globals variables |
|
62 filter. |
|
63 @rtype tuple of (list of str, list of str) |
|
64 """ |
|
65 lList = [] |
|
66 for row in range(self.localsList.count()): |
|
67 itm = self.localsList.item(row) |
|
68 if itm.checkState() == Qt.CheckState.Unchecked: |
|
69 lList.append(itm.data(Qt.ItemDataRole.UserRole)) |
|
70 |
|
71 gList = [] |
|
72 for row in range(self.globalsList.count()): |
|
73 itm = self.globalsList.item(row) |
|
74 if itm.checkState() == Qt.CheckState.Unchecked: |
|
75 gList.append(itm.data(Qt.ItemDataRole.UserRole)) |
|
76 return (lList, gList) |
|
77 |
|
78 def setSelection(self, lList, gList): |
|
79 """ |
|
80 Public slot to set the current selection. |
|
81 |
|
82 @param lList local variables filter |
|
83 @type list of str |
|
84 @param gList global variables filter |
|
85 @type list of str |
|
86 """ |
|
87 for row in range(self.localsList.count()): |
|
88 itm = self.localsList.item(row) |
|
89 if itm.data(Qt.ItemDataRole.UserRole) in lList: |
|
90 itm.setCheckState(Qt.CheckState.Unchecked) |
|
91 else: |
|
92 itm.setCheckState(Qt.CheckState.Checked) |
|
93 |
|
94 for row in range(self.globalsList.count()): |
|
95 itm = self.globalsList.item(row) |
|
96 if itm.data(Qt.ItemDataRole.UserRole) in gList: |
|
97 itm.setCheckState(Qt.CheckState.Unchecked) |
|
98 else: |
|
99 itm.setCheckState(Qt.CheckState.Checked) |
|
100 |
|
101 def on_buttonBox_clicked(self, button): |
|
102 """ |
|
103 Private slot called by a button of the button box clicked. |
|
104 |
|
105 @param button button that was clicked (QAbstractButton) |
|
106 """ |
|
107 if button == self.defaultButton: |
|
108 Preferences.setVarFilters(self.getSelection()) |