/[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 1833 by bh, Mon Oct 20 11:00:57 2003 UTC revision 1861 by jan, Fri Oct 24 16:03:03 2003 UTC
# Line 26  from Thuban.UI.dialogs import NonModalNo Line 26  from Thuban.UI.dialogs import NonModalNo
26    
27  from common import ThubanBeginBusyCursor, ThubanEndBusyCursor  from common import ThubanBeginBusyCursor, ThubanEndBusyCursor
28  from sizers import NotebookLikeSizer  from sizers import NotebookLikeSizer
29    from projlist import PROJ_SELECTION_CHANGED, ProjectionList
30    from common import ThubanBeginBusyCursor, ThubanEndBusyCursor
31    
32    
33    
 ID_PROJ_ADVANCED  = 4001  
34  ID_PROJ_PROJCHOICE = 4002  ID_PROJ_PROJCHOICE = 4002
35  ID_PROJ_ADDTOLIST    = 4003  ID_PROJ_ADDTOLIST    = 4003
36  ID_PROJ_NEW       = 4004  ID_PROJ_NEW       = 4004
# Line 57  class ProjFrame(NonModalNonParentDialog) Line 60  class ProjFrame(NonModalNonParentDialog)
60              ("tmerc", _("Transverse Mercator"), TMPanel),              ("tmerc", _("Transverse Mercator"), TMPanel),
61              ("utm", _("Universal Transverse Mercator"), UTMPanel),              ("utm", _("Universal Transverse Mercator"), UTMPanel),
62              ("lcc", _("Lambert Conic Conformal"), LCCPanel),              ("lcc", _("Lambert Conic Conformal"), LCCPanel),
63              ("latlong", _("Geographic"), GeoPanel)]              ("latlong", _("Geographic"), GeoPanel),
64                ("longlat", _("Geographic"), GeoPanel)]#longlat is an alias of proj
65          self.receiver = receiver          self.receiver = receiver
66          self.haveTried = False          self.haveTried = False
67          self.curProjPanel = None          self.curProjPanel = None
68            self.__usrProjFile = None
69            self.__sysProjFile = None
70    
71          self.build_dialog()          self.build_dialog()
72          self.Layout()          self.Layout()
73    
74          self.originalProjection = self.receiver.GetProjection()          self.originalProjection = self.receiver.GetProjection()
75    
76          self.__DoOnProjAvail()          self.projection_list.SelectProjection(self.originalProjection)
77          self.button_ok.SetFocus()          self.projection_list.SetFocus()
         self.availprojs.SetFocus()  
