|
@@ -28,6 +28,7 @@ from core.giface import StandaloneGrassInterface
|
|
|
from core.utils import _
|
|
|
from gui_core.gselect import Select
|
|
|
from gui_core.forms import GUI
|
|
|
+from gui_core.widgets import IntegerValidator
|
|
|
from core.settings import UserSettings
|
|
|
|
|
|
class MapCalcFrame(wx.Frame):
|
|
@@ -230,7 +231,18 @@ class MapCalcFrame(wx.Frame):
|
|
|
self.overwrite = wx.CheckBox(parent = self.panel, id = wx.ID_ANY,
|
|
|
label=_("Allow output files to overwrite existing files"))
|
|
|
self.overwrite.SetValue(UserSettings.Get(group='cmd', key='overwrite', subkey='enabled'))
|
|
|
+
|
|
|
+ self.randomSeed = wx.CheckBox(parent=self.panel,
|
|
|
+ label=_("Generate random seed for rand()"))
|
|
|
+ self.randomSeedStaticText = wx.StaticText(parent=self.panel, label=_("Seed:"))
|
|
|
+ self.randomSeedText = wx.TextCtrl(parent=self.panel, size=(100, -1),
|
|
|
+ validator=IntegerValidator())
|
|
|
+ self.randomSeedText.SetToolTipString(_("Integer seed for rand() function"))
|
|
|
+ self.randomSeed.SetValue(True)
|
|
|
+ self.randomSeedStaticText.Disable()
|
|
|
+ self.randomSeedText.Disable()
|
|
|
|
|
|
+
|
|
|
self.addbox = wx.CheckBox(parent=self.panel,
|
|
|
label=_('Add created raster map into layer tree'), style = wx.NO_BORDER)
|
|
|
self.addbox.SetValue(UserSettings.Get(group='cmd', key='addNewLayer', subkey='enabled'))
|
|
@@ -258,6 +270,9 @@ class MapCalcFrame(wx.Frame):
|
|
|
self.newmaptxt.Bind(wx.EVT_TEXT, self.OnUpdateStatusBar)
|
|
|
self.text_mcalc.Bind(wx.EVT_TEXT, self.OnUpdateStatusBar)
|
|
|
self.overwrite.Bind(wx.EVT_CHECKBOX, self.OnUpdateStatusBar)
|
|
|
+ self.randomSeed.Bind(wx.EVT_CHECKBOX, self.OnUpdateStatusBar)
|
|
|
+ self.randomSeed.Bind(wx.EVT_CHECKBOX, self.OnSeedFlag)
|
|
|
+ self.randomSeedText.Bind(wx.EVT_TEXT, self.OnUpdateStatusBar)
|
|
|
|
|
|
self._layout()
|
|
|
|
|
@@ -379,7 +394,17 @@ class MapCalcFrame(wx.Frame):
|
|
|
border = 5)
|
|
|
sizer.Add(item = buttonSizer4, proportion = 0,
|
|
|
flag = wx.ALIGN_RIGHT | wx.ALL, border = 3)
|
|
|
-
|
|
|
+
|
|
|
+ randomSizer = wx.BoxSizer(wx.HORIZONTAL)
|
|
|
+ randomSizer.Add(item=self.randomSeed, proportion=0,
|
|
|
+ flag=wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, border=20)
|
|
|
+ randomSizer.Add(item=self.randomSeedStaticText, proportion=0,
|
|
|
+ flag=wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, border=5)
|
|
|
+ randomSizer.Add(item=self.randomSeedText, proportion=0)
|
|
|
+ sizer.Add(item=randomSizer, proportion=0,
|
|
|
+ flag=wx.LEFT | wx.RIGHT,
|
|
|
+ border=5)
|
|
|
+
|
|
|
sizer.Add(item = self.overwrite, proportion = 0,
|
|
|
flag = wx.LEFT | wx.RIGHT,
|
|
|
border = 5)
|
|
@@ -458,6 +483,13 @@ class MapCalcFrame(wx.Frame):
|
|
|
self.SetStatusText(command)
|
|
|
event.Skip()
|
|
|
|
|
|
+ def OnSeedFlag(self, event):
|
|
|
+ checked = self.randomSeed.IsChecked()
|
|
|
+ self.randomSeedText.Enable(not checked)
|
|
|
+ self.randomSeedStaticText.Enable(not checked)
|
|
|
+
|
|
|
+ event.Skip()
|
|
|
+
|
|
|
def _getCommand(self):
|
|
|
"""Returns entire command as string."""
|
|
|
expr = self.text_mcalc.GetValue().strip().replace("\n", " ")
|
|
@@ -467,9 +499,16 @@ class MapCalcFrame(wx.Frame):
|
|
|
overwrite = ''
|
|
|
if self.overwrite.IsChecked():
|
|
|
overwrite = ' --overwrite'
|
|
|
- return '{cmd} "{new} = {expr}"{overwrite}'.format(cmd=cmd, expr=expr,
|
|
|
- new=self.newmaptxt.GetValue(),
|
|
|
- overwrite=overwrite)
|
|
|
+ seed_flag = seed = ''
|
|
|
+ if re.search(pattern="rand *\(.+\)", string=expr):
|
|
|
+ if self.randomSeed.IsChecked():
|
|
|
+ seed_flag = ' -s'
|
|
|
+ else:
|
|
|
+ seed = " seed={val}".format(val=self.randomSeedText.GetValue().strip())
|
|
|
+
|
|
|
+ return ('{cmd} "{new} = {expr}"{seed}{seed_flag}{overwrite}'
|
|
|
+ .format(cmd=cmd, expr=expr, new=self.newmaptxt.GetValue(),
|
|
|
+ seed_flag=seed_flag, seed=seed, overwrite=overwrite))
|
|
|
|
|
|
def _addSomething(self, what):
|
|
|
"""Inserts operators, map names, and functions into text area
|
|
@@ -520,11 +559,23 @@ class MapCalcFrame(wx.Frame):
|
|
|
message = _("You must enter an expression "
|
|
|
"to create a new raster map."))
|
|
|
return
|
|
|
-
|
|
|
+
|
|
|
+ seed_flag = seed = None
|
|
|
+ if re.search(pattern="rand *\(.+\)", string=expr):
|
|
|
+ if self.randomSeed.IsChecked():
|
|
|
+ seed_flag = '-s'
|
|
|
+ else:
|
|
|
+ seed = self.randomSeedText.GetValue().strip()
|
|
|
if self.log:
|
|
|
- cmd = [self.cmd, str('expression=%s = %s' % (name, expr))]
|
|
|
+ cmd = [self.cmd]
|
|
|
+ if seed_flag:
|
|
|
+ cmd.append('-s')
|
|
|
+ if seed:
|
|
|
+ cmd.append("seed={val}".format(val=seed))
|
|
|
if self.overwrite.IsChecked():
|
|
|
cmd.append('--overwrite')
|
|
|
+ cmd.append(str('expression=%s = %s' % (name, expr)))
|
|
|
+
|
|
|
self.log.RunCmd(cmd, onDone = self.OnDone)
|
|
|
self.parent.Raise()
|
|
|
else:
|
|
@@ -532,10 +583,16 @@ class MapCalcFrame(wx.Frame):
|
|
|
overwrite = True
|
|
|
else:
|
|
|
overwrite = False
|
|
|
+ params = dict(expression="%s=%s" % (name, expr),
|
|
|
+ overwrite=overwrite)
|
|
|
+ if seed_flag:
|
|
|
+ params['flags'] = 's'
|
|
|
+ if seed:
|
|
|
+ params['seed'] = seed
|
|
|
+
|
|
|
RunCommand(self.cmd,
|
|
|
- expression = "%s=%s" % (name, expr),
|
|
|
- overwrite = overwrite)
|
|
|
-
|
|
|
+ **params)
|
|
|
+
|
|
|
def OnDone(self, cmd, returncode):
|
|
|
"""Add create map to the layer tree
|
|
|
|