48 @signal preferencesChanged() emitted to react on changed preferences |
48 @signal preferencesChanged() emitted to react on changed preferences |
49 """ |
49 """ |
50 sourceFile = pyqtSignal(str, int) |
50 sourceFile = pyqtSignal(str, int) |
51 preferencesChanged = pyqtSignal() |
51 preferencesChanged = pyqtSignal() |
52 |
52 |
53 ThreadIdRole = Qt.UserRole + 1 |
53 ThreadIdRole = Qt.ItemDataRole.UserRole + 1 |
54 DebuggerStateRole = Qt.UserRole + 2 |
54 DebuggerStateRole = Qt.ItemDataRole.UserRole + 2 |
55 |
55 |
56 # Map debug state to icon name |
56 # Map debug state to icon name |
57 StateIcon = { |
57 StateIcon = { |
58 "broken": "break", |
58 "broken": "break", |
59 "exception": "exceptions", |
59 "exception": "exceptions", |
91 |
91 |
92 self.__mainLayout = QVBoxLayout() |
92 self.__mainLayout = QVBoxLayout() |
93 self.__mainLayout.setContentsMargins(0, 3, 0, 0) |
93 self.__mainLayout.setContentsMargins(0, 3, 0, 0) |
94 self.setLayout(self.__mainLayout) |
94 self.setLayout(self.__mainLayout) |
95 |
95 |
96 self.__mainSplitter = QSplitter(Qt.Vertical, self) |
96 self.__mainSplitter = QSplitter(Qt.Orientation.Vertical, self) |
97 self.__mainLayout.addWidget(self.__mainSplitter) |
97 self.__mainLayout.addWidget(self.__mainSplitter) |
98 |
98 |
99 # add the viewer showing the connected debug backends |
99 # add the viewer showing the connected debug backends |
100 self.__debuggersWidget = QWidget() |
100 self.__debuggersWidget = QWidget() |
101 self.__debuggersLayout = QVBoxLayout(self.__debuggersWidget) |
101 self.__debuggersLayout = QVBoxLayout(self.__debuggersWidget) |
133 self.glvWidgetHLayout = QHBoxLayout() |
133 self.glvWidgetHLayout = QHBoxLayout() |
134 self.glvWidgetHLayout.setContentsMargins(3, 3, 3, 3) |
134 self.glvWidgetHLayout.setContentsMargins(3, 3, 3, 3) |
135 |
135 |
136 self.globalsFilterEdit = QLineEdit(self.glvWidget) |
136 self.globalsFilterEdit = QLineEdit(self.glvWidget) |
137 self.globalsFilterEdit.setSizePolicy( |
137 self.globalsFilterEdit.setSizePolicy( |
138 QSizePolicy.Expanding, QSizePolicy.Fixed) |
138 QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed) |
139 self.glvWidgetHLayout.addWidget(self.globalsFilterEdit) |
139 self.glvWidgetHLayout.addWidget(self.globalsFilterEdit) |
140 self.globalsFilterEdit.setToolTip( |
140 self.globalsFilterEdit.setToolTip( |
141 self.tr("Enter regular expression patterns separated by ';'" |
141 self.tr("Enter regular expression patterns separated by ';'" |
142 " to define variable filters. ")) |
142 " to define variable filters. ")) |
143 self.globalsFilterEdit.setWhatsThis( |
143 self.globalsFilterEdit.setWhatsThis( |
172 self.lvWidgetHLayout1 = QHBoxLayout() |
172 self.lvWidgetHLayout1 = QHBoxLayout() |
173 self.lvWidgetHLayout1.setContentsMargins(3, 3, 3, 3) |
173 self.lvWidgetHLayout1.setContentsMargins(3, 3, 3, 3) |
174 |
174 |
175 self.stackComboBox = QComboBox(self.lvWidget) |
175 self.stackComboBox = QComboBox(self.lvWidget) |
176 self.stackComboBox.setSizePolicy( |
176 self.stackComboBox.setSizePolicy( |
177 QSizePolicy.Expanding, QSizePolicy.Fixed) |
177 QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed) |
178 self.lvWidgetHLayout1.addWidget(self.stackComboBox) |
178 self.lvWidgetHLayout1.addWidget(self.stackComboBox) |
179 |
179 |
180 self.sourceButton = QPushButton(self.tr('Source'), self.lvWidget) |
180 self.sourceButton = QPushButton(self.tr('Source'), self.lvWidget) |
181 self.lvWidgetHLayout1.addWidget(self.sourceButton) |
181 self.lvWidgetHLayout1.addWidget(self.sourceButton) |
182 self.sourceButton.setEnabled(False) |
182 self.sourceButton.setEnabled(False) |
188 self.lvWidgetHLayout2 = QHBoxLayout() |
188 self.lvWidgetHLayout2 = QHBoxLayout() |
189 self.lvWidgetHLayout2.setContentsMargins(3, 3, 3, 3) |
189 self.lvWidgetHLayout2.setContentsMargins(3, 3, 3, 3) |
190 |
190 |
191 self.localsFilterEdit = QLineEdit(self.lvWidget) |
191 self.localsFilterEdit = QLineEdit(self.lvWidget) |
192 self.localsFilterEdit.setSizePolicy( |
192 self.localsFilterEdit.setSizePolicy( |
193 QSizePolicy.Expanding, QSizePolicy.Fixed) |
193 QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed) |
194 self.lvWidgetHLayout2.addWidget(self.localsFilterEdit) |
194 self.lvWidgetHLayout2.addWidget(self.localsFilterEdit) |
195 self.localsFilterEdit.setToolTip( |
195 self.localsFilterEdit.setToolTip( |
196 self.tr( |
196 self.tr( |
197 "Enter regular expression patterns separated by ';' to define " |
197 "Enter regular expression patterns separated by ';' to define " |
198 "variable filters. ")) |
198 "variable filters. ")) |
707 self.tr("<p>Debugger with ID <b>{0}</b> has been connected." |
707 self.tr("<p>Debugger with ID <b>{0}</b> has been connected." |
708 "</p>") |
708 "</p>") |
709 .format(debuggerId)) |
709 .format(debuggerId)) |
710 |
710 |
711 self.__debuggersList.header().resizeSections( |
711 self.__debuggersList.header().resizeSections( |
712 QHeaderView.ResizeToContents) |
712 QHeaderView.ResizeMode.ResizeToContents) |
713 |
713 |
714 if self.__debuggersList.topLevelItemCount() == 1: |
714 if self.__debuggersList.topLevelItemCount() == 1: |
715 # it is the only item, select it as the current one |
715 # it is the only item, select it as the current one |
716 self.__debuggersList.setCurrentItem(itm) |
716 self.__debuggersList.setCurrentItem(itm) |
717 |
717 |
721 |
721 |
722 @param debuggerId ID of the debugger to set as current debugger |
722 @param debuggerId ID of the debugger to set as current debugger |
723 @type str |
723 @type str |
724 """ |
724 """ |
725 debuggerItems = self.__debuggersList.findItems( |
725 debuggerItems = self.__debuggersList.findItems( |
726 debuggerId, Qt.MatchExactly) |
726 debuggerId, Qt.MatchFlag.MatchExactly) |
727 if debuggerItems: |
727 if debuggerItems: |
728 debuggerItem = debuggerItems[0] |
728 debuggerItem = debuggerItems[0] |
729 currentItem = self.__debuggersList.currentItem() |
729 currentItem = self.__debuggersList.currentItem() |
730 if currentItem is debuggerItem: |
730 if currentItem is debuggerItem: |
731 # nothing to do |
731 # nothing to do |
800 @type str |
800 @type str |
801 """ |
801 """ |
802 debuggerItem = None |
802 debuggerItem = None |
803 if debuggerId: |
803 if debuggerId: |
804 foundItems = self.__debuggersList.findItems( |
804 foundItems = self.__debuggersList.findItems( |
805 debuggerId, Qt.MatchExactly) |
805 debuggerId, Qt.MatchFlag.MatchExactly) |
806 if foundItems: |
806 if foundItems: |
807 debuggerItem = foundItems[0] |
807 debuggerItem = foundItems[0] |
808 if debuggerItem is None: |
808 if debuggerItem is None: |
809 debuggerItem = self.__debuggersList.currentItem() |
809 debuggerItem = self.__debuggersList.currentItem() |
810 if debuggerItem is not None: |
810 if debuggerItem is not None: |
819 debuggerItem.setIcon(0, UI.PixmapCache.getIcon(iconName)) |
819 debuggerItem.setIcon(0, UI.PixmapCache.getIcon(iconName)) |
820 debuggerItem.setData(0, self.DebuggerStateRole, state) |
820 debuggerItem.setData(0, self.DebuggerStateRole, state) |
821 debuggerItem.setText(1, stateText) |
821 debuggerItem.setText(1, stateText) |
822 |
822 |
823 self.__debuggersList.header().resizeSections( |
823 self.__debuggersList.header().resizeSections( |
824 QHeaderView.ResizeToContents) |
824 QHeaderView.ResizeMode.ResizeToContents) |
825 |
825 |
826 def __removeDebugger(self, debuggerId): |
826 def __removeDebugger(self, debuggerId): |
827 """ |
827 """ |
828 Private method to remove a debugger given its ID. |
828 Private method to remove a debugger given its ID. |
829 |
829 |
830 @param debuggerId ID of the debugger to be removed from the list |
830 @param debuggerId ID of the debugger to be removed from the list |
831 @type str |
831 @type str |
832 """ |
832 """ |
833 foundItems = self.__debuggersList.findItems( |
833 foundItems = self.__debuggersList.findItems( |
834 debuggerId, Qt.MatchExactly) |
834 debuggerId, Qt.MatchFlag.MatchExactly) |
835 if foundItems: |
835 if foundItems: |
836 index = self.__debuggersList.indexOfTopLevelItem(foundItems[0]) |
836 index = self.__debuggersList.indexOfTopLevelItem(foundItems[0]) |
837 itm = self.__debuggersList.takeTopLevelItem(index) |
837 itm = self.__debuggersList.takeTopLevelItem(index) |
838 # __IGNORE_WARNING__ |
838 # __IGNORE_WARNING__ |
839 del itm |
839 del itm |
850 @type str |
850 @type str |
851 """ |
851 """ |
852 debugStatus = -1 # i.e. running |
852 debugStatus = -1 # i.e. running |
853 |
853 |
854 debuggerItems = self.__debuggersList.findItems( |
854 debuggerItems = self.__debuggersList.findItems( |
855 debuggerId, Qt.MatchExactly) |
855 debuggerId, Qt.MatchFlag.MatchExactly) |
856 if debuggerItems: |
856 if debuggerItems: |
857 debuggerItem = debuggerItems[0] |
857 debuggerItem = debuggerItems[0] |
858 |
858 |
859 currentItem = self.__debuggersList.currentItem() |
859 currentItem = self.__debuggersList.currentItem() |
860 if currentItem.parent() is debuggerItem: |
860 if currentItem.parent() is debuggerItem: |
888 itm.setFont(0, font) |
888 itm.setFont(0, font) |
889 |
889 |
890 debuggerItem.setExpanded(debuggerItem.childCount() > 0) |
890 debuggerItem.setExpanded(debuggerItem.childCount() > 0) |
891 |
891 |
892 self.__debuggersList.header().resizeSections( |
892 self.__debuggersList.header().resizeSections( |
893 QHeaderView.ResizeToContents) |
893 QHeaderView.ResizeMode.ResizeToContents) |
894 self.__debuggersList.header().setStretchLastSection(True) |
894 self.__debuggersList.header().setStretchLastSection(True) |
895 self.__doDebuggersListUpdate = True |
895 self.__doDebuggersListUpdate = True |
896 |
896 |
897 if debugStatus == -1: |
897 if debugStatus == -1: |
898 debuggerState = "running" |
898 debuggerState = "running" |
916 @type str |
916 @type str |
917 """ |
917 """ |
918 debuggerItem = None |
918 debuggerItem = None |
919 if debuggerId: |
919 if debuggerId: |
920 foundItems = self.__debuggersList.findItems( |
920 foundItems = self.__debuggersList.findItems( |
921 debuggerId, Qt.MatchExactly) |
921 debuggerId, Qt.MatchFlag.MatchExactly) |
922 if foundItems: |
922 if foundItems: |
923 debuggerItem = foundItems[0] |
923 debuggerItem = foundItems[0] |
924 if debuggerItem is None: |
924 if debuggerItem is None: |
925 debuggerItem = self.__debuggersList.currentItem() |
925 debuggerItem = self.__debuggersList.currentItem() |
926 if debuggerItem is not None: |
926 if debuggerItem is not None: |
942 stateText = self.tr("unknown state ({0})").format(state) |
942 stateText = self.tr("unknown state ({0})").format(state) |
943 childItem.setIcon(0, UI.PixmapCache.getIcon(iconName)) |
943 childItem.setIcon(0, UI.PixmapCache.getIcon(iconName)) |
944 childItem.setText(1, stateText) |
944 childItem.setText(1, stateText) |
945 |
945 |
946 self.__debuggersList.header().resizeSections( |
946 self.__debuggersList.header().resizeSections( |
947 QHeaderView.ResizeToContents) |
947 QHeaderView.ResizeMode.ResizeToContents) |