78    
79      def build_dialog(self):      def build_dialog(self):
80          """Build the dialog's widgets and set the event handlers"""          """Build the dialog's widgets and set the event handlers"""
# Line 82  class ProjFrame(NonModalNonParentDialog) Line 87  class ProjFrame(NonModalNonParentDialog)
87          #    The projection list and associated controls          #    The projection list and associated controls
88          #          #
89          vbox = wxBoxSizer(wxVERTICAL)          vbox = wxBoxSizer(wxVERTICAL)
90          main_box.Add(vbox, 0, wxALL|wxEXPAND)          main_box.Add(vbox, 4, wxALL|wxEXPAND)
91    
92          label = wxStaticText(self, -1, _("Available Projections:"))          #label = wxStaticText(self, -1, _("Available Projections:"))
93          vbox.Add(label, 0, wxLEFT|wxRIGHT|wxTOP, 4)          #vbox.Add(label, 0, wxLEFT|wxRIGHT|wxTOP, 4)
94    
95          hbox = wxBoxSizer(wxHORIZONTAL)          hbox = wxBoxSizer(wxHORIZONTAL)
96          vbox.Add(hbox, 1, wxALL|wxEXPAND)          vbox.Add(hbox, 1, wxALL|wxEXPAND)
97          self.availprojs = wxListBox(self, ID_PROJ_AVAIL,          self.projection_list = ProjectionList(self, self.load_system_proj(),
98                                      style=wxLB_EXTENDED|wxLB_SORT)                                                self.load_user_proj(),
99          EVT_LISTBOX(self, ID_PROJ_AVAIL, self._OnProjAvail)                                                self.receiver.GetProjection())
100          hbox.Add(self.availprojs, 1, wxALL|wxEXPAND|wxADJUST_MINSIZE, 4)          hbox.Add(self.projection_list, 1, wxALL|wxEXPAND|wxADJUST_MINSIZE, 4)
101          self.__FillAvailList(selectCurrent = True)          self.projection_list.Subscribe(PROJ_SELECTION_CHANGED,
102                                           self.proj_selection_changed)
103    
104          # Projection List specific actions (Import/Export/Remove)          # Projection List specific actions (Import/Export/Remove)
105          buttons = wxBoxSizer(wxVERTICAL)          buttons = wxBoxSizer(wxVERTICAL)
# Line 118  class ProjFrame(NonModalNonParentDialog) Line 124  class ProjFrame(NonModalNonParentDialog)
124          #          #
125          self.edit_box = wxStaticBox(self, -1, _("Edit"))          self.edit_box = wxStaticBox(self, -1, _("Edit"))
126          sizer_edit = wxStaticBoxSizer(self.edit_box, wxHORIZONTAL)          sizer_edit = wxStaticBoxSizer(self.edit_box, wxHORIZONTAL)
127          main_box.Add(sizer_edit, 1, wxALL|wxEXPAND)          main_box.Add(sizer_edit, 5, wxALL|wxEXPAND)
128    
129          # Projection Specific Entries (Name/Projection)          # Projection Specific Entries (Name/Projection)
130          self.sizer_projctrls = wxBoxSizer(wxVERTICAL)          self.sizer_projctrls = wxBoxSizer(wxVERTICAL)
# Line 145  class ProjFrame(NonModalNonParentDialog) Line 151  class ProjFrame(NonModalNonParentDialog)
151          self.sizer_projctrls.Add(self.nbsizer, 1,          self.sizer_projctrls.Add(self.nbsizer, 1,
152                                   wxALL|wxEXPAND|wxADJUST_MINSIZE, 3)                                   wxALL|wxEXPAND|wxADJUST_MINSIZE, 3)
153          self.projection_panels = []          self.projection_panels = []
154            self.projchoice.Append(_("<Unknown>"), "")
155          for proj_type, name, cls in self.projection_panel_defs:          for proj_type, name, cls in self.projection_panel_defs:
156              self.projchoice.Append(name, proj_type)              self.projchoice.Append(name, proj_type)
157              panel = cls(self, self.receiver)              panel = cls(self, self.receiver)
# Line 199  class ProjFrame(NonModalNonParentDialog) Line 206  class ProjFrame(NonModalNonParentDialog)
206          top_box.Fit(self)          top_box.Fit(self)
207          top_box.SetSizeHints(self)          top_box.SetSizeHints(self)
208    
209        def OnClose(self, event):
210            self.projection_list.Unsubscribe(PROJ_SELECTION_CHANGED,
211                                             self.proj_selection_changed)
212            # Destroy the projection list explicitly so that it properly
213            # unsubscribes everything. It would be cleaner if the projection
214            # could do this by itself but wx doesn't always send destroy
215            # events for non-top-level widgets
216            self.projection_list.Destroy()
217            NonModalNonParentDialog.OnClose(self, event)
218    
219      def OnApply(self, event):      def OnApply(self, event):
220          self.__SetProjection()          self.__SetProjection()
221          self.haveTried = True          self.haveTried = True
# Line 220  class ProjFrame(NonModalNonParentDialog) Line 237  class ProjFrame(NonModalNonParentDialog)
237    
238      def _OnNew(self, event):      def _OnNew(self, event):
239    
240          # clear all selections          self.projection_list.ClearSelection()
         sel = self.availprojs.GetSelections()  
         for index in sel:  
             self.availprojs.SetSelection(index, False)  
   
