[GRASS-SVN] r29450 - grass/trunk/gui/wxpython/gui_modules

svn_grass at osgeo.org svn_grass at osgeo.org
Sun Dec 16 12:54:37 EST 2007


Author: martinl
Date: 2007-12-16 12:54:36 -0500 (Sun, 16 Dec 2007)
New Revision: 29450

Modified:
   grass/trunk/gui/wxpython/gui_modules/dbm.py
   grass/trunk/gui/wxpython/gui_modules/location_wizard.py
Log:
wxGUI: Dialog for setting default region extent and resolution improved (including 3D)

Modified: grass/trunk/gui/wxpython/gui_modules/dbm.py
===================================================================
--- grass/trunk/gui/wxpython/gui_modules/dbm.py	2007-12-16 11:52:29 UTC (rev 29449)
+++ grass/trunk/gui/wxpython/gui_modules/dbm.py	2007-12-16 17:54:36 UTC (rev 29450)
@@ -454,6 +454,10 @@
         # do layout
         self.__layout()
 
+        # self.SetMinSize(self.GetBestSize())
+        self.SetSize((680, 520))
+        self.SetMinSize(self.GetSize())
+
     def __del__(self):
         pass
         #         if self.qlayer and self.map:
@@ -880,10 +884,6 @@
         # mainSizer.Fit(self) # problem connected to aui
         self.Layout()
         
-        # self.SetMinSize(self.GetBestSize())
-        self.SetSize((680, 520))
-        self.SetMinSize(self.GetSize())
-
     def OnDataRightUp(self, event):
         """Table description area, context menu"""
         if not hasattr(self, "popupDataID1"):

Modified: grass/trunk/gui/wxpython/gui_modules/location_wizard.py
===================================================================
--- grass/trunk/gui/wxpython/gui_modules/location_wizard.py	2007-12-16 11:52:29 UTC (rev 29449)
+++ grass/trunk/gui/wxpython/gui_modules/location_wizard.py	2007-12-16 17:54:36 UTC (rev 29450)
@@ -76,9 +76,9 @@
         return wx.TextCtrl(parent=self, id=wx.ID_ANY, value=text,
                            size=size, style=style)
 
-    def MakeButton(self, text, size=(-1,-1)):
+    def MakeButton(self, text, id=wx.ID_ANY, size=(-1,-1)):
         """Generic button"""
