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 addComment(self): comment = self.ui.comment_le.text() self.ui.comment_le.clear() self.log(comment, "Comment")
[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()