#	Programmer:	Daniel Pozmanter
#	E-mail:		drpython@bluebottle.com
#	Note:		You must reply to the verification e-mail to get through.
#
#	Copyright 2003-2005 Daniel Pozmanter
#
#	Distributed under the terms of the GPL (GNU Public License)
#
#	DrPython is free software; you can redistribute it and/or modify
#	it under the terms of the GNU General Public License as published by
#	the Free Software Foundation; either version 2 of the License, or
#	(at your option) any later version.
#
#	This program is distributed in the hope that it will be useful,
#	but WITHOUT ANY WARRANTY; without even the implied warranty of
#	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#	GNU General Public License for more details.
#
#	You should have received a copy of the GNU General Public License
#	along with this program; if not, write to the Free Software
#	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
	
#Scrolled Message Dialog

import wx
import sys, traceback

class ScrolledMessageDialog(wx.Dialog):
	def __init__(self, parent, message, title, position = wx.DefaultPosition, size = wx.Size(400, 300)):
		wx.Dialog.__init__(self, parent, -1, title, position, size, wx.DEFAULT_DIALOG_STYLE | wx.MAXIMIZE_BOX | wx.THICK_FRAME | wx.RESIZE_BORDER)
		
		self.ID_CLOSE = 101
		
		self.theSizer = wx.BoxSizer(wx.VERTICAL)
		
		self.cmdSizer = wx.BoxSizer(wx.HORIZONTAL)
		
		self.btnClose = wx.Button(self, self.ID_CLOSE, "&Close")
		self.cmdSizer.Add(self.btnClose, 0, wx.SHAPED | wx.ALIGN_CENTER)
		self.btnClose.SetDefault()
		
		slist = traceback.format_tb(sys.exc_info()[2])		
		l = len(slist)
		if l > 0:
			x = 0
			rstring = ""
			while x < l:
				rstring = rstring + slist[x]
				x = x + 1
			tracebackstring = "Traceback (most recent call last):\n" + rstring \
			+ str(sys.exc_info()[0]).lstrip("exceptions.") + ": " + str(sys.exc_info()[1])
			message = message + "\n\n\n" + tracebackstring
						
		self.txtMessage = wx.TextCtrl(self, -1, message, wx.DefaultPosition, wx.DefaultSize, wx.TE_MULTILINE | wx.TE_READONLY)
		
		self.theSizer.Add(self.txtMessage, 9, wx.EXPAND)
		self.theSizer.Add(wx.StaticText(self, -1, "   "), 0, wx.SHAPED)
		self.theSizer.Add(self.cmdSizer, 0, wx.SHAPED | wx.ALIGN_CENTER)
		self.theSizer.Add(wx.StaticText(self, -1, "   "), 0, wx.SHAPED)
		
		self.SetAutoLayout(True)
		self.SetSizer(self.theSizer)

		self.Bind(wx.EVT_BUTTON,  self.OnbtnClose, id=self.ID_CLOSE)
		
		self.btnClose.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
		
	def OnbtnClose(self, event):		
		self.Close(1)
		
	def OnKeyDown(self, event):
		if (event.GetKeyCode() == wx.WXK_ESCAPE):
			self.Close(1)
			
def ShowMessage(parent, message, title, position = wx.DefaultPosition, size = wx.Size(400, 300)):
	d = ScrolledMessageDialog(parent, message, title, position, size)
	d.ShowModal()
	d.Destroy()

syntax highlighted by Code2HTML, v. 0.9.1