/[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 1518 by jonathan, Tue Jul 29 15:04:11 2003 UTC revision 2051 by frank, Wed Jan 21 17:09:15 2004 UTC
# Line 18  import os.path Line 18  import os.path
18  import traceback  import traceback
19    
20  from wxPython.wx import *  from wxPython.wx import *
 from wxPython.lib.dialogs import wxScrolledMessageDialog  
21    
22  from Thuban.Lib.connector import Publisher  from Thuban.Lib.connector import Publisher
23  from Thuban.Lib.fileutil import get_application_dir  from Thuban.Lib.fileutil import get_application_dir
# Line 26  from Thuban.Lib.fileutil import get_appl Line 25  from Thuban.Lib.fileutil import get_appl
25  from Thuban import _  from Thuban import _
26  from Thuban.Model.session import create_empty_session  from Thuban.Model.session import create_empty_session
27  from Thuban.Model.save import save_session  from Thuban.Model.save import save_session
28  from Thuban.Model.load import load_session  from Thuban.Model.load import load_session, LoadCancelled
29  from Thuban.Model.messages import MAPS_CHANGED  from Thuban.Model.messages import MAPS_CHANGED
30  from Thuban.Model.layer import RasterLayer  from Thuban.Model.layer import RasterLayer
31  import Thuban.Model.resource  import Thuban.Model.resource
# Line 34  import Thuban.Model.resource Line 33  import Thuban.Model.resource
33  import view  import view
34  import tree  import tree
35  import mainwindow  import mainwindow
36    import dbdialog
37    import exceptiondialog
38    
39  from messages import SESSION_REPLACED  from messages import SESSION_REPLACED
40    
# Line 60  class ThubanApplication(wxApp, Publisher Line 61  class ThubanApplication(wxApp, Publisher
61              self.ShowMainWindow()              self.ShowMainWindow()
62          self.session = None          self.session = None
63          self.create_session()          self.create_session()
64            self.path={"data":".", "projection":"."}
65          return True          return True
66    
67      def OnExit(self):      def OnExit(self):
# Line 163  class ThubanApplication(wxApp, Publisher Line 165  class ThubanApplication(wxApp, Publisher
165              self.unsubscribe_session(oldsession)              self.unsubscribe_session(oldsession)
166              oldsession.Destroy()              oldsession.Destroy()
167    
168        def SetPath(self, group, filename):
169            """Store the application's default path for file dialogs extracted
170            from a given filename.
171            """
172            self.path[group] = os.path.dirname( filename )
173    
174        def Path(self, group):
175            """Return the application's default path for file dialogs."""
176            return self.path[group]
177    
178      def subscribe_session(self, session):      def subscribe_session(self, session):
179          """Subscribe to some of the sessions channels.          """Subscribe to some of the sessions channels.
180    
# Line 189  class ThubanApplication(wxApp, Publisher Line 201  class ThubanApplication(wxApp, Publisher
201          """          """
202          self.SetSession(create_empty_session())          self.SetSession(create_empty_session())
203    
204      def OpenSession(self, filename):      def OpenSession(self, filename, db_connection_callback = None):
205          """Open the session in the file named filename"""          """Open the session in the file named filename"""
206          # Make sure we deal with an absolute pathname. Otherwise we can          # Make sure we deal with an absolute pathname. Otherwise we can
207          # get problems when saving because the saving code expects an          # get problems when saving because the saving code expects an
208          # absolute directory name          # absolute directory name
209          filename = os.path.abspath(filename)          filename = os.path.abspath(filename)
210          session = load_session(filename)          if db_connection_callback is None:
211                db_connection_callback = self.run_db_param_dialog
212            try:
213                session = load_session(filename,
214                                   db_connection_callback=db_connection_callback)
215            except LoadCancelled:
216                return
217          session.SetFilename(filename)          session.SetFilename(filename)
218          session.UnsetModified()          session.UnsetModified()
219          self.SetSession(session)          self.SetSession(session)
# Line 204  class ThubanApplication(wxApp, Publisher Line 222  class ThubanApplication(wxApp, Publisher
222              for layer in map.Layers():              for layer in map.Layers():
223                  if isinstance(layer, RasterLayer) \                  if isinstance(layer, RasterLayer) \
224                      and not Thuban.Model.resource.has_gdal_support():                      and not Thuban.Model.resource.has_gdal_support():
225                      msg = _("The current session contains Image layers,\n" +                      msg = _("The current session contains Image layers,\n"
226                              "but the GDAL library is not available to " +                              "but the GDAL library is not available to "
227                              "draw them.")                              "draw them.")
228                      dlg = wx.wxMessageDialog(None,                      dlg = wx.wxMessageDialog(None,
229                                               msg,                                               msg,
230                                               _("Library not available"),                                               _("Library not available"),
231                                               wx.wxOK | wx.wxICON_INFORMATION)                                               wx.wxOK | wx.wxICON_INFORMATION)
232                      print msg                      print msg
# Line 216  class ThubanApplication(wxApp, Publisher Line 234  class ThubanApplication(wxApp, Publisher
234                      dlg.Destroy()                      dlg.Destroy()
235                      break                      break
236    
237        def run_db_param_dialog(self, parameters, message):
238            """Implementation of the db_connection_callback for loading sessions"""
239            dlg = dbdialog.DBDialog(None, _("DB Connection Parameters"),
240                                    parameters, message)
241            return dlg.RunDialog()
242    
243    
244      def SaveSession(self):      def SaveSession(self):
245          save_session(self.session, self.session.filename)          save_session(self.session, self.session.filename)
246    
247      def maps_changed(self, *args):      def maps_changed(self, *args):
248            """Subscribed to the session's MAPS_CHANGED messages.
249    
250            Set the toplevel window's map to the map in the session. This is
251            done by calling the window's SetMap method with the map as
252            argument. If the session doesn't have any maps None is used
253            instead.
254    
255            Currently Thuban can only really handle at most one map in a
256            sessions so the first map in the session's list of maps as
257            returned by the Maps method is used.
258            """
259          if self.session.HasMaps():          if self.session.HasMaps():
260              self.top.SetMap(self.session.Maps()[0])              self.top.SetMap(self.session.Maps()[0])
261          else:          else:
# Line 245  class ThubanApplication(wxApp, Publisher Line 281  class ThubanApplication(wxApp, Publisher
281          try:          try:
282              lines = traceback.format_exception(exc_type, exc_value,              lines = traceback.format_exception(exc_type, exc_value,
283                                              exc_traceback)                                              exc_traceback)
284              message = "An unhandled exception occurred:\n%s\n" % exc_value+\              message = _("An unhandled exception occurred:\n%s\n"
285                      "(please report to " \                          "(please report to"
286                      "http://thuban.intevation.org/bugtracker.html)"\                          " http://thuban.intevation.org/bugtracker.html)"
287                      "\n\n\n"+\                          "\n\n%s") % (exc_value, "".join(lines))
                     "".join(lines)  
288              print message              print message
289    
290              # We don't use an explicit parent here because this method might              # We don't use an explicit parent here because this method might
291              # be called in circumstances where the main window doesn't exist              # be called in circumstances where the main window doesn't exist
292              # anymore.              # anymore.
293              dlg = wxScrolledMessageDialog(None, message,              exceptiondialog.run_exception_dialog(None, message)
                                         "Thuban: Internal Error")  
             dlg.ShowModal()  
             dlg.Destroy()  
294    
295          finally:          finally:
296              self.in_exception_dialog = 0              self.in_exception_dialog = 0

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26