[GRASS-SVN] r47338 - in grass/branches/develbranch_6/gui/wxpython: . gui_modules

svn_grass at osgeo.org svn_grass at osgeo.org
Mon Aug 1 11:45:37 EDT 2011


Author: martinl
Date: 2011-08-01 08:45:36 -0700 (Mon, 01 Aug 2011)
New Revision: 47338

Modified:
   grass/branches/develbranch_6/gui/wxpython/gui_modules/dbm.py
   grass/branches/develbranch_6/gui/wxpython/gui_modules/gdialogs.py
   grass/branches/develbranch_6/gui/wxpython/gui_modules/toolbars.py
   grass/branches/develbranch_6/gui/wxpython/wxgui.py
Log:
wxGUI: launch ATM when creating new vector map
       (merge r47336 & r47337 from trunk)


Modified: grass/branches/develbranch_6/gui/wxpython/gui_modules/dbm.py
===================================================================
--- grass/branches/develbranch_6/gui/wxpython/gui_modules/dbm.py	2011-08-01 15:23:49 UTC (rev 47337)
+++ grass/branches/develbranch_6/gui/wxpython/gui_modules/dbm.py	2011-08-01 15:45:36 UTC (rev 47338)
@@ -51,10 +51,10 @@
 import utils
 import gdialogs
 import dbm_base
-from debug import Debug
+from debug       import Debug
 from dbm_dialogs import ModifyTableRecord
 from preferences import globalSettings as UserSettings
-
+from menuform    import GNotebook
 class Log:
     """
     The log output is redirected to the status bar of the containing frame.
@@ -526,13 +526,20 @@
         return True
     
 class AttributeManager(wx.Frame):
-    """
-    GRASS Attribute manager main window
-    """
-    def __init__(self, parent, id=wx.ID_ANY,
-                 size = wx.DefaultSize, style = wx.DEFAULT_FRAME_STYLE,
-                 title=None, vectorName=None, item=None, log=None):
+    def __init__(self, parent, id = wx.ID_ANY,
+                 title = None, vectorName = None, item = None, log = None,
+                 selection = None, **kwargs):
+        """!GRASS Attribute Table Manager window
 
