/[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 1819 by bh, Mon Oct 13 15:55:43 2003 UTC revision 1854 by bh, Wed Oct 22 09:38:36 2003 UTC
# Line 24  from Thuban.Model.resource import get_us Line 24  from Thuban.Model.resource import get_us
24                                    read_proj_file, write_proj_file                                    read_proj_file, write_proj_file
25  from Thuban.UI.dialogs import NonModalNonParentDialog  from Thuban.UI.dialogs import NonModalNonParentDialog
26    
27    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 60  class ProjFrame(NonModalNonParentDialog) Line 64  class ProjFrame(NonModalNonParentDialog)
64          self.receiver = receiver          self.receiver = receiver
65          self.haveTried = False          self.haveTried = False
66          self.curProjPanel = None          self.curProjPanel = None
67            self.__usrProjFile = None
68            self.__sysProjFile = None
69    
70          self.build_dialog()          self.build_dialog()
71          self.Layout()          self.Layout()
72    
73          self.originalProjection = self.receiver.GetProjection()          self.originalProjection = self.receiver.GetProjection()
74    
75          self.__DoOnProjAvail()          self.projection_list.SelectProjection(self.originalProjection)
76          self.button_ok.SetFocus()          self.projection_list.SetFocus()
         self.availprojs.SetFocus()  
77    
78      def build_dialog(self):      def build_dialog(self):
79          """Build the dialog's widgets and set the event handlers"""          """Build the dialog's widgets and set the event handlers"""
# Line 81  class ProjFrame(NonModalNonParentDialog) Line 86  class ProjFrame(NonModalNonParentDialog)
86          #    The projection list and associated controls          #    The projection list and associated controls
87          #          #
88          vbox = wxBoxSizer(wxVERTICAL)          vbox = wxBoxSizer(wxVERTICAL)
89          main_box.Add(vbox, 0, wxALL|wxEXPAND)          main_box.Add(vbox, 4, wxALL|wxEXPAND)
90    
91          label = wxStaticText(self, -1, _("Available Projections:"))          #label = wxStaticText(self, -1, _("Available Projections:"))
92          vbox.Add(label, 0, wxLEFT|wxRIGHT|wxTOP, 4)          #vbox.Add(label, 0, wxLEFT|wxRIGHT|wxTOP, 4)
93    
94          hbox = wxBoxSizer(wxHORIZONTAL)          hbox = wxBoxSizer(wxHORIZONTAL)
95          vbox.Add(hbox, 1, wxALL|wxEXPAND)          vbox.Add(hbox, 1, wxALL|wxEXPAND)
96          self.availprojs = wxListBox(self, ID_PROJ_AVAIL,          self.projection_list = ProjectionList(self, self.load_system_proj(),
97                                      style=wxLB_EXTENDED|wxLB_SORT)                                                self.load_user_proj(),
98          EVT_LISTBOX(self, ID_PROJ_AVAIL, self._OnProjAvail)                                                self.receiver.GetProjection())
99          hbox.Add(self.availprojs, 1, wxALL|wxEXPAND|wxADJUST_MINSIZE, 4)          hbox.Add(self.projection_list, 1, wxALL|wxEXPAND|wxADJUST_MINSIZE, 4)
100          self.__FillAvailList(selectCurrent = True)          self.projection_list.Subscribe(PROJ_SELECTION_CHANGED,
101                                           self.proj_selection_changed)
102    
103          # Projection List specific actions (Import/Export/Remove)          # Projection List specific actions (Import/Export/Remove)
104          buttons = wxBoxSizer(wxVERTICAL)          buttons = wxBoxSizer(wxVERTICAL)
# Line 117  class ProjFrame(NonModalNonParentDialog) Line 123  class ProjFrame(NonModalNonParentDialog)
123          #          #
124          self.edit_box = wxStaticBox(self, -1, _("Edit"))          self.edit_box = wxStaticBox(self, -1, _("Edit"))
125          sizer_edit = wxStaticBoxSizer(self.edit_box, wxHORIZONTAL)          sizer_edit = wxStaticBoxSizer(self.edit_box, wxHORIZONTAL)
126          main_box.Add(sizer_edit, 1, wxALL|wxEXPAND)          main_box.Add(sizer_edit, 5, wxALL|wxEXPAND)
127    
128          # Projection Specific Entries (Name/Projection)          # Projection Specific Entries (Name/Projection)
129          self.sizer_projctrls = wxBoxSizer(wxVERTICAL)          self.sizer_projctrls = wxBoxSizer(wxVERTICAL)
# Line 144  class ProjFrame(NonModalNonParentDialog) Line 150  class ProjFrame(NonModalNonParentDialog)
150          self.sizer_projctrls.Add(self.nbsizer, 1,          self.sizer_projctrls.Add(self.nbsizer, 1,
151                                   wxALL|wxEXPAND|wxADJUST_MINSIZE, 3)                                   wxALL|wxEXPAND|wxADJUST_MINSIZE, 3)
152          self.projection_panels = []          self.projection_panels = []
153            self.projchoice.Append(_("<Unknown>"), "")
154          for proj_type, name, cls in self.projection_panel_defs:          for proj_type, name, cls in self.projection_panel_defs:
155              self.projchoice.Append(name, proj_type)              self.projchoice.Append(name, proj_type)
156              panel = cls(self, self.receiver)              panel = cls(self, self.receiver)
# Line 198  class ProjFrame(NonModalNonParentDialog) Line 205  class ProjFrame(NonModalNonParentDialog)
205          top_box.Fit(self)          top_box.Fit(self)
206          top_box.SetSizeHints(self)          top_box.SetSizeHints(self)
207    
208        def OnClose(self, event):
209            self.projection_list.Unsubscribe(PROJ_SELECTION_CHANGED,
210                                             self.proj_selection_changed)
211            # Destroy the projection list explicitly so that it properly
212            # unsubscribes everything. It would be cleaner if the projection
213            # could do this by itself but wx doesn't always send destroy
214            # events for non-top-level widgets
215            self.projection_list.Destroy()
216            NonModalNonParentDialog.OnClose(self, event)
217    
218      def OnApply(self, event):      def OnApply(self, event):
219          self.__SetProjection()          self.__SetProjection()
220          self.haveTried = True          self.haveTried = True
# Line 219  class ProjFrame(NonModalNonParentDialog) Line 236  class ProjFrame(NonModalNonParentDialog)
236    
237      def _OnNew(self, event):      def _OnNew(self, event):
238    
239          # clear all selections          self.projection_list.ClearSelection()
         sel = self.availprojs.GetSelections()  
         for index in sel:  
             self.availprojs.SetSelection(index, False)  
   
240          self.projname.Clear()          self.projname.Clear()
241    
242          # supply a projection panel if there wasn't one          # supply a projection panel if there wasn't one
# Line 231  class ProjFrame(NonModalNonParentDialog) Line 244  class ProjFrame(NonModalNonParentDialog)
244              self.projchoice.SetSelection(0)              self.projchoice.SetSelection(0)
245              self.__DoOnProjChoice()              self.__DoOnProjChoice()
246    
247          self.curProjPanel.Clear()          if self.curProjPanel is not None:
248                self.curProjPanel.Clear()
249    
250      def _OnSave(self, event):      def _OnSave(self, event):
251    
252          sel = self.availprojs.GetSelections()          sel = self.projection_list.selected_projections()
253          assert len(sel) == 1,  "button shouldn't be enabled"          assert len(sel) == 1,  "button shouldn't be enabled"
254    
255          proj, projfile = self.availprojs.GetClientData(sel[0])          proj, projfile = sel[0]
256    
257          assert proj is not None and projfile is not None          assert proj is not None and projfile is not None
258    
259          newproj = self.__GetProjection()          newproj = self.__GetProjection()
260    
261          if newproj is not None:          if newproj is not None:
262                # FIXME: we should only allow this for the user proj file.
263              projfile.Replace(proj, newproj)              projfile.Replace(proj, newproj)
264              try:              self.write_proj_file(projfile)
265                  write_proj_file(projfile)              self.projection_list.SelectProjection(newproj)
             except IOError, (errno, errstr):  
                 self.__ShowError(projfile.GetFilename(), errstr)  
             self.availprojs.SetClientData(sel[0], [newproj, projfile])  
   
             self.__FillAvailList( selectProj = newproj.Label())  
266    
267      def _OnAddToList(self, event):      def _OnAddToList(self, event):
268    
269          proj = self.__GetProjection()          proj = self.__GetProjection()
270          if proj is not None:          if proj is not None:
271              self.__usrProjFile.Add(proj)              self.__usrProjFile.Add(proj)
272              try:              self.write_proj_file(self.__usrProjFile)
273                  write_proj_file(self.__usrProjFile)              self.projection_list.SelectProjection(proj)
             except IOError, (errno, errstr):  
                 self.__ShowError(self.__userProjFile.GetFilename(), errstr)  
   
             self.__FillAvailList( selectProj = proj.Label())  
   
     def _OnProjAvail(self, event):  
         self.__DoOnProjAvail()  
274    
275      def show_warnings(self, title, filename, warnings):      def show_warnings(self, title, filename, warnings):
276          """Show the warnings (a list of strings) in a dialog          """Show the warnings (a list of strings) in a dialog
# Line 280  class ProjFrame(NonModalNonParentDialog) Line 283  class ProjFrame(NonModalNonParentDialog)
283              self.parent.RunMessageBox(title, text)              self.parent.RunMessageBox(title, text)
284    
285      def _OnImport(self, event):      def _OnImport(self, event):
286            """Handler for the 'Import' button
287    
288            Ask the user for a filename, read the projections from that file
289            add them to the user ProjFile object and write the user file
290            back to disk.
291            """
292          dlg = wxFileDialog(self, _("Import"), style = wxOPEN)          dlg = wxFileDialog(self, _("Import"), style = wxOPEN)
293    
294          if dlg.ShowModal() == wxID_OK:          if dlg.ShowModal() == wxID_OK:
295              path = dlg.GetPath()              path = dlg.GetPath()
296    
297                ThubanBeginBusyCursor()
298              try:              try:
299                  projFile, warnings = read_proj_file(path)                  try:
300                  self.show_warnings(_("Warnings"), path, warnings)                      projFile, warnings = read_proj_file(path)
301                  for proj in projFile.GetProjections():                  except IOError, (errno, errstr):
302                      self.__usrProjFile.Add(proj)                      self.__ShowError(dlg.GetPath(), errstr)
303                  write_proj_file(self.__usrProjFile)                  else:
304              except IOError, (errno, errstr):                      self.show_warnings(_("Warnings"), path, warnings)
305                  self.__ShowError(dlg.GetPath(), errstr)                      for proj in projFile.GetProjections():
306                            self.__usrProjFile.Add(proj)
307              self.__FillAvailList()                      self.write_proj_file(self.__usrProjFile)
308                finally:
309                    ThubanEndBusyCursor()
310          dlg.Destroy()          dlg.Destroy()
311    
312      def _OnExport(self, event):      def _OnExport(self, event):
313            """Handler for the 'Export' button.
314    
315          sel = self.availprojs.GetSelections()          Ask the user for a filename and write the selected projections
316            to that file.
317            """
318            sel = self.projection_list.selected_projections()
319          assert len(sel) != 0, "button should be disabled"          assert len(sel) != 0, "button should be disabled"
320    
321          dlg = wxFileDialog(self, _("Export"),          dlg = wxFileDialog(self, _("Export"), style=wxSAVE|wxOVERWRITE_PROMPT)
                         style = wxSAVE|wxOVERWRITE_PROMPT)  
322    
323          if dlg.ShowModal() == wxID_OK:          if dlg.ShowModal() == wxID_OK:
324              path = dlg.GetPath()              proj_file = ProjFile(dlg.GetPath())
325                for proj, pf in sel:
             projFile = ProjFile(path)  
   
             for i in sel:  
                 proj = self.availprojs.GetClientData(i)[CLIENT_PROJ]  
326                  if proj is not None:                  if proj is not None:
327                      projFile.Add(proj)                      proj_file.Add(proj)
328                self.write_proj_file(proj_file)
             try:  
                 write_proj_file(projFile)  
             except IOError, (errno, errstr):  
                 self.__ShowError(dlg.GetPath(), errstr)  
329    
330          dlg.Destroy()          dlg.Destroy()
331    
332      def _OnRemove(self, event):      def _OnRemove(self, event):
333            """Handler for the 'Remove' button
334    
335          sel = self.availprojs.GetSelections()          Remove any selected projection that came from the user's
336            ProjFile. If the user ProjFile was modified write it back to
337            disk.
338            """
339            sel = self.projection_list.selected_projections()
340          assert len(sel) != 0, "button should be disabled!"          assert len(sel) != 0, "button should be disabled!"
341    
342          #          modified = False
343          # remove the items backwards so the indices don't change          for proj, pf in sel:
344          #              if proj is not None and pf is self.__usrProjFile:
345          sel = list(sel)                  pf.Remove(proj)
346          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)  
   
         try:  
             write_proj_file(projfile)  
         except IOError, (errno, errstr):  
             self.__ShowError(projfile.GetFilename(), errstr)  
   
         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)  