241          self.projname.Clear()          self.projname.Clear()
242    
243          # supply a projection panel if there wasn't one          # supply a projection panel if there wasn't one
# Line 232  class ProjFrame(NonModalNonParentDialog) Line 245  class ProjFrame(NonModalNonParentDialog)
245              self.projchoice.SetSelection(0)              self.projchoice.SetSelection(0)
246              self.__DoOnProjChoice()              self.__DoOnProjChoice()
247    
248          self.curProjPanel.Clear()          if self.curProjPanel is not None:
249                self.curProjPanel.Clear()
250    
251      def _OnSave(self, event):      def _OnSave(self, event):
252    
253          sel = self.availprojs.GetSelections()          sel = self.projection_list.selected_projections()
254          assert len(sel) == 1,  "button shouldn't be enabled"          assert len(sel) == 1,  "button shouldn't be enabled"
255    
256          proj, projfile = self.availprojs.GetClientData(sel[0])          proj, projfile = sel[0]
257    
258          assert proj is not None and projfile is not None          assert proj is not None and projfile is not None
259    
260          newproj = self.__GetProjection()          newproj = self.__GetProjection()
261    
262          if newproj is not None:          if newproj is not None:
263                # FIXME: we should only allow this for the user proj file.
264              projfile.Replace(proj, newproj)              projfile.Replace(proj, newproj)
265              self.write_proj_file(projfile)              self.write_proj_file(projfile)
266              self.availprojs.SetClientData(sel[0], [newproj, projfile])              self.projection_list.SelectProjection(newproj)
   
             self.__FillAvailList( selectProj = newproj.Label())  
267    
268      def _OnAddToList(self, event):      def _OnAddToList(self, event):
269    
# Line 258  class ProjFrame(NonModalNonParentDialog) Line 271  class ProjFrame(NonModalNonParentDialog)
271          if proj is not None:          if proj is not None:
272              self.__usrProjFile.Add(proj)              self.__usrProjFile.Add(proj)
273              self.write_proj_file(self.__usrProjFile)              self.write_proj_file(self.__usrProjFile)
274              self.__FillAvailList( selectProj = proj.Label())              self.projection_list.SelectProjection(proj)
   
     def _OnProjAvail(self, event):  
         self.__DoOnProjAvail()  
275    
276      def show_warnings(self, title, filename, warnings):      def show_warnings(self, title, filename, warnings):
277          """Show the warnings (a list of strings) in a dialog          """Show the warnings (a list of strings) in a dialog
# Line 274  class ProjFrame(NonModalNonParentDialog) Line 284  class ProjFrame(NonModalNonParentDialog)
284              self.parent.RunMessageBox(title, text)              self.parent.RunMessageBox(title, text)
285    
286      def _OnImport(self, event):      def _OnImport(self, event):
287            """Handler for the 'Import' button
288    
289            Ask the user for a filename, read the projections from that file
290            add them to the user ProjFile object and write the user file
291            back to disk.
292            """
293          dlg = wxFileDialog(self, _("Import"), style = wxOPEN)          dlg = wxFileDialog(self, _("Import"), style = wxOPEN)
294    
295          if dlg.ShowModal() == wxID_OK:          if dlg.ShowModal() == wxID_OK:
# Line 293  class ProjFrame(NonModalNonParentDialog) Line 308  class ProjFrame(NonModalNonParentDialog)
308                      self.write_proj_file(self.__usrProjFile)                      self.write_proj_file(self.__usrProjFile)
309              finally:              finally:
310                  ThubanEndBusyCursor()                  ThubanEndBusyCursor()
   
             self.__FillAvailList()  
   
311          dlg.Destroy()          dlg.Destroy()
312    
313      def _OnExport(self, event):      def _OnExport(self, event):
314            """Handler for the 'Export' button.
315    
316          sel = self.availprojs.GetSelections()          Ask the user for a filename and write the selected projections
317            to that file.
318            """
319            sel = self.projection_list.selected_projections()
320          assert len(sel) != 0, "button should be disabled"          assert len(sel) != 0, "button should be disabled"
321    
322          dlg = wxFileDialog(self, _("Export"),          dlg = wxFileDialog(self, _("Export"), style=wxSAVE|wxOVERWRITE_PROMPT)
                         style = wxSAVE|wxOVERWRITE_PROMPT)  
323    
324          if dlg.ShowModal() == wxID_OK:          if dlg.ShowModal() == wxID_OK:
325              path = dlg.GetPath()              proj_file = ProjFile(dlg.GetPath())
326                for proj, pf in sel:
             projFile = ProjFile(path)  
   
             for i in sel:  
                 proj = self.availprojs.GetClientData(i)[CLIENT_PROJ]  
