Skip to content
This repository was archived by the owner on Aug 28, 2020. It is now read-only.

Commit f8a94a3

Browse files
committed
Merge pull request #89 from ihabunek/feature/stacktrace-jump
When double clicking stack traces, jump to that file/line. Resolves #68
2 parents d0aaebf + d21387f commit f8a94a3

File tree

2 files changed

+35
-2
lines changed

2 files changed

+35
-2
lines changed

pugdebug/gui/stacktraces.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,14 @@
99

1010
__author__ = "robertbasic"
1111

12+
from PyQt5.QtCore import Qt, pyqtSignal
1213
from PyQt5.QtWidgets import QTreeWidget, QTreeWidgetItem
1314

1415

1516
class PugdebugStacktraceViewer(QTreeWidget):
1617

18+
item_double_clicked_signal = pyqtSignal(str, int)
19+
1720
def __init__(self):
1821
super(PugdebugStacktraceViewer, self).__init__()
1922

@@ -23,6 +26,8 @@ def __init__(self):
2326
self.setColumnWidth(0, 350)
2427
self.setColumnWidth(1, 100)
2528

29+
self.itemDoubleClicked.connect(self.handle_item_double_clicked)
30+
2631
def set_stacktraces(self, stacktraces):
2732
self.clear()
2833

@@ -35,3 +40,9 @@ def set_stacktraces(self, stacktraces):
3540
item = QTreeWidgetItem(args)
3641

3742
self.addTopLevelItem(item)
43+
44+
def handle_item_double_clicked(self, item, column):
45+
file = item.text(0)
46+
line = int(item.text(1))
47+
48+
self.item_double_clicked_signal.emit(file, line)

pugdebug/pugdebug.py

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ def connect_signals(self):
8686
self.connect_toolbar_action_signals()
8787
self.connect_debugger_signals()
8888
self.connect_expression_viewer_signals()
89+
self.connect_stacktrace_viewer_signals()
8990

9091
def connect_file_browser_signals(self):
9192
"""Connect file browser signals
@@ -195,6 +196,11 @@ def connect_expression_viewer_signals(self):
195196
self.handle_expression_added_or_changed
196197
)
197198

199+
def connect_stacktrace_viewer_signals(self):
200+
self.stacktrace_viewer.item_double_clicked_signal.connect(
201+
self.handle_stacktrace_double_clicked
202+
)
203+
198204
def file_browser_item_activated(self, index):
199205
"""Handle when file browser item gets activated
200206
@@ -204,7 +210,7 @@ def file_browser_item_activated(self, index):
204210
if path is not None:
205211
self.open_document(path, False)
206212

207-
def open_document(self, path, map_paths=True):
213+
def open_document(self, path, map_paths=True, line=None):
208214
"""Open a document
209215
210216
If a document is not already open, open it and add it as a new
@@ -251,9 +257,18 @@ def open_document(self, path, map_paths=True):
251257
document_model.filename,
252258
path
253259
)
260+
261+
# If a line is given, move to that line
262+
if line:
263+
document_widget.move_to_line(line)
254264
else:
255265
# Just focus the tab that has the opened document
256-
self.document_viewer.focus_tab(path)
266+
index = self.document_viewer.find_tab_index_by_path(path)
267+
self.document_viewer.setCurrentIndex(index)
268+
269+
# If a line is given, move to that line
270+
if line:
271+
self.document_viewer.get_document(index).move_to_line(line)
257272

258273
def handle_document_double_click(self, path, line_number):
259274
"""Handle when a document gets double clicked
@@ -644,6 +659,13 @@ def handle_expression_added_or_changed(self, index, expression):
644659
if self.debugger.is_connected():
645660
self.debugger.evaluate_expression(index, expression)
646661

662+
def handle_stacktrace_double_clicked(self, file, line):
663+
"""Handle when an item in the stack trace viewer is double clicked.
664+
665+
Show the document, and scroll to the given line.
666+
"""
667+
self.open_document(file, True, line)
668+
647669
def handle_error(self, error):
648670
em = QErrorMessage(self.main_window)
649671
em.showMessage(error)

0 commit comments

Comments
 (0)