Table of Contents

Eric3 Source Documentation: Debugger  
# -*- coding: utf-8 -*-

# Copyright (c) 2002, 2003 Detlev Offenbach <detlev@die-offenbachs.de>
#

"""
Module implementing the Exception Logger widget.
"""

from qt import *


class ExceptionLogger(QListView):
    """
    Class implementing the Exception Logger widget.
    
    This class displays a log of all exceptions having occured during
    a debugging session.
    """
    def __init__(self,parent=None):
        """
        Constructor
        
        Arguments
        
            parent -- the parent widget of this widget
        """
        QListView.__init__(self, parent)
        
        self.setRootIsDecorated(1)
        self.setCaption(self.trUtf8("Exceptions"))
        self.addColumn(self.trUtf8("Exception"))
        self.setSorting(-1)     # disable sorting

        self.connect(self,SIGNAL('contextMenuRequested(QListViewItem *, const QPoint &, int)'),
                     self.handleContextMenu)

        QWhatsThis.add(self, self.trUtf8(
            """<b>Exceptions Logger</b>"""
            """<p>This windows shows a trace of all exceptions, that have"""
            """ occured during the last debugging session. Initially only the"""
            """ exception type and exception message are shown. After"""
            """ the expansion of this entry, the complete call stack as reported"""
            """ by the client is show with the most recent call first.</p>"""
        ))
        
        self.menu = QPopupMenu(self)
        self.menu.insertItem(self.trUtf8("Show source"), self.handleOpen)
        self.menu.insertItem(self.trUtf8("Clear"), self.clear)
        
        self.backMenu = QPopupMenu(self)
        self.backMenu.insertItem(self.trUtf8("Clear"), self.clear)
        
    def contentsMouseDoubleClickEvent(self, mouseEvent):
        """
        Protected method of QListView. 
        
        Reimplemented to disable expanding/collapsing
        of items when double-clicking. Instead the double-clicked entry is opened.
        
        Arguments
        
            mouseEvent -- the mouse event (QMouseEvent), ignored
        """
        self.handleOpen()

    def handleContextMenu(self,itm,coord,col):
        """
        Private slot to show the context menu of the listview.
        
        Arguments
        
            itm -- the item, that was right clicked (QListViewItem)
            
            coord -- the global coordinates of the mouse pointer (QPoint)
            
            col -- the column number of the mouse pointer (int)
        """
        if itm is None:
            self.backMenu.popup(coord)
        else:
            self.menu.popup(coord)
            
    def addException(self, status):
        """
        Public slot to handle the arrival of a new exception.
        
        Arguments
        
            status -- exception information
        """
        try:
            exclist = eval(status)
        except:
            QListViewItem(self,
                self.trUtf8('An unhandled exception occured. See the shell window for details.'))
            return
            
        exctype, msg = exclist[:2]
        if msg == '':
            itm = QListViewItem(self, "%s" % exctype)
        else:
            itm = QListViewItem(self, "%s, %s" % (exctype, msg))
        
        # now add the call stack, most recent call first
        for fn, ln in exclist[2:]:
            QListViewItem(itm, "%s, %d" % (fn, ln))
            
    def debuggingStarted(self):
        """
        Public slot to clear the listview upon starting a new debugging session.
        """
        self.clear()
        
    def handleOpen(self):
        """
        Private slot to handle a double click on an entry.
        """
        itm = self.currentItem()
        
        if itm.parent() is None:
            return
            
        entry = str(itm.text(0))
        entryList = entry.split(",")
        try:
            self.emit(PYSIGNAL('pythonFile'),(entryList[0], int(entryList[1])))
        except:
            pass

Table of Contents

This document was automatically generated by HappyDoc version 2.1