327                  if proj is not None:                  if proj is not None:
328                      projFile.Add(proj)                      proj_file.Add(proj)
329                self.write_proj_file(proj_file)
             self.write_proj_file(projFile)  
330    
331          dlg.Destroy()          dlg.Destroy()
332    
333      def _OnRemove(self, event):      def _OnRemove(self, event):
334            """Handler for the 'Remove' button
335    
336          sel = self.availprojs.GetSelections()          Remove any selected projection that came from the user's
337            ProjFile. If the user ProjFile was modified write it back to
338            disk.
339            """
340            sel = self.projection_list.selected_projections()
341          assert len(sel) != 0, "button should be disabled!"          assert len(sel) != 0, "button should be disabled!"
342    
343          #          modified = False
344          # remove the items backwards so the indices don't change          for proj, pf in sel:
345          #              if proj is not None and pf is self.__usrProjFile:
346          sel = list(sel)                  pf.Remove(proj)
347          sel.sort()                  modified = True
         sel.reverse()  
   
         newselection = -1  
         if len(sel) == 1:  
             newselection = sel[0] - 1  
             if newselection < 0:  
                 newselection = 0  
   
         for i in sel:  
             proj, projfile = self.availprojs.GetClientData(i)  
   
             #  
             # this could be the case if they selected <None> or  
             # the currently used projection  
             #  
             if proj is not None and projfile is not None:  
                 projfile.Remove(proj)  
348    
349          self.write_proj_file(projfile)          if modified:
350                self.write_proj_file(self.__usrProjFile)
         self.__FillAvailList()  
   
         #  
         # this *could* produce incorrect results if the .proj files  
         # change between the last list update and this selection  
         # because the list has been repopulated.  
         #  
         if newselection != -1 and self.availprojs.GetCount() > 0:  
             self.availprojs.SetSelection(newselection)  
   
         self.__VerifyButtons()  
351    
352      def _OnProjName(self, event):      def _OnProjName(self, event):
353          self.__VerifyButtons()          self.__VerifyButtons()
354    
355      def __ShowError(self, filename, errstr):      def __ShowError(self, filename, errstr):
356          wxMessageDialog(self,          wxMessageDialog(self,
357              _("The following error occured:\n") +              _("The following error occured:\n") +
358              filename + "\n" + errstr,              filename + "\n" + errstr,
359              _("Error"), wxOK | wxICON_ERROR).ShowModal()              _("Error"), wxOK | wxICON_ERROR).ShowModal()
360    
361      def __VerifyButtons(self):      def __VerifyButtons(self):
362          """Enable or disable the appropriate buttons based on the          """Update button sensitivity"""
         current state of the dialog.  
         """  
363    
364          sel = self.availprojs.GetSelections()          num_sel = self.projection_list.GetSelectedItemCount()
365    
366          self.button_import.Enable(True)          self.button_import.Enable(True)
367          self.button_export.Enable(True)          self.button_export.Enable(True)
# Line 398  class ProjFrame(NonModalNonParentDialog) Line 383  class ProjFrame(NonModalNonParentDialog)
383          if self.curProjPanel is not None:          if self.curProjPanel is not None:
384              self.curProjPanel.Enable(True)              self.curProjPanel.Enable(True)
385    
386          if len(sel) == 0:          if num_sel == 0:
387              self.button_import.Enable(True)              self.button_import.Enable(True)
388              self.button_export.Enable(False)              self.button_export.Enable(False)
389              self.button_remove.Enable(False)              self.button_remove.Enable(False)
390              self.button_save.Enable(False)              self.button_save.Enable(False)
391    
392          elif len(sel) == 1:          elif num_sel == 1:
393    
394              proj, projFile = self.availprojs.GetClientData(sel[0])              selection = self.projection_list.selected_projections()
395                proj, projFile = selection[0]
396    
397              self.button_save.Enable(len(self.projname.GetValue()) > 0)              self.button_save.Enable(len(self.projname.GetValue()) > 0)
398              self.button_add.Enable(len(self.projname.GetValue()) > 0)              self.button_add.Enable(len(self.projname.GetValue()) > 0)
# Line 433  class ProjFrame(NonModalNonParentDialog) Line 419  class ProjFrame(NonModalNonParentDialog)
419          else:          else:
420              self.edit_box.Enable(False)              self.edit_box.Enable(False)
421    
422      def __DoOnProjAvail(self):      def proj_selection_changed(self, projs):
423            """Subscribed to the projection_list's PROJ_SELECTION_CHANGED message
         sel = self.availprojs.GetSelections()  
         if len(sel) == 1:  
   
             proj = self.availprojs.GetClientData(sel[0])[CLIENT_PROJ]  
             projfile = self.availprojs.GetClientData(sel[0])[CLIENT_PROJFILE]  
424    
425            Update the dialog to reflect the new selection.
426            """
427            if len(projs) == 0:
428                self.projfilepath.SetLabel(_("No Projections selected"))
429            elif len(projs) == 1:
430                proj, projfile = projs[0]
431              if proj is None:              if proj is None:
432                  # user selected <None>                  # user selected <None>
433                  self.projname.Clear()                  self.projname.Clear()
434                  self.projfilepath.SetLabel(_("Projection File: "))                  self.projfilepath.SetLabel("")
435              else:              else:
   
