/[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 741 by jonathan, Fri Apr 25 09:14:27 2003 UTC revision 976 by frank, Thu May 22 11:39:31 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  # Frank Koormann <[email protected]>
5    #
6    # This program is free software under the GPL (>=v2)
7    # Read the file COPYING coming with Thuban for details.
8                                                                                    
9    import os, sys, math
10  from wxPython.wx import *  from wxPython.wx import *
11    
12  from Thuban import _  from Thuban import _
# Line 17  ID_PROJ_ADVANCED  = 4001 Line 22  ID_PROJ_ADVANCED  = 4001
22  ID_PROJ_PROJCHOICE = 4002  ID_PROJ_PROJCHOICE = 4002
23  ID_PROJ_ADDTOLIST    = 4003  ID_PROJ_ADDTOLIST    = 4003
24  ID_PROJ_NEW       = 4004  ID_PROJ_NEW       = 4004
 ID_PROJ_TRY       = 4005  
25  ID_PROJ_REVERT    = 4006  ID_PROJ_REVERT    = 4006
 ID_PROJ_OK        = 4007  
 ID_PROJ_CLOSE     = 4008  
26  ID_PROJ_AVAIL     = 4009  ID_PROJ_AVAIL     = 4009
27  ID_PROJ_SAVE      = 4010  ID_PROJ_SAVE      = 4010
28  ID_PROJ_IMPORT    = 4011  ID_PROJ_IMPORT    = 4011
# Line 33  CLIENT_PROJFILE = 1 Line 35  CLIENT_PROJFILE = 1
35    
36  class ProjFrame(NonModalDialog):  class ProjFrame(NonModalDialog):
37    
38      def __init__(self, parent, name, receiver, *args, **kwds):      def __init__(self, parent, name, title, receiver):
39          """Initialize the projection dialog.          """Initialize the projection dialog.
40    
41          receiver -- An object that implements the following methods:          receiver -- An object that implements the following methods:
# Line 42  class ProjFrame(NonModalDialog): Line 44  class ProjFrame(NonModalDialog):
44          """          """
45                    
46          self.receiver = receiver          self.receiver = receiver
47          self.originalProjection = -1          self.haveTried = False
48          self.curProjPanel = None          self.curProjPanel = None
49    
50          self.projPanels = []          self.projPanels = []
# Line 55  class ProjFrame(NonModalDialog): Line 57  class ProjFrame(NonModalDialog):
57          self.projPanels.append(          self.projPanels.append(
58              ("latlong", _("Geographic"), GeoPanel))              ("latlong", _("Geographic"), GeoPanel))
59    
60          NonModalDialog.__init__(self, parent, name, "")          NonModalDialog.__init__(self, parent, name, title)
61          # originally generate by wxGlade          # originally generate by wxGlade
62          self.panel_1 = wxPanel(self, -1)          self.panel_1 = wxPanel(self, -1)
63          self.panel_edit = wxPanel(self, -1)          self.panel_edit = wxPanel(self, -1)
64          self.panel_buttons = wxPanel(self, -1)          self.label_5 = wxStaticText(self.panel_1, -1,
65          self.label_5 = wxStaticText(self.panel_1, -1, _("Available Projections:"))                          _("Available Projections:"))
66          self.availprojs = wxListBox(self.panel_1, ID_PROJ_AVAIL, style=wxLB_EXTENDED |wxLB_SORT)  
67            # Projection List specific actions (Import/Export/Remove)
68            self.button_import = wxButton(self.panel_1, ID_PROJ_IMPORT,
69                                          _("Import..."))
70            self.button_export = wxButton(self.panel_1, ID_PROJ_EXPORT,
71                                          _("Export..."))
72            self.button_remove = wxButton(self.panel_1, ID_PROJ_REMOVE,
73                                          _("Remove"))
74    
75            # The Projection List
76            self.availprojs = wxListBox(self.panel_1, ID_PROJ_AVAIL,
77                                        style=wxLB_EXTENDED|wxLB_SORT)
78          self.projfilepath = wxStaticText(self.panel_1, -1, "")          self.projfilepath = wxStaticText(self.panel_1, -1, "")
79    
80            # Projection Specific Entries (Name/Projection)
81          self.label_2 = wxStaticText(self.panel_edit, -1, _("Name:"))          self.label_2 = wxStaticText(self.panel_edit, -1, _("Name:"))
82          self.projname = wxTextCtrl(self.panel_edit, ID_PROJ_PROJNAME, "")          self.projname = wxTextCtrl(self.panel_edit, ID_PROJ_PROJNAME, "")
83          self.label_3 = wxStaticText(self.panel_edit, -1, _("Projection:"))          self.label_3 = wxStaticText(self.panel_edit, -1, _("Projection:"))
84          self.projchoice = wxChoice(self.panel_edit, ID_PROJ_PROJCHOICE)          self.projchoice = wxChoice(self.panel_edit, ID_PROJ_PROJCHOICE)
85          self.button_import = wxButton(self.panel_1, ID_PROJ_IMPORT, _("Import..."))  
86          self.button_export = wxButton(self.panel_1, ID_PROJ_EXPORT, _("Export..."))          # Projection Specific actions (New/Save/Add)
         self.button_remove = wxButton(self.panel_1, ID_PROJ_REMOVE, _("Remove"))  
87          self.button_new = wxButton(self.panel_edit, ID_PROJ_NEW, _("New"))          self.button_new = wxButton(self.panel_edit, ID_PROJ_NEW, _("New"))
         self.button_save = wxButton(self.panel_edit, ID_PROJ_SAVE,_("Save"))  
88          self.button_add = wxButton(self.panel_edit, ID_PROJ_ADDTOLIST,          self.button_add = wxButton(self.panel_edit, ID_PROJ_ADDTOLIST,
89                                        _("Add to List"))                                        _("Add to List"))
90          self.button_try = wxButton(self.panel_buttons, ID_PROJ_TRY, _("Try"))          self.button_save = wxButton(self.panel_edit, ID_PROJ_SAVE,_("Update"))
91          self.button_revert = wxButton(self.panel_buttons, ID_PROJ_REVERT, _("Revert"))  
92          self.button_ok = wxButton(self.panel_buttons, ID_PROJ_OK, _("OK"))          # Main Action buttons (Try/Revert/OK/Close)
93          self.button_close = wxButton(self.panel_buttons, ID_PROJ_CLOSE, _("Close"))          self.button_try = wxButton(self, wxID_APPLY, _("Try"))
94            self.button_revert = wxButton(self, ID_PROJ_REVERT,
95                                          _("Revert"))
96            self.button_ok = wxButton(self, wxID_OK, _("OK"))
97            self.button_ok.SetDefault()
98            self.button_close = wxButton(self, wxID_CANCEL,
99                                         _("Close"))
100    
101          self.__set_properties()          self.__set_properties()
102          self.__do_layout()          self.__do_layout()
103          # wxGlade          # wxGlade
104    
105            self.originalProjection = self.receiver.GetProjection()
106    
107          self.__DoOnProjAvail()          self.__DoOnProjAvail()
108            self.button_ok.SetFocus()
109            self.availprojs.SetFocus()
110                    
111          EVT_BUTTON(self, ID_PROJ_TRY, self._OnTry)          EVT_BUTTON(self, wxID_APPLY, self.OnApply)
112          EVT_BUTTON(self, ID_PROJ_REVERT, self._OnRevert)          EVT_BUTTON(self, ID_PROJ_REVERT, self._OnRevert)
113          EVT_BUTTON(self, ID_PROJ_OK, self._OnOK)          EVT_BUTTON(self, wxID_OK, self.OnOK)
114          EVT_BUTTON(self, ID_PROJ_CLOSE, self._OnClose)          EVT_BUTTON(self, wxID_CANCEL, self.OnCancel)
115          EVT_CHOICE(self, ID_PROJ_PROJCHOICE, self._OnProjChoice)          EVT_CHOICE(self, ID_PROJ_PROJCHOICE, self._OnProjChoice)
116          EVT_LISTBOX(self, ID_PROJ_AVAIL, self._OnProjAvail)          EVT_LISTBOX(self, ID_PROJ_AVAIL, self._OnProjAvail)
117          EVT_BUTTON(self, ID_PROJ_IMPORT, self._OnImport)          EVT_BUTTON(self, ID_PROJ_IMPORT, self._OnImport)
# Line 101  class ProjFrame(NonModalDialog): Line 124  class ProjFrame(NonModalDialog):
124    
125          EVT_TEXT(self, ID_PROJ_PROJNAME, self._OnProjName)          EVT_TEXT(self, ID_PROJ_PROJNAME, self._OnProjName)
126    
     def GetReceiver(self):  
         return self.receiver  
127    
128      def _OnTry(self, event):      def OnApply(self, event):
129          self.__SetProjection()          self.__SetProjection()
130            self.haveTried = True
131    
132      def _OnRevert(self, event):      def OnOK(self, event):
         if self.originalProjection != -1:  
             self.receiver.SetProjection(self.originalProjection)  
   
     def _OnOK(self, event):  
133          self.__SetProjection()          self.__SetProjection()
134          self.Close()          self.Close()
135    
136      def _OnClose(self, event):      def OnCancel(self, event):
137            """Cancel just closes the dialog, but we call it cancel so we
138            can overload the functionality of wxDialog.
139            """
140          self.Close()          self.Close()
141    
142        def _OnRevert(self, event):
143            if self.haveTried:
144                self.receiver.SetProjection(self.originalProjection)
145                self.haveTried = False
146    
147    
148      def _OnNew(self, event):      def _OnNew(self, event):
149          self.__DoOnNew()  
150            # clear all selections
151            sel = self.availprojs.GetSelections()
152            for index in sel:
153                self.availprojs.SetSelection(index, False)
154    
155            self.projname.Clear()
156    
157            # supply a projection panel if there wasn't one
158            if self.curProjPanel is None:
159                self.projchoice.SetSelection(0)
160                self.__DoOnProjChoice()
161    
162            self.curProjPanel.Clear()
163    
164      def _OnSave(self, event):      def _OnSave(self, event):
165    
# Line 133  class ProjFrame(NonModalDialog): Line 173  class ProjFrame(NonModalDialog):
173          newproj = self.__GetProjection()          newproj = self.__GetProjection()
174    
175          if newproj is not None:          if newproj is not None:
176              projfile.Remove(proj)              projfile.Replace(proj, newproj)
             projfile.Add(newproj)  
177              try:              try:
178                  WriteProjFile(projfile)                  WriteProjFile(projfile)
179              except IOError, (errno, errstr):              except IOError, (errno, errstr):
180                  wxMessageDialog(self,                  self.__ShowError(projfile.GetFilename(), errstr)
181                      _("The following error occured:\n") +              self.availprojs.SetClientData(sel[0], [newproj, projfile])
                     projfile.GetFilename() + "\n" + errstr,  
                     _("Error"), wxOK | wxICON_ERROR).ShowModal()  
             self.__FillAvailList()  
182    
183      def _OnAddToList(self, event):      def _OnAddToList(self, event):
184    
# Line 152  class ProjFrame(NonModalDialog): Line 188  class ProjFrame(NonModalDialog):
188              try:              try:
189                  WriteProjFile(self.__usrProjFile)                  WriteProjFile(self.__usrProjFile)
190              except IOError, (errno, errstr):              except IOError, (errno, errstr):
191                  wxMessageDialog(self,                  self.__ShowError(self.__userProjFile.GetFilename(), errstr)
192                      _("The following error occured:\n") +  
                     self.__usrProjFile.GetFilename() + "\n" + errstr,  
                     _("Error"), wxOK | wxICON_ERROR).ShowModal()  
193              self.__FillAvailList()              self.__FillAvailList()
194    
195      def _OnProjAvail(self, event):      def _OnProjAvail(self, event):
# Line 174  class ProjFrame(NonModalDialog): Line 208  class ProjFrame(NonModalDialog):
208                      self.__usrProjFile.Add(proj)                      self.__usrProjFile.Add(proj)
209                  WriteProjFile(self.__usrProjFile)                  WriteProjFile(self.__usrProjFile)
210              except IOError, (errno, errstr):              except IOError, (errno, errstr):
211                  wxMessageDialog(self,                  self.__ShowError(dlg.GetPath(), errstr)
                     _("The following error occured:\n") +  
                     dlg.GetPath() + "\n" + errstr,  
                     _("Error"), wxOK | wxICON_ERROR).ShowModal()  
212    
213              self.__FillAvailList()              self.__FillAvailList()
214    
# Line 204  class ProjFrame(NonModalDialog): Line 235  class ProjFrame(NonModalDialog):
235              try:              try:
236                  WriteProjFile(projFile)                  WriteProjFile(projFile)
237              except IOError, (errno, errstr):              except IOError, (errno, errstr):
238                  wxMessageDialog(self,                  self.__ShowError(dlg.GetPath(), errstr)
                     _("The following error occured:\n") +  
                     dlg.GetPath() + "\n" + errstr,  
                     _("Error"), wxOK | wxICON_ERROR).ShowModal()  
239    
240          dlg.Destroy()          dlg.Destroy()
241    
# Line 242  class ProjFrame(NonModalDialog): Line 270  class ProjFrame(NonModalDialog):
270          try:          try:
271              WriteProjFile(projfile)              WriteProjFile(projfile)
272          except IOError, (errno, errstr):          except IOError, (errno, errstr):
273              wxMessageDialog(self,              self.__ShowError(projfile.GetFilename(), errstr)
                 _("The following error occured:\n") +  
                 projfile.GetFilename() + "\n" + errstr,  
                 _("Error"), wxOK | wxICON_ERROR).ShowModal()  
   
274    
275          self.__FillAvailList()          self.__FillAvailList()
276    
# Line 258  class ProjFrame(NonModalDialog): Line 282  class ProjFrame(NonModalDialog):
282          if newselection != -1 and self.availprojs.GetCount() > 0:          if newselection != -1 and self.availprojs.GetCount() > 0:
283              self.availprojs.SetSelection(newselection)              self.availprojs.SetSelection(newselection)
284    
285            self.__VerifyButtons()
286    
287      def _OnProjName(self, event):      def _OnProjName(self, event):
288          self.__VerifyButtons()          self.__VerifyButtons()
289    
290        def __ShowError(self, filename, errstr):
291            wxMessageDialog(self,
292                _("The following error occured:\n") +
293                filename + "\n" + errstr,
294                _("Error"), wxOK | wxICON_ERROR).ShowModal()
295    
296      def __VerifyButtons(self):      def __VerifyButtons(self):
297            """Enable or disable the appropriate buttons based on the
298            current state of the dialog.
299            """
300    
301          sel = self.availprojs.GetSelections()          sel = self.availprojs.GetSelections()
302    
303          self.button_import.Enable(True)          self.button_import.Enable(True)
# Line 271  class ProjFrame(NonModalDialog): Line 307  class ProjFrame(NonModalDialog):
307    
308          self.panel_edit.Enable(True)          self.panel_edit.Enable(True)
309    
310            for ctrl in [self.button_import,
311                         self.button_export,
312                         self.button_remove,
313                         self.button_save,
314                         self.button_add,
315                         self.projchoice,
316                         self.projname,
317                         self.panel_edit]:
318                ctrl.Enable(True)
319    
320            if self.curProjPanel is not None:
321                self.curProjPanel.Enable(True)
322    
323          if len(sel) == 0:          if len(sel) == 0:
324              self.button_import.Enable(True)              self.button_import.Enable(True)
325              self.button_export.Enable(False)              self.button_export.Enable(False)
326              self.button_remove.Enable(False)              self.button_remove.Enable(False)
327                self.button_save.Enable(False)
328    
329          elif len(sel) == 1:          elif len(sel) == 1:
330    
# Line 284  class ProjFrame(NonModalDialog): Line 334  class ProjFrame(NonModalDialog):
334              self.button_add.Enable(len(self.projname.GetValue()) > 0)              self.button_add.Enable(len(self.projname.GetValue()) > 0)
335    
336              if proj is None:              if proj is None:
337                  self.button_export.Enable(False)                  # <None> is selected
338                    for ctrl in [self.button_export,
339                                 self.button_remove,
340                                 self.button_save,
341                                 self.button_add,
342                                 self.projchoice,
343                                 self.projname]:
344                        ctrl.Enable(False)
345    
346                    if self.curProjPanel is not None:
347                        self.curProjPanel.Enable(False)
348    
349                elif proj is self.originalProjection:
350                  self.button_remove.Enable(False)                  self.button_remove.Enable(False)
351    
352              if projFile is None:              if projFile is None:
# Line 293  class ProjFrame(NonModalDialog): Line 355  class ProjFrame(NonModalDialog):
355          else:          else:
356              self.panel_edit.Enable(False)              self.panel_edit.Enable(False)
357    
     def __DoOnNew(self):  
         sel = self.availprojs.GetSelections()  
         if len(sel) != 0:  
             self.availprojs.SetSelection(sel, False)  
         self.projname.Clear()  
         self.curProjPanel.Clear()  
   
358      def __DoOnProjAvail(self):      def __DoOnProjAvail(self):
359    
360          sel = self.availprojs.GetSelections()          sel = self.availprojs.GetSelections()
# Line 311  class ProjFrame(NonModalDialog): Line 366  class ProjFrame(NonModalDialog):
366              if proj is None:              if proj is None:
367                  # user selected <None>                  # user selected <None>
368                  self.projname.Clear()                  self.projname.Clear()
369                    
370              else:              else:
371                            
372                  if projfile is not None:                  if projfile is not None:
# Line 327  class ProjFrame(NonModalDialog): Line 383  class ProjFrame(NonModalDialog):
383                      if myProjType == projType:                      if myProjType == projType:
384                          self.projchoice.SetSelection(i)                          self.projchoice.SetSelection(i)
385                          self.__DoOnProjChoice()                          self.__DoOnProjChoice()
386    
387                            #
388                            # self.curProjPanel should not be null
389                            # after a call to __DoOnProjChoice
390                            #
391                            assert self.curProjPanel is not None
392    
393                          self.curProjPanel.SetProjection(proj)                          self.curProjPanel.SetProjection(proj)
394                      i += 1                      i += 1
395    
# Line 336  class ProjFrame(NonModalDialog): Line 399  class ProjFrame(NonModalDialog):
399          self.__DoOnProjChoice()          self.__DoOnProjChoice()
400    
401      def __DoOnProjChoice(self):      def __DoOnProjChoice(self):
402            """Create and layout a projection panel based on the selected
403            projection type.
404    
405            This is necessary to have in seperate method since calls to
406            wxChoice.SetSelection() do not trigger an event.
407    
408            At the end of this method self.curProjPanel will not be None
409            if there was a item selected.
410            """
411    
412          choice = self.projchoice          choice = self.projchoice
413    
414          sel = choice.GetSelection()          sel = choice.GetSelection()
# Line 361  class ProjFrame(NonModalDialog): Line 434  class ProjFrame(NonModalDialog):
434              self.topBox.SetSizeHints(self)              self.topBox.SetSizeHints(self)
435    
436      def __SetProjection(self):      def __SetProjection(self):
437            """Set the receiver's projection."""
438    
439          #          #
440          # save the original projection only once in case          # save the original projection only once in case
441          # we try to apply several different projections          # we try to apply several different projections
442          #          #
         if self.originalProjection == -1:  
             self.originalProjection = self.receiver.GetProjection()  
   
443          self.receiver.SetProjection(self.__GetProjection())          self.receiver.SetProjection(self.__GetProjection())
444    
445      def __GetProjection(self):      def __GetProjection(self):
446          """Return the packaged projection.          """Return a suitable Projection object based on the current
447            state of the dialog box selections.
448    
449          Could be None.          Could be None.
450          """          """
451    
452          proj = None          sel = self.availprojs.GetSelections()
453            assert len(sel) < 2, "button should be disabled"
454    
455    
456            if len(sel) == 1:
457                proj = self.availprojs.GetClientData(sel[0])[CLIENT_PROJ]
458                if proj is None:
459                    # <None> is selected
460                    return None
461    
462            #
463            # self.curProjPanel should always contain the most
464            # relevant data for a projection
465            #
466          if self.curProjPanel is not None:          if self.curProjPanel is not None:
467              proj = Projection(self.curProjPanel.GetParameters())              return Projection(self.curProjPanel.GetParameters(),
468              proj.SetName(self.projname.GetValue())                                self.projname.GetValue())
469    
470            return None
471    
472          return proj      def __FillAvailList(self, selectCurrent = False):
473            """Populate the list of available projections.
474            
475            selectCurrent -- if True, select the projection used by
476                             the receiver, otherwise select nothing.
477            """
478    
     def __FillAvailList(self):  
479          self.availprojs.Clear()          self.availprojs.Clear()
480    
481          #          #
# Line 394  class ProjFrame(NonModalDialog): Line 484  class ProjFrame(NonModalDialog):
484          #          #
485          self.availprojs.Append("<None>", (None, None))          self.availprojs.Append("<None>", (None, None))
486    
         self.__sysProjFile = None  
         self.__usrProjFile = None  
   
487          projfile = GetSystemProjFiles()          projfile = GetSystemProjFiles()
488          if len(projfile) > 0:          projfile = projfile[0]
489              projfile = projfile[0]          for proj in projfile.GetProjections():
490              for proj in projfile.GetProjections():              self.availprojs.Append(proj.GetName(), [proj, projfile])
491                  self.availprojs.Append(proj.GetName(), [proj, projfile])          self.__sysProjFile = projfile
             self.__sysProjFile = projfile  
492    
493          projfile = GetUserProjFiles()          projfile = GetUserProjFiles()
494          if len(projfile) > 0:          projfile = projfile[0]
495              projfile = projfile[0]          for proj in projfile.GetProjections():
496              for proj in projfile.GetProjections():              self.availprojs.Append(proj.GetName(), [proj, projfile])
497                  self.availprojs.Append(proj.GetName(), [proj, projfile])          self.__usrProjFile = projfile
             self.__usrProjFile = projfile  
   
 #       projfiles = GetSystemProjFiles()  
 #       for projfile in projfiles:  
 #           for proj in projfile.GetProjections():  
 #               self.availprojs.Append(proj.GetName(), [proj, projfile])  
 #       self.__sysProjFiles = projfiles  
   
 #       projfiles = GetUserProjFiles()  
 #       for projfile in projfiles:  
 #           for proj in projfile.GetProjections():  
 #               self.availprojs.Append(proj.GetName(), [proj, projfile])  
 #       self.__usrProjFiles = projfiles  
   
         proj = self.receiver.GetProjection()  
         if proj is not None:  
             self.availprojs.Append(_("%s (current)") % proj.GetName(),  
                                    [proj, None])  
498    
499          for proj, name, clazz in self.projPanels:          for proj, name, clazz in self.projPanels:
500              self.projchoice.Append(name, [clazz, None])              self.projchoice.Append(name, [clazz, None])
501    
502            #
503            # We add the current projection to the list at last.
504            # Since the list is resorted immediately a following FindString()
505            # determines the index correctly.
506            #
507            proj = self.receiver.GetProjection()
508            if proj is not None:
509                proj_item = _("%s (current)") % proj.GetName()
510                self.availprojs.Append(proj_item, [proj, None])
511                if selectCurrent:
512                    self.availprojs.SetSelection(
513                            self.availprojs.FindString(proj_item)
514                        )
515            else:
516                if selectCurrent:
517                    self.availprojs.SetSelection(
518                            self.availprojs.FindString("<None>")
519                        )
520                    
521    
522      def __set_properties(self):      def __set_properties(self):
         self.__FillAvailList()  
523    
524          # begin wxGlade: ProjFrame.__set_properties          #self.availprojs.SetSelection(0)
         self.SetTitle(_("Projections"))  
         self.availprojs.SetSelection(0)  
525          self.projchoice.SetSelection(0)          self.projchoice.SetSelection(0)
526          # end wxGlade  
527            self.__FillAvailList(selectCurrent = True)
528    
529          self.projname.SetMaxLength(32)          self.projname.SetMaxLength(32)
530    
# Line 448  class ProjFrame(NonModalDialog): Line 534  class ProjFrame(NonModalDialog):
534          self.topBox = wxBoxSizer(wxVERTICAL)          self.topBox = wxBoxSizer(wxVERTICAL)
535          self.sizer_panel = wxBoxSizer(wxVERTICAL)          self.sizer_panel = wxBoxSizer(wxVERTICAL)
536          sizer_6 = wxBoxSizer(wxHORIZONTAL)          sizer_6 = wxBoxSizer(wxHORIZONTAL)
537            self.sizer_mainbttns = wxBoxSizer(wxHORIZONTAL)
538          self.sizer_mainctrls = wxBoxSizer(wxHORIZONTAL)          self.sizer_mainctrls = wxBoxSizer(wxHORIZONTAL)
539          self.sizer_edit = wxStaticBoxSizer(wxStaticBox(self.panel_edit, -1, _("Edit")), wxHORIZONTAL)          self.sizer_edit = wxStaticBoxSizer(wxStaticBox(self.panel_edit, -1, _("Edit")), wxHORIZONTAL)
540          sizer_11 = wxBoxSizer(wxVERTICAL)          sizer_11 = wxBoxSizer(wxVERTICAL)
# Line 478  class ProjFrame(NonModalDialog): Line 565  class ProjFrame(NonModalDialog):
565          sizer_14.Add(self.projchoice, 1, wxALL|wxEXPAND|wxADJUST_MINSIZE, 4)          sizer_14.Add(self.projchoice, 1, wxALL|wxEXPAND|wxADJUST_MINSIZE, 4)
566          self.sizer_projctrls.Add(sizer_14, 0, wxEXPAND, 0)          self.sizer_projctrls.Add(sizer_14, 0, wxEXPAND, 0)
567          self.sizer_edit.Add(self.sizer_projctrls, 1, wxEXPAND, 0)          self.sizer_edit.Add(self.sizer_projctrls, 1, wxEXPAND, 0)
568          sizer_11.Add(self.button_new, 0, wxALL|wxEXPAND, 4)          sizer_11.Add(self.button_new, 0, wxALL, 4)
569          sizer_11.Add(self.button_save, 0, wxALL|wxEXPAND, 4)          sizer_11.Add(self.button_add, 0, wxALL, 4)
570          sizer_11.Add(self.button_add, 0, wxALL|wxEXPAND, 4)          sizer_11.Add(20, 20, 0, wxEXPAND, 0)
571            sizer_11.Add(self.button_save, 0, wxALL|wxALIGN_BOTTOM, 4)
572          self.sizer_edit.Add(sizer_11, 0, wxALL|wxEXPAND, 4)          self.sizer_edit.Add(sizer_11, 0, wxALL|wxEXPAND, 4)
573    
574          sizer_6.Add(20, 20, 1, wxEXPAND, 0)          sizer_6.Add(self.button_try, 0, wxRIGHT| wxEXPAND, 10)
575          sizer_6.Add(self.button_try, 0, wxALL, 4)          sizer_6.Add(self.button_revert, 0, wxRIGHT| wxEXPAND, 10)
576          sizer_6.Add(20, 20, 1, 0, 0)          sizer_6.Add(self.button_ok, 0, wxRIGHT| wxEXPAND, 10)
577          sizer_6.Add(self.button_revert, 0, wxALL, 4)          sizer_6.Add(self.button_close, 0, wxRIGHT| wxEXPAND, 10)
         sizer_6.Add(20, 20, 1, 0, 0)  
         sizer_6.Add(self.button_ok, 0, wxALL, 4)  
         sizer_6.Add(20, 20, 1, 0, 0)  
         sizer_6.Add(self.button_close, 0, wxALL, 4)  
         sizer_6.Add(20, 20, 1, wxEXPAND, 0)  
578    
579          self.panel_1.SetAutoLayout(1)          self.panel_1.SetAutoLayout(1)
580          self.panel_1.SetSizer(grid_sizer_1)          self.panel_1.SetSizer(grid_sizer_1)
# Line 503  class ProjFrame(NonModalDialog): Line 586  class ProjFrame(NonModalDialog):
586          self.sizer_edit.Fit(self.panel_edit)          self.sizer_edit.Fit(self.panel_edit)
587          self.sizer_edit.SetSizeHints(self.panel_edit)          self.sizer_edit.SetSizeHints(self.panel_edit)
588    
         self.panel_buttons.SetAutoLayout(1)  
         self.panel_buttons.SetSizer(sizer_6)  
         sizer_6.Fit(self.panel_buttons)  
         sizer_6.SetSizeHints(self.panel_buttons)  
   
589          self.sizer_mainctrls.Add(self.panel_1, 0,          self.sizer_mainctrls.Add(self.panel_1, 0,
590              wxALL|wxEXPAND|wxADJUST_MINSIZE, 0)              wxALL|wxEXPAND|wxADJUST_MINSIZE, 0)
591          self.sizer_mainctrls.Add(self.panel_edit, 1,          self.sizer_mainctrls.Add(self.panel_edit, 1,
592              wxALL|wxEXPAND|wxADJUST_MINSIZE, 0)              wxALL|wxEXPAND|wxADJUST_MINSIZE, 0)
593    
594            self.sizer_mainbttns.Add(sizer_6, 0,
595                wxALL|wxEXPAND|wxADJUST_MINSIZE, 10)
596    
597          self.topBox.Add(self.sizer_mainctrls, 1, wxALL|wxEXPAND, 4)          self.topBox.Add(self.sizer_mainctrls, 1, wxALL|wxEXPAND, 4)
598          self.topBox.Add(self.panel_buttons, 0, wxEXPAND, 0)          self.topBox.Add(self.sizer_mainbttns, 0, wxALIGN_RIGHT|wxBOTTOM, 0)
599    
600          self.SetAutoLayout(1)          self.SetAutoLayout(1)
601          self.SetSizer(self.topBox)          self.SetSizer(self.topBox)
# Line 532  class ProjPanel(wxPanel): Line 613  class ProjPanel(wxPanel):
613          wxPanel.__init__(self, parent, -1)          wxPanel.__init__(self, parent, -1)
614    
615          self.__ellps = wxChoice(self, -1)          self.__ellps = wxChoice(self, -1)
616          self.ellpsData = [("bessel", _("Bessel 1841")),          self.ellpsData = [("airy"  , _("Airy")),
617                              ("bessel", _("Bessel 1841")),
618                            ("clrk66", _("Clarke 1866")),                            ("clrk66", _("Clarke 1866")),
619                            ("clrk80", _("Clarke 1880")),                            ("clrk80", _("Clarke 1880")),
620                            ("GRS80" , _("GRS 1980 (IUGG, 1980)")),                            ("GRS80" , _("GRS 1980 (IUGG, 1980)")),
# Line 548  class ProjPanel(wxPanel): Line 630  class ProjPanel(wxPanel):
630    
631          panelSizer = wxBoxSizer(wxVERTICAL)          panelSizer = wxBoxSizer(wxVERTICAL)
632    
         if childPanel is not None:  
             panelSizer.Add(childPanel, 0, wxALL|wxEXPAND, 4)  
               
633          sizer = wxBoxSizer(wxHORIZONTAL)          sizer = wxBoxSizer(wxHORIZONTAL)
634          sizer.Add(wxStaticText(self, -1, _("Ellipsoid:")), 0, wxALL, 4)          sizer.Add(wxStaticText(self, -1, _("Ellipsoid:")), 0,
635                                        wxALL|wxALIGN_CENTER_VERTICAL, 4)
636          sizer.Add(self.__ellps, 1, wxALL|wxEXPAND|wxADJUST_MINSIZE, 4)          sizer.Add(self.__ellps, 1, wxALL|wxEXPAND|wxADJUST_MINSIZE, 4)
637          panelSizer.Add(sizer, 0, wxALL|wxEXPAND, 4)          panelSizer.Add(sizer, 0, wxALL|wxEXPAND, 4)
638    
639            if childPanel is not None:
640                panelSizer.Add(childPanel, 0, wxEXPAND, 0)
641                
642          self.SetAutoLayout(1)          self.SetAutoLayout(1)
643          self.SetSizer(panelSizer)          self.SetSizer(panelSizer)
644          panelSizer.Fit(self)          panelSizer.Fit(self)
# Line 621  class TMPanel(ProjPanel): Line 704  class TMPanel(ProjPanel):
704    
705          self.__latitude = wxTextCtrl(self, ID_TMPANEL_LAT)          self.__latitude = wxTextCtrl(self, ID_TMPANEL_LAT)
706          self.__longitude = wxTextCtrl(self, ID_TMPANEL_LONG)          self.__longitude = wxTextCtrl(self, ID_TMPANEL_LONG)
707            self.__scale = wxTextCtrl(self, ID_TMPANEL_SCALE)
708          self.__falseEast = wxTextCtrl(self, ID_TMPANEL_FASLE_EAST)          self.__falseEast = wxTextCtrl(self, ID_TMPANEL_FASLE_EAST)
709          self.__falseNorth = wxTextCtrl(self, ID_TMPANEL_FALSE_NORTH)          self.__falseNorth = wxTextCtrl(self, ID_TMPANEL_FALSE_NORTH)
         self.__scale = wxTextCtrl(self, ID_TMPANEL_SCALE)  
710    
711          self._DoLayout()          self._DoLayout()
712    
# Line 689  class UTMPanel(ProjPanel): Line 772  class UTMPanel(ProjPanel):
772          self.receiver = receiver          self.receiver = receiver
773    
774          self.__zone = wxSpinCtrl(self, ID_UTMPANEL_ZONE, "1", min=1, max=60)          self.__zone = wxSpinCtrl(self, ID_UTMPANEL_ZONE, "1", min=1, max=60)
775            self.__propButton = wxButton(self, ID_UTMPANEL_PROP, _("Propose"))
776          self.__south = wxCheckBox(self, ID_UTMPANEL_SOUTH,          self.__south = wxCheckBox(self, ID_UTMPANEL_SOUTH,
777                                    _("Southern Hemisphere"))                                    _("Southern Hemisphere"))
         self.__propButton = wxButton(self, ID_UTMPANEL_PROP, _("Propose"))  
778    
779          self._DoLayout()          self._DoLayout()
780    
# Line 811  class GeoPanel(ProjPanel): Line 894  class GeoPanel(ProjPanel):
894    
895      def __init__(self, parent, receiver):      def __init__(self, parent, receiver):
896          ProjPanel.__init__(self, parent)          ProjPanel.__init__(self, parent)
897          ProjPanel._DoLayout(self, None)  
898            self.__choices = [(_("Degrees"), "0.017453"),
899                              (_("Radians"), "1")]
900    
901            self.__scale = wxChoice(self, -1)
902            for choice, value in self.__choices:
903                self.__scale.Append(choice, value)
904    
905            self._DoLayout()
906    
907      def GetProjName(self):      def GetProjName(self):
908          return _("Geographic")          return _("Geographic")
909                    
910      def SetProjection(self, proj):      def SetProjection(self, proj):
911            value = proj.GetParameter("to_meter")
912            for i in range(len(self.__choices)):
913                choice, data = self.__choices[i]
914                if value == data:
915                    self.__scale.SetSelection(i)
916          ProjPanel.SetProjection(self, proj)          ProjPanel.SetProjection(self, proj)
917    
918      def GetParameters(self):      def GetParameters(self):
919          params = ["proj=latlong"]          params = ["proj=latlong",
920                      "to_meter=%s" % self.__scale.GetClientData(
921                                      self.__scale.GetSelection())]
922    
923          params.extend(ProjPanel.GetParameters(self))          params.extend(ProjPanel.GetParameters(self))
924          return params          return params
925    
926      def Clear(self):      def Clear(self):
927          ProjPanel.Clear(self)          ProjPanel.Clear(self)
928    
929        def _DoLayout(self):
930            sizer = wxBoxSizer(wxHORIZONTAL)
931    
932            sizer.Add(wxStaticText(self, -1, _("Source Data is in: ")),
933                      0, wxALL|wxALIGN_CENTER_VERTICAL, 4)
934            sizer.Add(self.__scale, 1, wxEXPAND|wxALL, 4)
935    
936            self.__scale.SetSelection(0)
937    
938            ProjPanel._DoLayout(self, sizer)
939    
940    
941  ID_UTM_PROPOSE_ZONE_DIALOG_TAKE   = 4001  ID_UTM_PROPOSE_ZONE_DIALOG_TAKE   = 4001
942  ID_UTM_PROPOSE_ZONE_DIALOG_CANCEL = 4002  ID_UTM_PROPOSE_ZONE_DIALOG_CANCEL = 4002

Legend:
Removed from v.741  
changed lines
  Added in v.976

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26