Sun, 16 May 2021 20:07:24 +0200
Replaced all imports of PyQt5 to PyQt6 and started to replace code using obsoleted methods and adapt to the PyQt6 enum usage.
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1 | # -*- coding: utf-8 -*- |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2 | |
7923
91e843545d9a
Updated copyright for 2021.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7771
diff
changeset
|
3 | # Copyright (c) 2019 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4 | # |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7 | Module implementing a widget to visualize the Python AST for some Python |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8 | sources. |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
10 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
11 | import ast |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12 | |
8318
962bce857696
Replaced all imports of PyQt5 to PyQt6 and started to replace code using obsoleted methods and adapt to the PyQt6 enum usage.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
13 | from PyQt6.QtCore import pyqtSlot, Qt, QTimer |
962bce857696
Replaced all imports of PyQt5 to PyQt6 and started to replace code using obsoleted methods and adapt to the PyQt6 enum usage.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
14 | from PyQt6.QtGui import QBrush |
962bce857696
Replaced all imports of PyQt5 to PyQt6 and started to replace code using obsoleted methods and adapt to the PyQt6 enum usage.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
15 | from PyQt6.QtWidgets import ( |
7771
787a6b3f8c9f
Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
16 | QTreeWidget, QTreeWidgetItem, QAbstractItemView, QWidget, QVBoxLayout |
7264
bedbe458d792
Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7229
diff
changeset
|
17 | ) |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18 | |
8258
82b608e352ec
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8218
diff
changeset
|
19 | from asttokens import ASTTokens |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20 | |
7771
787a6b3f8c9f
Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
21 | from E5Gui.E5OverrideCursor import E5OverrideCursor |
787a6b3f8c9f
Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
22 | |
7705
90a9aefd4253
Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7704
diff
changeset
|
23 | import Preferences |
90a9aefd4253
Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7704
diff
changeset
|
24 | |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26 | class PythonAstViewer(QWidget): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28 | Class implementing a widget to visualize the Python AST for some Python |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29 | sources. |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30 | """ |
8143
2c730d5fd177
Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7923
diff
changeset
|
31 | StartLineRole = Qt.ItemDataRole.UserRole |
2c730d5fd177
Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7923
diff
changeset
|
32 | StartIndexRole = Qt.ItemDataRole.UserRole + 1 |
2c730d5fd177
Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7923
diff
changeset
|
33 | EndLineRole = Qt.ItemDataRole.UserRole + 2 |
2c730d5fd177
Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7923
diff
changeset
|
34 | EndIndexRole = Qt.ItemDataRole.UserRole + 3 |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36 | def __init__(self, viewmanager, parent=None): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38 | Constructor |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40 | @param viewmanager reference to the viewmanager object |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41 | @type ViewManager |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42 | @param parent reference to the parent widget |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43 | @type QWidget |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44 | """ |
8218
7c09585bd960
Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8143
diff
changeset
|
45 | super().__init__(parent) |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47 | self.__layout = QVBoxLayout(self) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48 | self.setLayout(self.__layout) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49 | self.__astWidget = QTreeWidget(self) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50 | self.__layout.addWidget(self.__astWidget) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51 | self.__layout.setContentsMargins(0, 0, 0, 0) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53 | self.__vm = viewmanager |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54 | self.__vmConnected = False |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56 | self.__editor = None |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57 | self.__source = "" |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59 | self.__astWidget.setHeaderLabels([self.tr("Node"), |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60 | self.tr("Code Range")]) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61 | self.__astWidget.setSortingEnabled(False) |
8143
2c730d5fd177
Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7923
diff
changeset
|
62 | self.__astWidget.setSelectionBehavior( |
2c730d5fd177
Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7923
diff
changeset
|
63 | QAbstractItemView.SelectionBehavior.SelectRows) |
2c730d5fd177
Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7923
diff
changeset
|
64 | self.__astWidget.setSelectionMode( |
2c730d5fd177
Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7923
diff
changeset
|
65 | QAbstractItemView.SelectionMode.SingleSelection) |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66 | self.__astWidget.setAlternatingRowColors(True) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67 | |
7705
90a9aefd4253
Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7704
diff
changeset
|
68 | self.__errorColor = QBrush( |
90a9aefd4253
Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7704
diff
changeset
|
69 | Preferences.getPython("ASTViewerErrorColor")) |
90a9aefd4253
Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7704
diff
changeset
|
70 | |
6932
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
71 | self.__astWidget.itemClicked.connect(self.__astItemClicked) |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
72 | |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73 | self.__vm.astViewerStateChanged.connect(self.__astViewerStateChanged) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
74 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75 | self.hide() |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
77 | def __editorChanged(self, editor): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
78 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
79 | Private slot to handle a change of the current editor. |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81 | @param editor reference to the current editor |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82 | @type Editor |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
84 | if editor is not self.__editor: |
6932
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
85 | if self.__editor: |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
86 | self.__editor.clearAllHighlights() |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
87 | self.__editor = editor |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
88 | if self.__editor: |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
89 | self.__loadAST() |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
90 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91 | def __editorSaved(self, editor): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
92 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
93 | Private slot to reload the AST after the connected editor was saved. |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
94 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
95 | @param editor reference to the editor that performed a save action |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96 | @type Editor |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
98 | if editor and editor is self.__editor: |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
99 | self.__loadAST() |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
100 | |
6932
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
101 | def __editorDoubleClicked(self, editor, pos, buttons): |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
102 | """ |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
103 | Private slot to handle a mouse button double click in the editor. |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
104 | |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
105 | @param editor reference to the editor, that emitted the signal |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
106 | @type Editor |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
107 | @param pos position of the double click |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
108 | @type QPoint |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
109 | @param buttons mouse buttons that were double clicked |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
110 | @type Qt.MouseButtons |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
111 | """ |
8143
2c730d5fd177
Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7923
diff
changeset
|
112 | if editor is self.__editor and buttons == Qt.MouseButton.LeftButton: |
6932
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
113 | if editor.isModified(): |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
114 | # reload the source |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
115 | QTimer.singleShot(0, self.__loadAST) |
7704
9251c4dc4f7a
Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
116 | |
9251c4dc4f7a
Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
117 | # highlight the corresponding entry |
9251c4dc4f7a
Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
118 | QTimer.singleShot(0, self.__selectItemForEditorSelection) |
9251c4dc4f7a
Started to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
119 | QTimer.singleShot(0, self.__grabFocus) |
6932
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
120 | |
7707
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7705
diff
changeset
|
121 | def __editorLanguageChanged(self, editor): |
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7705
diff
changeset
|
122 | """ |
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7705
diff
changeset
|
123 | Private slot to handle a change of the editor language. |
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7705
diff
changeset
|
124 | |
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7705
diff
changeset
|
125 | @param editor reference to the editor which changed language |
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7705
diff
changeset
|
126 | @type Editor |
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7705
diff
changeset
|
127 | """ |
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7705
diff
changeset
|
128 | if editor is self.__editor: |
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7705
diff
changeset
|
129 | QTimer.singleShot(0, self.__loadDIS) |
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7705
diff
changeset
|
130 | |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
131 | def __lastEditorClosed(self): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
132 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
133 | Private slot to handle the last editor closed signal of the view |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
134 | manager. |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
135 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
136 | self.hide() |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
137 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
138 | def show(self): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
139 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
140 | Public slot to show the AST viewer. |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
141 | """ |
8218
7c09585bd960
Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8143
diff
changeset
|
142 | super().show() |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
143 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
144 | if not self.__vmConnected: |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
145 | self.__vm.editorChangedEd.connect(self.__editorChanged) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
146 | self.__vm.editorSavedEd.connect(self.__editorSaved) |
6932
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
147 | self.__vm.editorDoubleClickedEd.connect(self.__editorDoubleClicked) |
7707
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7705
diff
changeset
|
148 | self.__vm.editorLanguageChanged.connect( |
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7705
diff
changeset
|
149 | self.__editorLanguageChanged) |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
150 | self.__vmConnected = True |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
151 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
152 | def hide(self): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
153 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
154 | Public slot to hide the AST viewer. |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
155 | """ |
8218
7c09585bd960
Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8143
diff
changeset
|
156 | super().hide() |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
157 | |
6932
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
158 | if self.__editor: |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
159 | self.__editor.clearAllHighlights() |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
160 | |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
161 | if self.__vmConnected: |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
162 | self.__vm.editorChangedEd.disconnect(self.__editorChanged) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
163 | self.__vm.editorSavedEd.disconnect(self.__editorSaved) |
6932
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
164 | self.__vm.editorDoubleClickedEd.disconnect( |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
165 | self.__editorDoubleClicked) |
7707
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7705
diff
changeset
|
166 | self.__vm.editorLanguageChanged.disconnect( |
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7705
diff
changeset
|
167 | self.__editorLanguageChanged) |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
168 | self.__vmConnected = False |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
169 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
170 | def shutdown(self): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
171 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
172 | Public method to perform shutdown actions. |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
173 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
174 | self.__editor = None |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
175 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
176 | def __astViewerStateChanged(self, on): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
177 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
178 | Private slot to toggle the display of the AST viewer. |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
179 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
180 | @param on flag indicating to show the AST |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
181 | @type bool |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
182 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
183 | editor = self.__vm.activeWindow() |
7707
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7705
diff
changeset
|
184 | if on: |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
185 | if editor is not self.__editor: |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
186 | self.__editor = editor |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
187 | self.show() |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
188 | self.__loadAST() |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
189 | else: |
6932
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
190 | self.hide() |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
191 | self.__editor = None |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
192 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
193 | def __createErrorItem(self, error): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
194 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
195 | Private method to create a top level error item. |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
196 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
197 | @param error error message |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
198 | @type str |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
199 | @return generated item |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
200 | @rtype QTreeWidgetItem |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
201 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
202 | itm = QTreeWidgetItem(self.__astWidget, [error]) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
203 | itm.setFirstColumnSpanned(True) |
7705
90a9aefd4253
Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7704
diff
changeset
|
204 | itm.setForeground(0, self.__errorColor) |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
205 | return itm |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
206 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
207 | def __loadAST(self): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
208 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
209 | Private method to generate the AST from the source of the current |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
210 | editor and visualize it. |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
211 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
212 | if not self.__editor: |
7707
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7705
diff
changeset
|
213 | self.__createErrorItem(self.tr( |
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7705
diff
changeset
|
214 | "No editor has been opened." |
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7705
diff
changeset
|
215 | )) |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
216 | return |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
217 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
218 | self.__astWidget.clear() |
6932
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
219 | self.__editor.clearAllHighlights() |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
220 | |
7707
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7705
diff
changeset
|
221 | source = self.__editor.text() |
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7705
diff
changeset
|
222 | if not source.strip(): |
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7705
diff
changeset
|
223 | # empty editor or white space only |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
224 | self.__createErrorItem(self.tr( |
7707
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7705
diff
changeset
|
225 | "The current editor does not contain any source code." |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
226 | )) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
227 | return |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
228 | |
7707
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7705
diff
changeset
|
229 | if not self.__editor.isPyFile(): |
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7705
diff
changeset
|
230 | self.__createErrorItem(self.tr( |
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7705
diff
changeset
|
231 | "The current editor does not contain Python source code." |
6abcf4275d0e
Added a viewer to visualize Python byte code generated from a Python traceback of an exception as an additional tab of the debug viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7705
diff
changeset
|
232 | )) |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
233 | return |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
234 | |
7771
787a6b3f8c9f
Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
235 | with E5OverrideCursor(): |
787a6b3f8c9f
Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
236 | try: |
787a6b3f8c9f
Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
237 | # generate the AST |
787a6b3f8c9f
Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
238 | root = ast.parse(source, self.__editor.getFileName(), "exec") |
787a6b3f8c9f
Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
239 | self.__markTextRanges(root, source) |
787a6b3f8c9f
Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
240 | astValid = True |
787a6b3f8c9f
Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
241 | except Exception as exc: |
787a6b3f8c9f
Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
242 | self.__createErrorItem(str(exc)) |
787a6b3f8c9f
Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
243 | astValid = False |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
244 | |
7771
787a6b3f8c9f
Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
245 | if astValid: |
787a6b3f8c9f
Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
246 | self.setUpdatesEnabled(False) |
787a6b3f8c9f
Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
247 | |
787a6b3f8c9f
Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
248 | # populate the AST tree |
787a6b3f8c9f
Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
249 | self.__populateNode(self.tr("Module"), root, self.__astWidget) |
787a6b3f8c9f
Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
250 | self.__selectItemForEditorSelection() |
787a6b3f8c9f
Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
251 | QTimer.singleShot(0, self.__resizeColumns) |
787a6b3f8c9f
Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
252 | |
787a6b3f8c9f
Optimized the use of Waiting Cursors by using a specialized context manager class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7707
diff
changeset
|
253 | self.setUpdatesEnabled(True) |
6932
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
254 | |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
255 | self.__grabFocus() |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
256 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
257 | def __populateNode(self, name, nodeOrFields, parent): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
258 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
259 | Private method to populate the tree view with a node. |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
260 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
261 | @param name name of the node |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
262 | @type str |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
263 | @param nodeOrFields reference to the node or a list node fields |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
264 | @type ast.AST or list |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
265 | @param parent reference to the parent item |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
266 | @type QTreeWidget or QTreeWidgetItem |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
267 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
268 | if isinstance(nodeOrFields, ast.AST): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
269 | fields = [(key, val) for key, val in ast.iter_fields(nodeOrFields)] |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
270 | value = nodeOrFields.__class__.__name__ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
271 | elif isinstance(nodeOrFields, list): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
272 | fields = list(enumerate(nodeOrFields)) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
273 | if len(nodeOrFields) == 0: |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
274 | value = "[]" |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
275 | else: |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
276 | value = "[...]" |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
277 | else: |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
278 | fields = [] |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
279 | value = repr(nodeOrFields) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
280 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
281 | text = self.tr("{0}: {1}").format(name, value) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
282 | itm = QTreeWidgetItem(parent, [text]) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
283 | itm.setExpanded(True) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
284 | |
7264
bedbe458d792
Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7229
diff
changeset
|
285 | if ( |
bedbe458d792
Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7229
diff
changeset
|
286 | hasattr(nodeOrFields, "lineno") and |
bedbe458d792
Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7229
diff
changeset
|
287 | hasattr(nodeOrFields, "col_offset") |
bedbe458d792
Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7229
diff
changeset
|
288 | ): |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
289 | itm.setData(0, self.StartLineRole, nodeOrFields.lineno) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
290 | itm.setData(0, self.StartIndexRole, nodeOrFields.col_offset) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
291 | startStr = self.tr("{0},{1}").format( |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
292 | nodeOrFields.lineno, nodeOrFields.col_offset) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
293 | endStr = "" |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
294 | |
7264
bedbe458d792
Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7229
diff
changeset
|
295 | if ( |
bedbe458d792
Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7229
diff
changeset
|
296 | hasattr(nodeOrFields, "end_lineno") and |
bedbe458d792
Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7229
diff
changeset
|
297 | hasattr(nodeOrFields, "end_col_offset") |
bedbe458d792
Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7229
diff
changeset
|
298 | ): |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
299 | itm.setData(0, self.EndLineRole, nodeOrFields.end_lineno) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
300 | itm.setData(0, self.EndIndexRole, |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
301 | nodeOrFields.end_col_offset) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
302 | endStr = self.tr("{0},{1}").format( |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
303 | nodeOrFields.end_lineno, nodeOrFields.end_col_offset) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
304 | else: |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
305 | itm.setData(0, self.EndLineRole, nodeOrFields.lineno) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
306 | itm.setData(0, self.EndIndexRole, |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
307 | nodeOrFields.col_offset + 1) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
308 | if endStr: |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
309 | rangeStr = self.tr("{0} - {1}").format(startStr, endStr) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
310 | else: |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
311 | rangeStr = startStr |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
312 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
313 | itm.setText(1, rangeStr) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
314 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
315 | for fieldName, fieldValue in fields: |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
316 | self.__populateNode(fieldName, fieldValue, itm) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
317 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
318 | def __markTextRanges(self, tree, source): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
319 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
320 | Private method to modify the AST nodes with end_lineno and |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
321 | end_col_offset information. |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
322 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
323 | Note: The modifications are only done for nodes containing lineno and |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
324 | col_offset attributes. |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
325 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
326 | @param tree reference to the AST to be modified |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
327 | @type ast.AST |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
328 | @param source source code the AST was created from |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
329 | @type str |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
330 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
331 | ASTTokens(source, tree=tree) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
332 | for child in ast.walk(tree): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
333 | if hasattr(child, 'last_token'): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
334 | child.end_lineno, child.end_col_offset = child.last_token.end |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
335 | if hasattr(child, 'lineno'): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
336 | # Fixes problems with some nodes like binop |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
337 | child.lineno, child.col_offset = child.first_token.start |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
338 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
339 | def __findClosestContainingNode(self, node, textRange): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
340 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
341 | Private method to search for the AST node that contains a range |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
342 | closest. |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
343 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
344 | @param node AST node to start searching at |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
345 | @type ast.AST |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
346 | @param textRange tuple giving the start and end positions |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
347 | @type tuple of (int, int, int, int) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
348 | @return best matching node |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
349 | @rtype ast.AST |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
350 | """ |
6932
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
351 | if textRange in [(-1, -1, -1, -1), (0, -1, 0, -1)]: |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
352 | # no valid range, i.e. no selection |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
353 | return None |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
354 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
355 | # first look among children |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
356 | for child in ast.iter_child_nodes(node): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
357 | result = self.__findClosestContainingNode(child, textRange) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
358 | if result is not None: |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
359 | return result |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
360 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
361 | # no suitable child was found |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
362 | if hasattr(node, "lineno") and self.__rangeContainsSmaller( |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
363 | (node.lineno, node.col_offset, node.end_lineno, |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
364 | node.end_col_offset), textRange): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
365 | return node |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
366 | else: |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
367 | # nope |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
368 | return None |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
369 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
370 | def __findClosestContainingItem(self, itm, textRange): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
371 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
372 | Private method to search for the tree item that contains a range |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
373 | closest. |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
374 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
375 | @param itm tree item to start searching at |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
376 | @type QTreeWidgetItem |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
377 | @param textRange tuple giving the start and end positions |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
378 | @type tuple of (int, int, int, int) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
379 | @return best matching tree item |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
380 | @rtype QTreeWidgetItem |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
381 | """ |
6932
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
382 | if textRange in [(-1, -1, -1, -1), (0, -1, 0, -1)]: |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
383 | # no valid range, i.e. no selection |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
384 | return None |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
385 | |
6932
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
386 | lineno = itm.data(0, self.StartLineRole) |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
387 | if lineno is not None and not self.__rangeContainsSmallerOrEqual( |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
388 | (itm.data(0, self.StartLineRole), itm.data(0, self.StartIndexRole), |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
389 | itm.data(0, self.EndLineRole), itm.data(0, self.EndIndexRole)), |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
390 | textRange): |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
391 | return None |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
392 | |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
393 | # first look among children |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
394 | for index in range(itm.childCount()): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
395 | child = itm.child(index) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
396 | result = self.__findClosestContainingItem(child, textRange) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
397 | if result is not None: |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
398 | return result |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
399 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
400 | # no suitable child was found |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
401 | lineno = itm.data(0, self.StartLineRole) |
6932
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
402 | if lineno is not None and self.__rangeContainsSmallerOrEqual( |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
403 | (itm.data(0, self.StartLineRole), itm.data(0, self.StartIndexRole), |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
404 | itm.data(0, self.EndLineRole), itm.data(0, self.EndIndexRole)), |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
405 | textRange): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
406 | return itm |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
407 | else: |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
408 | # nope |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
409 | return None |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
410 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
411 | def __resizeColumns(self): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
412 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
413 | Private method to resize the columns to suitable values. |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
414 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
415 | for col in range(self.__astWidget.columnCount()): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
416 | self.__astWidget.resizeColumnToContents(col) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
417 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
418 | rangeSize = self.__astWidget.columnWidth(1) + 10 |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
419 | # 10 px extra for the range |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
420 | nodeSize = max(400, self.__astWidget.viewport().width() - rangeSize) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
421 | self.__astWidget.setColumnWidth(0, nodeSize) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
422 | self.__astWidget.setColumnWidth(1, rangeSize) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
423 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
424 | def resizeEvent(self, evt): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
425 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
426 | Protected method to handle resize events. |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
427 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
428 | @param evt resize event |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
429 | @type QResizeEvent |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
430 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
431 | # just adjust the sizes of the columns |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
432 | self.__resizeColumns() |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
433 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
434 | def __rangeContainsSmaller(self, first, second): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
435 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
436 | Private method to check, if second is contained in first. |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
437 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
438 | @param first text range to check against |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
439 | @type tuple of (int, int, int, int) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
440 | @param second text range to check for |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
441 | @type tuple of (int, int, int, int) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
442 | @return flag indicating second is contained in first |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
443 | @rtype bool |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
444 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
445 | firstStart = first[:2] |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
446 | firstEnd = first[2:] |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
447 | secondStart = second[:2] |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
448 | secondEnd = second[2:] |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
449 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
450 | return ( |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
451 | (firstStart < secondStart and firstEnd > secondEnd) or |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
452 | (firstStart == secondStart and firstEnd > secondEnd) or |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
453 | (firstStart < secondStart and firstEnd == secondEnd) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
454 | ) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
455 | |
6932
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
456 | def __rangeContainsSmallerOrEqual(self, first, second): |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
457 | """ |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
458 | Private method to check, if second is contained in or equal to first. |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
459 | |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
460 | @param first text range to check against |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
461 | @type tuple of (int, int, int, int) |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
462 | @param second text range to check for |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
463 | @type tuple of (int, int, int, int) |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
464 | @return flag indicating second is contained in or equal to first |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
465 | @rtype bool |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
466 | """ |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
467 | return first == second or self.__rangeContainsSmaller(first, second) |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
468 | |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
469 | def __clearSelection(self): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
470 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
471 | Private method to clear all selected items. |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
472 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
473 | for itm in self.__astWidget.selectedItems(): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
474 | itm.setSelected(False) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
475 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
476 | def __selectItemForEditorSelection(self): |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
477 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
478 | Private slot to select the item corresponding to an editor selection. |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
479 | """ |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
480 | # step 1: clear all selected items |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
481 | self.__clearSelection() |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
482 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
483 | # step 2: retrieve the editor selection |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
484 | selection = self.__editor.getSelection() |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
485 | # make the line numbers 1-based |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
486 | selection = (selection[0] + 1, selection[1], |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
487 | selection[2] + 1, selection[3]) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
488 | |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
489 | # step 3: search the corresponding item, scroll to it and select it |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
490 | itm = self.__findClosestContainingItem( |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
491 | self.__astWidget.topLevelItem(0), selection) |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
492 | if itm: |
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
493 | self.__astWidget.scrollToItem( |
8143
2c730d5fd177
Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7923
diff
changeset
|
494 | itm, QAbstractItemView.ScrollHint.PositionAtCenter) |
6931
faac36ec9d76
Started implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
495 | itm.setSelected(True) |
6932
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
496 | |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
497 | def __grabFocus(self): |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
498 | """ |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
499 | Private method to grab the input focus. |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
500 | """ |
8143
2c730d5fd177
Changed the use of PyQt enums because the way they were used previously is deprecated since two years and replaced some deprecated Qt stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7923
diff
changeset
|
501 | self.__astWidget.setFocus(Qt.FocusReason.OtherFocusReason) |
6932
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
502 | |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
503 | @pyqtSlot(QTreeWidgetItem, int) |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
504 | def __astItemClicked(self, itm, column): |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
505 | """ |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
506 | Private slot handling a user click on an AST node item. |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
507 | |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
508 | @param itm reference to the clicked item |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
509 | @type QTreeWidgetItem |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
510 | @param column column number of the click |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
511 | @type int |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
512 | """ |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
513 | self.__editor.clearAllHighlights() |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
514 | |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
515 | if itm is not None: |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
516 | startLine = itm.data(0, self.StartLineRole) |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
517 | if startLine is not None: |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
518 | startIndex = itm.data(0, self.StartIndexRole) |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
519 | endLine = itm.data(0, self.EndLineRole) |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
520 | endIndex = itm.data(0, self.EndIndexRole) |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
521 | |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
522 | self.__editor.gotoLine(startLine, firstVisible=True, |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
523 | expand=True) |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
524 | self.__editor.setHighlight(startLine - 1, startIndex, |
8a3df4c6ac9a
Continued implementing the Python AST Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6931
diff
changeset
|
525 | endLine - 1, endIndex) |
7705
90a9aefd4253
Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7704
diff
changeset
|
526 | |
90a9aefd4253
Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7704
diff
changeset
|
527 | @pyqtSlot() |
90a9aefd4253
Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7704
diff
changeset
|
528 | def preferencesChanged(self): |
90a9aefd4253
Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7704
diff
changeset
|
529 | """ |
90a9aefd4253
Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7704
diff
changeset
|
530 | Public slot handling changes of the AST viewer settings. |
90a9aefd4253
Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7704
diff
changeset
|
531 | """ |
90a9aefd4253
Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7704
diff
changeset
|
532 | self.__errorColor = QBrush( |
90a9aefd4253
Finished to implement a Python Disassembly Viewer showing the byte code generated from a Python source file loaded in an editor pane.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7704
diff
changeset
|
533 | Preferences.getPython("ASTViewerErrorColor")) |