436                  if projfile is not None:                  if projfile is not None:
437                      self.projfilepath.SetLabel(_("Projection File: ") +                      filename = os.path.basename(projfile.GetFilename())
438                          os.path.basename(projfile.GetFilename()))                      self.projfilepath.SetLabel(_("Source of Projection: %s")
439                                                   % filename)
440                  else:                  else:
441                      # only None if the currently used projection is selected                      # only None if the currently used projection is selected
442                      self.projfilepath.SetLabel(_("Projection File: "))                      self.projfilepath.SetLabel("")
443    
444                  self.projname.SetValue(proj.Label())                  self.projname.SetValue(proj.Label())
445    
# Line 461  class ProjFrame(NonModalNonParentDialog) Line 448  class ProjFrame(NonModalNonParentDialog)
448                  for projType, name, cls in self.projection_panel_defs:                  for projType, name, cls in self.projection_panel_defs:
449                      if myProjType == projType:                      if myProjType == projType:
450                          self.projchoice.Enable(True)                          self.projchoice.Enable(True)
451                          self.projchoice.SetSelection(i)                          self.projchoice.SetSelection(i + 1)
452                          self.__DoOnProjChoice()                          self.__DoOnProjChoice()
453    
454                          #                          #
# Line 474  class ProjFrame(NonModalNonParentDialog) Line 461  class ProjFrame(NonModalNonParentDialog)
461                          break                          break
462                      i += 1                      i += 1
463                  else:                  else:
464                        self.projchoice.Select(0)
465                      self.projchoice.Disable()                      self.projchoice.Disable()
466                      self._show_proj_panel(UnknownProjPanel)                      self._show_proj_panel(UnknownProjPanel)
467                        assert self.curProjPanel is not None
468                        self.curProjPanel.SetProjection(proj)
469            else:
470                self.projfilepath.SetLabel(_("Multiple Projections selected"))
471    
472          self.__VerifyButtons()          self.__VerifyButtons()
473    
# Line 533  class ProjFrame(NonModalNonParentDialog) Line 525  class ProjFrame(NonModalNonParentDialog)
525          Could be None.          Could be None.
526          """          """
527    
528          sel = self.availprojs.GetSelections()          assert self.projection_list.GetSelectedItemCount() < 2, \
529          assert len(sel) < 2, "button should be disabled"                 "button should be disabled"
   
530    
531            sel = self.projection_list.selected_projections()
532          if len(sel) == 1:          if len(sel) == 1:
533              proj = self.availprojs.GetClientData(sel[0])[CLIENT_PROJ]              if sel[0][0] is None:
             if proj is None:  
534                  # <None> is selected                  # <None> is selected
535                  return None                  return None
536    
537          #          # self.curProjPanel should always contain the most relevant data
538          # self.curProjPanel should always contain the most          # for a projection
         # relevant data for a projection  
         #  