+        @param parent parent window
+        @parem id window id
+        @param title window title or None for default title
+        @param vetorName name of vector map
+        @param item item from Layer Tree
+        @param log log window
+        @param selection name of page to be selected
+        @param kwagrs other wx.Frame's arguments
+        """
         self.vectorName = vectorName
         self.parent     = parent # GMFrame
         self.treeItem   = item   # item in layer tree
@@ -549,9 +556,9 @@
         else:
             self.editable = False
         
-        self.cmdLog     = log    # self.parent.goutput
+        self.cmdLog = log    # self.parent.goutput
         
-        wx.Frame.__init__(self, parent, id, style=style)
+        wx.Frame.__init__(self, parent, id, *kwargs)
 
         # title
         if not title:
@@ -604,22 +611,7 @@
         ### {layer: list, widgets...}
         self.layerPage = {}
 
-        # auinotebook (browse, manage, settings)
-        #self.notebook = wx.aui.AuiNotebook(parent=self, id=wx.ID_ANY,
-        #                                   style=wx.aui.AUI_NB_BOTTOM)
-        # really needed (ML)
-        # self.notebook.SetFont(wx.Font(10, wx.FONTFAMILY_MODERN, wx.NORMAL, wx.NORMAL, 0, ''))
-
-        if globalvar.hasAgw:
-            self.notebook = FN.FlatNotebook(parent = self.panel, id = wx.ID_ANY,
-                                            agwStyle = FN.FNB_BOTTOM |
-                                            FN.FNB_NO_NAV_BUTTONS |
-                                            FN.FNB_FANCY_TABS | FN.FNB_NO_X_BUTTON)
-        else:
-            self.notebook = FN.FlatNotebook(parent = self.panel, id = wx.ID_ANY,
-                                            style = FN.FNB_BOTTOM |
-                                            FN.FNB_NO_NAV_BUTTONS |
-                                            FN.FNB_FANCY_TABS | FN.FNB_NO_X_BUTTON)
+        self.notebook = GNotebook(self.panel, style = globalvar.FNPageDStyle)
         
         if globalvar.hasAgw:
             dbmStyle = { 'agwStyle' : globalvar.FNPageStyle }
@@ -628,22 +620,22 @@
         
         self.browsePage = FN.FlatNotebook(self.panel, id = wx.ID_ANY,
                                           **dbmStyle)
-        # self.notebook.AddPage(self.browsePage, caption=_("Browse data"))
-        self.notebook.AddPage(self.browsePage, text=_("Browse data")) # FN
+        self.notebook.AddPage(page = self.browsePage, text = _("Browse data"),
+                              name = 'browse')
         self.browsePage.SetTabAreaColour(globalvar.FNPageColor)
 
         self.manageTablePage = FN.FlatNotebook(self.panel, id = wx.ID_ANY,
                                                **dbmStyle)
-        #self.notebook.AddPage(self.manageTablePage, caption=_("Manage tables"))
-        self.notebook.AddPage(self.manageTablePage, text=_("Manage tables")) # FN
+        self.notebook.AddPage(page = self.manageTablePage, text = _("Manage tables"),
+                              name = 'table')
         if not self.editable:
             self.notebook.GetPage(self.notebook.GetPageCount()-1).Enable(False)
         self.manageTablePage.SetTabAreaColour(globalvar.FNPageColor)
 
         self.manageLayerPage = FN.FlatNotebook(self.panel, id = wx.ID_ANY,
                                                **dbmStyle)
-        #self.notebook.AddPage(self.manageLayerPage, caption=_("Manage layers"))
-        self.notebook.AddPage(self.manageLayerPage, text=_("Manage layers")) # FN
+        self.notebook.AddPage(page = self.manageLayerPage, text = _("Manage layers"),
+                              name = 'layers')
         self.manageLayerPage.SetTabAreaColour(globalvar.FNPageColor)
         if not self.editable:
             self.notebook.GetPage(self.notebook.GetPageCount()-1).Enable(False)
@@ -652,11 +644,10 @@
         self.__createManageTablePage()
         self.__createManageLayerPage()
 
-        self.notebook.SetSelection(0) # select browse tab
+        if selection:
+            wx.CallAfter(self.notebook.SetSelectionByName, selection) # select browse tab
 
-        #
         # buttons
-        #
         self.btnQuit   = wx.Button(parent=self.panel, id=wx.ID_EXIT)
         self.btnQuit.SetToolTipString(_("Close Attribute Table Manager"))
         self.btnReload = wx.Button(parent=self.panel, id=wx.ID_REFRESH)
@@ -2049,8 +2040,7 @@
         event.Skip()
 
     def OnExtractSelected(self, event):
-        """!
-        Extract vector objects selected in attribute browse window
+        """!Extract vector objects selected in attribute browse window
         to new vector map
         """
         list = self.FindWindowById(self.layerPage[self.layer]['data'])
@@ -2063,24 +2053,26 @@
             return
         else:
             # dialog to get file name
-            name, add = gdialogs.CreateNewVector(parent = self, title = _('Extract selected features'),
-                                                 log = self.cmdLog,
-                                                 cmd = (('v.extract',
-                                                         { 'input' : self.vectorName,
-                                                           'list' : utils.ListOfCatsToRange(cats) },
-                                                         'output')),
-                                                 disableTable = True)
-            if name and add:
+            dlg = gdialogs.CreateNewVector(parent = self, title = _('Extract selected features'),
+                                           log = self.cmdLog,
+                                           cmd = (('v.extract',
+                                                   { 'input' : self.vectorName,
+                                                     'list' : utils.ListOfCatsToRange(cats) },
+                                                   'output')),
+                                           disableTable = True)
+            if not dlg:
+                return
+            
+            name = dlg.GetName(full = True)
+            if name and dlg.IsChecked('add'):
                 # add layer to map layer tree
