/[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 1851 by bh, Tue Oct 21 14:17:24 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.button_ok.SetFocus()
77          self.availprojs.SetFocus()          self.projection_list.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 81  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 117  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 144  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 198  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            NonModalNonParentDialog.OnClose(self, event)
213    
214      def OnApply(self, event):      def OnApply(self, event):
215          self.__SetProjection()          self.__SetProjection()
216          self.haveTried = True          self.haveTried = True
# Line 219  class ProjFrame(NonModalNonParentDialog) Line 232  class ProjFrame(NonModalNonParentDialog)
232    
233      def _OnNew(self, event):      def _OnNew(self, event):
234    
235          # clear all selections          self.projection_list.ClearSelection()
         sel = self.availprojs.GetSelections()  
         for index in sel:  
             self.availprojs.SetSelection(index, False)  
   
236          self.projname.Clear()          self.projname.Clear()
237    
238          # supply a projection panel if there wasn't one          # supply a projection panel if there wasn't one
# Line 231  class ProjFrame(NonModalNonParentDialog) Line 240  class ProjFrame(NonModalNonParentDialog)
240              self.projchoice.SetSelection(0)              self.projchoice.SetSelection(0)
241              self.__DoOnProjChoice()              self.__DoOnProjChoice()
242    
243          self.curProjPanel.Clear()          if self.curProjPanel is not None:
244                self.curProjPanel.Clear()
245    
246      def _OnSave(self, event):      def _OnSave(self, event):
247    
248          sel = self.availprojs.GetSelections()          sel = self.projection_list.selected_projections()
249          assert len(sel) == 1,  "button shouldn't be enabled"          assert len(sel) == 1,  "button shouldn't be enabled"
250    
251          proj, projfile = self.availprojs.GetClientData(sel[0])          proj, projfile = sel[0]
252    
253          assert proj is not None and projfile is not None          assert proj is not None and projfile is not None
254    
255          newproj = self.__GetProjection()          newproj = self.__GetProjection()
256    
257          if newproj is not None:          if newproj is not None:
258                # FIXME: we should only allow this for the user proj file.
259              projfile.Replace(proj, newproj)              projfile.Replace(proj, newproj)
260              try:              self.write_proj_file(projfile)
261                  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())  
262    
263      def _OnAddToList(self, event):      def _OnAddToList(self, event):
264    
265          proj = self.__GetProjection()          proj = self.__GetProjection()
266          if proj is not None:          if proj is not None:
267              self.__usrProjFile.Add(proj)              self.__usrProjFile.Add(proj)
268              try:              self.write_proj_file(self.__usrProjFile)
269                  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()  
270    
271      def show_warnings(self, title, filename, warnings):      def show_warnings(self, title, filename, warnings):
272          """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 279  class ProjFrame(NonModalNonParentDialog)
279              self.parent.RunMessageBox(title, text)              self.parent.RunMessageBox(title, text)
280    
281      def _OnImport(self, event):      def _OnImport(self, event):
282            """Handler for the 'Import' button
283    
284            Ask the user for a filename, read the projections from that file
285            add them to the user ProjFile object and write the user file
286            back to disk.
287            """
288          dlg = wxFileDialog(self, _("Import"), style = wxOPEN)          dlg = wxFileDialog(self, _("Import"), style = wxOPEN)
289    
290          if dlg.ShowModal() == wxID_OK:          if dlg.ShowModal() == wxID_OK:
291              path = dlg.GetPath()              path = dlg.GetPath()
292    
293                ThubanBeginBusyCursor()
294              try:              try:
295                  projFile, warnings = read_proj_file(path)                  try:
296                  self.show_warnings(_("Warnings"), path, warnings)                      projFile, warnings = read_proj_file(path)
297                  for proj in projFile.GetProjections():                  except IOError, (errno, errstr):
298                      self.__usrProjFile.Add(proj)                      self.__ShowError(dlg.GetPath(), errstr)
299                  write_proj_file(self.__usrProjFile)                  else:
300              except IOError, (errno, errstr):                      self.show_warnings(_("Warnings"), path, warnings)
301                  self.__ShowError(dlg.GetPath(), errstr)                      for proj in projFile.GetProjections():
302                            self.__usrProjFile.Add(proj)
303              self.__FillAvailList()                      self.write_proj_file(self.__usrProjFile)
304                finally:
305                    ThubanEndBusyCursor()
306          dlg.Destroy()          dlg.Destroy()
307    
308      def _OnExport(self, event):      def _OnExport(self, event):
309            """Handler for the 'Export' button.
310    
311          sel = self.availprojs.GetSelections()          Ask the user for a filename and write the selected projections
312            to that file.
313            """
314            sel = self.projection_list.selected_projections()
315          assert len(sel) != 0, "button should be disabled"          assert len(sel) != 0, "button should be disabled"
316    
317          dlg = wxFileDialog(self, _("Export"),          dlg = wxFileDialog(self, _("Export"), style=wxSAVE|wxOVERWRITE_PROMPT)
                         style = wxSAVE|wxOVERWRITE_PROMPT)  
318    
319          if dlg.ShowModal() == wxID_OK:          if dlg.ShowModal() == wxID_OK:
320              path = dlg.GetPath()              proj_file = ProjFile(dlg.GetPath())
321                for proj, pf in sel:
             projFile = ProjFile(path)  
   
             for i in sel:  
                 proj = self.availprojs.GetClientData(i)[CLIENT_PROJ]  
322                  if proj is not None:                  if proj is not None:
323                      projFile.Add(proj)                      proj_file.Add(proj)
324                self.write_proj_file(proj_file)
             try:  
                 write_proj_file(projFile)  
             except IOError, (errno, errstr):  
                 self.__ShowError(dlg.GetPath(), errstr)  
325    
326          dlg.Destroy()          dlg.Destroy()
327    
328      def _OnRemove(self, event):      def _OnRemove(self, event):
329            """Handler for the 'Remove' button
330    
331          sel = self.availprojs.GetSelections()          Remove any selected projection that came from the user's
332            ProjFile. If the user ProjFile was modified write it back to
333            disk.
334            """
335            sel = self.projection_list.selected_projections()
336          assert len(sel) != 0, "button should be disabled!"          assert len(sel) != 0, "button should be disabled!"
337    
338          #          modified = False
339          # remove the items backwards so the indices don't change          for proj, pf in sel:
340          #              if proj is not None and pf is self.__usrProjFile:
341          sel = list(sel)                  pf.Remove(proj)
342          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)  
343    
344          self.__VerifyButtons()          if modified:
345                self.write_proj_file(self.__usrProjFile)
346    
347      def _OnProjName(self, event):      def _OnProjName(self, event):
348          self.__VerifyButtons()          self.__VerifyButtons()
349    
350      def __ShowError(self, filename, errstr):      def __ShowError(self, filename, errstr):
351          wxMessageDialog(self,          wxMessageDialog(self,
352              _("The following error occured:\n") +              _("The following error occured:\n") +
353              filename + "\n" + errstr,              filename + "\n" + errstr,
354              _("Error"), wxOK | wxICON_ERROR).ShowModal()              _("Error"), wxOK | wxICON_ERROR).ShowModal()
355    
356      def __VerifyButtons(self):      def __VerifyButtons(self):
357          """Enable or disable the appropriate buttons based on the          """Update button sensitivity"""
         current state of the dialog.  
         """  
358    
359          sel = self.availprojs.GetSelections()          num_sel = self.projection_list.GetSelectedItemCount()
360    
361          self.button_import.Enable(True)          self.button_import.Enable(True)
362          self.button_export.Enable(True)          self.button_export.Enable(True)
# Line 405  class ProjFrame(NonModalNonParentDialog) Line 378  class ProjFrame(NonModalNonParentDialog)
378          if self.curProjPanel is not None:          if self.curProjPanel is not None:
379              self.curProjPanel.Enable(True)              self.curProjPanel.Enable(True)
380    
381          if len(sel) == 0:          if num_sel == 0:
382              self.button_import.Enable(True)              self.button_import.Enable(True)
383              self.button_export.Enable(False)              self.button_export.Enable(False)
384              self.button_remove.Enable(False)              self.button_remove.Enable(False)
385              self.button_save.Enable(False)              self.button_save.Enable(False)
386    
387          elif len(sel) == 1:          elif num_sel == 1:
388    
389              proj, projFile = self.availprojs.GetClientData(sel[0])              selection = self.projection_list.selected_projections()
390                proj, projFile = selection[0]
391    
392              self.button_save.Enable(len(self.projname.GetValue()) > 0)              self.button_save.Enable(len(self.projname.GetValue()) > 0)
393              self.button_add.Enable(len(self.projname.GetValue()) > 0)              self.button_add.Enable(len(self.projname.GetValue()) > 0)
# Line 440  class ProjFrame(NonModalNonParentDialog) Line 414  class ProjFrame(NonModalNonParentDialog)
414          else:          else:
415              self.edit_box.Enable(False)              self.edit_box.Enable(False)
416    
417      def __DoOnProjAvail(self):      def proj_selection_changed(self, projs):
418            """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]  
419    
420            Update the dialog to reflect the new selection.
421            """
422            if len(projs) == 0:
423                self.projfilepath.SetLabel(_("No Projections selected"))
424            elif len(projs) == 1:
425                proj, projfile = projs[0]
426              if proj is None:              if proj is None:
427                  # user selected <None>                  # user selected <None>
428                  self.projname.Clear()                  self.projname.Clear()
429                  self.projfilepath.SetLabel(_("Projection File: "))                  self.projfilepath.SetLabel("")
430              else:              else:
   
431                  if projfile is not None:                  if projfile is not None:
432                      self.projfilepath.SetLabel(_("Projection File: ") +                      filename = os.path.basename(projfile.GetFilename())
433                          os.path.basename(projfile.GetFilename()))                      self.projfilepath.SetLabel(_("Source of Projection: %s")
434                                                   % filename)
435                  else:                  else:
436                      # only None if the currently used projection is selected                      # only None if the currently used projection is selected
437                      self.projfilepath.SetLabel(_("Projection File: "))                      self.projfilepath.SetLabel("")
438    
439                  self.projname.SetValue(proj.Label())                  self.projname.SetValue(proj.Label())
440    
# Line 468  class ProjFrame(NonModalNonParentDialog) Line 443  class ProjFrame(NonModalNonParentDialog)
443                  for projType, name, cls in self.projection_panel_defs:                  for projType, name, cls in self.projection_panel_defs:
444                      if myProjType == projType:                      if myProjType == projType:
445                          self.projchoice.Enable(True)                          self.projchoice.Enable(True)
446                          self.projchoice.SetSelection(i)                          self.projchoice.SetSelection(i + 1)
447                          self.__DoOnProjChoice()                          self.__DoOnProjChoice()
448    
449                          #                          #
# Line 481  class ProjFrame(NonModalNonParentDialog) Line 456  class ProjFrame(NonModalNonParentDialog)
456                          break                          break
457                      i += 1                      i += 1
458                  else:                  else:
459                        self.projchoice.Select(0)
460                      self.projchoice.Disable()                      self.projchoice.Disable()
461                      self._show_proj_panel(UnknownProjPanel)                      self._show_proj_panel(UnknownProjPanel)
462            else:
463                self.projfilepath.SetLabel(_("Multiple Projections selected"))
464    
465          self.__VerifyButtons()          self.__VerifyButtons()
466    
# Line 540  class ProjFrame(NonModalNonParentDialog) Line 518  class ProjFrame(NonModalNonParentDialog)
518          Could be None.          Could be None.
519          """          """
520    
521          sel = self.availprojs.GetSelections()          assert self.projection_list.GetSelectedItemCount() < 2, \
522          assert len(sel) < 2, "button should be disabled"                 "button should be disabled"
   
523    
524            sel = self.projection_list.selected_projections()
525          if len(sel) == 1:          if len(sel) == 1:
526              proj = self.availprojs.GetClientData(sel[0])[CLIENT_PROJ]              if sel[0][0] is None:
             if proj is None:  
527                  # <None> is selected                  # <None> is selected
528                  return None                  return None
529    
530          #          # self.curProjPanel should always contain the most relevant data
531          # self.curProjPanel should always contain the most          # for a projection
         # relevant data for a projection  
         #  
532          if self.curProjPanel is not None:          if self.curProjPanel is not None:
533              return Projection(self.curProjPanel.GetParameters(),              return Projection(self.curProjPanel.GetParameters(),
534                                self.projname.GetValue())                                self.projname.GetValue())
535    
536          return None          return None
537    
538      def __FillAvailList(self, selectCurrent = False, selectProj = None):      def load_user_proj(self):
539          """Populate the list of available projections.          ThubanBeginBusyCursor()
540                    try:
541          selectCurrent -- if True, select the projection used by              if self.__usrProjFile is None:
542                           the receiver, otherwise select nothing.                  projfile, warnings = get_user_proj_file()
543          selectProj    -- if set, select the projection found under the                  self.show_warnings(_("Warnings"), projfile.GetFilename(),
544                           specified name. This overwrites any other                                     warnings)
545                           selection estimate.                  self.__usrProjFile = projfile
546          """              return self.__usrProjFile
547            finally:
548          self.availprojs.Clear()              ThubanEndBusyCursor()
549    
550          #      def load_system_proj(self):
551          # the list can never be empty. there will always be          ThubanBeginBusyCursor()
552          # at least this one item          try:
553          #              if self.__sysProjFile is None:
554          self.availprojs.Append("<None>", (None, None))                  projfile, warnings = get_system_proj_file()
555                    self.show_warnings(_("Warnings"), projfile.GetFilename(),
556                                       warnings)
557                    self.__sysProjFile = projfile
558                return self.__sysProjFile
559            finally:
560                ThubanEndBusyCursor()
561    
562          projfile, warnings = get_system_proj_file()      def write_proj_file(self, proj_file):
563          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  
564    
565          projfile, warnings = get_user_proj_file()          Show a busy cursor while writing and if an error occurs show a
566          self.show_warnings(_("Warnings"), projfile.GetFilename(), warnings)          dialog with the error message.
567          for proj in projfile.GetProjections():          """
568              self.availprojs.Append(proj.Label(), [proj, projfile])          try:
569          self.__usrProjFile = projfile              ThubanBeginBusyCursor()
570                try:
571                    write_proj_file(proj_file)
572                finally:
573                    ThubanEndBusyCursor()
574            except IOError, (errno, errstr):
575                self.__ShowError(proj_file.GetFilename(), errstr)
576    
         #  
         # 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)  
                     )  