539          if self.curProjPanel is not None:          if self.curProjPanel is not None:
540              return Projection(self.curProjPanel.GetParameters(),              return Projection(self.curProjPanel.GetParameters(),
541                                self.projname.GetValue())                                self.projname.GetValue())
542    
543          return None          return None
544    
545      def __FillAvailList(self, selectCurrent = False, selectProj = None):      def load_user_proj(self):
         """Populate the list of available projections.  
           
         selectCurrent -- if True, select the projection used by  
                          the receiver, otherwise select nothing.  
         selectProj    -- if set, select the projection found under the  
                          specified name. This overwrites any other  
                          selection estimate.  
         """  
   
         self.availprojs.Clear()  
   
         #  
         # the list can never be empty. there will always be  
         # at least this one item  
         #  
         self.availprojs.Append(_("<None>"), (None, None))  
   
546          ThubanBeginBusyCursor()          ThubanBeginBusyCursor()
547          try:          try:
548              projfile, warnings = get_system_proj_file()              if self.__usrProjFile is None:
549              self.show_warnings(_("Warnings"), projfile.GetFilename(), warnings)                  projfile, warnings = get_user_proj_file()
550              for proj in projfile.GetProjections():                  self.show_warnings(_("Warnings"), projfile.GetFilename(),
551                  self.availprojs.Append(proj.Label(), [proj, projfile])                                     warnings)
552              self.__sysProjFile = projfile                  self.__usrProjFile = projfile
553                return self.__usrProjFile
             projfile, warnings = get_user_proj_file()  
             self.show_warnings(_("Warnings"), projfile.GetFilename(), warnings)  
             for proj in projfile.GetProjections():  
                 self.availprojs.Append(proj.Label(), [proj, projfile])  
             self.__usrProjFile = projfile  
554          finally:          finally:
555              ThubanEndBusyCursor()              ThubanEndBusyCursor()
556    
557          #      def load_system_proj(self):
558          # We add the current projection to the list at last.          ThubanBeginBusyCursor()
559          # Since the list is resorted immediately a following FindString()          try:
560          # determines the index correctly.              if self.__sysProjFile is None:
561          #                  projfile, warnings = get_system_proj_file()
562          proj = self.receiver.GetProjection()                  self.show_warnings(_("Warnings"), projfile.GetFilename(),
563          if proj is not None:                                     warnings)
564              proj_item = _("%s (current)") % proj.Label()                  self.__sysProjFile = projfile
565              self.availprojs.Append(proj_item, [proj, None])              return self.__sysProjFile
566              if selectCurrent:          finally:
567                  self.availprojs.SetSelection(              ThubanEndBusyCursor()
                         self.availprojs.FindString(proj_item)  
                     )  
         else:  
             if selectCurrent:  
                 self.availprojs.SetSelection(  
                         self.availprojs.FindString(_("<None>"))  
                     )  
         if selectProj:  
             self.availprojs.SetSelection(  
                         self.availprojs.FindString(selectProj)  
                     )  