-                self.parent.curr_page.maptree.AddLayer(ltype='vector',
-                                                       lname=name,
-                                                       lchecked=True,
-                                                       lopacity=1.0,
-                                                       lcmd=['d.vect', 'map=%s' % name])
+                self.parent.curr_page.maptree.AddLayer(ltype = 'vector',
+                                                       lname = name,
+                                                       lcmd = ['d.vect', 'map=%s' % name])
+            dlg.Destroy()
             
     def OnDeleteSelected(self, event):
-        """
-        Delete vector objects selected in attribute browse window
+        """!Delete vector objects selected in attribute browse window
         (attribures and geometry)
         """
         list = self.FindWindowById(self.layerPage[self.layer]['data'])
@@ -2128,9 +2120,7 @@
     
     def UpdateDialog(self, layer):
         """!Updates dialog layout for given layer"""
-        #
         # delete page
-        #
         if layer in self.mapDBInfo.layers.keys():
             # delete page
             # draging pages disallowed
@@ -2140,7 +2130,7 @@
             self.browsePage.DeletePage(self.mapDBInfo.layers.keys().index(layer))
             self.manageTablePage.DeletePage(self.mapDBInfo.layers.keys().index(layer))
             # set current page selection
-            self.notebook.SetSelection(2)
+            self.notebook.SetSelectionByName('layers')
             
         # fetch fresh db info
         self.mapDBInfo = dbm_base.VectorDBInfo(self.vectorName)    
@@ -2154,7 +2144,7 @@
             # 'manage tables' page
             self.__createManageTablePage(layer)
             # set current page selection
-            self.notebook.SetSelection(2)
+            self.notebook.SetSelectionByName('layers')
             
         #
         # 'manage layers' page

Modified: grass/branches/develbranch_6/gui/wxpython/gui_modules/gdialogs.py
===================================================================
--- grass/branches/develbranch_6/gui/wxpython/gui_modules/gdialogs.py	2011-08-01 15:23:49 UTC (rev 47337)
+++ grass/branches/develbranch_6/gui/wxpython/gui_modules/gdialogs.py	2011-08-01 15:45:36 UTC (rev 47338)
@@ -215,14 +215,25 @@
         return self.GetElement()
     
 class NewVectorDialog(ElementDialog):
-    """!Dialog for creating new vector map"""
-    def __init__(self, parent, id, title, disableAdd=False, disableTable=False,
-                 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER):
+    def __init__(self, parent, id = wx.ID_ANY, title = _('Create new vector map'),
+                 disableAdd = False, disableTable = False,
+                 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, *kwargs):
+        """!Dialog for creating new vector map
+
+        @param parent parent window
+        @param id window id
+        @param title window title
+        @param disableAdd disable 'add layer' checkbox
+        @param disableTable disable 'create table' checkbox
+        @param style window style
+        @param kwargs other argumentes for ElementDialog
         
