+# 12/20/2003 - Jeff Grimmett (grimmtooth@softhome.net)
+#
+# o wxPyInformationalMessagesFrame -> PyInformationalMessagesFrame
+# o dummy_wxPyInformationalMessagesFrame -> dummy_PyInformationalMessagesFrame
+#
+
"""
infoframe.py
Released under wxWindows license etc.
from wxPython.lib.infoframe import *
... # ... modify your wxApp as follows:
class myApp(wxApp):
- outputWindowClass = wxPyInformationalMessagesFrame
+ outputWindowClass = PyInformationalMessagesFrame
...
If you're running on Linux, you'll also have to supply an argument 1 to your
constructor of myApp to redirect stdout/stderr to this window (it's done
If you don't want to redirect stdout/stderr, but use the class directly: do
it this way:
- InformationalMessagesFrame = wxPyInformationalMessagesFrame\
+ InformationalMessagesFrame = PyInformationalMessagesFrame\
([options from progname (default ""),
txt (default "informational
messages"])
All (well, most) of this is made clear by the example code at the end
of this file, which is run if the file is run by itself; otherwise,
see the appropriate "stub" file in the wxPython demo.
-
+
"""
-from wxPython.wx import *
-import sys, tempfile, os
+import os
+import sys
+import tempfile
-class _MyStatusBar(wxStatusBar):
- def __init__(self, parent,callbacks=None,useopenbutton=0):
- wxStatusBar.__init__(self, parent, -1, style=wxTAB_TRAVERSAL)
+import wx
+
+class _MyStatusBar(wx.StatusBar):
+ def __init__(self, parent, callbacks=None, useopenbutton=0):
+ wx.StatusBar.__init__(self, parent, -1, style=wx.TAB_TRAVERSAL)
self.SetFieldsCount(3)
self.SetStatusText("",0)
- ID = wxNewId()
- self.button1 = wxButton(self,ID,"Dismiss",
- style=wxTAB_TRAVERSAL)
- EVT_BUTTON(self,ID,self.OnButton1)
+ self.button1 = wx.Button(self, -1, "Dismiss", style=wx.TAB_TRAVERSAL)
+ self.Bind(wx.EVT_BUTTON, self.OnButton1, self.button1)
- ID = wxNewId()
if not useopenbutton:
- self.button2 = wxButton(self,ID,"Close File",
- style=wxTAB_TRAVERSAL)
+ self.button2 = wx.Button(self, -1, "Close File", style=wx.TAB_TRAVERSAL)
else:
- self.button2 = wxButton(self,ID,"Open New File",
- style=wxTAB_TRAVERSAL)
- EVT_BUTTON(self,ID,self.OnButton2)
+ self.button2 = wx.Button(self, -1, "Open New File", style=wx.TAB_TRAVERSAL)
+
+ self.Bind(wx.EVT_BUTTON, self.OnButton2, self.button2)
self.useopenbutton = useopenbutton
self.callbacks = callbacks
# figure out how tall to make the status bar
- dc = wxClientDC(self)
+ dc = wx.ClientDC(self)
dc.SetFont(self.GetFont())
(w,h) = dc.GetTextExtent('X')
h = int(h * 1.8)
- self.SetSize(wxSize(100, h))
+ self.SetSize((100, h))
self.OnSize("dummy")
- EVT_SIZE(self,self.OnSize)
+ self.Bind(wx.EVT_SIZE, self.OnSize)
# reposition things...
def OnSize(self, event):
self.CalculateSizes()
rect = self.GetFieldRect(1)
- self.button1.SetPosition(wxPoint(rect.x+5, rect.y+2))
- self.button1.SetSize(wxSize(rect.width-10, rect.height-4))
+ self.button1.SetPosition((rect.x+5, rect.y+2))
+ self.button1.SetSize((rect.width-10, rect.height-4))
rect = self.GetFieldRect(2)
- self.button2.SetPosition(wxPoint(rect.x+5, rect.y+2))
- self.button2.SetSize(wxSize(rect.width-10, rect.height-4))
+ self.button2.SetPosition((rect.x+5, rect.y+2))
+ self.button2.SetSize((rect.width-10, rect.height-4))
# widths........
def CalculateSizes(self):
- dc = wxClientDC(self.button1)
+ dc = wx.ClientDC(self.button1)
dc.SetFont(self.button1.GetFont())
(w1,h) = dc.GetTextExtent(self.button1.GetLabel())
- dc = wxClientDC(self.button2)
+ dc = wx.ClientDC(self.button2)
dc.SetFont(self.button2.GetFont())
(w2,h) = dc.GetTextExtent(self.button2.GetLabel())
self.button2.SetLabel ("Close File")
elif self.callbacks[1] ():
self.button2.SetLabel ("Open New File")
+
self.useopenbutton = 1 - self.useopenbutton
self.OnSize("")
self.button2.Refresh(True)
-class wxPyInformationalMessagesFrame:
+class PyInformationalMessagesFrame:
def __init__(self,
progname="",
text="informational messages",
self.title = "%s %s" % (progname,text)
self.parent = None # use the SetParent method if desired...
self.softspace = 1 # of rather limited use
+
if dir:
self.SetOutputDirectory(dir)
f = None
- def write(self,string):
- if not wxThread_IsMain():
+ def write(self, string):
+ if not wx.Thread_IsMain():
# Aquire the GUI mutex before making GUI calls. Mutex is released
# when locker is deleted at the end of this function.
- locker = wxMutexGuiLocker()
+ #
+ # TODO: This should be updated to use wx.CallAfter similarly to how
+ # PyOnDemandOutputWindow.write was so it is not necessary
+ # to get the gui mutex
+ locker = wx.MutexGuiLocker()
if self.Enabled:
if self.f:
move = 0
if not self.frame:
- self.frame = wxFrame(self.parent, -1, self.title, size=(450, 300),
- style=wxDEFAULT_FRAME_STYLE|wxNO_FULL_REPAINT_ON_RESIZE)
- self.text = wxTextCtrl(self.frame, -1, "",
- style = wxTE_MULTILINE|wxTE_READONLY|wxTE_RICH)
+ self.frame = wx.Frame(self.parent, -1, self.title, size=(450, 300),
+ style=wx.DEFAULT_FRAME_STYLE|wx.NO_FULL_REPAINT_ON_RESIZE)
+
+ self.text = wx.TextCtrl(self.frame, -1, "",
+ style = wx.TE_MULTILINE|wx.TE_READONLY|wx.TE_RICH)
self.frame.sb = _MyStatusBar(self.frame,
callbacks=[self.DisableOutput,
"nofile"))
self.frame.SetStatusBar(self.frame.sb)
self.frame.Show(True)
- EVT_CLOSE(self.frame, self.OnCloseWindow)
+ self.frame.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
if hasattr(self,"nofile"):
self.text.AppendText(
else:
tempfile.tempdir = self.dir
filename = os.path.abspath(tempfile.mktemp ())
+
self.text.AppendText(
"Please close this window (or select the "
"'Dismiss' button below) when desired. By "
def OpenNewFile(self):
self.CloseFile()
- dlg = wxFileDialog(self.frame,
+ dlg = wx.FileDialog(self.frame,
"Choose a new log file", self.dir,"","*",
- wxSAVE | wxHIDE_READONLY | wxOVERWRITE_PROMPT)
- if dlg.ShowModal() == wxID_CANCEL:
+ wx.SAVE | wx.HIDE_READONLY | wx.OVERWRITE_PROMPT)
+ if dlg.ShowModal() == wx.ID_CANCEL:
dlg.Destroy()
return 0
else:
def flush(self):
if self.text:
self.text.SetInsertionPointEnd()
- wxYield()
+ wx.Yield()
def __call__(self,* args):
-class Dummy_wxPyInformationalMessagesFrame:
+class Dummy_PyInformationalMessagesFrame:
def __init__(self,progname=""):
self.softspace = 1
def __call__(self,*args):