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()