+        @return dialog instance       
+        """
         ElementDialog.__init__(self, parent, title, label = _("Name for new vector map:"))
         
-        self.element = gselect.Select(parent=self.panel, id=wx.ID_ANY, size=globalvar.DIALOG_GSELECT_SIZE,
-                                      type='vector', mapsets=[grass.gisenv()['MAPSET'],])
+        self.element = gselect.Select(parent = self.panel, id = wx.ID_ANY, size = globalvar.DIALOG_GSELECT_SIZE,
+                                      type = 'vector', mapsets = [grass.gisenv()['MAPSET'],])
         
         self.table = wx.CheckBox(parent = self.panel, id = wx.ID_ANY,
                                  label = _("Create attribute table"))
@@ -240,55 +251,86 @@
         
         self.PostInit()
         
-        self.__Layout()
+        self._layout()
         self.SetMinSize(self.GetSize())
         
     def OnMapName(self, event):
         """!Name for vector map layer given"""
         self.OnElement(event)
         
-    def __Layout(self):
+    def _layout(self):
         """!Do layout"""
-        self.dataSizer.Add(self.element, proportion=0,
-                      flag=wx.EXPAND | wx.ALL, border=1)
+        self.dataSizer.Add(self.element, proportion = 0,
+                      flag = wx.EXPAND | wx.ALL, border = 1)
         
-        self.dataSizer.Add(self.table, proportion=0,
-                      flag=wx.EXPAND | wx.ALL, border=1)
+        self.dataSizer.Add(self.table, proportion = 0,
+                      flag = wx.EXPAND | wx.ALL, border = 1)
         
         self.dataSizer.AddSpacer(5)
         
-        self.dataSizer.Add(item=self.addbox, proportion=0,
-                      flag=wx.EXPAND | wx.ALL, border=1)
+        self.dataSizer.Add(item = self.addbox, proportion = 0,
+                      flag = wx.EXPAND | wx.ALL, border = 1)
         
         self.panel.SetSizer(self.sizer)
         self.sizer.Fit(self)
 
-    def GetName(self):
-        """!Return (mapName, overwrite)"""
-        return self.GetElement().split('@', 1)[0]
-            
-def CreateNewVector(parent, cmd, title=_('Create new vector map'),
-                    exceptMap=None, log=None, disableAdd=False, disableTable=False):
+    def GetName(self, full = False):
+        """!Get name of vector map to be created
+
+        @param full True to get fully qualified name
+        """
+        name = self.GetElement()
+        if full:
+            if '@' in name:
+                return name
+            else:
+                return name + '@' + grass.gisenv()['MAPSET']
+        
+        return name.split('@', 1)[0]
+
+    def IsChecked(self, key):
+        """!Get dialog properties
+
+        @param key window key ('add', 'table')
+
+        @return True/False
+        @return None on error
+        """
+        if key == 'add':
+            return self.addbox.IsChecked()
+        elif key == 'table':
+            return self.table.IsChecked()
+        
+        return None
+    
+def CreateNewVector(parent, cmd, title = _('Create new vector map'),
+                    exceptMap = None, log = None, disableAdd = False, disableTable = False):
     """!Create new vector map layer
+    
+    @param cmd (prog, **kwargs)
+    @param title window title
+    @param exceptMap list of maps to be excepted
+    @param log
+    @param disableAdd disable 'add layer' checkbox
+    @param disableTable disable 'create table' checkbox
 
-    @cmd cmd (prog, **kwargs)
+    @return dialog instance
+    @return None on error
+    """
+    dlg = NewVectorDialog(parent, title = title,
+                          disableAdd = disableAdd, disableTable = disableTable)
     
-    @return tuple (name of create vector map, add to layer tree)
-    @return None of failure
-    """
-    dlg = NewVectorDialog(parent, wx.ID_ANY, title,
-                          disableAdd, disableTable)
     if dlg.ShowModal() == wx.ID_OK:
         outmap = dlg.GetName()
         if outmap == exceptMap:
-            wx.MessageBox(parent=parent,
-                          message=_("Unable to create vector map <%s>.") % outmap,
-                          caption=_("Error"),
-                          style=wx.ID_OK | wx.ICON_ERROR | wx.CENTRE)
-            return (None, None)
+            gcmd.GError(parent = parent,
+                        message = _("Unable to create vector map <%s>.") % outmap)
+            dlg.Destroy()
+            return None
         
         if outmap == '': # should not happen
-            return (None, None)
+            dlg.Destroy()
+            return None
         
         cmd[1][cmd[2]] = outmap
         
@@ -298,20 +340,21 @@
             listOfVectors = []
         
         overwrite = False