347    
348          self.__VerifyButtons()          if modified:
349                self.write_proj_file(self.__usrProjFile)
350    
351      def _OnProjName(self, event):      def _OnProjName(self, event):
352          self.__VerifyButtons()          self.__VerifyButtons()
353    
354      def __ShowError(self, filename, errstr):      def __ShowError(self, filename, errstr):
355          wxMessageDialog(self,          wxMessageDialog(self,
356              _("The following error occured:\n") +              _("The following error occured:\n") +
357              filename + "\n" + errstr,              filename + "\n" + errstr,
358              _("Error"), wxOK | wxICON_ERROR).ShowModal()              _("Error"), wxOK | wxICON_ERROR).ShowModal()
359    
360      def __VerifyButtons(self):      def __VerifyButtons(self):
361          """Enable or disable the appropriate buttons based on the          """Update button sensitivity"""
         current state of the dialog.  
         """  
362    
363          sel = self.availprojs.GetSelections()          num_sel = self.projection_list.GetSelectedItemCount()
364    
365          self.button_import.Enable(True)          self.button_import.Enable(True)
366          self.button_export.Enable(True)          self.button_export.Enable(True)
# Line 405  class ProjFrame(NonModalNonParentDialog) Line 382  class ProjFrame(NonModalNonParentDialog)
382          if self.curProjPanel is not None:          if self.curProjPanel is not None:
383              self.curProjPanel.Enable(True)              self.curProjPanel.Enable(True)
384    
385          if len(sel) == 0:          if num_sel == 0:
386              self.button_import.Enable(True)              self.button_import.Enable(True)
387              self.button_export.Enable(False)              self.button_export.Enable(False)
388              self.button_remove.Enable(False)              self.button_remove.Enable(False)
389              self.button_save.Enable(False)              self.button_save.Enable(False)
390    
391          elif len(sel) == 1:          elif num_sel == 1:
392    
393              proj, projFile = self.availprojs.GetClientData(sel[0])              selection = self.projection_list.selected_projections()
394                proj, projFile = selection[0]
395    
396              self.button_save.Enable(len(self.projname.GetValue()) > 0)              self.button_save.Enable(len(self.projname.GetValue()) > 0)
397              self.button_add.Enable(len(self.projname.GetValue()) > 0)              self.button_add.Enable(len(self.projname.GetValue()) > 0)
# Line 440  class ProjFrame(NonModalNonParentDialog) Line 418  class ProjFrame(NonModalNonParentDialog)
418          else:          else:
419              self.edit_box.Enable(False)              self.edit_box.Enable(False)
420    
421      def __DoOnProjAvail(self):      def proj_selection_changed(self, projs):
422            """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]  
423    
424            Update the dialog to reflect the new selection.
425            """
426            if len(projs) == 0:
427                self.projfilepath.SetLabel(_("No Projections selected"))
428            elif len(projs) == 1:
429                proj, projfile = projs[0]
430              if proj is None:              if proj is None:
431                  # user selected <None>                  # user selected <None>
432                  self.projname.Clear()                  self.projname.Clear()
433                  self.projfilepath.SetLabel(_("Projection File: "))                  self.projfilepath.SetLabel("")
434              else:              else:
   
