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

Commit d21387f

Browse files
committed
When double clicking stack traces, jump to that file/line
fixes #68
1 parent be5e6af commit d21387f

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
@@ -187,6 +188,11 @@ def connect_expression_viewer_signals(self):
187188
self.handle_expression_added_or_changed
188189
)
189190

191+
def connect_stacktrace_viewer_signals(self):
192+
self.stacktrace_viewer.item_double_clicked_signal.connect(
193+
self.handle_stacktrace_double_clicked
194+
)
195+
190196
def file_browser_item_activated(self, index):
191197
"""Handle when file browser item gets activated
192198
@@ -196,7 +202,7 @@ def file_browser_item_activated(self, index):
196202
if path is not None:
197203
self.open_document(path, False)
198204

199-
def open_document(self, path, map_paths=True):
205+
def open_document(self, path, map_paths=True, line=None):
200206
"""Open a document
201207
202208
If a document is not already open, open it and add it as a new
@@ -243,9 +249,18 @@ def open_document(self, path, map_paths=True):
243249
document_model.filename,
244250
path
245251
)
252+
253+
# If a line is given, move to that line
254+
if line:
255+
document_widget.move_to_line(line)
246256
else:
247257
# Just focus the tab that has the opened document
248-
self.document_viewer.focus_tab(path)
258+
index = self.document_viewer.find_tab_index_by_path(path)
259+
self.document_viewer.setCurrentIndex(index)
260+
261+
# If a line is given, move to that line
262+
if line:
263+
self.document_viewer.get_document(index).move_to_line(line)
249264

250265
def handle_document_double_click(self, path, line_number):
251266
"""Handle when a document gets double clicked
@@ -635,6 +650,13 @@ def handle_expression_added_or_changed(self, index, expression):
635650
if self.debugger.is_connected():
636651
self.debugger.evaluate_expression(index, expression)
637652

653+
def handle_stacktrace_double_clicked(self, file, line):
654+
"""Handle when an item in the stack trace viewer is double clicked.
655+
656+
Show the document, and scroll to the given line.
657+
"""
658+
self.open_document(file, True, line)
659+
638660
def handle_error(self, error):
639661
em = QErrorMessage(self.main_window)
640662
em.showMessage(error)

0 commit comments

Comments
 (0)