/[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 1861 by jan, Fri Oct 24 16:03:03 2003 UTC revision 2505 by jan, Thu Dec 23 15:10:41 2004 UTC
# Line 1  Line 1 
1  # Copyright (c) 2003 by Intevation GmbH  # Copyright (c) 2003, 2004 by Intevation GmbH
2  # Authors:  # Authors:
3  # Jonathan Coles <[email protected]>  # Jonathan Coles <[email protected]>
4  # Frank Koormann <[email protected]>  # Frank Koormann <[email protected]>
# 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 66  class ProjFrame(NonModalNonParentDialog) Line 68  class ProjFrame(NonModalNonParentDialog)
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 94  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 115  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 290  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 306  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 319  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 327  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 349  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 498  class ProjFrame(NonModalNonParentDialog) Line 530  class ProjFrame(NonModalNonParentDialog)
530      def _show_proj_panel(self, panel_class):      def _show_proj_panel(self, panel_class):
531          """Show the panel as the projection panel"""          """Show the panel as the projection panel"""
532          if panel_class is UnknownProjPanel:          if panel_class is UnknownProjPanel:
533                self.button_ok.Disable()
534                self.button_try.Disable()
535              self.edit_box.Disable()              self.edit_box.Disable()
536              self.nbsizer.Activate(self.unknown_projection_panel)              self.nbsizer.Activate(self.unknown_projection_panel)
537              self.curProjPanel = self.unknown_projection_panel              self.curProjPanel = self.unknown_projection_panel
538          else:          else:
539                self.button_ok.Enable(True)
540                self.button_try.Enable(True)
541              self.edit_box.Enable(True)              self.edit_box.Enable(True)
542              self.unknown_projection_panel.Hide()              self.unknown_projection_panel.Hide()
543              for panel in self.projection_panels:              for panel in self.projection_panels:
# Line 537  class ProjFrame(NonModalNonParentDialog) Line 573  class ProjFrame(NonModalNonParentDialog)
573          # self.curProjPanel should always contain the most relevant data          # self.curProjPanel should always contain the most relevant data
574          # for a projection          # for a projection
575          if self.curProjPanel is not None:          if self.curProjPanel is not None:
576              return Projection(self.curProjPanel.GetParameters(),              parameters = self.curProjPanel.GetParameters()
577                                self.projname.GetValue())              if parameters is not None:
578                    return Projection(parameters, self.projname.GetValue())
579    
580          return None          return None
581    
582      def load_user_proj(self):      def load_user_proj(self):
583          ThubanBeginBusyCursor()          """Return the user's ProjFile
584          try:  
585              if self.__usrProjFile is None:          If the file has not yet been loaded by the dialog, load it first
586            with get_user_proj_file and cache it in self.__usrProjFile.
587    
588            Show a busy cursor while loading the file.
589    
590            If the file is not available, leave a note to the console.
591            """
592            if self.__usrProjFile is None:
593                ThubanBeginBusyCursor()
594                try:
595                  projfile, warnings = get_user_proj_file()                  projfile, warnings = get_user_proj_file()
596                  self.show_warnings(_("Warnings"), projfile.GetFilename(),                  if warnings:
597                                     warnings)                      sys.stderr.write("".join(warnings))
598                        sys.stderr.write("\n")
599                  self.__usrProjFile = projfile                  self.__usrProjFile = projfile
600              return self.__usrProjFile              finally:
601          finally:                  ThubanEndBusyCursor()
602              ThubanEndBusyCursor()          return self.__usrProjFile
603    
604      def load_system_proj(self):      def load_system_proj(self, name):
605          ThubanBeginBusyCursor()          """Load the system ProjFile with the given name.
606          try:  
607              if self.__sysProjFile is None:          If the file has not been loaded yet, load it first with
608                  projfile, warnings = get_system_proj_file()          get_system_proj_file and put it into the cache. The name is
609            simply forwarded to get_system_proj_file.
610    
611            Show a busy cursor while loading the file.
612            """
613            if name not in self._sys_proj_files:
614                ThubanBeginBusyCursor()
615                try:
616                    projfile, warnings = get_system_proj_file(name)
617                  self.show_warnings(_("Warnings"), projfile.GetFilename(),                  self.show_warnings(_("Warnings"), projfile.GetFilename(),
618                                     warnings)                                     warnings)
619                  self.__sysProjFile = projfile                  self._sys_proj_files[name] = projfile
620              return self.__sysProjFile              finally:
621          finally:                  ThubanEndBusyCursor()
622              ThubanEndBusyCursor()          return self._sys_proj_files[name]
623    
624      def write_proj_file(self, proj_file):      def write_proj_file(self, proj_file):
625          """Write the ProjFile object proj_file back to its file          """Write the ProjFile object proj_file back to its file

Legend:
Removed from v.1861  
changed lines
  Added in v.2505

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26