435                  if projfile is not None:                  if projfile is not None:
436                      self.projfilepath.SetLabel(_("Projection File: ") +                      filename = os.path.basename(projfile.GetFilename())
437                          os.path.basename(projfile.GetFilename()))                      self.projfilepath.SetLabel(_("Source of Projection: %s")
438                                                   % filename)
439                  else:                  else:
440                      # only None if the currently used projection is selected                      # only None if the currently used projection is selected
441                      self.projfilepath.SetLabel(_("Projection File: "))                      self.projfilepath.SetLabel("")
442    
443                  self.projname.SetValue(proj.Label())                  self.projname.SetValue(proj.Label())
444    
# Line 468  class ProjFrame(NonModalNonParentDialog) Line 447  class ProjFrame(NonModalNonParentDialog)
447                  for projType, name, cls in self.projection_panel_defs:                  for projType, name, cls in self.projection_panel_defs:
448                      if myProjType == projType:                      if myProjType == projType:
449                          self.projchoice.Enable(True)                          self.projchoice.Enable(True)
450                          self.projchoice.SetSelection(i)                          self.projchoice.SetSelection(i + 1)
451                          self.__DoOnProjChoice()                          self.__DoOnProjChoice()
452    
453                          #                          #
# Line 481  class ProjFrame(NonModalNonParentDialog) Line 460  class ProjFrame(NonModalNonParentDialog)
460                          break                          break
461                      i += 1                      i += 1
462                  else:                  else:
463                        self.projchoice.Select(0)
464                      self.projchoice.Disable()                      self.projchoice.Disable()
465                      self._show_proj_panel(UnknownProjPanel)                      self._show_proj_panel(UnknownProjPanel)
466            else:
467                self.projfilepath.SetLabel(_("Multiple Projections selected"))
468    
469          self.__VerifyButtons()          self.__VerifyButtons()
470    
# Line 540  class ProjFrame(NonModalNonParentDialog) Line 522  class ProjFrame(NonModalNonParentDialog)
522          Could be None.          Could be None.
523          """          """
524    
525          sel = self.availprojs.GetSelections()          assert self.projection_list.GetSelectedItemCount() < 2, \
526          assert len(sel) < 2, "button should be disabled"                 "button should be disabled"
   
