/[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 1850 by bh, Mon Oct 20 11:00:57 2003 UTC revision 1851 by bh, Tue Oct 21 14:17:24 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 61  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 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            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 220  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 232  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              self.write_proj_file(projfile)              self.write_proj_file(projfile)
261              self.availprojs.SetClientData(sel[0], [newproj, projfile])              self.projection_list.SelectProjection(newproj)
   
             self.__FillAvailList( selectProj = newproj.Label())  
262    
263      def _OnAddToList(self, event):      def _OnAddToList(self, event):
264    
# Line 258  class ProjFrame(NonModalNonParentDialog) Line 266  class ProjFrame(NonModalNonParentDialog)
266          if proj is not None:          if proj is not None:
267              self.__usrProjFile.Add(proj)              self.__usrProjFile.Add(proj)
268              self.write_proj_file(self.__usrProjFile)              self.write_proj_file(self.__usrProjFile)
269              self.__FillAvailList( selectProj = proj.Label())              self.projection_list.SelectProjection(proj)
   
     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 274  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:
# Line 293  class ProjFrame(NonModalNonParentDialog) Line 303  class ProjFrame(NonModalNonParentDialog)
303                      self.write_proj_file(self.__usrProjFile)                      self.write_proj_file(self.__usrProjFile)
304              finally:              finally:
305                  ThubanEndBusyCursor()                  ThubanEndBusyCursor()
   
             self.__FillAvailList()  
   
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)
             self.write_proj_file(projFile)  
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)  
343    
344          self.write_proj_file(projfile)          if modified:
345                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()  
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 398  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 433  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 461  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 474  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 533  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):
         """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))  
   
539          ThubanBeginBusyCursor()          ThubanBeginBusyCursor()
540          try:          try:
541              projfile, warnings = get_system_proj_file()              if self.__usrProjFile is None:
542              self.show_warnings(_("Warnings"), projfile.GetFilename(), warnings)                  projfile, warnings = get_user_proj_file()
543              for proj in projfile.GetProjections():                  self.show_warnings(_("Warnings"), projfile.GetFilename(),
544                  self.availprojs.Append(proj.Label(), [proj, projfile])                                     warnings)
545              self.__sysProjFile = projfile                  self.__usrProjFile = projfile
546                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  
547          finally:          finally:
548              ThubanEndBusyCursor()              ThubanEndBusyCursor()
549    
550          #      def load_system_proj(self):
551          # We add the current projection to the list at last.          ThubanBeginBusyCursor()
552          # Since the list is resorted immediately a following FindString()          try:
553          # determines the index correctly.              if self.__sysProjFile is None:
554          #                  projfile, warnings = get_system_proj_file()
555          proj = self.receiver.GetProjection()                  self.show_warnings(_("Warnings"), projfile.GetFilename(),
556          if proj is not None:                                     warnings)
557              proj_item = _("%s (current)") % proj.Label()                  self.__sysProjFile = projfile
558              self.availprojs.Append(proj_item, [proj, None])              return self.__sysProjFile
559              if selectCurrent:          finally:
560                  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)  
                     )  
561    
562      def write_proj_file(self, proj_file):      def write_proj_file(self, proj_file):
563          """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 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 682  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 728  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 865  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.1850  
changed lines
  Added in v.1851

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26