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

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

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

revision 1854 by bh, Wed Oct 22 09:38:36 2003 UTC revision 2051 by frank, Wed Jan 21 17:09:15 2004 UTC
# Line 21  from Thuban import _ Line 21  from Thuban import _
21  from Thuban.Model.proj import Projection, ProjFile  from Thuban.Model.proj import Projection, ProjFile
22    
23  from Thuban.Model.resource import get_user_proj_file, get_system_proj_file, \  from Thuban.Model.resource import get_user_proj_file, get_system_proj_file, \
24                                    read_proj_file, write_proj_file                                    read_proj_file, write_proj_file, \
25                                      DEFAULT_PROJ_FILE, EPSG_PROJ_FILE, \
26                                      EPSG_DEPRECATED_PROJ_FILE
27  from Thuban.UI.dialogs import NonModalNonParentDialog  from Thuban.UI.dialogs import NonModalNonParentDialog
28    
29  from common import ThubanBeginBusyCursor, ThubanEndBusyCursor  from common import ThubanBeginBusyCursor, ThubanEndBusyCursor
# Line 60  class ProjFrame(NonModalNonParentDialog) Line 62  class ProjFrame(NonModalNonParentDialog)
62              ("tmerc", _("Transverse Mercator"), TMPanel),              ("tmerc", _("Transverse Mercator"), TMPanel),
63              ("utm", _("Universal Transverse Mercator"), UTMPanel),              ("utm", _("Universal Transverse Mercator"), UTMPanel),
64              ("lcc", _("Lambert Conic Conformal"), LCCPanel),              ("lcc", _("Lambert Conic Conformal"), LCCPanel),
65              ("latlong", _("Geographic"), GeoPanel)]              ("latlong", _("Geographic"), GeoPanel),
66                ("longlat", _("Geographic"), GeoPanel)]#longlat is an alias of proj
67          self.receiver = receiver          self.receiver = receiver
68          self.haveTried = False          self.haveTried = False
69          self.curProjPanel = None          self.curProjPanel = None
70          self.__usrProjFile = None          self.__usrProjFile = None
71          self.__sysProjFile = None          self._sys_proj_files = {}
72    
73          self.build_dialog()          self.build_dialog()
74          self.Layout()          self.Layout()
# Line 93  class ProjFrame(NonModalNonParentDialog) Line 96  class ProjFrame(NonModalNonParentDialog)
96    
97          hbox = wxBoxSizer(wxHORIZONTAL)          hbox = wxBoxSizer(wxHORIZONTAL)
98          vbox.Add(hbox, 1, wxALL|wxEXPAND)          vbox.Add(hbox, 1, wxALL|wxEXPAND)
99          self.projection_list = ProjectionList(self, self.load_system_proj(),          proj_files = [self.load_user_proj(),
100                                                self.load_user_proj(),                        self.load_system_proj(DEFAULT_PROJ_FILE)]
101            self.projection_list = ProjectionList(self, proj_files,
102                                                self.receiver.GetProjection())                                                self.receiver.GetProjection())
103          hbox.Add(self.projection_list, 1, wxALL|wxEXPAND|wxADJUST_MINSIZE, 4)          hbox.Add(self.projection_list, 1, wxALL|wxEXPAND|wxADJUST_MINSIZE, 4)
104          self.projection_list.Subscribe(PROJ_SELECTION_CHANGED,          self.projection_list.Subscribe(PROJ_SELECTION_CHANGED,
# Line 114  class ProjFrame(NonModalNonParentDialog) Line 118  class ProjFrame(NonModalNonParentDialog)
118          EVT_BUTTON(self, ID_PROJ_REMOVE, self._OnRemove)          EVT_BUTTON(self, ID_PROJ_REMOVE, self._OnRemove)
119          buttons.Add(self.button_remove, 1, wxALL|wxEXPAND, 4)          buttons.Add(self.button_remove, 1, wxALL|wxEXPAND, 4)
120    
121            buttons.Add(20, 20, 0, wxEXPAND, 0)
122            label = wxStaticText(self, -1, _("Show EPSG:"))
123            buttons.Add(label, 0, wxLEFT|wxRIGHT|wxTOP, 4)
124            self.check_epsg = wxCheckBox(self, -1, _("Normal"))
125            EVT_CHECKBOX(self, self.check_epsg.GetId(), self._OnShowEPSG)
126            buttons.Add(self.check_epsg, 1, wxALL|wxEXPAND, 4)
127            self.check_epsg_depr = wxCheckBox(self, -1, _("Deprecated"))
128            EVT_CHECKBOX(self, self.check_epsg_depr.GetId(), self._OnShowEPSG)
129            buttons.Add(self.check_epsg_depr, 1, wxALL|wxEXPAND, 4)
130    
131          # The file path          # The file path
132          self.projfilepath = wxStaticText(self, -1, "")          self.projfilepath = wxStaticText(self, -1, "")
133          vbox.Add(self.projfilepath, 0, wxALL|wxEXPAND)          vbox.Add(self.projfilepath, 0, wxALL|wxEXPAND)
# Line 289  class ProjFrame(NonModalNonParentDialog) Line 303  class ProjFrame(NonModalNonParentDialog)
303          add them to the user ProjFile object and write the user file          add them to the user ProjFile object and write the user file
304          back to disk.          back to disk.
305          """          """
306          dlg = wxFileDialog(self, _("Import"), style = wxOPEN)          dlg = wxFileDialog(self, _("Import"),
307                    self.parent.application.Path("projection"), style = wxOPEN)
308    
309          if dlg.ShowModal() == wxID_OK:          if dlg.ShowModal() == wxID_OK:
310              path = dlg.GetPath()              path = dlg.GetPath()
# Line 305  class ProjFrame(NonModalNonParentDialog) Line 320  class ProjFrame(NonModalNonParentDialog)
320                      for proj in projFile.GetProjections():                      for proj in projFile.GetProjections():
321                          self.__usrProjFile.Add(proj)                          self.__usrProjFile.Add(proj)
322                      self.write_proj_file(self.__usrProjFile)                      self.write_proj_file(self.__usrProjFile)
323                        self.parent.application.SetPath("projection", path)
324              finally:              finally:
325                  ThubanEndBusyCursor()                  ThubanEndBusyCursor()
326          dlg.Destroy()          dlg.Destroy()
# Line 318  class ProjFrame(NonModalNonParentDialog) Line 334  class ProjFrame(NonModalNonParentDialog)
334          sel = self.projection_list.selected_projections()          sel = self.projection_list.selected_projections()
335          assert len(sel) != 0, "button should be disabled"          assert len(sel) != 0, "button should be disabled"
336    
337          dlg = wxFileDialog(self, _("Export"), style=wxSAVE|wxOVERWRITE_PROMPT)          dlg = wxFileDialog(self, _("Export"),
338                    self.parent.application.Path("projection"),
339                    style=wxSAVE|wxOVERWRITE_PROMPT)
340    
341          if dlg.ShowModal() == wxID_OK:          if dlg.ShowModal() == wxID_OK:
342              proj_file = ProjFile(dlg.GetPath())              proj_file = ProjFile(dlg.GetPath())
# Line 326  class ProjFrame(NonModalNonParentDialog) Line 344  class ProjFrame(NonModalNonParentDialog)
344                  if proj is not None:                  if proj is not None:
345                      proj_file.Add(proj)                      proj_file.Add(proj)
346              self.write_proj_file(proj_file)              self.write_proj_file(proj_file)
347                self.parent.application.SetPath("projection", dlg.GetPath())
348    
349          dlg.Destroy()          dlg.Destroy()
350    
# Line 348  class ProjFrame(NonModalNonParentDialog) Line 367  class ProjFrame(NonModalNonParentDialog)
367          if modified:          if modified:
368              self.write_proj_file(self.__usrProjFile)              self.write_proj_file(self.__usrProjFile)
369    
370        def _OnShowEPSG(self, event):
371            """Handler for the EVT_CHECKBOX events from the EPSG check button
372    
373            If the button is checked add the EPSG_PROJ_FILE to the list of
374            projfiles shown by the projection list. Otherwise remove it
375            """
376            proj_files = [self.load_user_proj(),
377                          self.load_system_proj(DEFAULT_PROJ_FILE)]
378            if self.check_epsg.IsChecked():
379                proj_files.append(self.load_system_proj(EPSG_PROJ_FILE))
380            if self.check_epsg_depr.IsChecked():
381                proj_files.append(self.load_system_proj(EPSG_DEPRECATED_PROJ_FILE))
382            self.projection_list.SetProjFiles(proj_files)
383    
384      def _OnProjName(self, event):      def _OnProjName(self, event):
385          self.__VerifyButtons()          self.__VerifyButtons()
386    
# Line 463  class ProjFrame(NonModalNonParentDialog) Line 496  class ProjFrame(NonModalNonParentDialog)
496                      self.projchoice.Select(0)                      self.projchoice.Select(0)
497                      self.projchoice.Disable()                      self.projchoice.Disable()
498                      self._show_proj_panel(UnknownProjPanel)                      self._show_proj_panel(UnknownProjPanel)
499                        assert self.curProjPanel is not None
500                        self.curProjPanel.SetProjection(proj)
501          else:          else:
502              self.projfilepath.SetLabel(_("Multiple Projections selected"))              self.projfilepath.SetLabel(_("Multiple Projections selected"))
503    
# Line 540  class ProjFrame(NonModalNonParentDialog) Line 575  class ProjFrame(NonModalNonParentDialog)
575          return None          return None
576    
577      def load_user_proj(self):      def load_user_proj(self):
578          ThubanBeginBusyCursor()          """Return the user's ProjFile
579          try:  
580              if self.__usrProjFile is None:          If the file has not yet been loaded by the dialog, load it first
581            with get_user_proj_file and cache it in self.__usrProjFile.
582    
583            Show a busy cursor while loading the file.
584        
585            If the file is not available, leave a note to the console.
586            """
587            if self.__usrProjFile is None:
588                ThubanBeginBusyCursor()
589                try:
590                  projfile, warnings = get_user_proj_file()                  projfile, warnings = get_user_proj_file()
591                  self.show_warnings(_("Warnings"), projfile.GetFilename(),                  if warnings:
592                                     warnings)                      sys.stderr.write("".join(warnings))
593                  self.__usrProjFile = projfile                  self.__usrProjFile = projfile
594              return self.__usrProjFile              finally:
595          finally:                  ThubanEndBusyCursor()
596              ThubanEndBusyCursor()          return self.__usrProjFile
597    
598      def load_system_proj(self):      def load_system_proj(self, name):
599          ThubanBeginBusyCursor()          """Load the system ProjFile with the given name.
600          try:  
601              if self.__sysProjFile is None:          If the file has not been loaded yet, load it first with
602                  projfile, warnings = get_system_proj_file()          get_system_proj_file and put it into the cache. The name is
603            simply forwarded to get_system_proj_file.
604    
605            Show a busy cursor while loading the file.
606            """
607            if name not in self._sys_proj_files:
608                ThubanBeginBusyCursor()
609                try:
610                    projfile, warnings = get_system_proj_file(name)
611                  self.show_warnings(_("Warnings"), projfile.GetFilename(),                  self.show_warnings(_("Warnings"), projfile.GetFilename(),
612                                     warnings)                                     warnings)
613                  self.__sysProjFile = projfile                  self._sys_proj_files[name] = projfile
614              return self.__sysProjFile              finally:
615          finally:                  ThubanEndBusyCursor()
616              ThubanEndBusyCursor()          return self._sys_proj_files[name]
617    
618      def write_proj_file(self, proj_file):      def write_proj_file(self, proj_file):
619          """Write the ProjFile object proj_file back to its file          """Write the ProjFile object proj_file back to its file
# Line 655  class UnknownProjPanel(ProjPanel): Line 707  class UnknownProjPanel(ProjPanel):
707      def __init__(self, parent, receiver):      def __init__(self, parent, receiver):
708          ProjPanel.__init__(self, parent)          ProjPanel.__init__(self, parent)
709    
710            self.__text = _("Thuban does not know the parameters\n"
711                            "for the current projection and cannot\n"
712                            "display a configuration panel.\n\n"
713                            "The unidentified set of parameters is:\n\n")
714    
715            self.__textbox = wxTextCtrl(self, -1, self.__text, size=(100,200),
716                                style=wxTE_READONLY|wxTE_MULTILINE|wxTE_LINEWRAP)
717          self._DoLayout()          self._DoLayout()
718    
719      def _DoLayout(self):      def _DoLayout(self):
720          sizer = wxBoxSizer(wxVERTICAL)          sizer = wxBoxSizer(wxVERTICAL)
721    
722          sizer.Add(wxStaticText(self, -1,          sizer.Add(self.__textbox, 0, wxALL|wxEXPAND, 4)
                                _("Thuban does not know the parameters\n"  
                                  "for the current projection and cannot\n"  
                                  "display a configuration panel.")))  
723    
724          ProjPanel._DoLayout(self, sizer)          ProjPanel._DoLayout(self, sizer)
725    
# Line 671  class UnknownProjPanel(ProjPanel): Line 727  class UnknownProjPanel(ProjPanel):
727          return "Unknown"          return "Unknown"
728    
729      def SetProjection(self, proj):      def SetProjection(self, proj):
730          pass          """Append the available parameters to the info text."""
731            text = self.__text
732            for param in proj.GetAllParameters():
733                text = text + '%s\n' % param
734            self.__textbox.SetValue(text)
735    
736      def GetParameters(self):      def GetParameters(self):
737          return None          return None

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26