eric6/UI/PythonDisViewer.py

changeset 8265
0090cfa83159
parent 8260
2161475d9639
equal deleted inserted replaced
8264:f95dde35d0ab 8265:0090cfa83159
30 30
31 class PythonDisViewerModes(enum.Enum): 31 class PythonDisViewerModes(enum.Enum):
32 """ 32 """
33 Class implementing the disassembly viewer operation modes. 33 Class implementing the disassembly viewer operation modes.
34 """ 34 """
35 SourceDisassemblyMode = 0 35 SOURCEDISASSEMBLY = 0
36 TracebackMode = 1 36 TRACEBACK = 1
37 37
38 38
39 class PythonDisViewer(QWidget, Ui_PythonDisViewer): 39 class PythonDisViewer(QWidget, Ui_PythonDisViewer):
40 """ 40 """
41 Class implementing a widget to visualize the Python Disassembly for some 41 Class implementing a widget to visualize the Python Disassembly for some
44 StartLineRole = Qt.ItemDataRole.UserRole 44 StartLineRole = Qt.ItemDataRole.UserRole
45 EndLineRole = Qt.ItemDataRole.UserRole + 1 45 EndLineRole = Qt.ItemDataRole.UserRole + 1
46 CodeInfoRole = Qt.ItemDataRole.UserRole + 2 46 CodeInfoRole = Qt.ItemDataRole.UserRole + 2
47 47
48 def __init__(self, viewmanager, 48 def __init__(self, viewmanager,
49 mode=PythonDisViewerModes.SourceDisassemblyMode, 49 mode=PythonDisViewerModes.SOURCEDISASSEMBLY,
50 parent=None): 50 parent=None):
51 """ 51 """
52 Constructor 52 Constructor
53 53
54 @param viewmanager reference to the viewmanager object 54 @param viewmanager reference to the viewmanager object
76 self.tr("Parameters"), self.tr("Interpreted Parameters")]) 76 self.tr("Parameters"), self.tr("Interpreted Parameters")])
77 self.codeInfoWidget.setHeaderLabels( 77 self.codeInfoWidget.setHeaderLabels(
78 [self.tr("Key"), self.tr("Value")]) 78 [self.tr("Key"), self.tr("Value")])
79 79
80 self.__disMenu = QMenu(self.disWidget) 80 self.__disMenu = QMenu(self.disWidget)
81 if self.__mode == PythonDisViewerModes.SourceDisassemblyMode: 81 if self.__mode == PythonDisViewerModes.SOURCEDISASSEMBLY:
82 self.__codeInfoAct = self.__disMenu.addAction( 82 self.__codeInfoAct = self.__disMenu.addAction(
83 self.tr("Show Code Info"), self.__showCodeInfo) 83 self.tr("Show Code Info"), self.__showCodeInfo)
84 self.__disMenu.addSeparator() 84 self.__disMenu.addSeparator()
85 self.__disMenu.addAction( 85 self.__disMenu.addAction(
86 self.tr('Expand All'), self.__expandAllDis) 86 self.tr('Expand All'), self.__expandAllDis)
89 self.__disMenu.addSeparator() 89 self.__disMenu.addSeparator()
90 self.__disMenu.addAction( 90 self.__disMenu.addAction(
91 self.tr('Configure...'), self.__configure) 91 self.tr('Configure...'), self.__configure)
92 92
93 self.__codeInfoMenu = QMenu(self.codeInfoWidget) 93 self.__codeInfoMenu = QMenu(self.codeInfoWidget)
94 if self.__mode == PythonDisViewerModes.SourceDisassemblyMode: 94 if self.__mode == PythonDisViewerModes.SOURCEDISASSEMBLY:
95 self.__codeInfoMenu.addAction( 95 self.__codeInfoMenu.addAction(
96 self.tr("Hide"), self.codeInfoWidget.hide) 96 self.tr("Hide"), self.codeInfoWidget.hide)
97 self.__codeInfoMenu.addAction( 97 self.__codeInfoMenu.addAction(
98 self.tr('Expand All'), self.__expandAllCodeInfo) 98 self.tr('Expand All'), self.__expandAllCodeInfo)
99 self.__codeInfoMenu.addAction( 99 self.__codeInfoMenu.addAction(
110 Preferences.getPython("DisViewerLabeledColor")) 110 Preferences.getPython("DisViewerLabeledColor"))
111 111
112 self.__showCodeInfoDetails = Preferences.getPython( 112 self.__showCodeInfoDetails = Preferences.getPython(
113 "DisViewerExpandCodeInfoDetails") 113 "DisViewerExpandCodeInfoDetails")
114 114
115 if self.__mode == PythonDisViewerModes.SourceDisassemblyMode: 115 if self.__mode == PythonDisViewerModes.SOURCEDISASSEMBLY:
116 self.disWidget.itemClicked.connect(self.__disItemClicked) 116 self.disWidget.itemClicked.connect(self.__disItemClicked)
117 self.disWidget.itemCollapsed.connect(self.__resizeDisColumns) 117 self.disWidget.itemCollapsed.connect(self.__resizeDisColumns)
118 self.disWidget.itemExpanded.connect(self.__resizeDisColumns) 118 self.disWidget.itemExpanded.connect(self.__resizeDisColumns)
119 self.disWidget.customContextMenuRequested.connect( 119 self.disWidget.customContextMenuRequested.connect(
120 self.__disContextMenuRequested) 120 self.__disContextMenuRequested)
122 self.codeInfoWidget.itemCollapsed.connect(self.__resizeCodeInfoColumns) 122 self.codeInfoWidget.itemCollapsed.connect(self.__resizeCodeInfoColumns)
123 self.codeInfoWidget.itemExpanded.connect(self.__resizeCodeInfoColumns) 123 self.codeInfoWidget.itemExpanded.connect(self.__resizeCodeInfoColumns)
124 self.codeInfoWidget.customContextMenuRequested.connect( 124 self.codeInfoWidget.customContextMenuRequested.connect(
125 self.__codeInfoContextMenuRequested) 125 self.__codeInfoContextMenuRequested)
126 126
127 if self.__mode == PythonDisViewerModes.SourceDisassemblyMode: 127 if self.__mode == PythonDisViewerModes.SOURCEDISASSEMBLY:
128 self.__vm.disViewerStateChanged.connect( 128 self.__vm.disViewerStateChanged.connect(
129 self.__disViewerStateChanged) 129 self.__disViewerStateChanged)
130 130
131 self.codeInfoWidget.hide() 131 self.codeInfoWidget.hide()
132 self.hide() 132 self.hide()
133 133
134 elif self.__mode == PythonDisViewerModes.TracebackMode: 134 elif self.__mode == PythonDisViewerModes.TRACEBACK:
135 self.__styleLabels() 135 self.__styleLabels()
136 136
137 def __disContextMenuRequested(self, coord): 137 def __disContextMenuRequested(self, coord):
138 """ 138 """
139 Private slot to show the context menu of the disassembly widget. 139 Private slot to show the context menu of the disassembly widget.
140 140
141 @param coord position of the mouse pointer 141 @param coord position of the mouse pointer
142 @type QPoint 142 @type QPoint
143 """ 143 """
144 if self.__mode == PythonDisViewerModes.SourceDisassemblyMode: 144 if self.__mode == PythonDisViewerModes.SOURCEDISASSEMBLY:
145 itm = self.disWidget.itemAt(coord) 145 itm = self.disWidget.itemAt(coord)
146 self.__codeInfoAct.setEnabled(bool(itm.data(0, self.CodeInfoRole))) 146 self.__codeInfoAct.setEnabled(bool(itm.data(0, self.CodeInfoRole)))
147 self.disWidget.setCurrentItem(itm) 147 self.disWidget.setCurrentItem(itm)
148 148
149 if self.disWidget.topLevelItemCount() > 0: 149 if self.disWidget.topLevelItemCount() > 0:
215 Public slot to show the DIS viewer. 215 Public slot to show the DIS viewer.
216 """ 216 """
217 super().show() 217 super().show()
218 218
219 if ( 219 if (
220 self.__mode == PythonDisViewerModes.SourceDisassemblyMode and 220 self.__mode == PythonDisViewerModes.SOURCEDISASSEMBLY and
221 not self.__vmConnected 221 not self.__vmConnected
222 ): 222 ):
223 self.__vm.editorChangedEd.connect(self.__editorChanged) 223 self.__vm.editorChangedEd.connect(self.__editorChanged)
224 self.__vm.editorSavedEd.connect(self.__editorSaved) 224 self.__vm.editorSavedEd.connect(self.__editorSaved)
225 self.__vm.editorLineChangedEd.connect(self.__editorLineChanged) 225 self.__vm.editorLineChangedEd.connect(self.__editorLineChanged)
237 237
238 if self.__editor: 238 if self.__editor:
239 self.__editor.clearAllHighlights() 239 self.__editor.clearAllHighlights()
240 240
241 if ( 241 if (
242 self.__mode == PythonDisViewerModes.SourceDisassemblyMode and 242 self.__mode == PythonDisViewerModes.SOURCEDISASSEMBLY and
243 self.__vmConnected 243 self.__vmConnected
244 ): 244 ):
245 self.__vm.editorChangedEd.disconnect(self.__editorChanged) 245 self.__vm.editorChangedEd.disconnect(self.__editorChanged)
246 self.__vm.editorSavedEd.disconnect(self.__editorSaved) 246 self.__vm.editorSavedEd.disconnect(self.__editorSaved)
247 self.__vm.editorLineChangedEd.disconnect(self.__editorLineChanged) 247 self.__vm.editorLineChangedEd.disconnect(self.__editorLineChanged)
260 Private slot to toggle the display of the Disassembly viewer. 260 Private slot to toggle the display of the Disassembly viewer.
261 261
262 @param on flag indicating to show the Disassembly 262 @param on flag indicating to show the Disassembly
263 @type bool 263 @type bool
264 """ 264 """
265 if self.__mode == PythonDisViewerModes.SourceDisassemblyMode: 265 if self.__mode == PythonDisViewerModes.SOURCEDISASSEMBLY:
266 editor = self.__vm.activeWindow() 266 editor = self.__vm.activeWindow()
267 if on: 267 if on:
268 if editor is not self.__editor: 268 if editor is not self.__editor:
269 self.__editor = editor 269 self.__editor = editor
270 self.show() 270 self.show()
442 def __loadDIS(self): 442 def __loadDIS(self):
443 """ 443 """
444 Private method to generate the Disassembly from the source of the 444 Private method to generate the Disassembly from the source of the
445 current editor and visualize it. 445 current editor and visualize it.
446 """ 446 """
447 if self.__mode != PythonDisViewerModes.SourceDisassemblyMode: 447 if self.__mode != PythonDisViewerModes.SOURCEDISASSEMBLY:
448 # wrong mode, just return 448 # wrong mode, just return
449 return 449 return
450 450
451 if not self.__editor: 451 if not self.__editor:
452 self.__createErrorItem(self.tr( 452 self.__createErrorItem(self.tr(
499 499
500 @param disassembly dictionary containing the disassembly information 500 @param disassembly dictionary containing the disassembly information
501 @type dict 501 @type dict
502 """ 502 """
503 if ( 503 if (
504 self.__mode == PythonDisViewerModes.TracebackMode and 504 self.__mode == PythonDisViewerModes.TRACEBACK and
505 disassembly and 505 disassembly and
506 "instructions" in disassembly and 506 "instructions" in disassembly and
507 disassembly["instructions"] 507 disassembly["instructions"]
508 ): 508 ):
509 self.disWidget.clear() 509 self.disWidget.clear()

eric ide

mercurial