/[thuban]/branches/WIP-pyshapelib-bramz/Thuban/UI/application.py
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/Thuban/UI/application.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1504 by jonathan, Tue Jul 29 14:28:55 2003 UTC revision 1518 by jonathan, Tue Jul 29 15:04:11 2003 UTC
# Line 49  class ThubanApplication(wxApp, Publisher Line 49  class ThubanApplication(wxApp, Publisher
49      """      """
50    
51      def OnInit(self):      def OnInit(self):
52          sys.excepthook = show_exception_dialog          sys.excepthook = self.ShowExceptionDialog
53          self.splash = self.splash_screen()          self.splash = self.splash_screen()
54          if self.splash is not None:          if self.splash is not None:
55              self.splash.Show()              self.splash.Show()
# Line 225  class ThubanApplication(wxApp, Publisher Line 225  class ThubanApplication(wxApp, Publisher
225          else:          else:
226              self.top.SetMap(None)              self.top.SetMap(None)
227    
228  in_exception_dialog = 0 # flag: are we already inside the exception dialog?      in_exception_dialog = 0 # flag: are we already inside the exception dialog?
229    
230  def show_exception_dialog(exc_type, exc_value, exc_traceback):      def ShowExceptionDialog(self, exc_type, exc_value, exc_traceback):
231      """Show a message box with information about an exception.          """Show a message box with information about an exception.
232        
233      The parameters are the usual values describing an exception in          The parameters are the usual values describing an exception in
234      Python, the exception type, the value and the traceback.          Python, the exception type, the value and the traceback.
235        
236      This method can be used as a value for the sys.excepthook.          This method can be used as a value for the sys.excepthook.
237      """          """
238      global in_exception_dialog  
239            if self.in_exception_dialog:
240      if in_exception_dialog:              return
241          return          self.in_exception_dialog = 1
242      in_exception_dialog = 1          while wxIsBusy():
243      while wxIsBusy():              wxEndBusyCursor() # reset the mouse cursor
244          wxEndBusyCursor() # reset the mouse cursor  
245            try:
246      try:              lines = traceback.format_exception(exc_type, exc_value,
247          lines = traceback.format_exception(exc_type, exc_value,                                              exc_traceback)
248                                             exc_traceback)              message = "An unhandled exception occurred:\n%s\n" % exc_value+\
249          message = "An unhandled exception occurred:\n%s\n" % exc_value+\                      "(please report to " \
250                    "(please report to " \                      "http://thuban.intevation.org/bugtracker.html)"\
251                    "http://thuban.intevation.org/bugtracker.html)"\                      "\n\n\n"+\
252                    "\n\n\n"+\                      "".join(lines)
253                    "".join(lines)              print message
254          print message  
255                # We don't use an explicit parent here because this method might
256          # We don't use an explicit parent here because this method might              # be called in circumstances where the main window doesn't exist
257          # be called in circumstances where the main window doesn't exist              # anymore.
258          # anymore.              dlg = wxScrolledMessageDialog(None, message,
259          dlg = wxScrolledMessageDialog(None, message,                                          "Thuban: Internal Error")
260                                        "Thuban: Internal Error")              dlg.ShowModal()
261          dlg.ShowModal()              dlg.Destroy()
262          dlg.Destroy()  
263            finally:
264      finally:              self.in_exception_dialog = 0
265          in_exception_dialog = 0              # delete the last exception info that python keeps in
266          # delete the last exception info that python keeps in              # sys.last_* because especially last_traceback keeps
267          # sys.last_* because especially last_traceback keeps              # indirect references to all objects bound to local
268          # indirect references to all objects bound to local              # variables and this might prevent some object from being
269          # variables and this might prevent some object from being              # collected early enough.
270          # collected early enough.              sys.last_type = sys.last_value = sys.last_traceback = None
         sys.last_type = sys.last_value = sys.last_traceback = None  
271    

Legend:
Removed from v.1504  
changed lines
  Added in v.1518

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26