[GRASS-SVN] r42605 - in grass/branches/develbranch_6/gui/wxpython:
gui_modules icons
svn_grass at osgeo.org
svn_grass at osgeo.org
Sun Jun 20 14:59:16 EDT 2010
Author: martinl
Date: 2010-06-20 18:59:16 +0000 (Sun, 20 Jun 2010)
New Revision: 42605
Modified:
grass/branches/develbranch_6/gui/wxpython/gui_modules/profile.py
grass/branches/develbranch_6/gui/wxpython/gui_modules/toolbars.py
grass/branches/develbranch_6/gui/wxpython/icons/icon.py
Log:
wxGUI/profile: toolbar clean up, cosmetics in profile.py + doxygenization
profile.py sync'ed with trunk
(merge r42598 from trunk)
Modified: grass/branches/develbranch_6/gui/wxpython/gui_modules/profile.py
===================================================================
--- grass/branches/develbranch_6/gui/wxpython/gui_modules/profile.py 2010-06-20 18:31:34 UTC (rev 42604)
+++ grass/branches/develbranch_6/gui/wxpython/gui_modules/profile.py 2010-06-20 18:59:16 UTC (rev 42605)
@@ -1,4 +1,4 @@
-"""
+"""!
@package profile
Profile analysis of GRASS raster maps and images.
@@ -11,13 +11,13 @@
- TextDialog
- OptDialog
-COPYRIGHT: (C) 2007-2008 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.
+(C) 2007-2008 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.
+
@author Michael Barton
-Various updates: Martin Landa <landa.martin gmail.com>
+ at author Various updates by Martin Landa <landa.martin gmail.com>
"""
import os
@@ -31,22 +31,14 @@
import numpy
import wx.lib.plot as plot
except ImportError:
- msg= """
- This module requires the NumPy module, which could not be
- imported. It probably is not installed (it's not part of the
- standard Python distribution). See the Numeric Python site
- (http://numpy.scipy.org) for information on downloading source or
- binaries."""
+ msg= _("This module requires the NumPy module, which could not be "
+ "imported. It probably is not installed (it's not part of the "
+ "standard Python distribution). See the Numeric Python site "
+ "(http://numpy.scipy.org) for information on downloading source or "
+ "binaries.")
print >> sys.stderr, "profile.py: " + msg
import globalvar
-try:
- import subprocess
-except:
- CompatPath = os.path.join(globalvar.ETCWXDIR)
- sys.path.append(CompatPath)
- from compat import subprocess as subprocess
-
import render
import menuform
import disp_print
@@ -59,10 +51,8 @@
from grass.script import core as grass
class ProfileFrame(wx.Frame):
+ """!Mainframe for displaying profile of raster map. Uses wx.lib.plot.
"""
- Mainframe for displaying profile of raster map. Uses wx.lib.plot.
- """
-
def __init__(self, parent=None, id=wx.ID_ANY, title=_("Profile Analysis"),
rasterList=[],
pos=wx.DefaultPosition, size=wx.DefaultSize,
@@ -86,7 +76,7 @@
#
# Icon
#
- self.SetIcon(wx.Icon(os.path.join(globalvar.ETCICONDIR, 'grass_map.ico'), wx.BITMAP_TYPE_ICO))
+ self.SetIcon(wx.Icon(os.path.join(globalvar.ETCICONDIR, 'grass.ico'), wx.BITMAP_TYPE_ICO))
#
# Add toolbar
@@ -221,9 +211,8 @@
self.CentreOnScreen()
def OnDrawTransect(self, event):
+ """!Draws transect to profile in map display
"""
- Draws transect to profile in map display
- """
self.mapwin.polycoords = []
self.seglist = []
self.mapwin.ClearLines(self.mapwin.pdc)
@@ -239,10 +228,8 @@
self.mapwin.SetCursor(self.Parent.cursors["cross"])
def OnSelectRaster(self, event):
+ """!Select raster map(s) to profile
"""
- Select raster map(s) to profile
- """
-
dlg = SetRasterDialog(parent=self)
if dlg.ShowModal() == wx.ID_OK:
@@ -256,11 +243,9 @@
dlg.Destroy()
def SetRaster(self):
- """
- Create coordinate string for profiling. Create segment list for
+ """!Create coordinate string for profiling. Create segment list for
transect segment markers.
"""
-
#
# create list of coordinate points for r.profile
#
@@ -362,9 +347,8 @@
self.ylabel = self.ylabel.rstrip(',')
def SetGraphStyle(self):
+ """!Set plot and text options
"""
- Set plot and text options
- """
self.client.SetFont(self.properties['font']['wxfont'])
self.client.SetFontSizeTitle(self.properties['font']['prop']['titleSize'])
self.client.SetFontSizeAxis(self.properties['font']['prop']['axisSize'])
@@ -422,24 +406,19 @@
# self.client.SetPointLabelFunc(self.DrawPointLabel())
def CreateDatalist(self, raster, coords):
+ """!Build a list of distance, value pairs for points along transect
"""
- Build a list of distance, value pairs for points along transect
- """
datalist = []
- import subprocess
-
+
# keep total number of transect points to 500 or less to avoid
# freezing with large, high resolution maps
region = grass.region()
curr_res = min(float(region['nsres']),float(region['ewres']))
transect_rec = 0
- print "transect length = "+str(self.transect_length)
- print "current resolution = "+str(curr_res)
if self.transect_length / curr_res > 500:
transect_res = self.transect_length / 500
else: transect_res = curr_res
- print "transect resolution = "+str(transect_res)
-
+
try:
ret = gcmd.RunCommand("r.profile",
input=raster,
@@ -463,13 +442,12 @@
return None
def OnCreateProfile(self, event):
+ """!Main routine for creating a profile. Uses r.profile to
+ create a list of distance,cell value pairs. This is passed to
+ plot to create a line graph of the profile. If the profile
+ transect is in multiple segments, these are drawn as
+ points. Profile transect is drawn, using methods in mapdisp.py
"""
- Main routine for creating a profile. Uses r.profile to create a list
- of distance,cell value pairs. This is passed to plot to create a
- line graph of the profile. If the profile transect is in multiple
- segments, these are drawn as points. Profile transect is drawn, using
- methods in mapdisp.py
- """
if len(self.mapwin.polycoords) == 0 or self.raster[0]['name'] == '':
dlg = wx.MessageDialog(parent=self,
@@ -494,11 +472,9 @@
self.mapwin.mouse['box'] = 'point'
def DrawPlot(self):
- """
- Draw line and point plot from transect datalist and
+ """!Draw line and point plot from transect datalist and
transect segment endpoint coordinates.
"""
-
# graph the distance, value pairs for the transect
self.plotlist = []
if len(self.seglist) > 0 :
@@ -546,44 +522,36 @@
self.properties['y-axis']['axis'])
def OnZoom(self, event):
+ """!Enable zooming and disable dragging
"""
- Enable zooming and disable dragging
- """
-
self.zoom = True
self.drag = False
self.client.SetEnableZoom(self.zoom)
self.client.SetEnableDrag(self.drag)
def OnDrag(self, event):
+ """!Enable dragging and disable zooming
"""
- Enable dragging and disable zooming
- """
-
self.zoom = False
self.drag = True
self.client.SetEnableDrag(self.drag)
self.client.SetEnableZoom(self.zoom)
def OnRedraw(self, event):
+ """!Redraw the profile window. Unzoom to original size
"""
- Redraw the profile window. Unzoom to original size
- """
self.client.Reset()
self.client.Redraw()
def Update(self):
+ """!Update profile after changing options
"""
- Update profile after changing options
- """
-
self.SetGraphStyle()
self.DrawPlot()
def OnErase(self, event):
+ """!Erase the profile window
"""
- Erase the profile window
- """
self.client.Clear()
self.mapwin.ClearLines(self.mapwin.pdc)
self.mapwin.ClearLines(self.mapwin.pdcTmp)
@@ -597,21 +565,53 @@
# pass
def SaveToFile(self, event):
+ """!Save profile to graphics file
"""
- Save profile to graphics file
- """
self.client.SaveFile()
+ def SaveProfileToFile(self, event):
+ """!Save r.profile data to a csv file
+ """
+ wildcard = _("Comma separated value (*.csv)|*.csv")
+
+ dlg = wx.FileDialog(
+ self, message=_("Path and prefix (for raster name) to save profile values..."),
+ defaultDir=os.getcwd(),
+ defaultFile="", wildcard=wildcard, style=wx.SAVE
+ )
+ if dlg.ShowModal() == wx.ID_OK:
+ path = dlg.GetPath()
+
+ for r in self.raster.itervalues():
+ if r['name'] == '':
+ continue
+
+ print 'path = '+str(path)
+ pfile = path+'_'+str(r['name'])+'.csv'
+ print 'pfile1 = '+str(pfile)
+ try:
+ file = open(pfile, "w")
+ except IOError:
+ wx.MessageBox(parent=self,
+ message=_("Unable to open file <%s> for writing.") % pfile,
+ caption=_("Error"), style=wx.OK | wx.ICON_ERROR | wx.CENTRE)
+ return False
+ for datapair in r['datalist']:
+ file.write('%d,%d\n' % (float(datapair[0]),float(datapair[1])))
+
+ file.close()
+
+ dlg.Destroy()
+
def DrawPointLabel(self, dc, mDataDict):
- """!This is the fuction that defines how the pointLabels are plotted
- dc - DC that will be passed
- mDataDict - Dictionary of data that you want to use for the pointLabel
+ """!This is the fuction that defines how the pointLabels are
+ plotted dc - DC that will be passed mDataDict - Dictionary
+ of data that you want to use for the pointLabel
- As an example I have decided I want a box at the curve point
- with some text information about the curve plotted below.
- Any wxDC method can be used.
+ As an example I have decided I want a box at the curve
+ point with some text information about the curve plotted
+ below. Any wxDC method can be used.
"""
- # ----------
dc.SetPen(wx.Pen(wx.BLACK))
dc.SetBrush(wx.Brush( wx.BLACK, wx.SOLID ) )
@@ -624,7 +624,6 @@
#make a string to display
s = "Crv# %i, '%s', Pt. (%.2f,%.2f), PtInd %i" %(cNum, legend, px, py, pntIn)
dc.DrawText(s, sx , sy+1)
- # -----------
def OnMouseLeftDown(self,event):
s= "Left Mouse Down at Point: (%.4f, %.4f)" % self.client._getXY(event)
@@ -649,10 +648,8 @@
event.Skip() #go to next handler
def ProfileOptionsMenu(self, event):
+ """!Popup menu for profile and text options
"""
- Popup menu for profile and text options
- """
-
point = wx.GetMousePosition()
popt = wx.Menu()
# Add items to the menu
@@ -670,19 +667,18 @@
popt.Destroy()
def NotFunctional(self):
+ """!Creates a 'not functional' message dialog
"""
- Creates a 'not functional' message dialog
- """
-
- dlg = wx.MessageDialog(self, 'This feature is not yet functional',
- 'Under Construction', wx.OK | wx.ICON_INFORMATION)
+ dlg = wx.MessageDialog(parent = self,
+ message = _('This feature is not yet functional'),
+ caption = _('Under Construction'),
+ style = wx.OK | wx.ICON_INFORMATION)
dlg.ShowModal()
dlg.Destroy()
def OnPText(self, dlg):
+ """!Use user's provided profile text settings.
"""
- Use user's provided profile text settings.
- """
self.ptitle = dlg.ptitle
self.xlabel = dlg.xlabel
self.ylabel = dlg.ylabel
@@ -700,10 +696,8 @@
self.OnRedraw(event=None)
def PText(self, event):
+ """!Set custom text values for profile title and axis labels.
"""
- Set custom text values for profile
- title and axis labels.
- """
dlg = TextDialog(parent=self, id=wx.ID_ANY, title=_('Profile text settings'))
if dlg.ShowModal() == wx.ID_OK:
@@ -712,11 +706,10 @@
dlg.Destroy()
def POptions(self, event):
+ """!Set various profile options, including: line width, color,
+ style; marker size, color, fill, and style; grid and legend
+ options. Calls OptDialog class.
"""
- Set various profile options, including: line width, color, style;
- marker size, color, fill, and style; grid and legend options.
- Calls OptDialog class.
- """
dlg = OptDialog(parent=self, id=wx.ID_ANY, title=_('Profile settings'))
btnval = dlg.ShowModal()
@@ -728,9 +721,8 @@
dlg.Destroy()
def PrintMenu(self, event):
+ """!Print options and output menu
"""
- Print options and output menu
- """
point = wx.GetMousePosition()
printmenu = wx.Menu()
# Add items to the menu
@@ -782,9 +774,8 @@
def __init__(self, parent, id=wx.ID_ANY, title=_("Select raster map to profile"),
pos=wx.DefaultPosition, size=wx.DefaultSize,
style=wx.DEFAULT_DIALOG_STYLE):
+ """!Dialog to select raster maps to profile.
"""
- Dialog to select raster maps to profile.
- """
wx.Dialog.__init__(self, parent, id, title, pos, size, style)
@@ -864,11 +855,10 @@
class TextDialog(wx.Dialog):
def __init__(self, parent, id, title, pos=wx.DefaultPosition, size=wx.DefaultSize,
style=wx.DEFAULT_DIALOG_STYLE):
- wx.Dialog.__init__(self, parent, id, title, pos, size, style)
- """
- Dialog to set profile text options: font, title
+ """!Dialog to set profile text options: font, title
and font size, axis labels and font size
"""
+ wx.Dialog.__init__(self, parent, id, title, pos, size, style)
#
# initialize variables
#
@@ -1116,12 +1106,12 @@
class OptDialog(wx.Dialog):
def __init__(self, parent, id, title, pos=wx.DefaultPosition, size=wx.DefaultSize,
- style=wx.DEFAULT_DIALOG_STYLE):
- wx.Dialog.__init__(self, parent, id, title, pos, size, style)
+ style=wx.DEFAULT_DIALOG_STYLE):
+ """!Dialog to set various profile options, including: line
+ width, color, style; marker size, color, fill, and style; grid
+ and legend options.
"""
- Dialog to set various profile options, including: line width, color, style;
- marker size, color, fill, and style; grid and legend options.
- """
+ wx.Dialog.__init__(self, parent, id, title, pos, size, style)
# init variables
self.pstyledict = parent.pstyledict
self.ptfilldict = parent.ptfilldict
Modified: grass/branches/develbranch_6/gui/wxpython/gui_modules/toolbars.py
===================================================================
--- grass/branches/develbranch_6/gui/wxpython/gui_modules/toolbars.py 2010-06-20 18:31:34 UTC (rev 42604)
+++ grass/branches/develbranch_6/gui/wxpython/gui_modules/toolbars.py 2010-06-20 18:59:16 UTC (rev 42605)
@@ -1267,8 +1267,7 @@
return self.mapLayer
class ProfileToolbar(AbstractToolbar):
- """!
- Toolbar for profiling raster map
+ """!Toolbar for profiling raster map
"""
def __init__(self, parent):
AbstractToolbar.__init__(self, parent)
@@ -1288,6 +1287,7 @@
self.zoom = wx.NewId()
self.unzoom = wx.NewId()
self.erase = wx.NewId()
+ self.datasave = wx.NewId()
self.save = wx.NewId()
self.printer = wx.NewId()
self.quit = wx.NewId()
@@ -1300,12 +1300,13 @@
(self.transect, 'transect', Icons["transect"].GetBitmap(),
wx.ITEM_NORMAL, Icons["transect"].GetLabel(), Icons["transect"].GetDesc(),
self.parent.OnDrawTransect),
+ ("", "", "", "", "", "", ""),
(self.draw, 'profiledraw', Icons["profiledraw"].GetBitmap(),
wx.ITEM_NORMAL, Icons["profiledraw"].GetLabel(), Icons["profiledraw"].GetDesc(),
self.parent.OnCreateProfile),
- (self.options, 'options', Icons["profileopt"].GetBitmap(),
- wx.ITEM_NORMAL, Icons["profileopt"].GetLabel(), Icons["profileopt"].GetDesc(),
- self.parent.ProfileOptionsMenu),
+ (self.erase, 'erase', Icons["erase"].GetBitmap(),
+ wx.ITEM_NORMAL, Icons["erase"].GetLabel(), Icons["erase"].GetDesc(),
+ self.parent.OnErase),
(self.drag, 'drag', Icons['pan'].GetBitmap(),
wx.ITEM_NORMAL, Icons["pan"].GetLabel(), Icons["pan"].GetDesc(),
self.parent.OnDrag),
@@ -1315,16 +1316,20 @@
(self.unzoom, 'unzoom', Icons['zoom_back'].GetBitmap(),
wx.ITEM_NORMAL, Icons["zoom_back"].GetLabel(), Icons["zoom_back"].GetDesc(),
self.parent.OnRedraw),
- (self.erase, 'erase', Icons["erase"].GetBitmap(),
- wx.ITEM_NORMAL, Icons["erase"].GetLabel(), Icons["erase"].GetDesc(),
- self.parent.OnErase),
("", "", "", "", "", "", ""),
- (self.save, 'save', Icons["savefile"].GetBitmap(),
+ (self.datasave, 'save data', Icons["datasave"].GetBitmap(),
+ wx.ITEM_NORMAL, Icons["datasave"].GetLabel(), Icons["datasave"].GetDesc(),
+ self.parent.SaveProfileToFile),
+ (self.save, 'save image', Icons["savefile"].GetBitmap(),
wx.ITEM_NORMAL, Icons["savefile"].GetLabel(), Icons["savefile"].GetDesc(),
self.parent.SaveToFile),
(self.printer, 'print', Icons["printmap"].GetBitmap(),
wx.ITEM_NORMAL, Icons["printmap"].GetLabel(), Icons["printmap"].GetDesc(),
self.parent.PrintMenu),
+ ("", "", "", "", "", "", ""),
+ (self.options, 'options', Icons["profileopt"].GetBitmap(),
+ wx.ITEM_NORMAL, Icons["profileopt"].GetLabel(), Icons["profileopt"].GetDesc(),
+ self.parent.ProfileOptionsMenu),
(self.quit, 'quit', Icons["quit"].GetBitmap(),
wx.ITEM_NORMAL, Icons["quit"].GetLabel(), Icons["quit"].GetDesc(),
self.parent.OnQuit),
Modified: grass/branches/develbranch_6/gui/wxpython/icons/icon.py
===================================================================
--- grass/branches/develbranch_6/gui/wxpython/icons/icon.py 2010-06-20 18:31:34 UTC (rev 42604)
+++ grass/branches/develbranch_6/gui/wxpython/icons/icon.py 2010-06-20 18:59:16 UTC (rev 42605)
@@ -300,6 +300,8 @@
label=_("Draw/re-draw profile")),
"profileopt" : MetaIcon (img=Icons["settings"],
label=_("Profile options")),
+ "datasave" : MetaIcon (img=Icons["fileSave"],
+ label=_("Save profile data to csv file")),
"histogram" : MetaIcon (img=Icons["histogram"],
label=_("Create histogram of image or raster file")),
"font" : MetaIcon (img=Icons["font"],
More information about the grass-commit
mailing list