-        if not UserSettings.Get(group='cmd', key='overwrite', subkey='enabled') and \
+        if not UserSettings.Get(group = 'cmd', key = 'overwrite', subkey = 'enabled') and \
                 outmap in listOfVectors:
-            dlgOw = wx.MessageDialog(parent, message=_("Vector map <%s> already exists "
-                                                       "in the current mapset. "
-                                                       "Do you want to overwrite it?") % outmap,
-                                     caption=_("Overwrite?"),
-                                     style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
+            dlgOw = wx.MessageDialog(parent, message = _("Vector map <%s> already exists "
+                                                         "in the current mapset. "
+                                                         "Do you want to overwrite it?") % outmap,
+                                     caption = _("Overwrite?"),
+                                     style = wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
             if dlgOw.ShowModal() == wx.ID_YES:
                 overwrite = True
             else:
                 dlgOw.Destroy()
-                return (None, None)
-
-        if UserSettings.Get(group='cmd', key='overwrite', subkey='enabled') is True:
+                dlg.Destroy()
+                return None
+        
+        if UserSettings.Get(group = 'cmd', key = 'overwrite', subkey = 'enabled'):
             overwrite = True
         
         try:
@@ -321,13 +364,12 @@
         except gcmd.GException, e:
             gcmd.GError(parent = self,
                         message = e.value)
-            return (None, None)
+            dlg.Destroy()
+            return None
         
-        #
         # create attribute table
-        #
         if dlg.table.IsEnabled() and dlg.table.IsChecked():
-            key = UserSettings.Get(group='atm', key='keycolumn', subkey='value')
+            key = UserSettings.Get(group = 'atm', key = 'keycolumn', subkey = 'value')
             sql = 'CREATE TABLE %s (%s INTEGER)' % (outmap, key)
             
             gcmd.RunCommand('db.connect',
@@ -345,17 +387,17 @@
                             table = outmap,
                             key = key,
                             layer = '1')
-            
+        
         # return fully qualified map name
         if '@' not in outmap:
             outmap += '@' + grass.gisenv()['MAPSET']
-
+        
         if log:
             log.WriteLog(_("New vector map <%s> created") % outmap)
 
-        return (outmap, dlg.addbox.IsChecked())
+        return dlg
     
-    return (None, dlg.addbox.IsChecked())
+    return dlg
 
 class SavedRegion(wx.Dialog):
     def __init__(self, parent, id = wx.ID_ANY, title="", loadsave='load',

Modified: grass/branches/develbranch_6/gui/wxpython/gui_modules/toolbars.py
===================================================================
--- grass/branches/develbranch_6/gui/wxpython/gui_modules/toolbars.py	2011-08-01 15:23:49 UTC (rev 47337)
+++ grass/branches/develbranch_6/gui/wxpython/gui_modules/toolbars.py	2011-08-01 15:45:36 UTC (rev 47338)
@@ -973,34 +973,41 @@
                 openVectorMap = self.mapLayer.GetName(fullyQualified = False)['name']
             else:
                 openVectorMap = None
-            mapName = gdialogs.CreateNewVector(self.parent,
-                                               exceptMap = openVectorMap, log = self.log,
-                                               cmd = (('v.edit',
-                                                       { 'tool' : 'create' },
-                                                       'map')),
-                                               disableAdd = True)[0]
-            if mapName:
+            dlg = gdialogs.CreateNewVector(self.parent,
+                                           exceptMap = openVectorMap, log = self.log,
+                                           cmd = (('v.edit',
+                                                   { 'tool' : 'create' },
+                                                   'map')),
+                                           disableAdd = True)
+            
+            if dlg and dlg.GetName():
                 # add layer to map layer tree
                 if self.layerTree:
+                    mapName = dlg.GetName() + '@' + grass.gisenv()['MAPSET']
                     self.layerTree.AddLayer(ltype = 'vector',
                                             lname = mapName,
-                                            lchecked = True,
-                                            lopacity = 1.0,
                                             lcmd = ['d.vect', 'map=%s' % mapName])
                     
                     vectLayers = self.UpdateListOfLayers(updateTool = True)
                     selection = vectLayers.index(mapName)
-                else:
-                    pass # TODO (no Layer Manager)
+                
+                # create table ?
+                if dlg.IsChecked('table'):
+                    lmgr = self.parent.GetLayerManager()
+                    if lmgr:
+                        lmgr.OnShowAttributeTable(None, selection = 'table')
+                dlg.Destroy()
             else:
                 self.combo.SetValue(_('Select vector map'))
-                return 
+                if dlg:
+                    dlg.Destroy()
+                return
         else:
             selection = event.GetSelection() - 1 # first option is 'New vector map'
         
         # skip currently selected map
         if self.layers[selection] == self.mapLayer:
-            return False
+            return
         
         if self.mapLayer:
             # deactive map layer for editing
@@ -1010,9 +1017,7 @@
         self.StartEditing(self.layers[selection])
         
         event.Skip()
-
-        return True
-    
+        
     def StartEditing (self, mapLayer):
         """!Start editing selected vector map layer.
         
@@ -1134,7 +1139,7 @@
         Update list of available vector map layers.
         This list consists only editable layers (in the current mapset)
 
-        Optionally also update toolbar
+        @param updateTool True to update also toolbar
         """
         Debug.msg (4, "VDigitToolbar.UpdateListOfLayers(): updateTool=%d" % \
                    updateTool)
@@ -1148,6 +1153,7 @@
         layerNameList = []
         self.layers = self.mapcontent.GetListOfLayers(l_type = "vector",
                                                       l_mapset = grass.gisenv()['MAPSET'])
+        
         for layer in self.layers:
             if not layer.name in layerNameList: # do not duplicate layer
                 layerNameList.append (layer.GetName())

Modified: grass/branches/develbranch_6/gui/wxpython/wxgui.py
===================================================================
--- grass/branches/develbranch_6/gui/wxpython/wxgui.py	2011-08-01 15:23:49 UTC (rev 47337)
+++ grass/branches/develbranch_6/gui/wxpython/wxgui.py	2011-08-01 15:45:36 UTC (rev 47338)
@@ -634,18 +634,21 @@
         
     def OnNewVector(self, event):
         """!Create new vector map layer"""
-        name, add = gdialogs.CreateNewVector(self, log = self.goutput,
-                                             cmd = (('v.edit',
-                                                     { 'tool' : 'create' },
-                                                     'map')))
+        dlg = gdialogs.CreateNewVector(self, log = self.goutput,
+                                       cmd = (('v.edit',
+                                               { 'tool' : 'create' },
+                                               'map')))
         
-        if name and add:
+        if not dlg:
+            return
+        
+        name = dlg.GetName(full = True)
+        if name and dlg.IsChecked('add'):
             # add layer to map layer tree
             self.curr_page.maptree.AddLayer(ltype = 'vector',
                                             lname = name,
-                                            lchecked = True,
-                                            lopacity = 1.0,
                                             lcmd = ['d.vect', 'map=%s' % name])
+        dlg.Destroy()
         
     def OnAboutGRASS(self, event):
         """!Display 'About GRASS' dialog"""
@@ -1211,7 +1214,7 @@
                 
         dlg.Destroy()
         
-    def OnShowAttributeTable(self, event):
+    def OnShowAttributeTable(self, event, selection = None):
         """!Show attribute table of the given vector map layer
         """
         if not self.curr_page:
@@ -1248,7 +1251,8 @@
         
         dbmanager = dbm.AttributeManager(parent = self, id = wx.ID_ANY,
                                          size = wx.Size(500, 300),
-                                         item = layer, log = self.goutput)
+                                         item = layer, log = self.goutput,
+                                         selection = selection)
         
         busy.Destroy()
         



More information about the grass-commit mailing list