[GRASS-SVN] r53052 - grass/branches/develbranch_6/gui/wxpython/wxplot
svn_grass at osgeo.org
svn_grass at osgeo.org
Sat Sep 1 17:03:19 PDT 2012
Author: cmbarton
Date: 2012-09-01 17:03:18 -0700 (Sat, 01 Sep 2012)
New Revision: 53052
Modified:
grass/branches/develbranch_6/gui/wxpython/wxplot/base.py
grass/branches/develbranch_6/gui/wxpython/wxplot/dialogs.py
grass/branches/develbranch_6/gui/wxpython/wxplot/profile.py
Log:
wxplot-fixing profile, backporting from release branch r53025 r53048 r53049 r53050
Modified: grass/branches/develbranch_6/gui/wxpython/wxplot/base.py
===================================================================
--- grass/branches/develbranch_6/gui/wxpython/wxplot/base.py 2012-09-01 23:10:34 UTC (rev 53051)
+++ grass/branches/develbranch_6/gui/wxpython/wxplot/base.py 2012-09-02 00:03:18 UTC (rev 53052)
@@ -51,7 +51,7 @@
wx.Frame.__init__(self, parent, id, size = size, style = style, **kwargs)
- self.parent = parent # MapFrame
+ self.parent = parent # MapFrame for a plot type
self.mapwin = self.parent.MapWindow
self.Map = Map() # instance of render.Map to be associated with display
self.rasterList = rasterList #list of rasters to plot
@@ -123,9 +123,8 @@
def InitPlotOpts(self, plottype):
"""!Initialize options for entire plot
- """
-
- self.plottype = plottype # histogram, profile, or scatter
+ """
+ self.plottype = plottype # profile
self.properties = {} # plot properties
self.properties['font'] = {}
@@ -134,11 +133,17 @@
wx.FONTSTYLE_NORMAL,
wx.FONTWEIGHT_NORMAL)
+ self.properties['raster'] = {}
+ self.properties['raster'] = UserSettings.Get(group = self.plottype, key = 'raster')
+ colstr = str(self.properties['raster']['pcolor'])
+ self.properties['raster']['pcolor'] = tuple(int(colval) for colval in colstr.strip('()').split(','))
+
if self.plottype == 'profile':
self.properties['marker'] = UserSettings.Get(group = self.plottype, key = 'marker')
# changing color string to tuple for markers/points
colstr = str(self.properties['marker']['color'])
self.properties['marker']['color'] = tuple(int(colval) for colval in colstr.strip('()').split(','))
+
self.properties['grid'] = UserSettings.Get(group = self.plottype, key = 'grid')
colstr = str(self.properties['grid']['color']) # changing color string to tuple
@@ -176,6 +181,8 @@
rdict = {} # initialize a dictionary
+ self.properties['raster'] = UserSettings.Get(group = self.plottype, key = 'raster')
+
for r in rasterList:
idx = rasterList.index(r)
@@ -185,23 +192,41 @@
continue
# if r.info cannot parse map, skip it
- self.raster[r] = UserSettings.Get(group = plottype, key = 'raster') # some default settings
+ self.raster[r] = self.properties['raster'] # some default settings
rdict[r] = {} # initialize sub-dictionaries for each raster in the list
-
rdict[r]['units'] = ''
if ret['units'] not in ('(none)', '"none"', '', None):
rdict[r]['units'] = ret['units']
rdict[r]['plegend'] = r.split('@')[0]
- rdict[r]['datalist'] = [] # list of cell value,frequency pairs for plotting histogram
+ rdict[r]['datalist'] = [] # list of cell value,frequency pairs for plotting
rdict[r]['pline'] = None
rdict[r]['datatype'] = ret['datatype']
- rdict[r]['pwidth'] = 1
- rdict[r]['pstyle'] = 'solid'
-
+
+ #
+ #initialize with saved values
+ #
+ if self.properties['raster']['pwidth'] != None:
+ rdict[r]['pwidth'] = self.properties['raster']['pwidth']
+ else:
+ rdict[r]['pwidth'] = 1
+
+ if self.properties['raster']['pstyle'] != None and \
+ self.properties['raster']['pstyle'] != '':
+ rdict[r]['pstyle'] = self.properties['raster']['pstyle']
+ else:
+ rdict[r]['pstyle'] = 'solid'
+
if idx <= len(self.colorList):
- rdict[r]['pcolor'] = self.colorDict[self.colorList[idx]]
+ if idx == 0:
+ # use saved color for first plot
+ if self.properties['raster']['pcolor'] != None:
+ rdict[r]['pcolor'] = self.properties['raster']['pcolor']
+ else:
+ rdict[r]['pcolor'] = self.colorDict[self.colorList[idx]]
+ else:
+ rdict[r]['pcolor'] = self.colorDict[self.colorList[idx]]
else:
r = randint(0, 255)
b = randint(0, 255)
@@ -209,56 +234,7 @@
rdict[r]['pcolor'] = ((r,g,b,255))
return rdict
-
- def InitRasterPairs(self, rasterList, plottype):
- """!Initialize or update raster dictionary with raster pairs for
- bivariate scatterplots
- """
-
- if len(rasterList) == 0: return
- rdict = {} # initialize a dictionary
- for rpair in rasterList:
- idx = rasterList.index(rpair)
-
- try:
- ret0 = grass.raster_info(rpair[0])
- ret1 = grass.raster_info(rpair[1])
-
- except:
- continue
- # if r.info cannot parse map, skip it
-
- self.raster[rpair] = UserSettings.Get(group = plottype, key = 'rasters') # some default settings
- rdict[rpair] = {} # initialize sub-dictionaries for each raster in the list
- rdict[rpair][0] = {}
- rdict[rpair][1] = {}
- rdict[rpair][0]['units'] = ''
- rdict[rpair][1]['units'] = ''
-
- if ret0['units'] not in ('(none)', '"none"', '', None):
- rdict[rpair][0]['units'] = ret0['units']
- if ret1['units'] not in ('(none)', '"none"', '', None):
- rdict[rpair][1]['units'] = ret1['units']
-
- rdict[rpair]['plegend'] = rpair[0].split('@')[0] + ' vs ' + rpair[1].split('@')[0]
- rdict[rpair]['datalist'] = [] # list of cell value,frequency pairs for plotting histogram
- rdict[rpair]['ptype'] = 'dot'
- rdict[rpair][0]['datatype'] = ret0['datatype']
- rdict[rpair][1]['datatype'] = ret1['datatype']
- rdict[rpair]['psize'] = 1
- rdict[rpair]['pfill'] = 'solid'
-
- if idx <= len(self.colorList):
- rdict[rpair]['pcolor'] = self.colorDict[self.colorList[idx]]
- else:
- r = randint(0, 255)
- b = randint(0, 255)
- g = randint(0, 255)
- rdict[rpair]['pcolor'] = ((r,g,b,255))
-
- return rdict
-
def SetGraphStyle(self):
"""!Set plot and text options
"""
@@ -295,26 +271,32 @@
self.properties['y-axis']['prop']['max'])
else:
self.properties['y-axis']['axis'] = None
-
- self.client.SetEnableGrid(self.properties['grid']['enabled'])
-
- self.client.SetGridColour(wx.Color(self.properties['grid']['color'][0],
- self.properties['grid']['color'][1],
- self.properties['grid']['color'][2],
- 255))
-
- self.client.SetFontSizeLegend(self.properties['font']['prop']['legendSize'])
- self.client.SetEnableLegend(self.properties['legend']['enabled'])
-
+
if self.properties['x-axis']['prop']['log'] == True:
self.properties['x-axis']['axis'] = None
self.client.SetXSpec('min')
if self.properties['y-axis']['prop']['log'] == True:
self.properties['y-axis']['axis'] = None
self.client.SetYSpec('min')
-
+
self.client.setLogScale((self.properties['x-axis']['prop']['log'],
self.properties['y-axis']['prop']['log']))
+
+ #
+ # grid settings
+ #
+ self.client.SetEnableGrid(self.properties['grid']['enabled'])
+
+ self.client.SetGridColour(wx.Color(self.properties['grid']['color'][0],
+ self.properties['grid']['color'][1],
+ self.properties['grid']['color'][2],
+ 255))
+
+ #
+ # legend settings
+ #
+ self.client.SetFontSizeLegend(self.properties['font']['prop']['legendSize'])
+ self.client.SetEnableLegend(self.properties['legend']['enabled'])
def DrawPlot(self, plotlist):
"""!Draw line and point plot from list plot elements.
@@ -424,6 +406,7 @@
"""
point = wx.GetMousePosition()
popt = wx.Menu()
+
# Add items to the menu
settext = wx.MenuItem(popt, wx.ID_ANY, _('Text settings'))
popt.AppendItem(settext)
@@ -449,12 +432,11 @@
dlg.Destroy()
def OnPlotText(self, dlg):
- """!Custom text settings for histogram plot.
+ """!Custom text settings.
"""
self.ptitle = dlg.ptitle
self.xlabel = dlg.xlabel
self.ylabel = dlg.ylabel
- dlg.UpdateSettings()
self.client.SetFont(self.properties['font']['wxfont'])
self.client.SetFontSizeTitle(self.properties['font']['prop']['titleSize'])
@@ -464,7 +446,7 @@
self.plot.setTitle(dlg.ptitle)
self.plot.setXLabel(dlg.xlabel)
self.plot.setYLabel(dlg.ylabel)
-
+
self.OnRedraw(event = None)
def PlotText(self, event):
@@ -474,27 +456,25 @@
plottype = self.plottype,
title = _('Histogram text settings'))
- if dlg.ShowModal() == wx.ID_OK:
- self.OnPlotText(dlg)
+ btnval = dlg.ShowModal()
+ if btnval == wx.ID_SAVE or btnval == wx.ID_OK or btnval == wx.ID_CANCEL:
+ dlg.Destroy()
- dlg.Destroy()
def PlotOptions(self, event):
"""!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,
plottype = self.plottype,
title = _('Plot settings'))
+
btnval = dlg.ShowModal()
- if btnval == wx.ID_SAVE:
- dlg.UpdateSettings()
- self.SetGraphStyle()
+ if btnval == wx.ID_SAVE or btnval == wx.ID_OK or btnval == wx.ID_CANCEL:
dlg.Destroy()
- elif btnval == wx.ID_CANCEL:
- dlg.Destroy()
def PrintMenu(self, event):
"""!Print options and output menu
Modified: grass/branches/develbranch_6/gui/wxpython/wxplot/dialogs.py
===================================================================
--- grass/branches/develbranch_6/gui/wxpython/wxplot/dialogs.py 2012-09-01 23:10:34 UTC (rev 53051)
+++ grass/branches/develbranch_6/gui/wxpython/wxplot/dialogs.py 2012-09-02 00:03:18 UTC (rev 53052)
@@ -5,7 +5,9 @@
Classes:
- dialogs::ProfileRasterDialog
+ - dialogs::ScatterRasterDialog
- dialogs::PlotStatsFrame
+ - dialogs::HistRasterDialog
- dialogs::TextDialog
- dialogs::OptDialog
@@ -98,7 +100,7 @@
"""
self.rasterList = []
self.rasterList = event.GetString().split(',')
-
+
class PlotStatsFrame(wx.Frame):
def __init__(self, parent, id, message = '', title = '',
style = wx.DEFAULT_FRAME_STYLE, **kwargs):
@@ -194,9 +196,9 @@
self.Close(True)
class TextDialog(wx.Dialog):
- def __init__(self, parent, id, title,
+ def __init__(self, parent, id, title, plottype = '',
style = wx.DEFAULT_DIALOG_STYLE, **kwargs):
- """!Dialog to set profile text options: font, title
+ """!Dialog to set plot text options: font, title
and font size, axis labels and font size
"""
wx.Dialog.__init__(self, parent, id, title, style = style, **kwargs)
@@ -221,6 +223,7 @@
'bold' : wx.FONTWEIGHT_BOLD }
self.parent = parent
+ self.plottype = plottype
self.ptitle = self.parent.ptitle
self.xlabel = self.parent.xlabel
@@ -234,7 +237,7 @@
self.fontweight = self.properties['font']['wxfont'].GetWeight()
self._do_layout()
-
+
def _do_layout(self):
"""!Do layout"""
# dialog layout
@@ -315,7 +318,7 @@
label1 = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Font family:"))
gridSizer.Add(item = label1, flag = wx.ALIGN_CENTER_VERTICAL, pos = (0, 0))
self.ffamilycb = wx.ComboBox(parent = self, id = wx.ID_ANY, size = (250, -1),
- choices = self.ffamilydict.keys(), style = wx.CB_DROPDOWN)
+ choices = self.ffamilydict.keys(), style = wx.CB_DROPDOWN)
self.ffamilycb.SetStringSelection('swiss')
for item in self.ffamilydict.items():
if self.fontfamily == item[1]:
@@ -368,7 +371,7 @@
btnCancel = wx.Button(self, wx.ID_CANCEL)
btnOk.SetDefault()
- # bindigs
+ # bindings
btnApply.Bind(wx.EVT_BUTTON, self.OnApply)
btnApply.SetToolTipString(_("Apply changes for the current session"))
btnOk.Bind(wx.EVT_BUTTON, self.OnOk)
@@ -423,22 +426,22 @@
def OnSave(self, event):
"""!Button 'Save' pressed"""
- self.UpdateSettings()
+ self.OnApply(None)
fileSettings = {}
UserSettings.ReadSettingsFile(settings = fileSettings)
- fileSettings['profile'] = UserSettings.Get(group = 'profile')
- file = UserSettings.SaveToFile(fileSettings)
- self.parent.parent.GetLayerManager().goutput.WriteLog(_('Profile settings saved to file \'%s\'.') % file)
+ fileSettings[self.plottype] = UserSettings.Get(group = self.plottype)
+ UserSettings.SaveToFile(fileSettings)
+ self.parent.parent.GetLayerManager().goutput.WriteLog(_('Plot text sizes saved to file \'%s\'.') % UserSettings.filePath)
self.EndModal(wx.ID_OK)
def OnApply(self, event):
"""!Button 'Apply' pressed"""
self.UpdateSettings()
- self.parent.OnPText(self)
+ self.parent.OnPlotText(self)
def OnOk(self, event):
"""!Button 'OK' pressed"""
- self.UpdateSettings()
+ self.OnApply(None)
self.EndModal(wx.ID_OK)
def OnCancel(self, event):
@@ -446,17 +449,21 @@
self.EndModal(wx.ID_CANCEL)
class OptDialog(wx.Dialog):
- def __init__(self, parent, id, title,
- style = wx.DEFAULT_DIALOG_STYLE, **kwargs):
- """!Dialog to set various profile options, including: line
+ def __init__(self, parent, id, title, plottype = '',
+ style = wx.DEFAULT_DIALOG_STYLE, **kwargs):
+ """!Dialog to set various options for data plotted, including: line
width, color, style; marker size, color, fill, and style; grid
and legend options.
"""
wx.Dialog.__init__(self, parent, id, title, style = style, **kwargs)
+
# init variables
- self.pstyledict = parent.pstyledict
+ self.parent = parent
+ self.linestyledict = parent.linestyledict
self.ptfilldict = parent.ptfilldict
-
+ self.parent = parent
+ self.plottype = plottype
+
self.pttypelist = ['circle',
'dot',
'square',
@@ -476,88 +483,114 @@
# read-only
self.raster = self.parent.raster
+ self.rasterList = self.parent.rasterList
self.properties = self.parent.properties
+ self.map = ''
+ if len(self.rasterList) == 0:
+ wx.MessageBox(parent = self,
+ message = _("No map or image group selected to plot."),
+ caption = _("Warning"), style = wx.OK | wx.ICON_ERROR)
+
self._do_layout()
-
+
def _do_layout(self):
- """!Do layout"""
- # dialog layout
+ """!Options dialog layout
+ """
sizer = wx.BoxSizer(wx.VERTICAL)
+ box = wx.StaticBox(parent = self, id = wx.ID_ANY,
+ label = " %s " % _("Plot settings"))
+ boxMainSizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
+
+ self.wxId['pcolor'] = 0
+ self.wxId['pwidth'] = 0
+ self.wxId['pstyle'] = 0
+ self.wxId['psize'] = 0
+ self.wxId['ptype'] = 0
+ self.wxId['pfill'] = 0
+ self.wxId['plegend'] = 0
+ self.wxId['marker'] = {}
+ self.wxId['x-axis'] = {}
+ self.wxId['y-axis'] = {}
+
#
- # profile line settings
+ # plot line settings and point settings
#
+ if len(self.rasterList) == 0: return
+
box = wx.StaticBox(parent = self, id = wx.ID_ANY,
- label = " %s " % _("Profile line settings"))
- boxMainSizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
+ label = _("Map/image plotted"))
+ boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
+
+ gridSizer = wx.GridBagSizer(vgap = 5, hgap = 5)
+
+ row = 0
+ choicelist = []
+ for i in self.rasterList:
+ choicelist.append(str(i))
- idx = 1
- self.wxId['pcolor'] = []
- self.wxId['pwidth'] = []
- self.wxId['pstyle'] = []
- self.wxId['plegend'] = []
- for r in self.raster.itervalues():
- box = wx.StaticBox(parent = self, id = wx.ID_ANY,
- label = " %s %d " % (_("Profile"), idx))
- boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
+ self.mapchoice = wx.Choice(parent = self, id = wx.ID_ANY, size = (300, -1),
+ choices = choicelist)
+ self.mapchoice.SetToolTipString(_("Settings for selected map"))
+
+ if not self.map:
+ self.map = self.rasterList[self.mapchoice.GetCurrentSelection()]
+ else:
+ self.mapchoice.SetStringSelection(str(self.map))
- gridSizer = wx.GridBagSizer(vgap = 5, hgap = 5)
- row = 0
- label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Line color"))
- gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (row, 0))
- pcolor = csel.ColourSelect(parent = self, id = wx.ID_ANY, colour = r['prop']['pcolor'])
- self.wxId['pcolor'].append(pcolor.GetId())
- gridSizer.Add(item = pcolor, pos = (row, 1))
+
+ gridSizer.Add(item = self.mapchoice, flag = wx.ALIGN_CENTER_VERTICAL,
+ pos = (row, 0), span = (1, 2))
+
+ #
+ # options for profile
+ #
+ row +=1
+ label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Line color"))
+ gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (row, 0))
+ color = csel.ColourSelect(parent = self, id = wx.ID_ANY, colour = self.raster[self.map]['pcolor'])
+ self.wxId['pcolor'] = color.GetId()
+ gridSizer.Add(item = color, pos = (row, 1))
- row += 1
- label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Line width"))
- gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (row, 0))
- pwidth = wx.SpinCtrl(parent = self, id = wx.ID_ANY, value = "",
- size = (50,-1), style = wx.SP_ARROW_KEYS)
- pwidth.SetRange(1, 10)
- pwidth.SetValue(r['prop']['pwidth'])
- self.wxId['pwidth'].append(pwidth.GetId())
- gridSizer.Add(item = pwidth, pos = (row, 1))
+ row += 1
+ label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Line width"))
+ gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (row, 0))
+ width = wx.SpinCtrl(parent = self, id = wx.ID_ANY, value = "",
+ size = (50,-1), style = wx.SP_ARROW_KEYS)
+ width.SetRange(1, 10)
+ width.SetValue(self.raster[self.map]['pwidth'])
+ self.wxId['pwidth'] = width.GetId()
+ gridSizer.Add(item = width, pos = (row, 1))
- row +=1
- label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Line style"))
- gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (row, 0))
- pstyle = wx.ComboBox(parent = self, id = wx.ID_ANY,
- size = (120, -1), choices = self.pstyledict.keys(), style = wx.CB_DROPDOWN)
- pstyle.SetStringSelection(r['prop']['pstyle'])
- self.wxId['pstyle'].append(pstyle.GetId())
- gridSizer.Add(item = pstyle, pos = (row, 1))
+ row +=1
+ label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Line style"))
+ gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (row, 0))
+ style = wx.Choice(parent = self, id = wx.ID_ANY,
+ size = (120, -1), choices = self.linestyledict.keys())
+ style.SetStringSelection(self.raster[self.map]['pstyle'])
+ self.wxId['pstyle'] = style.GetId()
+ gridSizer.Add(item = style, pos = (row, 1))
- row += 1
- label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Legend"))
- gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (row, 0))
- plegend = wx.TextCtrl(parent = self, id = wx.ID_ANY, value = "", size = (200,-1))
- plegend.SetValue(r['plegend'])
- gridSizer.Add(item = plegend, pos = (row, 1))
- self.wxId['plegend'].append(plegend.GetId())
- boxSizer.Add(item = gridSizer)
+ row += 1
+ label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Legend"))
+ gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (row, 0))
+ legend = wx.TextCtrl(parent = self, id = wx.ID_ANY, value = "", size = (200,-1))
+ legend.SetValue(self.raster[self.map]['plegend'])
+ gridSizer.Add(item = legend, pos = (row, 1))
+ self.wxId['plegend'] = legend.GetId()
+
+ boxSizer.Add(item = gridSizer)
+ boxMainSizer.Add(item = boxSizer, flag = wx.ALL, border = 3)
- if idx == 0:
- flag = wx.ALL
- else:
- flag = wx.TOP | wx.BOTTOM | wx.RIGHT
- boxMainSizer.Add(item = boxSizer, flag = flag, border = 3)
-
- idx += 1
-
- sizer.Add(item = boxMainSizer, flag = wx.ALL | wx.EXPAND, border = 3)
-
- middleSizer = wx.BoxSizer(wx.HORIZONTAL)
-
#
- # segment marker settings
- #
+ # segment marker settings for profiles
+ #
box = wx.StaticBox(parent = self, id = wx.ID_ANY,
label = " %s " % _("Transect segment marker settings"))
- boxMainSizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
-
- self.wxId['marker'] = {}
+
+ boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
+
gridSizer = wx.GridBagSizer(vgap = 5, hgap = 5)
label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Color"))
gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (0, 0))
@@ -574,10 +607,10 @@
self.wxId['marker']['size'] = ptsize.GetId()
gridSizer.Add(item = ptsize, pos = (1, 1))
- label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Style"))
+ label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Fill"))
gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (2, 0))
- ptfill = wx.ComboBox(parent = self, id = wx.ID_ANY,
- size = (120, -1), choices = self.ptfilldict.keys(), style = wx.CB_DROPDOWN)
+ ptfill = wx.Choice(parent = self, id = wx.ID_ANY,
+ size = (120, -1), choices = self.ptfilldict.keys())
ptfill.SetStringSelection(self.properties['marker']['fill'])
self.wxId['marker']['fill'] = ptfill.GetId()
gridSizer.Add(item = ptfill, pos = (2, 1))
@@ -589,26 +622,27 @@
self.wxId['marker']['legend'] = ptlegend.GetId()
gridSizer.Add(item = ptlegend, pos = (3, 1))
- label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Type"))
+ label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Style"))
gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (4, 0))
- pttype = wx.ComboBox(parent = self,
- size = (200, -1), choices = self.pttypelist, style = wx.CB_DROPDOWN)
+ pttype = wx.Choice(parent = self, size = (200, -1), choices = self.pttypelist)
pttype.SetStringSelection(self.properties['marker']['type'])
self.wxId['marker']['type'] = pttype.GetId()
gridSizer.Add(item = pttype, pos = (4, 1))
- boxMainSizer.Add(item = gridSizer, flag = wx.ALL, border = 3)
- middleSizer.Add(item = boxMainSizer, flag = wx.ALL | wx.EXPAND, border = 3)
+ boxSizer.Add(item = gridSizer)
+ boxMainSizer.Add(item = boxSizer, flag = wx.ALL, border = 3)
+
+ sizer.Add(item = boxMainSizer, flag = wx.ALL | wx.EXPAND, border = 3)
#
- # axis options
+ # axis options for all plots
#
box = wx.StaticBox(parent = self, id = wx.ID_ANY,
label = " %s " % _("Axis settings"))
boxMainSizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
- self.wxId['x-axis'] = {}
- self.wxId['y-axis'] = {}
+ middleSizer = wx.BoxSizer(wx.HORIZONTAL)
+
idx = 0
for axis, atype in [(_("X-Axis"), 'x-axis'),
(_("Y-Axis"), 'y-axis')]:
@@ -620,14 +654,15 @@
prop = self.properties[atype]['prop']
row = 0
- label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Style"))
+ label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Scale"))
gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (row, 0))
- type = wx.ComboBox(parent = self, id = wx.ID_ANY,
- size = (100, -1), choices = self.axislist, style = wx.CB_DROPDOWN)
+ type = wx.Choice(parent = self, id = wx.ID_ANY,
+ size = (100, -1), choices = self.axislist)
type.SetStringSelection(prop['type'])
+ type.SetToolTipString(_("Automatic axis scaling, custom max and min, or scale matches data range (min)" ))
self.wxId[atype]['type'] = type.GetId()
gridSizer.Add(item = type, pos = (row, 1))
-
+
row += 1
label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Custom min"))
gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (row, 0))
@@ -663,12 +698,12 @@
middleSizer.Add(item = boxMainSizer, flag = wx.ALL | wx.EXPAND, border = 3)
#
- # grid & legend options
+ # grid & legend options for all plots
#
self.wxId['grid'] = {}
self.wxId['legend'] = {}
self.wxId['font'] = {}
- box = wx.StaticBox(parent = self, id = wx.ID_ANY,
+ box = wx.StaticBox(parent = self, id = wx.ID_ANY,
label = " %s " % _("Grid and Legend settings"))
boxMainSizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
gridSizer = wx.GridBagSizer(vgap = 5, hgap = 5)
@@ -697,7 +732,7 @@
gridSizer.Add(item = legendfontsize, pos = (row, 1))
row += 1
- legendshow = wx.CheckBox(parent = self, id = wx.ID_ANY, label = _("Show legend"))
+ legendshow = wx.CheckBox(parent = self, id = wx.ID_ANY, label = _("Show legend"))
legendshow.SetValue(self.properties['legend']['enabled'])
self.wxId['legend']['enabled'] = legendshow.GetId()
gridSizer.Add(item = legendshow, pos = (row, 0), span = (1, 2))
@@ -720,77 +755,121 @@
#
btnSave = wx.Button(self, wx.ID_SAVE)
btnApply = wx.Button(self, wx.ID_APPLY)
+ btnOk = wx.Button(self, wx.ID_OK)
btnCancel = wx.Button(self, wx.ID_CANCEL)
- btnSave.SetDefault()
+ btnOk.SetDefault()
- # bindigs
- btnApply.Bind(wx.EVT_BUTTON, self.OnApply)
+ # tooltips for buttons
btnApply.SetToolTipString(_("Apply changes for the current session"))
- btnSave.Bind(wx.EVT_BUTTON, self.OnSave)
+ btnOk.SetToolTipString(_("Apply changes for the current session and close dialog"))
btnSave.SetToolTipString(_("Apply and save changes to user settings file (default for next sessions)"))
- btnSave.SetDefault()
- btnCancel.Bind(wx.EVT_BUTTON, self.OnCancel)
btnCancel.SetToolTipString(_("Close dialog and ignore changes"))
# sizers
btnStdSizer = wx.StdDialogButtonSizer()
+ btnStdSizer.AddButton(btnOk)
+ btnStdSizer.AddButton(btnApply)
btnStdSizer.AddButton(btnCancel)
- btnStdSizer.AddButton(btnSave)
- btnStdSizer.AddButton(btnApply)
btnStdSizer.Realize()
- sizer.Add(item = btnStdSizer, proportion = 0, flag = wx.ALIGN_RIGHT | wx.ALL, border = 5)
+ btnSizer = wx.BoxSizer(wx.HORIZONTAL)
+ btnSizer.Add(item = btnSave, proportion = 0, flag = wx.ALIGN_LEFT | wx.ALL, border = 5)
+ btnSizer.Add(item = btnStdSizer, proportion = 0, flag = wx.ALIGN_RIGHT | wx.ALL, border = 5)
+ sizer.Add(item = btnSizer, proportion = 0, flag = wx.ALIGN_RIGHT | wx.ALL, border = 5)
+ #
+ # bindings for buttons and map plot settings controls
+ #
+ self.mapchoice.Bind(wx.EVT_CHOICE, self.OnSetMap)
+
+ # bindings
+ btnApply.Bind(wx.EVT_BUTTON, self.OnApply)
+ btnOk.Bind(wx.EVT_BUTTON, self.OnOk)
+ btnOk.SetDefault()
+ btnSave.Bind(wx.EVT_BUTTON, self.OnSave)
+ btnCancel.Bind(wx.EVT_BUTTON, self.OnCancel)
+
self.SetSizer(sizer)
sizer.Fit(self)
+ def OnSetMap(self, event):
+ """!Handler for changing map selection"""
+ idx = event.GetSelection()
+ self.map = self.rasterList[idx]
+
+ # update settings controls for all plots
+ self.FindWindowById(self.wxId['pcolor']).SetColour(self.raster[self.map]['pcolor'])
+ self.FindWindowById(self.wxId['plegend']).SetValue(self.raster[self.map]['plegend'])
+ self.FindWindowById(self.wxId['pwidth']).SetValue(self.raster[self.map]['pwidth'])
+ self.FindWindowById(self.wxId['pstyle']).SetStringSelection(self.raster[self.map]['pstyle'])
+
+ self.Refresh()
+
+ def OnSetOpt(self, event):
+ """!Handler for changing any other option"""
+ self.map = self.rasterList[self.mapchoice.GetCurrentSelection()]
+ self.UpdateSettings()
+ self.parent.SetGraphStyle()
+ p = self.parent.CreatePlotList()
+ self.parent.DrawPlot(p)
+
def UpdateSettings(self):
- idx = 0
- for r in self.raster.itervalues():
- r['prop']['pcolor'] = self.FindWindowById(self.wxId['pcolor'][idx]).GetColour()
- r['prop']['pwidth'] = int(self.FindWindowById(self.wxId['pwidth'][idx]).GetValue())
- r['prop']['pstyle'] = self.FindWindowById(self.wxId['pstyle'][idx]).GetStringSelection()
- r['plegend'] = self.FindWindowById(self.wxId['plegend'][idx]).GetValue()
- idx +=1
-
- self.properties['marker']['color'] = self.FindWindowById(self.wxId['marker']['color']).GetColour()
- self.properties['marker']['fill'] = self.FindWindowById(self.wxId['marker']['fill']).GetStringSelection()
- self.properties['marker']['size'] = self.FindWindowById(self.wxId['marker']['size']).GetValue()
- self.properties['marker']['type'] = self.FindWindowById(self.wxId['marker']['type']).GetValue()
- self.properties['marker']['legend'] = self.FindWindowById(self.wxId['marker']['legend']).GetValue()
-
+ """!Apply settings to each map and to entire plot"""
+ self.raster[self.map]['pcolor'] = self.FindWindowById(self.wxId['pcolor']).GetColour()
+ self.properties['raster']['pcolor'] = self.raster[self.map]['pcolor']
+
+ self.raster[self.map]['plegend'] = self.FindWindowById(self.wxId['plegend']).GetValue()
+
+ self.raster[self.map]['pwidth'] = int(self.FindWindowById(self.wxId['pwidth']).GetValue())
+ self.properties['raster']['pwidth'] = self.raster[self.map]['pwidth']
+ self.raster[self.map]['pstyle'] = self.FindWindowById(self.wxId['pstyle']).GetStringSelection()
+ self.properties['raster']['pstyle'] = self.raster[self.map]['pstyle']
+
+ # update settings for entire plot
for axis in ('x-axis', 'y-axis'):
- self.properties[axis]['prop']['type'] = self.FindWindowById(self.wxId[axis]['type']).GetValue()
+ self.properties[axis]['prop']['type'] = self.FindWindowById(self.wxId[axis]['type']).GetStringSelection()
self.properties[axis]['prop']['min'] = float(self.FindWindowById(self.wxId[axis]['min']).GetValue())
self.properties[axis]['prop']['max'] = float(self.FindWindowById(self.wxId[axis]['max']).GetValue())
self.properties[axis]['prop']['log'] = self.FindWindowById(self.wxId[axis]['log']).IsChecked()
+ if self.plottype == 'profile':
+ self.properties['marker']['color'] = self.FindWindowById(self.wxId['marker']['color']).GetColour()
+ self.properties['marker']['fill'] = self.FindWindowById(self.wxId['marker']['fill']).GetStringSelection()
+ self.properties['marker']['size'] = self.FindWindowById(self.wxId['marker']['size']).GetValue()
+ self.properties['marker']['type'] = self.FindWindowById(self.wxId['marker']['type']).GetStringSelection()
+ self.properties['marker']['legend'] = self.FindWindowById(self.wxId['marker']['legend']).GetValue()
+
self.properties['grid']['color'] = self.FindWindowById(self.wxId['grid']['color']).GetColour()
self.properties['grid']['enabled'] = self.FindWindowById(self.wxId['grid']['enabled']).IsChecked()
+ # this makes more sense in the text properties, including for settings update. But will need to change
+ # layout for controls to text dialog too.
self.properties['font']['prop']['legendSize'] = self.FindWindowById(self.wxId['font']['legendSize']).GetValue()
self.properties['legend']['enabled'] = self.FindWindowById(self.wxId['legend']['enabled']).IsChecked()
def OnSave(self, event):
"""!Button 'Save' pressed"""
- self.UpdateSettings()
+ self.OnApply(None)
fileSettings = {}
UserSettings.ReadSettingsFile(settings = fileSettings)
- fileSettings['profile'] = UserSettings.Get(group = 'profile')
- file = UserSettings.SaveToFile(fileSettings)
- self.parent.parent.GetLayerManager().goutput.WriteLog(_('Profile settings saved to file \'%s\'.') % file)
- self.parent.SetGraphStyle()
- if self.parent.profile:
- self.parent.DrawPlot()
+ fileSettings[self.plottype] = UserSettings.Get(group = self.plottype)
+ UserSettings.SaveToFile(fileSettings)
+ self.parent.parent.GetLayerManager().goutput.WriteLog(_('Plot settings saved to file \'%s\'.') % UserSettings.filePath)
self.Close()
def OnApply(self, event):
"""!Button 'Apply' pressed. Does not close dialog"""
self.UpdateSettings()
self.parent.SetGraphStyle()
- if self.parent.profile:
- self.parent.DrawPlot()
+ p = self.parent.CreatePlotList()
+ self.parent.DrawPlot(p)
+
+ def OnOk(self, event):
+ """!Button 'OK' pressed"""
+ self.OnApply(None)
+ self.EndModal(wx.ID_OK)
def OnCancel(self, event):
"""!Button 'Cancel' pressed"""
self.Close()
+
\ No newline at end of file
Modified: grass/branches/develbranch_6/gui/wxpython/wxplot/profile.py
===================================================================
--- grass/branches/develbranch_6/gui/wxpython/wxplot/profile.py 2012-09-01 23:10:34 UTC (rev 53051)
+++ grass/branches/develbranch_6/gui/wxpython/wxplot/profile.py 2012-09-02 00:03:18 UTC (rev 53052)
@@ -65,14 +65,14 @@
self.colorList = ["blue", "red", "green", "yellow", "magenta", "cyan",
"aqua", "black", "grey", "orange", "brown", "purple", "violet",
"indigo"]
+
+ self._initOpts()
if len(self.rasterList) > 0: # set raster name(s) from layer manager if a map is selected
self.raster = self.InitRasterOpts(self.rasterList, self.plottype)
else:
self.raster = {}
-
- self._initOpts()
-
+
# determine units (axis labels)
if self.parent.Map.projinfo['units'] != '':
self.xlabel = _('Distance (%s)') % self.parent.Map.projinfo['units']
More information about the grass-commit
mailing list