-        return wx.Button(parent=self, id=wx.ID_ANY, label=text,
+        return wx.Button(parent=self, id=id, label=text,
                          size=size)
 
 class TitledPage(BaseClass, wiz.WizardPageSimple):
@@ -1352,13 +1352,16 @@
     Page for setting default region extents and resolution
     """
 
-    def __init__(self,parent, id=wx.ID_ANY,
-                 title=_("Set default region values"), location=None):
+    def __init__(self, parent, id=wx.ID_ANY,
+                 title=_("Set default region extent and resolution"), location=None):
         wx.Frame.__init__(self, parent, id, title, size=(650,300))
 
         self.parent = parent
         self.location = location
 
+        #
+        # values
+        #
         # 2D
         self.north = 1.0
         self.south = 0.0
@@ -1366,23 +1369,42 @@
         self.west = 0.0
         self.nsres = 1.0
         self.ewres = 1.0
+        # 3D
+        self.top = 1.0
+        self.bottom = 0.0
+        #         self.nsres3 = 1.0
+        #         self.ewres3 = 1.0
+        self.tbres  = 1.0
 
+        #
         # inputs
-        self.ttop = self.MakeTextCtrl(str(self.north), size=(150, -1))
-        self.tbottom = self.MakeTextCtrl(str(self.south), size=(150, -1))
-        self.tleft = self.MakeTextCtrl(str(self.west), size=(150, -1))
-        self.tright = self.MakeTextCtrl(str(self.east), size=(150, -1))
-        self.tres = self.MakeTextCtrl(str(self.res), size=(150, -1))
+        #
+        # 2D
+        self.tnorth = self.MakeTextCtrl(str(self.north), size=(150, -1))
+        self.tsouth = self.MakeTextCtrl(str(self.south), size=(150, -1))
+        self.twest = self.MakeTextCtrl(str(self.west), size=(150, -1))
+        self.teast = self.MakeTextCtrl(str(self.east), size=(150, -1))
+        self.tnsres = self.MakeTextCtrl(str(self.nsres), size=(150, -1))
+        self.tewres = self.MakeTextCtrl(str(self.ewres), size=(150, -1))
 
+        #
         # labels
-        # self.lmessage = self.MakeLabel(size=(300,50))
+        #
+        self.lrows = self.MakeLabel("")
+        self.lcols = self.MakeLabel("")
+        self.lcells = self.MakeLabel("")
 
+        #
         # buttons
-        self.bset = self.MakeButton(_("Set coordinates"), size=(150,-1))
-        self.bcancel = self.MakeButton(_("Cancel"), size=(150,-1))
+        #
+        self.bset = self.MakeButton(_("&Set region"), id=wx.ID_OK)
+        self.bcancel = self.MakeButton(_("Cancel"), id=wx.ID_CANCEL)
+        self.bset.SetDefault()
 
+        #
         # set current working environment to PERMANENT mapset
         # in selected location in order to set default region (WIND)
+        #
         envval = {}
         cmdlist = ['g.gisenv']
         p = gcmd.Command(cmdlist)
@@ -1404,13 +1426,13 @@
             dlg = wx.MessageBox(parent=self,
                                 message=_('A valid location must be selected'),
                                 caption=_("Error"), style=wx.ID_OK | wx.ICON_ERROR)
-            dlg.ShowModal()
-            dlg.Destroy()
             return
 
+        #
         # get current region settings
+        #
         region = {}
-        cmdlist = ['g.region', '-gp']
+        cmdlist = ['g.region', '-gp3']
         p = gcmd.Command(cmdlist)
         if p.returncode == 0:
             output = p.ReadStdOutput()
@@ -1421,131 +1443,363 @@
                 region[key] = float(val)
         else:
             dlg = wx.MessageBox(parent=self,
-                                message=_('Invalid region'),
+                                message=_("Invalid region"),
                                 caption=_("Error"), style=wx.ID_OK | wx.ICON_ERROR)
             dlg.ShowModal()
             dlg.Destroy()
             return
 
+        #
+        # update values
+        # 2D
         self.north = float(region['n'])
         self.south = float(region['s'])
         self.east = float(region['e'])
         self.west = float(region['w'])
-        self.res = float(region['ewres'])
+        self.nsres = float(region['nsres'])
+        self.ewres = float(region['ewres'])
+        self.rows = int(region['rows'])
+        self.cols = int(region['cols'])
+        self.cells = int(region['cells'])
+        # 3D
+        self.top = float(region['t'])
+        self.bottom = float(region['b'])
+        #         self.nsres3 = float(region['nsres3'])
+        #         self.ewres3 = float(region['ewres3'])
+        self.tbres = float(region['tbres'])
+        self.depth = int(region['depths'])
+        self.cells3 = int(region['3dcells'])
 
-        # Insert current region settings into text controls
-        self.ttop.SetValue(str(self.north))
-        self.tbottom.SetValue(str(self.south))
-        self.tleft.SetValue(str(self.west))
-        self.tright.SetValue(str(self.east))
-        self.tres.SetValue(str(self.res))
+        #
+        # 3D box collapsable
+        #
+        self.infoCollapseLabelExp = _("Click here to show 3D settings")
+        self.infoCollapseLabelCol = _("Click here to hide 3D settings")
+        self.settings3D = wx.CollapsiblePane(parent=self,
+                                             label=self.infoCollapseLabelExp,
+                                             style=wx.CP_DEFAULT_STYLE |
+                                             wx.CP_NO_TLW_RESIZE | wx.EXPAND)
+        self.MakeSettings3DPaneContent(self.settings3D.GetPane())
+        self.settings3D.Collapse(False)
+        self.Bind(wx.EVT_COLLAPSIBLEPANE_CHANGED, self.OnSettings3DPaneChanged, self.settings3D)
 
-        # layout
-        self.sizer = wx.GridBagSizer(vgap=0, hgap=0)
+        #
+        # set current region settings
+        #
+        self.tnorth.SetValue(str(self.north))
+        self.tsouth.SetValue(str(self.south))
+        self.twest.SetValue(str(self.west))
+        self.teast.SetValue(str(self.east))
+        self.tnsres.SetValue(str(self.nsres))
+        self.tewres.SetValue(str(self.ewres))
+        self.ttop.SetValue(str(self.top))
+        self.tbottom.SetValue(str(self.bottom))
+        #         self.tnsres3.SetValue(str(self.nsres3))
+        #         self.tewres3.SetValue(str(self.ewres3))
+        self.ttbres.SetValue(str(self.tbres))
+        self.lrows.SetLabel(_("Rows: %d" % self.rows))
+        self.lcols.SetLabel(_("Cols: %d" % self.cols))
+        self.lcells.SetLabel(_("Cells: %d" % self.cells))
 
-        self.sizer.Add(item=self.MakeLabel(_("Region extents and resolution:")),
-                       flag=wx.ALIGN_RIGHT |
-                       wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border=10, pos=(0, 0), span=(1, 2))
+        #
+        # bindings
+        #
+        self.Bind(wx.EVT_BUTTON, self.OnSetButton, self.bset)
+        self.Bind(wx.EVT_BUTTON, self.OnCancel, self.bcancel)
+        self.tnorth.Bind(wx.EVT_TEXT,   self.OnValue)
+        self.tsouth.Bind(wx.EVT_TEXT,   self.OnValue)
+        self.teast.Bind(wx.EVT_TEXT,    self.OnValue)
+        self.twest.Bind(wx.EVT_TEXT,    self.OnValue)
+        self.tnsres.Bind(wx.EVT_TEXT,   self.OnValue)
+        self.tewres.Bind(wx.EVT_TEXT,   self.OnValue)
+        self.ttop.Bind(wx.EVT_TEXT,     self.OnValue)
+        self.tbottom.Bind(wx.EVT_TEXT,  self.OnValue)
+        #         self.tnsres3.Bind(wx.EVT_TEXT,  self.OnValue)
+        #         self.tewres3.Bind(wx.EVT_TEXT,  self.OnValue)
+        self.ttbres.Bind(wx.EVT_TEXT,   self.OnValue)
 
-        self.sizer.Add(item=self.MakeLabel(_("North")),
-                       flag=wx.ALIGN_CENTER_HORIZONTAL |
-                       wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border=0, pos=(1, 2))
-        self.sizer.Add(item=self.ttop,
-                       flag=wx.ALIGN_CENTER_HORIZONTAL |
-                       wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border=5, pos=(2, 2))
+        self.__DoLayout()
+        self.SetMinSize(self.GetBestSize())
+        self.minWindowSize = self.GetMinSize()
 
-        self.sizer.Add(item=self.MakeLabel(_("West")),
-                       flag=wx.ALIGN_RIGHT |
-                       wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border=0, pos=(3, 0))
-        self.sizer.Add(item=self.tleft,
-                       flag=wx.ALIGN_RIGHT |
-                       wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border=5,  pos=(3, 1))
+    def MakeSettings3DPaneContent(self, pane):
+        """Create 3D region settings pane"""
+        border = wx.BoxSizer(wx.VERTICAL)
+        gridSizer = wx.GridBagSizer(vgap=0, hgap=0)
 
-        self.sizer.Add(item=self.tright,
-                       flag=wx.ALIGN_CENTER_HORIZONTAL |
-                       wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border=5,  pos=(3, 3))
-        self.sizer.Add(item=self.MakeLabel("East"),
-                       flag=wx.ALIGN_LEFT |
-                       wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border=0, pos=(3, 4))
+        # inputs
+        self.ttop = wx.TextCtrl(parent=pane, id=wx.ID_ANY, value=str(self.top),
+                                size=(150, -1))
+        self.tbottom = wx.TextCtrl(parent=pane, id=wx.ID_ANY, value=str(self.bottom),
+                                size=(150, -1))
+        self.ttbres = wx.TextCtrl(parent=pane, id=wx.ID_ANY, value=str(self.tbres),
+                                size=(150, -1))
+        #         self.tnsres3 = wx.TextCtrl(parent=pane, id=wx.ID_ANY, value=str(self.nsres3),
+        #                                    size=(150, -1))
+        #         self.tewres3 = wx.TextCtrl(parent=pane, id=wx.ID_ANY, value=str(self.ewres3),
+        #                                    size=(150, -1))
 
-        self.sizer.Add(item=self.tbottom,
-                       flag=wx.ALIGN_CENTER_HORIZONTAL |
-                       wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border=5, pos=(4, 2))
-        self.sizer.Add(item=self.MakeLabel("South"),
-                       flag=wx.ALIGN_CENTER_HORIZONTAL |
-                       wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border=0, pos=(5, 2))
+        #labels
+        self.ldepth = wx.StaticText(parent=pane, label=_("Depth: %d") % self.depth)
+        self.lcells3 = wx.StaticText(parent=pane, label=_("3D Cells: %d") % self.cells3)
 
-        self.sizer.Add(item=self.MakeLabel("Resolution"),
-                       flag=wx.ALIGN_RIGHT |
-                       wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border=5, pos=(6, 1))
-        self.sizer.Add(item=self.tres,
-                       flag=wx.ALIGN_CENTER_HORIZONTAL |
-                       wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border=5, pos=(6, 2))
+        # top
+        gridSizer.Add(item=wx.StaticText(parent=pane, label=_("Top")),
+                      flag=wx.ALIGN_CENTER |
+                      wx.LEFT | wx.RIGHT | wx.TOP, border=5,
+                      pos=(0, 1))
+        gridSizer.Add(item=self.ttop,
+                      flag=wx.ALIGN_CENTER_HORIZONTAL |
+                      wx.ALL, border=5, pos=(1, 1))
+        # bottom
+        gridSizer.Add(item=wx.StaticText(parent=pane, label=_("Bottom")),
+                      flag=wx.ALIGN_CENTER |
+                      wx.LEFT | wx.RIGHT | wx.TOP, border=5,
+                      pos=(0, 2))
+        gridSizer.Add(item=self.tbottom,
+                      flag=wx.ALIGN_CENTER_HORIZONTAL |
+                      wx.ALL, border=5, pos=(1, 2))
+        # tbres
+        gridSizer.Add(item=wx.StaticText(parent=pane, label=_("T-B resolution")),
+                      flag=wx.ALIGN_CENTER | 
+                      wx.LEFT | wx.RIGHT | wx.TOP, border=5,
+                      pos=(0, 3))
+        gridSizer.Add(item=self.ttbres,
+                      flag=wx.ALIGN_CENTER_HORIZONTAL |
+                      wx.ALL, border=5, pos=(1, 3))
 
-        self.sizer.Add(item=wx.StaticLine(self, -1), 
-                       flag=wx.EXPAND|wx.ALL, border=0, pos=(7, 0),
-                       span=(1, 6))
+        # res
+        #         gridSizer.Add(item=wx.StaticText(parent=pane, label=_("3D N-S resolution")),
+        #                       flag=wx.ALIGN_CENTER |
+        #                       wx.LEFT | wx.RIGHT | wx.TOP, border=5,
+        #                       pos=(2, 1))
+        #         gridSizer.Add(item=self.tnsres3,
+        #                       flag=wx.ALIGN_CENTER_HORIZONTAL |
+        #                       wx.ALL, border=5, pos=(3, 1))
+        #         gridSizer.Add(item=wx.StaticText(parent=pane, label=_("3D E-W resolution")),
+        #                       flag=wx.ALIGN_CENTER |
+        #                       wx.LEFT | wx.RIGHT | wx.TOP, border=5,
+        #                       pos=(2, 3))
+        #         gridSizer.Add(item=self.tewres3,
+        #                       flag=wx.ALIGN_CENTER_HORIZONTAL |
+        #                       wx.ALL, border=5, pos=(3, 3))
 
-        self.sizer.Add(item=self.bset,
-                       flag=wx.ALIGN_LEFT |
-                       wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border=5, pos=(8, 3))
+        # rows/cols/cells
+        gridSizer.Add(item=self.ldepth,
+                      flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER |
+                      wx.ALL, border=5, pos=(2, 1))
 
-        self.sizer.Add(item=self.bcancel,
-                       flag=wx.ALIGN_LEFT |
-                       wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border=5, pos=(8, 1))
+        gridSizer.Add(item=self.lcells3,
+                      flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER |
+                      wx.ALL, border=5, pos=(2, 2))
 
+        border.Add(item=gridSizer, proportion=1,
+                   flag=wx.ALL | wx.ALIGN_CENTER | wx.EXPAND, border=5)
 
-        self.SetSizer(self.sizer)
+        pane.SetSizer(border)
+        border.Fit(pane)
+
+    def OnSettings3DPaneChanged(self, event):
+        """Collapse 3D settings box"""
+
+        if self.settings3D.IsExpanded():
+            self.settings3D.SetLabel(self.infoCollapseLabelCol)
+            self.Layout()
+            self.SetSize(self.GetBestSize())
+            self.SetMinSize(self.GetSize())
+        else:
+            self.settings3D.SetLabel(self.infoCollapseLabelExp)
+            self.Layout()
+            self.SetSize(self.minWindowSize)
+            self.SetMinSize(self.minWindowSize)
+
+        self.SendSizeEvent()
+
+    def __DoLayout(self):
+        """Window layout"""
+        frameSizer = wx.BoxSizer(wx.VERTICAL)
+        gridSizer = wx.GridBagSizer(vgap=0, hgap=0)
+        settings3DSizer = wx.BoxSizer(wx.VERTICAL)
+        buttonSizer = wx.BoxSizer(wx.HORIZONTAL)
+
+        # north
+        gridSizer.Add(item=self.MakeLabel(_("North")),
+                      flag=wx.ALIGN_BOTTOM | wx.ALIGN_CENTER_HORIZONTAL |
+                      wx.TOP | wx.LEFT | wx.RIGHT, border=5, pos=(0, 2))
+        gridSizer.Add(item=self.tnorth,
+                      flag=wx.ALIGN_CENTER_HORIZONTAL |
+                      wx.ALIGN_CENTER_VERTICAL |
+                      wx.ALL, border=5, pos=(1, 2))
+        # west
+        gridSizer.Add(item=self.MakeLabel(_("West")),
+                      flag=wx.ALIGN_RIGHT |
+                      wx.ALIGN_CENTER_VERTICAL |
+                      wx.LEFT | wx.TOP | wx.BOTTOM, border=5, pos=(2, 0))
+        gridSizer.Add(item=self.twest,
+                      flag=wx.ALIGN_RIGHT |
+                      wx.ALIGN_CENTER_VERTICAL |
+                      wx.ALL, border=5,  pos=(2, 1))
+
+        gridSizer.Add(item=self.MakeLabel("+"),
+                      flag=wx.ALIGN_CENTER |
+                      wx.ALIGN_CENTER_VERTICAL |
+                      wx.ALL, border=5, pos=(2, 2))
+
+        # east
+        gridSizer.Add(item=self.teast,
+                      flag=wx.ALIGN_CENTER_HORIZONTAL |
+                      wx.ALIGN_CENTER_VERTICAL |
+                      wx.ALL, border=5,  pos=(2, 3))
+        gridSizer.Add(item=self.MakeLabel(_("East")),
+                      flag=wx.ALIGN_LEFT |
+                      wx.ALIGN_CENTER_VERTICAL |
+                      wx.RIGHT | wx.TOP | wx.BOTTOM, border=5, pos=(2, 4))
+        # south
+        gridSizer.Add(item=self.tsouth,
+                      flag=wx.ALIGN_CENTER_HORIZONTAL |
+                      wx.ALIGN_CENTER_VERTICAL |
+                      wx.ALL, border=5, pos=(3, 2))
+        gridSizer.Add(item=self.MakeLabel(_("South")),
+                      flag=wx.ALIGN_TOP | wx.ALIGN_CENTER_HORIZONTAL |
+                      wx.LEFT | wx.RIGHT | wx.BOTTOM, border=5, pos=(4, 2))
+        # ns-res
+        gridSizer.Add(item=self.MakeLabel(_("N-S resolution")),
+                      flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER |
+                      wx.TOP | wx.LEFT | wx.RIGHT, border=5, pos=(5, 1))
+        gridSizer.Add(item=self.tnsres,
+                      flag=wx.ALIGN_RIGHT |
+                      wx.ALIGN_CENTER_VERTICAL |
+                      wx.ALL, border=5,  pos=(6, 1))
+        # ew-res
+        gridSizer.Add(item=self.MakeLabel(_("E-W resolution")),
+                      flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER |
+                      wx.TOP | wx.LEFT | wx.RIGHT, border=5, pos=(5, 3))
+        gridSizer.Add(item=self.tewres,
+                      flag=wx.ALIGN_RIGHT |
+                      wx.ALIGN_CENTER_VERTICAL |
+                      wx.ALL, border=5,  pos=(6, 3))
+        # rows/cols/cells
+        gridSizer.Add(item=self.lrows,
+                      flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER |
+                      wx.ALL, border=5, pos=(7, 1))
+
+        gridSizer.Add(item=self.lcells,
+                      flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER |
+                      wx.ALL, border=5, pos=(7, 2))
+
+        gridSizer.Add(item=self.lcols,
+                      flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER |
+                      wx.ALL, border=5, pos=(7, 3))
+
+        # 3D
+        settings3DSizer.Add(item=self.settings3D,
+                            flag=wx.ALL,
+                            border=5)
+
+        # buttons
+        buttonSizer.Add(item=self.bcancel, proportion=1,
+                        flag=wx.ALIGN_RIGHT |
+                        wx.ALIGN_CENTER_VERTICAL |
+                        wx.ALL, border=10)
+        buttonSizer.Add(item=self.bset, proportion=1,
+                        flag=wx.ALIGN_CENTER |
+                        wx.ALIGN_CENTER_VERTICAL |
+                        wx.ALL, border=10)
+
+        frameSizer.Add(item=gridSizer, proportion=1,
+                       flag=wx.ALL | wx.ALIGN_CENTER, border=5)
+        frameSizer.Add(item=settings3DSizer, proportion=0,
+                       flag=wx.ALL | wx.ALIGN_CENTER, border=5)
+        frameSizer.Add(item=buttonSizer, proportion=0,
+                       flag=wx.ALL | wx.ALIGN_RIGHT, border=5)
+
         self.SetAutoLayout(True)
+        self.SetSizer(frameSizer)
+        frameSizer.Fit(self)
         self.Layout()
 
-        self.Bind(wx.EVT_BUTTON, self.OnSetButton, self.bset)
-        self.Bind(wx.EVT_BUTTON, self.OnCancel, self.bcancel)
-        self.Bind(wx.EVT_TEXT, self.OnNorth, self.ttop)
-        self.Bind(wx.EVT_TEXT, self.OnSouth, self.tbottom)
-        self.Bind(wx.EVT_TEXT, self.OnEast, self.tright)
-        self.Bind(wx.EVT_TEXT, self.OnWest, self.tleft)
-        self.Bind(wx.EVT_TEXT, self.OnRes, self.tres)
+    def OnValue(self, event):
+        """Set given value"""
+        try:
+            if event.GetId() == self.tnorth.GetId():
+                self.north = float(event.GetString())
+            elif event.GetId() == self.tsouth.GetId():
+                self.south = float(event.GetString())
+            elif event.GetId() == self.teast.GetId():
+                self.east = float(event.GetString())
+            elif event.GetId() == self.twest.GetId():
+                self.west = float(event.GetString())
+            elif event.GetId() == self.tnsres.GetId():
+                self.nsres = float(event.GetString())
+            elif event.GetId() == self.tewres.GetId():
+                self.ewres = float(event.GetString())
+            elif event.GetId() == self.ttop.GetId():
+                self.top = float(event.GetString())
+            elif event.GetId() == self.tbottom.GetId():
+                self.bottom = float(event.GetString())
+            #             elif event.GetId() == self.tnsres3.GetId():
+            #                 self.nsres3 = float(event.GetString())
+            #             elif event.GetId() == self.tewres3.GetId():
+            #                 self.ewres3 = float(event.GetString())
+            elif event.GetId() == self.ttbres.GetId():
+                self.tbres = float(event.GetString())
 
-    def OnNorth(self, event):
-        self.north = event.GetString()
+            self.__UpdateInfo()
 
-    def OnSouth(self, event):
-        self.south = event.GetString()
+        except ValueError, e:
+            if len(event.GetString()) > 0 and event.GetString() != '-':
+                dlg = wx.MessageBox(parent=self,
+                                    message=_("Invalid value: %s") % e,
+                                    caption=_("Error"),
+                                    style=wx.OK | wx.ICON_ERROR)
+                # reset values
+                self.tnorth.SetValue(str(self.north))
+                self.tsouth.SetValue(str(self.south))
+                self.teast.SetValue(str(self.east))
+                self.twest.SetValue(str(self.west))
+                self.tnsres.SetValue(str(self.nsres))
+                self.tewres.SetValue(str(self.ewres))
+                self.ttop.SetValue(str(self.top))
+                self.tbottom.SetValue(str(self.bottom))
+                self.ttbres.SetValue(str(self.tbres))
+                # self.tnsres3.SetValue(str(self.nsres3))
+                # self.tewres3.SetValue(str(self.ewres3))
 
-    def OnEast(self, event):
-        self.east = event.GetString()
+        event.Skip()
 
-    def OnWest(self, event):
-        self.west = event.GetString()
+    def __UpdateInfo(self):
+        """Update number of rows/cols/cells"""
+        self.rows = int((self.north - self.south) / self.nsres)
+        self.cols = int((self.east - self.west) / self.ewres)
+        self.cells = self.rows * self.cols
 
-    def OnRes(self, event):
-        self.res = event.GetString()
+        self.depth = int((self.top - self.bottom) / self.tbres)
+        self.cells3 = self.rows * self.cols * self.depth
 
-    def OnSetButton(self,event=None):
-        cmdlist = ['g.region', '-sgpa', 'n=%s' % self.north, 's=%s' % self.south, \
-                   'e=%s' % self.east, 'w=%s' % self.west, 'res=%s' % self.res]
+        # 2D
+        self.lrows.SetLabel(_("Rows: %d") % self.rows)
+        self.lcols.SetLabel(_("Cols: %d") % self.cols)
+        self.lcells.SetLabel(_("Cells: %d") % self.cells)
+        # 3D
+        self.ldepth.SetLabel(_("Depth: %d" % self.depth))
+        self.lcells3.SetLabel(_("3D Cells: %d" % self.cells3))
+
+    def OnSetButton(self, event=None):
+        """Set default region"""
+        cmdlist = ['g.region', '-sgpa',
+                   'n=%f' % self.north,
+                   's=%f' % self.south,
+                   'e=%f' % self.east,
+                   'w=%f' % self.west,
+                   'nsres=%f' % self.nsres,
+                   'ewres=%f' % self.ewres,
+                   't=%f' % self.top,
+                   'b=%f' % self.bottom,
+                   'tbres=%f' % self.tbres]
+
         p = gcmd.Command(cmdlist)
         if p.returncode == 0:
-            output = p.ReadStdOutput()[0]
-            wx.MessageBox('New default region:\n%s' % output)
-        else:
-            wx.MessageBox('Setting default region failed\n%s %s' % \
-                          (p.ReadErrOutput()[0],p.ReadStdOutput()[0]))
-        self.Destroy()
+            self.Destroy()
 
     def OnCancel(self, event):
         self.Destroy()
@@ -1657,16 +1911,16 @@
                 dlg.CenterOnScreen()
                 if dlg.ShowModal() == wx.ID_YES:
                     dlg.Destroy()
-                    defineRegion = RegionDef(None, location=self.location)
+                    defineRegion = RegionDef(self.parent, location=self.location)
                     defineRegion.Show()
                 else:
                     dlg.Destroy()
 
             elif success == False:
-                wx.MessageBox(parent=self.wizard,
-                              message=_("Unable to create new location."),
-                              caption=_("Error"),
-                              style=wx.OK | wx.ICON_ERROR)
+                dlg = wx.MessageBox(parent=self.wizard,
+                                    message=_("Unable to create new location."),
+                                    caption=_("Error"),
+                                    style=wx.OK | wx.ICON_ERROR)
             else: # None
                 pass
         else:
@@ -2074,7 +2328,7 @@
             return False
 
 if __name__ == "__main__":
-    gWizard = GWizard(None,  "")
-    GRASSStartUp = GWizard.StartUp(0)
-    GRASSStartUp.MainLoop()
-
+    app = wx.PySimpleApp()
+    gWizard = LocationWizard(None, "")
+    gWizzard.Show()
+    app.MainLoop()



More information about the grass-commit mailing list