|
@@ -252,6 +252,12 @@ class NewVectorDialog(ElementDialog):
|
|
|
if disableTable:
|
|
|
self.table.Enable(False)
|
|
|
|
|
|
+ self.keycol = wx.TextCtrl(parent = self.panel, id = wx.ID_ANY,
|
|
|
+ size = globalvar.DIALOG_SPIN_SIZE)
|
|
|
+ self.keycol.SetValue(UserSettings.Get(group = 'atm', key = 'keycolumn', subkey = 'value'))
|
|
|
+ if disableTable:
|
|
|
+ self.keycol.Enable(False)
|
|
|
+
|
|
|
self.addbox = wx.CheckBox(parent = self.panel,
|
|
|
label = _('Add created map into layer tree'), style = wx.NO_BORDER)
|
|
|
if disableAdd:
|
|
@@ -259,6 +265,8 @@ class NewVectorDialog(ElementDialog):
|
|
|
self.addbox.Enable(False)
|
|
|
else:
|
|
|
self.addbox.SetValue(UserSettings.Get(group = 'cmd', key = 'addNewLayer', subkey = 'enabled'))
|
|
|
+
|
|
|
+ self.table.Bind(wx.EVT_CHECKBOX, self.OnTable)
|
|
|
|
|
|
self.PostInit()
|
|
|
|
|
@@ -269,6 +277,9 @@ class NewVectorDialog(ElementDialog):
|
|
|
"""!Name for vector map layer given"""
|
|
|
self.OnElement(event)
|
|
|
|
|
|
+ def OnTable(self, event):
|
|
|
+ self.keycol.Enable(event.IsChecked())
|
|
|
+
|
|
|
def _layout(self):
|
|
|
"""!Do layout"""
|
|
|
self.dataSizer.Add(item = self.element, proportion = 0,
|
|
@@ -280,7 +291,17 @@ class NewVectorDialog(ElementDialog):
|
|
|
|
|
|
self.dataSizer.Add(item = self.table, proportion = 0,
|
|
|
flag = wx.EXPAND | wx.ALL, border = 1)
|
|
|
-
|
|
|
+
|
|
|
+ keySizer = wx.BoxSizer(wx.HORIZONTAL)
|
|
|
+ keySizer.Add(item = wx.StaticText(parent = self.panel, label = _("Key column:")),
|
|
|
+ proportion = 0,
|
|
|
+ flag = wx.ALIGN_CENTER_VERTICAL)
|
|
|
+ keySizer.AddSpacer(10)
|
|
|
+ keySizer.Add(item = self.keycol, proportion = 0,
|
|
|
+ flag = wx.ALIGN_RIGHT)
|
|
|
+ self.dataSizer.Add(item = keySizer, proportion = 1,
|
|
|
+ flag = wx.EXPAND | wx.ALL, border = 1)
|
|
|
+
|
|
|
self.dataSizer.AddSpacer(5)
|
|
|
|
|
|
self.dataSizer.Add(item = self.addbox, proportion = 0,
|
|
@@ -303,6 +324,10 @@ class NewVectorDialog(ElementDialog):
|
|
|
|
|
|
return name.split('@', 1)[0]
|
|
|
|
|
|
+ def GetKey(self):
|
|
|
+ """!Get key column name"""
|
|
|
+ return self.keycol.GetValue()
|
|
|
+
|
|
|
def IsChecked(self, key):
|
|
|
"""!Get dialog properties
|
|
|
|
|
@@ -354,101 +379,108 @@ def CreateNewVector(parent, cmd, title = _('Create new vector map'),
|
|
|
disableAdd = disableAdd, disableTable = disableTable,
|
|
|
showType = showType)
|
|
|
|
|
|
- if dlg.ShowModal() == wx.ID_OK:
|
|
|
- outmap = dlg.GetName()
|
|
|
- if outmap == exceptMap:
|
|
|
- gcmd.GError(parent = parent,
|
|
|
- message = _("Unable to create vector map <%s>.") % outmap)
|
|
|
- dlg.Destroy()
|
|
|
- return None
|
|
|
-
|
|
|
- if outmap == '': # should not happen
|
|
|
- dlg.Destroy()
|
|
|
- return None
|
|
|
+ if dlg.ShowModal() != wx.ID_OK:
|
|
|
+ dlg.Destroy()
|
|
|
+ return None
|
|
|
|
|
|
- # update cmd -> output name defined
|
|
|
- cmd[1][cmd[2]] = outmap
|
|
|
- if showType:
|
|
|
- cmd[1]['type'] = dlg.GetFeatureType()
|
|
|
+ outmap = dlg.GetName()
|
|
|
+ key = dlg.GetKey()
|
|
|
+ if outmap == exceptMap:
|
|
|
+ gcmd.GError(parent = parent,
|
|
|
+ message = _("Unable to create vector map <%s>.") % outmap)
|
|
|
+ dlg.Destroy()
|
|
|
+ return None
|
|
|
+ if dlg.table.IsEnabled() and not key:
|
|
|
+ gcmd.GError(parent = parent,
|
|
|
+ message = _("Invalid or empty key column.\n"
|
|
|
+ "Unable to create vector map <%s>.") % outmap)
|
|
|
+ dlg.Destroy()
|
|
|
+ return
|
|
|
|
|
|
- if isNative:
|
|
|
- listOfVectors = grass.list_grouped('vect')[grass.gisenv()['MAPSET']]
|
|
|
- else:
|
|
|
- listOfVectors = gcmd.RunCommand('v.external',
|
|
|
- quiet = True,
|
|
|
- parent = parent,
|
|
|
- read = True,
|
|
|
- flags = 'l',
|
|
|
- dsn = vExternalOut['dsn'])
|
|
|
-
|
|
|
- overwrite = False
|
|
|
- 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)
|
|
|
- if dlgOw.ShowModal() == wx.ID_YES:
|
|
|
- overwrite = True
|
|
|
- else:
|
|
|
- dlgOw.Destroy()
|
|
|
- dlg.Destroy()
|
|
|
- return None
|
|
|
+ if outmap == '': # should not happen
|
|
|
+ dlg.Destroy()
|
|
|
+ return None
|
|
|
+
|
|
|
+ # update cmd -> output name defined
|
|
|
+ cmd[1][cmd[2]] = outmap
|
|
|
+ if showType:
|
|
|
+ cmd[1]['type'] = dlg.GetFeatureType()
|
|
|
|
|
|
- if UserSettings.Get(group = 'cmd', key = 'overwrite', subkey = 'enabled'):
|
|
|
+ if isNative:
|
|
|
+ listOfVectors = grass.list_grouped('vect')[grass.gisenv()['MAPSET']]
|
|
|
+ else:
|
|
|
+ listOfVectors = gcmd.RunCommand('v.external',
|
|
|
+ quiet = True,
|
|
|
+ parent = parent,
|
|
|
+ read = True,
|
|
|
+ flags = 'l',
|
|
|
+ dsn = vExternalOut['dsn'])
|
|
|
+
|
|
|
+ overwrite = False
|
|
|
+ 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)
|
|
|
+ if dlgOw.ShowModal() == wx.ID_YES:
|
|
|
overwrite = True
|
|
|
-
|
|
|
- ret = gcmd.RunCommand(prog = cmd[0],
|
|
|
- parent = parent,
|
|
|
- overwrite = overwrite,
|
|
|
- **cmd[1])
|
|
|
- if ret != 0:
|
|
|
+ else:
|
|
|
+ dlgOw.Destroy()
|
|
|
dlg.Destroy()
|
|
|
return None
|
|
|
|
|
|
- if not isNative:
|
|
|
- # create link for OGR layers
|
|
|
- gcmd.RunCommand('v.external',
|
|
|
- overwrite = overwrite,
|
|
|
+ if UserSettings.Get(group = 'cmd', key = 'overwrite', subkey = 'enabled'):
|
|
|
+ overwrite = True
|
|
|
+
|
|
|
+ ret = gcmd.RunCommand(prog = cmd[0],
|
|
|
+ parent = parent,
|
|
|
+ overwrite = overwrite,
|
|
|
+ **cmd[1])
|
|
|
+ if ret != 0:
|
|
|
+ dlg.Destroy()
|
|
|
+ return None
|
|
|
+
|
|
|
+ if not isNative:
|
|
|
+ # create link for OGR layers
|
|
|
+ gcmd.RunCommand('v.external',
|
|
|
+ overwrite = overwrite,
|
|
|
+ parent = parent,
|
|
|
+ dsn = vExternalOut['dsn'],
|
|
|
+ layer = outmap)
|
|
|
+
|
|
|
+ # create attribute table
|
|
|
+ if dlg.table.IsEnabled() and dlg.table.IsChecked():
|
|
|
+ if isNative:
|
|
|
+ sql = 'CREATE TABLE %s (%s INTEGER)' % (outmap, key)
|
|
|
+
|
|
|
+ gcmd.RunCommand('db.connect',
|
|
|
+ flags = 'c')
|
|
|
+
|
|
|
+ Debug.msg(1, "SQL: %s" % sql)
|
|
|
+ gcmd.RunCommand('db.execute',
|
|
|
+ quiet = True,
|
|
|
parent = parent,
|
|
|
- dsn = vExternalOut['dsn'],
|
|
|
- layer = outmap)
|
|
|
+ input = '-',
|
|
|
+ stdin = sql)
|
|
|
|
|
|
- # create attribute table
|
|
|
- if dlg.table.IsEnabled() and dlg.table.IsChecked():
|
|
|
- key = UserSettings.Get(group = 'atm', key = 'keycolumn', subkey = 'value')
|
|
|
- if isNative:
|
|
|
- sql = 'CREATE TABLE %s (%s INTEGER)' % (outmap, key)
|
|
|
-
|
|
|
- gcmd.RunCommand('db.connect',
|
|
|
- flags = 'c')
|
|
|
-
|
|
|
- Debug.msg(1, "SQL: %s" % sql)
|
|
|
- gcmd.RunCommand('db.execute',
|
|
|
- quiet = True,
|
|
|
- parent = parent,
|
|
|
- input = '-',
|
|
|
- stdin = sql)
|
|
|
-
|
|
|
- gcmd.RunCommand('v.db.connect',
|
|
|
- quiet = True,
|
|
|
- parent = parent,
|
|
|
- map = outmap,
|
|
|
- table = outmap,
|
|
|
- key = key,
|
|
|
- layer = '1')
|
|
|
- # TODO: how to deal with attribute tables for OGR layers?
|
|
|
+ gcmd.RunCommand('v.db.connect',
|
|
|
+ quiet = True,
|
|
|
+ parent = parent,
|
|
|
+ map = outmap,
|
|
|
+ table = outmap,
|
|
|
+ key = key,
|
|
|
+ layer = '1')
|
|
|
+ # TODO: how to deal with attribute tables for OGR layers?
|
|
|
|
|
|
- # return fully qualified map name
|
|
|
- if '@' not in outmap:
|
|
|
- outmap += '@' + grass.gisenv()['MAPSET']
|
|
|
+ # return fully qualified map name
|
|
|
+ if '@' not in outmap:
|
|
|
+ outmap += '@' + grass.gisenv()['MAPSET']
|
|
|
+
|
|
|
+ if log:
|
|
|
+ log.WriteLog(_("New vector map <%s> created") % outmap)
|
|
|
|
|
|
- if log:
|
|
|
- log.WriteLog(_("New vector map <%s> created") % outmap)
|
|
|
-
|
|
|
- return dlg
|
|
|
-
|
|
|
return dlg
|
|
|
|
|
|
class SavedRegion(wx.Dialog):
|