/[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 747 by jonathan, Fri Apr 25 11:02:08 2003 UTC revision 816 by jonathan, Mon May 5 15:05:16 2003 UTC
# Line 1  Line 1 
1  #!/usr/bin/env python  # Copyright (c) 2003 by Intevation GmbH
2  # generated by wxGlade 0.2.1 on Thu Apr 17 11:51:39 2003  # Authors:
3    # Jonathan Coles <[email protected]>
4  import os, sys  #
5    # This program is free software under the GPL (>=v2)
6    # Read the file COPYING coming with Thuban for details.
7                                                                                    
8    import os, sys, math
9  from wxPython.wx import *  from wxPython.wx import *
10    
11  from Thuban import _  from Thuban import _
# Line 17  ID_PROJ_ADVANCED  = 4001 Line 21  ID_PROJ_ADVANCED  = 4001
21  ID_PROJ_PROJCHOICE = 4002  ID_PROJ_PROJCHOICE = 4002
22  ID_PROJ_ADDTOLIST    = 4003  ID_PROJ_ADDTOLIST    = 4003
23  ID_PROJ_NEW       = 4004  ID_PROJ_NEW       = 4004
 ID_PROJ_TRY       = 4005  
24  ID_PROJ_REVERT    = 4006  ID_PROJ_REVERT    = 4006
 ID_PROJ_OK        = 4007  
 ID_PROJ_CLOSE     = 4008  
25  ID_PROJ_AVAIL     = 4009  ID_PROJ_AVAIL     = 4009
26  ID_PROJ_SAVE      = 4010  ID_PROJ_SAVE      = 4010
27  ID_PROJ_IMPORT    = 4011  ID_PROJ_IMPORT    = 4011
# Line 33  CLIENT_PROJFILE = 1 Line 34  CLIENT_PROJFILE = 1
34    
35  class ProjFrame(NonModalDialog):  class ProjFrame(NonModalDialog):
36    
37      def __init__(self, parent, name, receiver, *args, **kwds):      def __init__(self, parent, name, title, receiver):
38          """Initialize the projection dialog.          """Initialize the projection dialog.
39    
40          receiver -- An object that implements the following methods:          receiver -- An object that implements the following methods:
# Line 42  class ProjFrame(NonModalDialog): Line 43  class ProjFrame(NonModalDialog):
43          """          """
44                    
45          self.receiver = receiver          self.receiver = receiver
46          self.originalProjection = -1          self.haveTried = False
47          self.curProjPanel = None          self.curProjPanel = None
48    
49          self.projPanels = []          self.projPanels = []
# Line 55  class ProjFrame(NonModalDialog): Line 56  class ProjFrame(NonModalDialog):
56          self.projPanels.append(          self.projPanels.append(
57              ("latlong", _("Geographic"), GeoPanel))              ("latlong", _("Geographic"), GeoPanel))
58    
59          NonModalDialog.__init__(self, parent, name, "")          NonModalDialog.__init__(self, parent, name, title)
60          # originally generate by wxGlade          # originally generate by wxGlade
61          self.panel_1 = wxPanel(self, -1)          self.panel_1 = wxPanel(self, -1)
62          self.panel_edit = wxPanel(self, -1)          self.panel_edit = wxPanel(self, -1)
63          self.panel_buttons = wxPanel(self, -1)          self.panel_buttons = wxPanel(self, -1)
64          self.label_5 = wxStaticText(self.panel_1, -1, _("Available Projections:"))          self.label_5 = wxStaticText(self.panel_1, -1,
65          self.availprojs = wxListBox(self.panel_1, ID_PROJ_AVAIL, style=wxLB_EXTENDED|wxLB_SORT)                          _("Available Projections:"))
66            self.availprojs = wxListBox(self.panel_1, ID_PROJ_AVAIL,
67                                        style=wxLB_EXTENDED|wxLB_SORT)
68          self.projfilepath = wxStaticText(self.panel_1, -1, "")          self.projfilepath = wxStaticText(self.panel_1, -1, "")
69          self.label_2 = wxStaticText(self.panel_edit, -1, _("Name:"))          self.label_2 = wxStaticText(self.panel_edit, -1, _("Name:"))
70          self.projname = wxTextCtrl(self.panel_edit, ID_PROJ_PROJNAME, "")          self.projname = wxTextCtrl(self.panel_edit, ID_PROJ_PROJNAME, "")
71          self.label_3 = wxStaticText(self.panel_edit, -1, _("Projection:"))          self.label_3 = wxStaticText(self.panel_edit, -1, _("Projection:"))
72          self.projchoice = wxChoice(self.panel_edit, ID_PROJ_PROJCHOICE)          self.projchoice = wxChoice(self.panel_edit, ID_PROJ_PROJCHOICE)
73          self.button_import = wxButton(self.panel_1, ID_PROJ_IMPORT, _("Import..."))          self.button_import = wxButton(self.panel_1, ID_PROJ_IMPORT,
74          self.button_export = wxButton(self.panel_1, ID_PROJ_EXPORT, _("Export..."))                                        _("Import..."))
75            self.button_export = wxButton(self.panel_1, ID_PROJ_EXPORT,
76                                          _("Export..."))
77          self.button_remove = wxButton(self.panel_1, ID_PROJ_REMOVE, _("Remove"))          self.button_remove = wxButton(self.panel_1, ID_PROJ_REMOVE, _("Remove"))
78          self.button_new = wxButton(self.panel_edit, ID_PROJ_NEW, _("New"))          self.button_new = wxButton(self.panel_edit, ID_PROJ_NEW, _("New"))
79          self.button_save = wxButton(self.panel_edit, ID_PROJ_SAVE,_("Save"))          self.button_save = wxButton(self.panel_edit, ID_PROJ_SAVE,_("Save"))
80          self.button_add = wxButton(self.panel_edit, ID_PROJ_ADDTOLIST,          self.button_add = wxButton(self.panel_edit, ID_PROJ_ADDTOLIST,
81                                        _("Add to List"))                                        _("Add to List"))
82          self.button_try = wxButton(self.panel_buttons, ID_PROJ_TRY, _("Try"))          self.button_try = wxButton(self.panel_buttons, wxID_APPLY, _("Try"))
83          self.button_revert = wxButton(self.panel_buttons, ID_PROJ_REVERT, _("Revert"))          self.button_revert = wxButton(self.panel_buttons, ID_PROJ_REVERT,
84          self.button_ok = wxButton(self.panel_buttons, ID_PROJ_OK, _("OK"))                                        _("Revert"))
85          self.button_close = wxButton(self.panel_buttons, ID_PROJ_CLOSE, _("Close"))          self.button_ok = wxButton(self.panel_buttons, wxID_OK, _("OK"))
86            self.button_ok.SetDefault()
87            self.button_close = wxButton(self.panel_buttons, wxID_CANCEL,
88                                         _("Close"))
89    
90          self.__set_properties()          self.__set_properties()
91          self.__do_layout()          self.__do_layout()
92          # wxGlade          # wxGlade
93    
94            self.originalProjection = self.receiver.GetProjection()
95    
96          self.__DoOnProjAvail()          self.__DoOnProjAvail()
97            self.button_ok.SetFocus()
98            self.availprojs.SetFocus()
99                    
100          EVT_BUTTON(self, ID_PROJ_TRY, self._OnTry)          EVT_BUTTON(self, wxID_APPLY, self.OnApply)
101          EVT_BUTTON(self, ID_PROJ_REVERT, self._OnRevert)          EVT_BUTTON(self, ID_PROJ_REVERT, self._OnRevert)
102          EVT_BUTTON(self, ID_PROJ_OK, self._OnOK)          EVT_BUTTON(self, wxID_OK, self.OnOK)
103          EVT_BUTTON(self, ID_PROJ_CLOSE, self._OnClose)          EVT_BUTTON(self, wxID_CANCEL, self.OnCancel)
104          EVT_CHOICE(self, ID_PROJ_PROJCHOICE, self._OnProjChoice)          EVT_CHOICE(self, ID_PROJ_PROJCHOICE, self._OnProjChoice)
105          EVT_LISTBOX(self, ID_PROJ_AVAIL, self._OnProjAvail)          EVT_LISTBOX(self, ID_PROJ_AVAIL, self._OnProjAvail)
106          EVT_BUTTON(self, ID_PROJ_IMPORT, self._OnImport)          EVT_BUTTON(self, ID_PROJ_IMPORT, self._OnImport)
# Line 101  class ProjFrame(NonModalDialog): Line 113  class ProjFrame(NonModalDialog):
113    
114          EVT_TEXT(self, ID_PROJ_PROJNAME, self._OnProjName)          EVT_TEXT(self, ID_PROJ_PROJNAME, self._OnProjName)
115    
     def GetReceiver(self):  
         return self.receiver  
116    
117      def _OnTry(self, event):      def OnApply(self, event):
118          self.__SetProjection()          self.__SetProjection()
119            self.haveTried = True
120    
121      def _OnRevert(self, event):      def OnOK(self, event):
         if self.originalProjection != -1:  
             self.receiver.SetProjection(self.originalProjection)  
   
     def _OnOK(self, event):  
122          self.__SetProjection()          self.__SetProjection()
123          self.Close()          self.Close()
124    
125      def _OnClose(self, event):      def OnCancel(self, event):
126            """Cancel just closes the dialog, but we call it cancel so we
127            can overload the functionality of wxDialog.
128            """
129          self.Close()          self.Close()
130    
131        def _OnRevert(self, event):
132            if self.haveTried:
133                self.receiver.SetProjection(self.originalProjection)
134                self.haveTried = False
135    
136    
137      def _OnNew(self, event):      def _OnNew(self, event):
138          self.__DoOnNew()  
139            # clear all selections
140            sel = self.availprojs.GetSelections()
141            for index in sel:
142                self.availprojs.SetSelection(index, False)
143    
144            self.projname.Clear()
145    
146            # supply a projection panel if there wasn't one
147            if self.curProjPanel is None:
148                self.projchoice.SetSelection(0)
149                self.__DoOnProjChoice()
150    
151            self.curProjPanel.Clear()
152    
153      def _OnSave(self, event):      def _OnSave(self, event):
154    
# Line 133  class ProjFrame(NonModalDialog): Line 162  class ProjFrame(NonModalDialog):
162          newproj = self.__GetProjection()          newproj = self.__GetProjection()
163    
164          if newproj is not None:          if newproj is not None:
165              projfile.Remove(proj)              projfile.Replace(proj, newproj)
             projfile.Add(newproj)  
166              try:              try:
167                  WriteProjFile(projfile)                  WriteProjFile(projfile)
168              except IOError, (errno, errstr):              except IOError, (errno, errstr):
169                  wxMessageDialog(self,                  self.__ShowError(projfile.GetFilename(), errstr)
170                      _("The following error occured:\n") +              self.availprojs.SetClientData(sel[0], [newproj, projfile])
                     projfile.GetFilename() + "\n" + errstr,  
                     _("Error"), wxOK | wxICON_ERROR).ShowModal()  
             self.__FillAvailList()  
171    
172      def _OnAddToList(self, event):      def _OnAddToList(self, event):
173    
# Line 152  class ProjFrame(NonModalDialog): Line 177  class ProjFrame(NonModalDialog):
177              try:              try:
178                  WriteProjFile(self.__usrProjFile)                  WriteProjFile(self.__usrProjFile)
179              except IOError, (errno, errstr):              except IOError, (errno, errstr):
180                  wxMessageDialog(self,                  self.__ShowError(self.__userProjFile.GetFilename(), errstr)
181                      _("The following error occured:\n") +  
                     self.__usrProjFile.GetFilename() + "\n" + errstr,  
                     _("Error"), wxOK | wxICON_ERROR).ShowModal()  
182              self.__FillAvailList()              self.__FillAvailList()
183    
184      def _OnProjAvail(self, event):      def _OnProjAvail(self, event):
# Line 174  class ProjFrame(NonModalDialog): Line 197  class ProjFrame(NonModalDialog):
197                      self.__usrProjFile.Add(proj)                      self.__usrProjFile.Add(proj)
198                  WriteProjFile(self.__usrProjFile)                  WriteProjFile(self.__usrProjFile)
199              except IOError, (errno, errstr):              except IOError, (errno, errstr):
200                  wxMessageDialog(self,                  self.__ShowError(dlg.GetPath(), errstr)
                     _("The following error occured:\n") +  
                     dlg.GetPath() + "\n" + errstr,  
                     _("Error"), wxOK | wxICON_ERROR).ShowModal()  
201    
202              self.__FillAvailList()              self.__FillAvailList()
203    
# Line 204  class ProjFrame(NonModalDialog): Line 224  class ProjFrame(NonModalDialog):
224              try:              try:
225                  WriteProjFile(projFile)                  WriteProjFile(projFile)
226              except IOError, (errno, errstr):              except IOError, (errno, errstr):
227                  wxMessageDialog(self,                  self.__ShowError(dlg.GetPath(), errstr)
                     _("The following error occured:\n") +  
                     dlg.GetPath() + "\n" + errstr,  
                     _("Error"), wxOK | wxICON_ERROR).ShowModal()  
228    
229          dlg.Destroy()          dlg.Destroy()
230    
# Line 242  class ProjFrame(NonModalDialog): Line 259  class ProjFrame(NonModalDialog):
259          try:          try:
260              WriteProjFile(projfile)              WriteProjFile(projfile)
261          except IOError, (errno, errstr):          except IOError, (errno, errstr):
262              wxMessageDialog(self,              self.__ShowError(projfile.GetFilename(), errstr)
                 _("The following error occured:\n") +  
                 projfile.GetFilename() + "\n" + errstr,  
                 _("Error"), wxOK | wxICON_ERROR).ShowModal()  
   
263    
264          self.__FillAvailList()          self.__FillAvailList()
265    
# Line 258  class ProjFrame(NonModalDialog): Line 271  class ProjFrame(NonModalDialog):
271          if newselection != -1 and self.availprojs.GetCount() > 0:          if newselection != -1 and self.availprojs.GetCount() > 0:
272              self.availprojs.SetSelection(newselection)              self.availprojs.SetSelection(newselection)
273    
274            self.__VerifyButtons()
275    
276      def _OnProjName(self, event):      def _OnProjName(self, event):
277          self.__VerifyButtons()          self.__VerifyButtons()
278    
279        def __ShowError(self, filename, errstr):
280            wxMessageDialog(self,
281                _("The following error occured:\n") +
282                filename + "\n" + errstr,
283                _("Error"), wxOK | wxICON_ERROR).ShowModal()
284    
285      def __VerifyButtons(self):      def __VerifyButtons(self):
286            """Enable or disable the appropriate buttons based on the
287            current state of the dialog.
288            """
289    
290          sel = self.availprojs.GetSelections()          sel = self.availprojs.GetSelections()
291    
292          self.button_import.Enable(True)          self.button_import.Enable(True)
# Line 271  class ProjFrame(NonModalDialog): Line 296  class ProjFrame(NonModalDialog):
296    
297          self.panel_edit.Enable(True)          self.panel_edit.Enable(True)
298    
299            for ctrl in [self.button_import,
300                         self.button_export,
301                         self.button_remove,
302                         self.button_save,
303                         self.button_add,
304                         self.projchoice,
305                         self.projname,
306                         self.panel_edit]:
307                ctrl.Enable(True)
308    
309            if self.curProjPanel is not None:
310                self.curProjPanel.Enable(True)
311    
312          if len(sel) == 0:          if len(sel) == 0:
313              self.button_import.Enable(True)              self.button_import.Enable(True)
314              self.button_export.Enable(False)              self.button_export.Enable(False)
# Line 284  class ProjFrame(NonModalDialog): Line 322  class ProjFrame(NonModalDialog):
322              self.button_add.Enable(len(self.projname.GetValue()) > 0)              self.button_add.Enable(len(self.projname.GetValue()) > 0)
323    
324              if proj is None:              if proj is None:
325                  self.button_export.Enable(False)                  # <None> is selected
326                    for ctrl in [self.button_export,
327                                 self.button_remove,
328                                 self.button_save,
329                                 self.button_add,
330                                 self.projchoice,
331                                 self.projname]:
332                        ctrl.Enable(False)
333    
334                    if self.curProjPanel is not None:
335                        self.curProjPanel.Enable(False)
336    
337                elif proj is self.originalProjection:
338                  self.button_remove.Enable(False)                  self.button_remove.Enable(False)
339    
340              if projFile is None:              if projFile is None:
# Line 293  class ProjFrame(NonModalDialog): Line 343  class ProjFrame(NonModalDialog):
343          else:          else:
344              self.panel_edit.Enable(False)              self.panel_edit.Enable(False)
345    
     def __DoOnNew(self):  
         sel = self.availprojs.GetSelections()  
         if len(sel) != 0:  
             self.availprojs.SetSelection(sel, False)  
         self.projname.Clear()  
         self.curProjPanel.Clear()  
   
346      def __DoOnProjAvail(self):      def __DoOnProjAvail(self):
347    
348          sel = self.availprojs.GetSelections()          sel = self.availprojs.GetSelections()
# Line 311  class ProjFrame(NonModalDialog): Line 354  class ProjFrame(NonModalDialog):
354              if proj is None:              if proj is None:
355                  # user selected <None>                  # user selected <None>
356                  self.projname.Clear()                  self.projname.Clear()
357                    
358              else:              else:
359                            
360                  if projfile is not None:                  if projfile is not None:
# Line 327  class ProjFrame(NonModalDialog): Line 371  class ProjFrame(NonModalDialog):
371                      if myProjType == projType:                      if myProjType == projType:
372                          self.projchoice.SetSelection(i)                          self.projchoice.SetSelection(i)
373                          self.__DoOnProjChoice()                          self.__DoOnProjChoice()
374    
375                            #
376                            # self.curProjPanel should not be null
377                            # after a call to __DoOnProjChoice
378                            #
379                            assert self.curProjPanel is not None
380    
381                          self.curProjPanel.SetProjection(proj)                          self.curProjPanel.SetProjection(proj)
382                      i += 1                      i += 1
383    
# Line 336  class ProjFrame(NonModalDialog): Line 387  class ProjFrame(NonModalDialog):
387          self.__DoOnProjChoice()          self.__DoOnProjChoice()
388    
389      def __DoOnProjChoice(self):      def __DoOnProjChoice(self):
390            """Create and layout a projection panel based on the selected
391            projection type.
392    
393            This is necessary to have in seperate method since calls to
394            wxChoice.SetSelection() do not trigger an event.
395    
396            At the end of this method self.curProjPanel will not be None
397            if there was a item selected.
398            """
399    
400          choice = self.projchoice          choice = self.projchoice
401    
402          sel = choice.GetSelection()          sel = choice.GetSelection()
# Line 361  class ProjFrame(NonModalDialog): Line 422  class ProjFrame(NonModalDialog):
422              self.topBox.SetSizeHints(self)              self.topBox.SetSizeHints(self)
423    
424      def __SetProjection(self):      def __SetProjection(self):
425            """Set the receiver's projection."""
426    
427          #          #
428          # save the original projection only once in case          # save the original projection only once in case
429          # we try to apply several different projections          # we try to apply several different projections
430          #          #
         if self.originalProjection == -1:  
             self.originalProjection = self.receiver.GetProjection()  
   
431          self.receiver.SetProjection(self.__GetProjection())          self.receiver.SetProjection(self.__GetProjection())
432    
433      def __GetProjection(self):      def __GetProjection(self):
434          """Return the packaged projection.          """Return a suitable Projection object based on the current
435            state of the dialog box selections.
436    
437          Could be None.          Could be None.
438          """          """
439    
440          proj = None          sel = self.availprojs.GetSelections()
441            assert len(sel) < 2, "button should be disabled"
442    
443    
444            if len(sel) == 1:
445                proj = self.availprojs.GetClientData(sel[0])[CLIENT_PROJ]
446                if proj is None:
447                    # <None> is selected
448                    return None
449    
450            #
451            # self.curProjPanel should always contain the most
452            # relevant data for a projection
453            #
454          if self.curProjPanel is not None:          if self.curProjPanel is not None:
455              proj = Projection(self.curProjPanel.GetParameters())              return Projection(self.curProjPanel.GetParameters(),
456              proj.SetName(self.projname.GetValue())                                self.projname.GetValue())
457    
458          return proj          return None
459    
460      def __FillAvailList(self, selectCurrent = False):      def __FillAvailList(self, selectCurrent = False):
461            """Populate the list of available projections.
462            
463            selectCurrent -- if True, select the projection used by
464                             the receiver, otherwise select nothing.
465            """
466    
467          self.availprojs.Clear()          self.availprojs.Clear()
468    
469          #          #
# Line 409  class ProjFrame(NonModalDialog): Line 487  class ProjFrame(NonModalDialog):
487          #          #
488          self.availprojs.Append("<None>", (None, None))          self.availprojs.Append("<None>", (None, None))
489    
490          self.__sysProjFile = None          # proj is only None when <None> should be selected
491          self.__usrProjFile = None          if proj is None and selectCurrent:
492                self.availprojs.SetSelection(0)
493                self.availprojs.SetFirstItem(0)
494    
495          projfile = GetSystemProjFiles()          projfile = GetSystemProjFiles()
496          if len(projfile) > 0:          projfile = projfile[0]
497              projfile = projfile[0]          for proj in projfile.GetProjections():
498              for proj in projfile.GetProjections():              self.availprojs.Append(proj.GetName(), [proj, projfile])
499                  self.availprojs.Append(proj.GetName(), [proj, projfile])          self.__sysProjFile = projfile
             self.__sysProjFile = projfile  
500    
501          projfile = GetUserProjFiles()          projfile = GetUserProjFiles()
502          if len(projfile) > 0:          projfile = projfile[0]
503              projfile = projfile[0]          for proj in projfile.GetProjections():
504              for proj in projfile.GetProjections():              self.availprojs.Append(proj.GetName(), [proj, projfile])
505                  self.availprojs.Append(proj.GetName(), [proj, projfile])          self.__usrProjFile = projfile
             self.__usrProjFile = projfile  
506    
507          for proj, name, clazz in self.projPanels:          for proj, name, clazz in self.projPanels:
508              self.projchoice.Append(name, [clazz, None])              self.projchoice.Append(name, [clazz, None])
509    
510      def __set_properties(self):      def __set_properties(self):
511    
512          self.SetTitle(_("Projections"))          #self.availprojs.SetSelection(0)
         self.availprojs.SetSelection(0)  
513          self.projchoice.SetSelection(0)          self.projchoice.SetSelection(0)
514    
515          self.__FillAvailList(selectCurrent = True)          self.__FillAvailList(selectCurrent = True)
# Line 529  class ProjPanel(wxPanel): Line 606  class ProjPanel(wxPanel):
606          wxPanel.__init__(self, parent, -1)          wxPanel.__init__(self, parent, -1)
607    
608          self.__ellps = wxChoice(self, -1)          self.__ellps = wxChoice(self, -1)
609          self.ellpsData = [("bessel", _("Bessel 1841")),          self.ellpsData = [("airy"  , _("Airy")),
610                              ("bessel", _("Bessel 1841")),
611                            ("clrk66", _("Clarke 1866")),                            ("clrk66", _("Clarke 1866")),
612                            ("clrk80", _("Clarke 1880")),                            ("clrk80", _("Clarke 1880")),
613                            ("GRS80" , _("GRS 1980 (IUGG, 1980)")),                            ("GRS80" , _("GRS 1980 (IUGG, 1980)")),
# Line 546  class ProjPanel(wxPanel): Line 624  class ProjPanel(wxPanel):
624          panelSizer = wxBoxSizer(wxVERTICAL)          panelSizer = wxBoxSizer(wxVERTICAL)
625    
626          if childPanel is not None:          if childPanel is not None:
627              panelSizer.Add(childPanel, 0, wxALL|wxEXPAND, 4)              panelSizer.Add(childPanel, 0, wxEXPAND, 0)
628                            
629          sizer = wxBoxSizer(wxHORIZONTAL)          sizer = wxBoxSizer(wxHORIZONTAL)
630          sizer.Add(wxStaticText(self, -1, _("Ellipsoid:")), 0, wxALL, 4)          sizer.Add(wxStaticText(self, -1, _("Ellipsoid:")), 0, wxALL, 4)
# Line 686  class UTMPanel(ProjPanel): Line 764  class UTMPanel(ProjPanel):
764          self.receiver = receiver          self.receiver = receiver
765    
766          self.__zone = wxSpinCtrl(self, ID_UTMPANEL_ZONE, "1", min=1, max=60)          self.__zone = wxSpinCtrl(self, ID_UTMPANEL_ZONE, "1", min=1, max=60)
767            self.__propButton = wxButton(self, ID_UTMPANEL_PROP, _("Propose"))
768          self.__south = wxCheckBox(self, ID_UTMPANEL_SOUTH,          self.__south = wxCheckBox(self, ID_UTMPANEL_SOUTH,
769                                    _("Southern Hemisphere"))                                    _("Southern Hemisphere"))
         self.__propButton = wxButton(self, ID_UTMPANEL_PROP, _("Propose"))  
770    
771          self._DoLayout()          self._DoLayout()
772    
# Line 808  class GeoPanel(ProjPanel): Line 886  class GeoPanel(ProjPanel):
886    
887      def __init__(self, parent, receiver):      def __init__(self, parent, receiver):
888          ProjPanel.__init__(self, parent)          ProjPanel.__init__(self, parent)
889          ProjPanel._DoLayout(self, None)  
890            self.__choices = [(_("Radians"), "1"),
891                              (_("Degrees"), "0.017453")]
892    
893            self.__scale = wxChoice(self, -1)
894            for choice, value in self.__choices:
895                self.__scale.Append(choice, value)
896    
897            self._DoLayout()
898    
899      def GetProjName(self):      def GetProjName(self):
900          return _("Geographic")          return _("Geographic")
901                    
902      def SetProjection(self, proj):      def SetProjection(self, proj):
903            value = proj.GetParameter("to_meter")
904            for i in range(len(self.__choices)):
905                choice, data = self.__choices[i]
906                if value == data:
907                    self.__scale.SetSelection(i)
908          ProjPanel.SetProjection(self, proj)          ProjPanel.SetProjection(self, proj)
909    
910      def GetParameters(self):      def GetParameters(self):
911          params = ["proj=latlong"]          params = ["proj=latlong",
912                      "to_meter=%s" % self.__scale.GetClientData(
913                                      self.__scale.GetSelection())]
914    
915          params.extend(ProjPanel.GetParameters(self))          params.extend(ProjPanel.GetParameters(self))
916          return params          return params
917    
918      def Clear(self):      def Clear(self):
919          ProjPanel.Clear(self)          ProjPanel.Clear(self)
920    
921        def _DoLayout(self):
922            sizer = wxBoxSizer(wxHORIZONTAL)
923    
924            sizer.Add(wxStaticText(self, -1, _("Source Data is in: ")),
925                      0, wxALL, 4)
926            sizer.Add(self.__scale, 1, wxEXPAND|wxALL, 4)
927    
928            self.__scale.SetSelection(0)
929    
930            ProjPanel._DoLayout(self, sizer)
931    
932    
933  ID_UTM_PROPOSE_ZONE_DIALOG_TAKE   = 4001  ID_UTM_PROPOSE_ZONE_DIALOG_TAKE   = 4001
934  ID_UTM_PROPOSE_ZONE_DIALOG_CANCEL = 4002  ID_UTM_PROPOSE_ZONE_DIALOG_CANCEL = 4002

Legend:
Removed from v.747  
changed lines
  Added in v.816

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26