577    
578    
579  class ProjPanel(wxPanel):  class ProjPanel(wxPanel):
# Line 621  class ProjPanel(wxPanel): Line 583  class ProjPanel(wxPanel):
583          wxPanel.__init__(self, parent, -1)          wxPanel.__init__(self, parent, -1)
584    
585          self.__ellps = wxChoice(self, -1)          self.__ellps = wxChoice(self, -1)
586          self.ellpsData = [("airy"  , _("Airy")),          self.ellpsData = [("", _("<Unknown>")),
587                              ("airy"  , _("Airy")),
588                            ("bessel", _("Bessel 1841")),                            ("bessel", _("Bessel 1841")),
589                            ("clrk66", _("Clarke 1866")),                            ("clrk66", _("Clarke 1866")),
590                            ("clrk80", _("Clarke 1880")),                            ("clrk80", _("Clarke 1880")),
591                            ("GRS80" , _("GRS 1980 (IUGG, 1980)")),                            ("GRS80" , _("GRS 1980 (IUGG, 1980)")),
592                            ("intl"  , _("International 1909 (Hayford)")),                            ("intl"  , _("International 1909 (Hayford)")),
# Line 669  class ProjPanel(wxPanel): Line 632  class ProjPanel(wxPanel):
632          self.__ellps.SetSelection(0)          self.__ellps.SetSelection(0)
633    
634      def GetParameters(self):      def GetParameters(self):
635          return ["ellps=" + self.__ellps.GetClientData(          ellps = self.__ellps.GetSelection()
636                                          self.__ellps.GetSelection())]          if ellps > 0:
637                return ["ellps=" + self.__ellps.GetClientData(ellps)]
638            return []
639    
640    
641  ID_TMPANEL_LAT = 4001  ID_TMPANEL_LAT = 4001
# Line 715  class TMPanel(ProjPanel): Line 680  class TMPanel(ProjPanel):
680    
681          self.__latitude = wxTextCtrl(self, ID_TMPANEL_LAT)          self.__latitude = wxTextCtrl(self, ID_TMPANEL_LAT)
682          self.__longitude = wxTextCtrl(self, ID_TMPANEL_LONG)          self.__longitude = wxTextCtrl(self, ID_TMPANEL_LONG)
         self.__scale = wxTextCtrl(self, ID_TMPANEL_SCALE)  
683          self.__falseEast = wxTextCtrl(self, ID_TMPANEL_FASLE_EAST)          self.__falseEast = wxTextCtrl(self, ID_TMPANEL_FASLE_EAST)
684          self.__falseNorth = wxTextCtrl(self, ID_TMPANEL_FALSE_NORTH)          self.__falseNorth = wxTextCtrl(self, ID_TMPANEL_FALSE_NORTH)
685            self.__scale = wxTextCtrl(self, ID_TMPANEL_SCALE)
686    
687          self._DoLayout()          self._DoLayout()
688    
# Line 852  class LCCPanel(ProjPanel): Line 817  class LCCPanel(ProjPanel):
817                    
818          self.__fspLatitude = wxTextCtrl(self, -1)          self.__fspLatitude = wxTextCtrl(self, -1)
819          self.__sspLatitude = wxTextCtrl(self, -1)          self.__sspLatitude = wxTextCtrl(self, -1)
         self.__originLat   = wxTextCtrl(self, -1)  
820          self.__meridian    = wxTextCtrl(self, -1)          self.__meridian    = wxTextCtrl(self, -1)
821            self.__originLat   = wxTextCtrl(self, -1)
822          self.__falseEast   = wxTextCtrl(self, -1)          self.__falseEast   = wxTextCtrl(self, -1)
823          self.__falseNorth  = wxTextCtrl(self, -1)          self.__falseNorth  = wxTextCtrl(self, -1)
824    

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26