527    
528            sel = self.projection_list.selected_projections()
529          if len(sel) == 1:          if len(sel) == 1:
530              proj = self.availprojs.GetClientData(sel[0])[CLIENT_PROJ]              if sel[0][0] is None:
             if proj is None:  
531                  # <None> is selected                  # <None> is selected
532                  return None                  return None
533    
534          #          # self.curProjPanel should always contain the most relevant data
535          # self.curProjPanel should always contain the most          # for a projection
         # relevant data for a projection  
         #  
536          if self.curProjPanel is not None:          if self.curProjPanel is not None:
537              return Projection(self.curProjPanel.GetParameters(),              return Projection(self.curProjPanel.GetParameters(),
538                                self.projname.GetValue())                                self.projname.GetValue())
539    
540          return None          return None
541    
542      def __FillAvailList(self, selectCurrent = False, selectProj = None):      def load_user_proj(self):
543          """Populate the list of available projections.          ThubanBeginBusyCursor()
544                    try:
545          selectCurrent -- if True, select the projection used by              if self.__usrProjFile is None:
546                           the receiver, otherwise select nothing.                  projfile, warnings = get_user_proj_file()
547          selectProj    -- if set, select the projection found under the                  self.show_warnings(_("Warnings"), projfile.GetFilename(),
548                           specified name. This overwrites any other                                     warnings)
549                           selection estimate.                  self.__usrProjFile = projfile
550          """              return self.__usrProjFile
551            finally:
552          self.availprojs.Clear()              ThubanEndBusyCursor()
553    
554          #      def load_system_proj(self):
555          # the list can never be empty. there will always be          ThubanBeginBusyCursor()
556          # at least this one item          try:
557          #              if self.__sysProjFile is None:
558          self.availprojs.Append("<None>", (None, None))                  projfile, warnings = get_system_proj_file()
559                    self.show_warnings(_("Warnings"), projfile.GetFilename(),
560                                       warnings)
561                    self.__sysProjFile = projfile
562                return self.__sysProjFile
563            finally:
564                ThubanEndBusyCursor()
565    
566          projfile, warnings = get_system_proj_file()      def write_proj_file(self, proj_file):
567          self.show_warnings(_("Warnings"), projfile.GetFilename(), warnings)          """Write the ProjFile object proj_file back to its file
         for proj in projfile.GetProjections():  
             self.availprojs.Append(proj.Label(), [proj, projfile])  
         self.__sysProjFile = projfile  
568    
569          projfile, warnings = get_user_proj_file()          Show a busy cursor while writing and if an error occurs show a
570          self.show_warnings(_("Warnings"), projfile.GetFilename(), warnings)          dialog with the error message.
571          for proj in projfile.GetProjections():          """
572              self.availprojs.Append(proj.Label(), [proj, projfile])          try:
573          self.__usrProjFile = projfile              ThubanBeginBusyCursor()
574                try:
575                    write_proj_file(proj_file)
576                finally:
577                    ThubanEndBusyCursor()
578            except IOError, (errno, errstr):
579                self.__ShowError(proj_file.GetFilename(), errstr)
580    
         #  
         # We add the current projection to the list at last.  
         # Since the list is resorted immediately a following FindString()  
         # determines the index correctly.  
         #  
         proj = self.receiver.GetProjection()  
         if proj is not None:  
             proj_item = _("%s (current)") % proj.Label()  
             self.availprojs.Append(proj_item, [proj, None])  
             if selectCurrent:  
                 self.availprojs.SetSelection(  
                         self.availprojs.FindString(proj_item)  
                     )  
         else:  
             if selectCurrent:  
                 self.availprojs.SetSelection(  
                         self.availprojs.FindString("<None>")  
                     )  
         if selectProj:  
             self.availprojs.SetSelection(  
                         self.availprojs.FindString(selectProj)  
                     )  
