Source code for schrodinger.ui.qt.appframework2.debug_gui
from schrodinger.Qt import QtCore
from schrodinger.Qt import QtWidgets
from schrodinger.ui.qt.appframework2 import debug_gui_ui
from schrodinger.ui.qt.appframework2 import debugcore
from schrodinger.ui.qt.appframework2 import debugwidgets
EXEC_TAG = 'Exec'
[docs]class DebugViewer(QtWidgets.QWidget, debugcore.AbstractDebugViewer):
Super = QtWidgets.QWidget
fast = False
[docs] def __init__(self, parent=None, source_obj=None):
self.Super.__init__(self, parent=parent)
self.ui = debug_gui_ui.Ui_Form()
self.ui.setupUi(self)
self.log_table = debugwidgets.LogTable()
self.ui.log_layout.insertWidget(0, self.log_table)
self.ui.comment_btn.clicked.connect(self.addComment)
self.ui.comment_le.returnPressed.connect(self.addComment)
self.exec_widget = debugwidgets.ExecWidget()
self.ui.exec_layout.addWidget(self.exec_widget)
self.exec_widget.statementExecuted.connect(self.onStatementExecuted)
self.signal_table = debugwidgets.SignalTable()
self.ui.signal_layout.addWidget(self.signal_table)
self.ui.scan_signals_btn.clicked.connect(self.scanSignals)
self.ui.stop_trace_btn.clicked.connect(self.stopSignalTracing)
self.ui.all_signals_btn.clicked.connect(self.selectAllSignals)
self.ui.no_signals_btn.clicked.connect(self.selectNoSignals)
self.ui.filter_le.textChanged.connect(self.applyFilter)
self.ui.stop_trace_btn.setEnabled(False)
self.setSourceObj(source_obj)
[docs] def setSourceObj(self, source_obj):
self.source_obj = source_obj
if source_obj:
self.setWindowTitle('DEBUG: %s' % source_obj.__class__.__name__)
[docs] def setNamespace(self, globals=None, locals=None):
self.exec_widget.setNamespace(globals, locals)
[docs] def onStatementExecuted(self, retval):
if retval is not None:
self.log(repr(retval), EXEC_TAG)
[docs] def log(self, text, tag, offset=3, inset=1):
entry = self.makeLogEntry(text, tag, offset=offset, inset=inset)
if entry.tag == EXEC_TAG:
entry.caller = '>>> ' + self.exec_widget.text()
self.writeLogEntry(entry)
[docs] def writeLogEntry(self, entry):
self.log_table.addEntry(entry)
self.log_table.scrollToBottom()
[docs] def scanSignals(self):
obj = self.source_obj
app = QtWidgets.QApplication.instance()
self.signal_table.scan(obj, exclude_objs=[app, self])
signals = self.signal_table.signals
names = []
for obj_name, obj, signal_name, signal in signals:
names.append(signal_name)
self.log('Found: ' + ', '.join(names), debugcore.SIGNALS_TAG)
self.ui.stop_trace_btn.setEnabled(False)
self.signal_table.registerSignals(self._makeDebugSlot)
self.ui.scan_signals_btn.setEnabled(False)
self.ui.stop_trace_btn.setEnabled(True)
self.signal_table.setEnabled(True)
[docs] def stopSignalTracing(self, obj):
self.signal_table.deregisterSignals()
self.log('Stopped tracing all signals', debugcore.SIGNALS_TAG)
self.ui.scan_signals_btn.setEnabled(True)
self.ui.stop_trace_btn.setEnabled(False)
self.signal_table.setEnabled(False)
[docs] def selectAllSignals(self):
for row in range(self.signal_table.rowCount()):
item = self.signal_table.item(row, 0)
item.setCheckState(QtCore.Qt.Checked)
[docs] def selectNoSignals(self):
for row in range(self.signal_table.rowCount()):
item = self.signal_table.item(row, 0)
item.setCheckState(QtCore.Qt.Unchecked)
[docs] def applyFilter(self):
filter_string = self.ui.filter_le.text()
self.signal_table.applyFilter(filter_string)
def _makeDebugSlot(self, obj_name, name, signal):
def slotMethod(*args):
self.log('Detected: %s.%s(%s)' %
(obj_name, name, ', '.join(map(str, args))),
tag=debugcore.SIGNALS_TAG)
return slotMethod
[docs] def closeEvent(self, event):
debugcore.stop()