568    
569      def write_proj_file(self, proj_file):      def write_proj_file(self, proj_file):
570          """Write the ProjFile object proj_file back to its file          """Write the ProjFile object proj_file back to its file
# Line 634  class ProjPanel(wxPanel): Line 590  class ProjPanel(wxPanel):
590          wxPanel.__init__(self, parent, -1)          wxPanel.__init__(self, parent, -1)
591    
592          self.__ellps = wxChoice(self, -1)          self.__ellps = wxChoice(self, -1)
593          self.ellpsData = [("airy"  , _("Airy")),          self.ellpsData = [("", _("<Unknown>")),
594                              ("airy"  , _("Airy")),
595                            ("bessel", _("Bessel 1841")),                            ("bessel", _("Bessel 1841")),
596                            ("clrk66", _("Clarke 1866")),                            ("clrk66", _("Clarke 1866")),
597                            ("clrk80", _("Clarke 1880")),                            ("clrk80", _("Clarke 1880")),
598                            ("GRS80" , _("GRS 1980 (IUGG, 1980)")),                            ("GRS80" , _("GRS 1980 (IUGG, 1980)")),
599                            ("intl"  , _("International 1909 (Hayford)")),                            ("intl"  , _("International 1909 (Hayford)")),
# Line 682  class ProjPanel(wxPanel): Line 639  class ProjPanel(wxPanel):
639          self.__ellps.SetSelection(0)          self.__ellps.SetSelection(0)
640    
641      def GetParameters(self):      def GetParameters(self):
642          return ["ellps=" + self.__ellps.GetClientData(          ellps = self.__ellps.GetSelection()
643                                          self.__ellps.GetSelection())]          if ellps > 0:
644                return ["ellps=" + self.__ellps.GetClientData(ellps)]
645            return []
646    
647    
648  ID_TMPANEL_LAT = 4001  ID_TMPANEL_LAT = 4001
# Line 699  class UnknownProjPanel(ProjPanel): Line 658  class UnknownProjPanel(ProjPanel):
658      def __init__(self, parent, receiver):      def __init__(self, parent, receiver):
659          ProjPanel.__init__(self, parent)          ProjPanel.__init__(self, parent)
660    
661            self.__text = _("Thuban does not know the parameters\n"
662                            "for the current projection and cannot\n"
663                            "display a configuration panel.\n\n"
664                            "The unidentified set of parameters is:\n\n")
665    
666            self.__textbox = wxTextCtrl(self, -1, self.__text, size=(100,200),
667                                style=wxTE_READONLY|wxTE_MULTILINE|wxTE_LINEWRAP)
668          self._DoLayout()          self._DoLayout()
669    
670      def _DoLayout(self):      def _DoLayout(self):
671          sizer = wxBoxSizer(wxVERTICAL)          sizer = wxBoxSizer(wxVERTICAL)
672    
673          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.")))  
674    
675          ProjPanel._DoLayout(self, sizer)          ProjPanel._DoLayout(self, sizer)
676    
# Line 715  class UnknownProjPanel(ProjPanel): Line 678  class UnknownProjPanel(ProjPanel):
678          return "Unknown"          return "Unknown"
679    
680      def SetProjection(self, proj):      def SetProjection(self, proj):
681          pass          """Append the available parameters to the info text."""
682            text = self.__text
683            for param in proj.GetAllParameters():
684                text = text + '%s\n' % param
685            self.__textbox.SetValue(text)
686    
687      def GetParameters(self):      def GetParameters(self):
688          return None          return None
# Line 728  class TMPanel(ProjPanel): Line 695  class TMPanel(ProjPanel):
695    
696          self.__latitude = wxTextCtrl(self, ID_TMPANEL_LAT)          self.__latitude = wxTextCtrl(self, ID_TMPANEL_LAT)
697          self.__longitude = wxTextCtrl(self, ID_TMPANEL_LONG)          self.__longitude = wxTextCtrl(self, ID_TMPANEL_LONG)
         self.__scale = wxTextCtrl(self, ID_TMPANEL_SCALE)  
698          self.__falseEast = wxTextCtrl(self, ID_TMPANEL_FASLE_EAST)          self.__falseEast = wxTextCtrl(self, ID_TMPANEL_FASLE_EAST)
699          self.__falseNorth = wxTextCtrl(self, ID_TMPANEL_FALSE_NORTH)          self.__falseNorth = wxTextCtrl(self, ID_TMPANEL_FALSE_NORTH)
700            self.__scale = wxTextCtrl(self, ID_TMPANEL_SCALE)
701    
702          self._DoLayout()          self._DoLayout()
703    
# Line 865  class LCCPanel(ProjPanel): Line 832  class LCCPanel(ProjPanel):
832                    
833          self.__fspLatitude = wxTextCtrl(self, -1)          self.__fspLatitude = wxTextCtrl(self, -1)
834          self.__sspLatitude = wxTextCtrl(self, -1)          self.__sspLatitude = wxTextCtrl(self, -1)
         self.__originLat   = wxTextCtrl(self, -1)  
835          self.__meridian    = wxTextCtrl(self, -1)          self.__meridian    = wxTextCtrl(self, -1)
836            self.__originLat   = wxTextCtrl(self, -1)
837          self.__falseEast   = wxTextCtrl(self, -1)          self.__falseEast   = wxTextCtrl(self, -1)
838          self.__falseNorth  = wxTextCtrl(self, -1)          self.__falseNorth  = wxTextCtrl(self, -1)
839    

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26