123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- """
- MODULE: rules.py
- CLASSES:
- * RulesText
- PURPOSE: Dialog for interactive entry of rules for r.colors,
- r.reclass, r.recode, and v.reclass
- AUTHORS: The GRASS Development Team
- Michael Barton (Arizona State University)
- COPYRIGHT: (C) 2007 by the GRASS Development Team
- This program is free software under the GNU General Public
- License (>=v2). Read the file COPYING that comes with GRASS
- for details.
- """
- import os
- import sys
- import wx
- import gcmd
- import gselect
- import globalvar
- class RulesText(wx.Dialog):
- def __init__(self, parent, id=wx.ID_ANY, title=_("Enter rules"),
- pos=wx.DefaultPosition, size=wx.DefaultSize,
- style=wx.DEFAULT_DIALOG_STYLE,
- cmd=None):
- wx.Dialog.__init__(self, parent, id, title, pos, size, style)
- """
- Dialog for interactively entering rules
- for map management commands
- @param cmd command (given as list)
- """
- self.parent = parent
- self.cmd = cmd # map management command
- self.inmap = '' # input map to change
- self.outmap = '' # output map for reclass/recode
- self.rules = '' # rules for changing
- self.overwrite = False
- if self.cmd[0] == 'r.colors':
- label1 = _('Create new color table using color rules')
- label2 = _('Raster map:')
- label3 = None
- label4 = _('Enter color rules')
- seltype = 'cell'
- elif self.cmd[0] == 'r.reclass':
- label1 = _('Reclassify raster map using rules')
- label2 = _('Raster map to reclassify:')
- label3 = _('Reclassified raster map:')
- label4 = _('Enter reclassification rules')
- seltype = 'cell'
- elif self.cmd[0] == 'r.recode':
- label1 = _('Recode raster map using rules')
- label2 = _('Raster map to recode:')
- label3 = _('Recoded raster map:')
- label4 = _('Enter recoding rules')
- seltype = 'cell'
- elif self.cmd[0] == 'v.reclass':
- label1 = _('Reclassify vector map using SQL rules')
- label2 = _('Vector map to reclassify:')
- label3 = _('Reclassified vector map:')
- label4 = _('Enter reclassification rules')
- seltype = 'vector'
- # set window frame title
- self.SetTitle(label1)
- sizer = wx.BoxSizer(wx.VERTICAL)
- boxSizer = wx.GridBagSizer(hgap=5, vgap=5)
- boxSizer.AddGrowableCol(0)
- row = 0
- boxSizer.Add(item=wx.StaticText(parent=self, id=wx.ID_ANY, label=label2),
- flag=wx.ALIGN_CENTER_VERTICAL,
- pos=(row,0))
- self.selectionInput = gselect.Select(parent=self, id=wx.ID_ANY, size=globalvar.DIALOG_GSELECT_SIZE,
- type=seltype)
- boxSizer.Add(item=self.selectionInput,
- pos=(row,1))
- row += 1
- if self.cmd[0] != 'r.colors':
- boxSizer.Add(item=wx.StaticText(parent=self, id=wx.ID_ANY, label=label3),
- flag=wx.ALIGN_CENTER_VERTICAL,
- pos=(row, 0))
- self.selectionOutput = gselect.Select(parent=self, id=wx.ID_ANY, size=(300,-1),
- type=seltype)
- self.selectionOutput.Bind(wx.EVT_TEXT, self.OnSelectionOutput)
- boxSizer.Add(item=self.selectionOutput,
- pos=(row,1))
- row += 1
- # TODO remove (see Preferences dialog)
- self.ovrwrtcheck = wx.CheckBox(parent=self, id=wx.ID_ANY, label=_('overwrite existing file'))
- self.ovrwrtcheck.SetValue(self.overwrite)
- boxSizer.Add(item=self.ovrwrtcheck,
- pos=(row, 1))
- self.Bind(wx.EVT_CHECKBOX, self.OnOverwrite, self.ovrwrtcheck)
- row += 1
- boxSizer.Add(item=wx.StaticText(parent=self, id=wx.ID_ANY, label=label4),
- flag=wx.ALIGN_CENTER_VERTICAL,
- pos=(row, 0))
- helpbtn = wx.Button(parent=self, id=wx.ID_HELP)
- boxSizer.Add(item=helpbtn, flag=wx.ALIGN_RIGHT, pos=(row, 1))
- row += 1
- self.rulestxt = wx.TextCtrl(parent=self, id=wx.ID_ANY, value='',
- pos=wx.DefaultPosition, size=(400,150),
- style=wx.TE_MULTILINE |
- wx.HSCROLL |
- wx.TE_NOHIDESEL)
- self.rulestxt.SetFont(wx.Font(10, wx.FONTFAMILY_MODERN, wx.NORMAL, wx.NORMAL, 0, ''))
- boxSizer.Add(item=self.rulestxt, pos=(row, 0), flag=wx.EXPAND, span=(1, 2))
- sizer.Add(item=boxSizer, proportion=1,
- flag=wx.ALL ,border=10)
- line = wx.StaticLine(parent=self, id=wx.ID_ANY, size=(20,-1), style=wx.LI_HORIZONTAL)
- sizer.Add(item=line, proportion=0,
- flag=wx.GROW | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5)
- btnsizer = wx.StdDialogButtonSizer()
- btn = wx.Button(self, wx.ID_OK)
- btn.SetDefault()
- btnsizer.AddButton(btn)
- btn = wx.Button(self, wx.ID_CANCEL)
- btnsizer.AddButton(btn)
- btnsizer.Realize()
- sizer.Add(item=btnsizer, proportion=0,
- flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5)
- self.SetSizer(sizer)
- sizer.Fit(self)
- # bindings
- self.Bind(wx.EVT_BUTTON, self.OnHelp, helpbtn)
- self.selectionInput.Bind(wx.EVT_TEXT, self.OnSelectionInput)
- self.Bind(wx.EVT_TEXT, self.OnRules, self.rulestxt)
- def OnSelectionInput(self, event):
- self.inmap = event.GetString()
- def OnSelectionOutput(self, event):
- self.outmap = event.GetString()
- def OnRules(self, event):
- self.rules = event.GetString().strip()
- if self.cmd[0] == 'r.recode':
- self.rules = self.rules + '%s' % os.linesep
- def OnHelp(self, event):
- gcmd.RunCommand('g.manual',
- quiet = True,
- entry = self.cmd[0])
- def OnOverwrite(self, event):
- self.overwrite = event.IsChecked()
|