+# 12/20/2003 - Jeff Grimmett (grimmtooth@softhome.net)
+#
+# o wxPyInformationalMessagesFrame -> PyInformationalMessagesFrame
+# o dummy_wxPyInformationalMessagesFrame -> dummy_PyInformationalMessagesFrame
+#
+
 """
 infoframe.py
 Released under wxWindows license etc.
 itself a subclass of wxWindow: when the window is open (and ONLY
 then), it's "frame" attribute is the actual instance of wFrame...
 
-Typical usage:
+Typical usage::
+
     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
 automatically for you on Windows).
 
 If you don't want to redirect stdout/stderr, but use the class directly: do
-it this way:
+it this way::
 
- InformationalMessagesFrame = wxPyInformationalMessagesFrame\
+ InformationalMessagesFrame = PyInformationalMessagesFrame\
                                          ([options from progname (default ""),
-                                           txt (default "informational
-                                                         messages"])
+                                           txt (default "informational messages"])
+                                          
 #^^^^ early in the program
 ...
 InformationalMessagesFrame([comma-separated list of items to
 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.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):