rules.py 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. """
  2. MODULE: rules.py
  3. CLASSES:
  4. * RulesText
  5. PURPOSE: Dialog for interactive entry of rules for r.colors,
  6. r.reclass, r.recode, and v.reclass
  7. AUTHORS: The GRASS Development Team
  8. Michael Barton (Arizona State University)
  9. COPYRIGHT: (C) 2007 by the GRASS Development Team
  10. This program is free software under the GNU General Public
  11. License (>=v2). Read the file COPYING that comes with GRASS
  12. for details.
  13. """
  14. import os
  15. import sys
  16. import wx
  17. import gcmd
  18. import gselect
  19. class RulesText(wx.Dialog):
  20. def __init__(self, parent, id=wx.ID_ANY, title=_("Enter rules"),
  21. pos=wx.DefaultPosition, size=wx.DefaultSize,
  22. style=wx.DEFAULT_DIALOG_STYLE,
  23. cmd=None):
  24. wx.Dialog.__init__(self, parent, id, title, pos, size, style)
  25. """
  26. Dialog for interactively entering rules
  27. for map management commands
  28. @param cmd command (given as list)
  29. """
  30. self.parent = parent
  31. self.cmd = cmd # map management command
  32. self.inmap = '' # input map to change
  33. self.outmap = '' # output map for reclass/recode
  34. self.rules = '' # rules for changing
  35. self.overwrite = False
  36. if self.cmd[0] == 'r.colors':
  37. label1 = _('Create new color table using color rules')
  38. label2 = _('Raster map:')
  39. label3 = None
  40. label4 = _('Enter color rules')
  41. seltype = 'cell'
  42. elif self.cmd[0] == 'r.reclass':
  43. label1 = _('Reclassify raster map using rules')
  44. label2 = _('Raster map to reclassify:')
  45. label3 = _('Reclassified raster map:')
  46. label4 = _('Enter reclassification rules')
  47. seltype = 'cell'
  48. elif self.cmd[0] == 'r.recode':
  49. label1 = _('Recode raster map using rules')
  50. label2 = _('Raster map to recode:')
  51. label3 = _('Recoded raster map:')
  52. label4 = _('Enter recoding rules')
  53. seltype = 'cell'
  54. elif self.cmd[0] == 'v.reclass':
  55. label1 = _('Reclassify vector map using SQL rules')
  56. label2 = _('Vector map to reclassify:')
  57. label3 = _('Reclassified vector map:')
  58. label4 = _('Enter reclassification rules')
  59. seltype = 'vector'
  60. # set window frame title
  61. self.SetTitle(label1)
  62. sizer = wx.BoxSizer(wx.VERTICAL)
  63. boxSizer = wx.GridBagSizer(hgap=5, vgap=5)
  64. boxSizer.AddGrowableCol(0)
  65. row = 0
  66. boxSizer.Add(item=wx.StaticText(parent=self, id=wx.ID_ANY, label=label2),
  67. flag=wx.ALIGN_CENTER_VERTICAL,
  68. pos=(row,0))
  69. self.selectionInput = gselect.Select(parent=self, id=wx.ID_ANY, size=(300,-1),
  70. type=seltype)
  71. boxSizer.Add(item=self.selectionInput,
  72. pos=(row,1))
  73. row += 1
  74. if self.cmd[0] != 'r.colors':
  75. boxSizer.Add(item=wx.StaticText(parent=self, id=wx.ID_ANY, label=label3),
  76. flag=wx.ALIGN_CENTER_VERTICAL,
  77. pos=(row, 0))
  78. self.selectionOutput = gselect.Select(parent=self, id=wx.ID_ANY, size=(300,-1),
  79. type=seltype)
  80. self.selectionOutput.Bind(wx.EVT_TEXT, self.OnSelectionOutput)
  81. boxSizer.Add(item=self.selectionOutput,
  82. pos=(row,1))
  83. row += 1
  84. # TODO remove (see Preferences dialog)
  85. self.ovrwrtcheck = wx.CheckBox(parent=self, id=wx.ID_ANY, label=_('overwrite existing file'))
  86. self.ovrwrtcheck.SetValue(self.overwrite)
  87. boxSizer.Add(item=self.ovrwrtcheck,
  88. pos=(row, 1))
  89. self.Bind(wx.EVT_CHECKBOX, self.OnOverwrite, self.ovrwrtcheck)
  90. row += 1
  91. boxSizer.Add(item=wx.StaticText(parent=self, id=wx.ID_ANY, label=label4),
  92. flag=wx.ALIGN_CENTER_VERTICAL,
  93. pos=(row, 0))
  94. helpbtn = wx.Button(parent=self, id=wx.ID_HELP)
  95. boxSizer.Add(item=helpbtn, flag=wx.ALIGN_RIGHT, pos=(row, 1))
  96. row += 1
  97. self.rulestxt = wx.TextCtrl(parent=self, id=wx.ID_ANY, value='',
  98. pos=wx.DefaultPosition, size=(400,150),
  99. style=wx.TE_MULTILINE |
  100. wx.HSCROLL |
  101. wx.TE_NOHIDESEL)
  102. self.rulestxt.SetFont(wx.Font(10, wx.FONTFAMILY_MODERN, wx.NORMAL, wx.NORMAL, 0, ''))
  103. boxSizer.Add(item=self.rulestxt, pos=(row, 0), flag=wx.EXPAND, span=(1, 2))
  104. sizer.Add(item=boxSizer, proportion=1,
  105. flag=wx.ALL ,border=10)
  106. line = wx.StaticLine(parent=self, id=wx.ID_ANY, size=(20,-1), style=wx.LI_HORIZONTAL)
  107. sizer.Add(item=line, proportion=0,
  108. flag=wx.GROW | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5)
  109. btnsizer = wx.StdDialogButtonSizer()
  110. btn = wx.Button(self, wx.ID_OK)
  111. btn.SetDefault()
  112. btnsizer.AddButton(btn)
  113. btn = wx.Button(self, wx.ID_CANCEL)
  114. btnsizer.AddButton(btn)
  115. btnsizer.Realize()
  116. sizer.Add(item=btnsizer, proportion=0,
  117. flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5)
  118. self.SetSizer(sizer)
  119. sizer.Fit(self)
  120. # bindings
  121. self.Bind(wx.EVT_BUTTON, self.OnHelp, helpbtn)
  122. self.selectionInput.Bind(wx.EVT_TEXT, self.OnSelectionInput)
  123. self.Bind(wx.EVT_TEXT, self.OnRules, self.rulestxt)
  124. def OnSelectionInput(self, event):
  125. self.inmap = event.GetString()
  126. def OnSelectionOutput(self, event):
  127. self.outmap = event.GetString()
  128. def OnRules(self, event):
  129. self.rules = event.GetString().strip()
  130. if self.cmd[0] == 'r.recode':
  131. self.rules = self.rules + '%s' % os.linesep
  132. def OnHelp(self, event):
  133. gcmd.Command(['g.manual',
  134. '--quiet',
  135. '%s' % self.cmd[0]])
  136. def OnOverwrite(self, event):
  137. self.overwrite = event.IsChecked()