581    
582    
583  class ProjPanel(wxPanel):  class ProjPanel(wxPanel):
# Line 621  class ProjPanel(wxPanel): Line 587  class ProjPanel(wxPanel):
587          wxPanel.__init__(self, parent, -1)          wxPanel.__init__(self, parent, -1)
588    
589          self.__ellps = wxChoice(self, -1)          self.__ellps = wxChoice(self, -1)
590          self.ellpsData = [("airy"  , _("Airy")),          self.ellpsData = [("", _("<Unknown>")),
591                              ("airy"  , _("Airy")),
592                            ("bessel", _("Bessel 1841")),                            ("bessel", _("Bessel 1841")),
593                            ("clrk66", _("Clarke 1866")),                            ("clrk66", _("Clarke 1866")),
594                            ("clrk80", _("Clarke 1880")),                            ("clrk80", _("Clarke 1880")),
595                            ("GRS80" , _("GRS 1980 (IUGG, 1980)")),                            ("GRS80" , _("GRS 1980 (IUGG, 1980)")),
596                            ("intl"  , _("International 1909 (Hayford)")),                            ("intl"  , _("International 1909 (Hayford)")),
# Line 669  class ProjPanel(wxPanel): Line 636  class ProjPanel(wxPanel):
636          self.__ellps.SetSelection(0)          self.__ellps.SetSelection(0)
637    
638      def GetParameters(self):      def GetParameters(self):
639          return ["ellps=" + self.__ellps.GetClientData(          ellps = self.__ellps.GetSelection()
640                                          self.__ellps.GetSelection())]          if ellps > 0:
641                return ["ellps=" + self.__ellps.GetClientData(ellps)]
642            return []
643    
644    
645  ID_TMPANEL_LAT = 4001  ID_TMPANEL_LAT = 4001
# Line 715  class TMPanel(ProjPanel): Line 684  class TMPanel(ProjPanel):
684    
685          self.__latitude = wxTextCtrl(self, ID_TMPANEL_LAT)          self.__latitude = wxTextCtrl(self, ID_TMPANEL_LAT)
686          self.__longitude = wxTextCtrl(self, ID_TMPANEL_LONG)          self.__longitude = wxTextCtrl(self, ID_TMPANEL_LONG)
         self.__scale = wxTextCtrl(self, ID_TMPANEL_SCALE)  
687          self.__falseEast = wxTextCtrl(self, ID_TMPANEL_FASLE_EAST)          self.__falseEast = wxTextCtrl(self, ID_TMPANEL_FASLE_EAST)
688          self.__falseNorth = wxTextCtrl(self, ID_TMPANEL_FALSE_NORTH)          self.__falseNorth = wxTextCtrl(self, ID_TMPANEL_FALSE_NORTH)
689            self.__scale = wxTextCtrl(self, ID_TMPANEL_SCALE)
690    
691          self._DoLayout()          self._DoLayout()
692    
# Line 852  class LCCPanel(ProjPanel): Line 821  class LCCPanel(ProjPanel):
821                    
822          self.__fspLatitude = wxTextCtrl(self, -1)          self.__fspLatitude = wxTextCtrl(self, -1)
823          self.__sspLatitude = wxTextCtrl(self, -1)          self.__sspLatitude = wxTextCtrl(self, -1)
         self.__originLat   = wxTextCtrl(self, -1)  
824          self.__meridian    = wxTextCtrl(self, -1)          self.__meridian    = wxTextCtrl(self, -1)
825            self.__originLat   = wxTextCtrl(self, -1)
826          self.__falseEast   = wxTextCtrl(self, -1)          self.__falseEast   = wxTextCtrl(self, -1)
827          self.__falseNorth  = wxTextCtrl(self, -1)          self.__falseNorth  = wxTextCtrl(self, -1)
828    

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26