[GRASS-SVN] r50672 - in grass/trunk/doc: . gui gui/wxpython
gui/wxpython/example
svn_grass at osgeo.org
svn_grass at osgeo.org
Sun Feb 5 14:21:42 EST 2012
Author: annakrat
Date: 2012-02-05 11:21:42 -0800 (Sun, 05 Feb 2012)
New Revision: 50672
Added:
grass/trunk/doc/gui/
grass/trunk/doc/gui/wxpython/
grass/trunk/doc/gui/wxpython/example/
grass/trunk/doc/gui/wxpython/example/README
grass/trunk/doc/gui/wxpython/example/dialogs.py
grass/trunk/doc/gui/wxpython/example/frame.py
grass/trunk/doc/gui/wxpython/example/toolbars.py
grass/trunk/doc/gui/wxpython/example/wxGUI.Example.html
Log:
wxGUI: example module added
Added: grass/trunk/doc/gui/wxpython/example/README
===================================================================
--- grass/trunk/doc/gui/wxpython/example/README (rev 0)
+++ grass/trunk/doc/gui/wxpython/example/README 2012-02-05 19:21:42 UTC (rev 50672)
@@ -0,0 +1,73 @@
+Motivation
+----------
+Example Tool should help new GRASS GUI programmers who are interested in
+adding or improving GRASS GIS functionality or writing GRASS GIS GUI-based
+application for their own purposes.
+
+How to use Example Tool
+-----------------------
+Example Tool is a simple template for applications which are
+supposed to display maps and make computations using GRASS modules.
+It covers several often occurring tasks. It can be helpful for all
+new developers who are interested in wxGUI programming.
+Run Example Tool, have a look at wxGUI.Example.html and than
+look at the source code to see how it works.
+
+Run Example Tool
+----------------
+To run Example Tool can run as a standalone application (in GRASS environment)
+or it can be launched from Layer Manager menu.
+
+1. Go to GRASS root directory
+
+2. Copy directory ./doc/gui/wxpython/example to ./gui/wxpython/example
+
+3. Move file ./gui/wxpython/example/wxGUI.Example.html to ./gui/wxpython/docs/
+
+4. Edit ./gui/wxpython/Makefile:
+
+ SRCFILES := $(wildcard icons/*.* scripts/* xml/*) \
+- $(wildcard core/* dbmgr/* gcp/* gmodeler/* ... \
++ $(wildcard core/* dbmgr/* example/* gcp/* gmodeler/* ... \
+
+-PYDSTDIRS := $(patsubst %,$(ETCDIR)/%,core dbmgr gcp gmodeler ... \
++PYDSTDIRS := $(patsubst %,$(ETCDIR)/%,core dbmgr example gcp gmodeler ... \
+
+5. Run make (in ./gui/wxpython)
+
+6. Now you should be able to run Example Tool as a standalone
+application in GRASS environment. Start GRASS GIS and start application:
+
+ > python ./gui/wxpython/example/frame.py
+
+If you want to access Example Tool from Layer Manager menu, there are
+a few more things to be done.
+
+7. Edit ./gui/wxpython/xml/menudata.xml. Add following code to appropriate place:
+
+ <menuitem>
+ <label>Example</label>
+ <help>Example help (for statusbar)</help>
+ <keywords>raster</keywords>
+ <handler>OnExample</handler>
+ </menuitem>
+
+8. Add folowing event handler to class GMFrame in ./gui/wxpython/lmgr/frame.py:
+
+ def OnExample(self, event):
+ """!Launch ExampleTool"""
+ win = ExampleMapFrame(parent = self)
+ win.CentreOnScreen()
+
+ win.Show()
+
+and don't forget to insert following line at the beginning of the file:
+
+ from example.frame import ExampleMapFrame
+
+9. Run make again.
+
+
+Note
+----
+Feel free to improve Example Tool or suggest possible improvements.
Added: grass/trunk/doc/gui/wxpython/example/dialogs.py
===================================================================
--- grass/trunk/doc/gui/wxpython/example/dialogs.py (rev 0)
+++ grass/trunk/doc/gui/wxpython/example/dialogs.py 2012-02-05 19:21:42 UTC (rev 50672)
@@ -0,0 +1,58 @@
+"""!
+ at package example.dialogs
+
+ at brief Dialogs used in Example tool
+
+Classes:
+ - dialogs::ExampleMapDialog
+
+(C) 2006-2011 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.
+
+ at author Anna Kratochvilova <kratochanna gmail.com>
+"""
+
+import wx
+
+from core import globalvar
+from gui_core.dialogs import ElementDialog, GroupDialog
+from gui_core import gselect
+
+class ExampleMapDialog(ElementDialog):
+ """!Dialog for adding raster map.
+
+ Dialog can be easily changed to enable to choose vector, imagery groups or other elements.
+ """
+ def __init__(self, parent, title = _("Choose raster map"), id = wx.ID_ANY):
+ """!Calls super class constructor.
+
+ @param parent gui parent
+ @param title dialog window title
+ @param id id
+ """
+ ElementDialog.__init__(self, parent, title, label = _("Name of raster map:"))
+
+ # here is the place to determine element type
+ self.element = gselect.Select(parent = self.panel, type = 'raster',
+ size = globalvar.DIALOG_GSELECT_SIZE)
+
+ self.PostInit()
+
+ self.__Layout()
+
+ self.SetMinSize(self.GetSize())
+
+ def __Layout(self):
+ """!Do layout"""
+ self.dataSizer.Add(item = self.element, proportion = 0,
+ flag = wx.EXPAND | wx.ALL, border = 5)
+
+ self.panel.SetSizer(self.sizer)
+ self.sizer.Fit(self)
+
+ def GetRasterMap(self):
+ """!Returns selected raster map"""
+ return self.GetElement()
+
Property changes on: grass/trunk/doc/gui/wxpython/example/dialogs.py
___________________________________________________________________
Added: svn:mime-type
+ text/x-python
Added: svn:keywords
+ Author Date Id
Added: svn:eol-style
+ native
Added: grass/trunk/doc/gui/wxpython/example/frame.py
===================================================================
--- grass/trunk/doc/gui/wxpython/example/frame.py (rev 0)
+++ grass/trunk/doc/gui/wxpython/example/frame.py 2012-02-05 19:21:42 UTC (rev 50672)
@@ -0,0 +1,371 @@
+"""!
+ at package example.frame
+
+ at brief Example tool for displaying raster map and related information
+
+Classes:
+ - frame::ExampleMapFrame
+ - frame::ExampleInfoTextManager
+
+(C) 2006-2011 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.
+
+ at author Anna Kratochvilova <kratochanna gmail.com>
+"""
+
+import os
+import sys
+import wx
+
+# this enables to run application standalone (> python example/frame.py )
+if __name__ == "__main__":
+ sys.path.append(os.path.join(os.environ['GISBASE'], "etc", "gui", "wxpython"))
+
+from gui_core.mapdisp import SingleMapFrame
+from gui_core.forms import GUI
+from mapdisp.mapwindow import BufferedWindow
+from mapdisp import statusbar as sb
+from core.render import Map
+from core.debug import Debug
+from core.gcmd import RunCommand
+
+import grass.script as grass
+
+from example.toolbars import ExampleMapToolbar, ExampleMiscToolbar, ExampleMainToolbar
+from example.dialogs import ExampleMapDialog
+
+# It is possible to call grass library functions (in C) directly via ctypes
+# however this is less stable. Example is available in trunk/doc/python/, ctypes
+# are used in nviz, vdigit, iclass gui modules.
+
+# from ctypes import *
+# try:
+# from grass.lib.raster import *
+# haveExample = True
+# errMsg = ''
+# except ImportError, e:
+# haveExample = False
+# errMsg = _("Loading raster lib failed.\n%s") % e
+
+class ExampleMapFrame(SingleMapFrame):
+ """! Main frame of example tool.
+
+ Inherits from SingleMapFrame, so map is displayed in one map widow.
+ In case two map windows are needed, use DoubleMapFrame from (gui_core.mapdisp).
+
+ @see IClassMapFrame in iclass.frame
+ """
+ def __init__(self, parent = None, title = _("Example Tool"),
+ toolbars = ["MiscToolbar", "MapToolbar", "MainToolbar"],
+ size = (800, 600), name = 'exampleWindow', **kwargs):
+ """!Map Frame constructor
+
+ @param parent (no parent is expected)
+ @param title window title
+ @param toolbars list of active toolbars (default value represents all toolbars)
+ @param size default size
+ """
+ SingleMapFrame.__init__(self, parent = parent, title = title,
+ name = name, Map = Map(), **kwargs)
+
+ # Place debug message where appropriate
+ # and set debug level from 1 to 5 (higher to lower level functions).
+ # To enable debug mode write:
+ # > g.gisenv set=WX_DEBUG=5
+ Debug.msg(1, "ExampleMapFrame.__init__()")
+
+ #
+ # Add toolbars to aui manager
+ #
+ toolbarsCopy = toolbars[:]
+ # workaround to have the same toolbar order on all platforms
+ if sys.platform == 'win32':
+ toolbarsCopy.reverse()
+
+ for toolbar in toolbarsCopy:
+ self.AddToolbar(toolbar)
+
+ #
+ # Add statusbar
+ #
+
+ # choose items in statusbar choice, which makes sense for your application
+ self.statusbarItems = [sb.SbCoordinates,
+ sb.SbRegionExtent,
+ sb.SbCompRegionExtent,
+ sb.SbShowRegion,
+ sb.SbAlignExtent,
+ sb.SbResolution,
+ sb.SbDisplayGeometry,
+ sb.SbMapScale,
+ sb.SbGoTo,
+ sb.SbProjection]
+
+ # create statusbar and its manager
+ statusbar = self.CreateStatusBar(number = 4, style = 0)
+ statusbar.SetStatusWidths([-5, -2, -1, -1])
+ self.statusbarManager = sb.SbManager(mapframe = self, statusbar = statusbar)
+
+ # fill statusbar manager
+ self.statusbarManager.AddStatusbarItemsByClass(self.statusbarItems, mapframe = self, statusbar = statusbar)
+ self.statusbarManager.AddStatusbarItem(sb.SbMask(self, statusbar = statusbar, position = 2))
+ self.statusbarManager.AddStatusbarItem(sb.SbRender(self, statusbar = statusbar, position = 3))
+
+ self.statusbarManager.Update()
+
+
+ # create map window
+ self.MapWindow = BufferedWindow(self, Map = self.GetMap())
+
+ # create whatever you want, here it is a widget for displaying raster info
+ self.info = ExampleInfoTextManager(self)
+
+ # add map window (and other widgets) to aui manager
+ self._addPanes()
+ self._mgr.Update()
+
+ # default action in map toolbar
+ self.OnPan(event = None)
+
+ # initialize variables related to your application functionality
+ self.InitVariables()
+
+ self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
+
+ self.SetSize(size)
+
+ def __del__(self):
+ """!Destructor deletes temporary region"""
+ grass.del_temp_region()
+
+ def OnCloseWindow(self, event):
+ """!Destroy frame"""
+ self.Destroy()
+
+ def IsStandalone(self):
+ """!Check if application is standalone.
+
+ Standalone application can work without parent.
+ Parent can be e.g. Layer Manager.
+ """
+ if self.parent:
+ return False
+
+ return True
+
+ def GetLayerManager(self):
+ """!Returns frame parent.
+
+ If IsStandalone() is True, returns None,
+ otherwise retuns frame parent (Layer Manager)
+ """
+ return self.parent
+
+ def InitVariables(self):
+ """!Initialize any variables nneded by application"""
+ self.currentRaster = None
+ self.statitistics = dict()
+
+ # use WIND_OVERRIDE region not to affect current region
+ grass.use_temp_region()
+
+ def _addPanes(self):
+ """!Add mapwindow (and other widgets) to aui manager"""
+ window = self.GetWindow()
+ name = "mainWindow"
+ self._mgr.AddPane(window, wx.aui.AuiPaneInfo().
+ Name(name).CentrePane().
+ Dockable(False).CloseButton(False).DestroyOnClose(True).
+ Layer(0))
+
+ window = self.info.GetControl()
+ name = "infoText"
+ self._mgr.AddPane(window, wx.aui.AuiPaneInfo().
+ Name(name).Caption(_("Raster Info")).MinSize((250, -1)).
+ Dockable(True).CloseButton(False).
+ Layer(0).Left())
+
+ def AddToolbar(self, name):
+ """!Add defined toolbar to the window
+
+ Currently known toolbars are:
+ - 'ExampleMapToolbar' - basic map toolbar
+ - 'ExampleMainToolbar' - toolbar with application specific tools
+ - 'ExampleMiscToolbar' - toolbar with common tools (help, quit, ...)
+ """
+ # see wx.aui.AuiPaneInfo documentation for understanding all options
+ if name == "MapToolbar":
+ self.toolbars[name] = ExampleMapToolbar(self)
+
+ self._mgr.AddPane(self.toolbars[name],
+ wx.aui.AuiPaneInfo().
+ Name(name).Caption(_("Map Toolbar")).
+ ToolbarPane().Top().
+ LeftDockable(False).RightDockable(False).
+ BottomDockable(False).TopDockable(True).
+ CloseButton(False).Layer(1).Row(1).
+ BestSize((self.toolbars[name].GetBestSize())))
+
+ if name == "MiscToolbar":
+ self.toolbars[name] = ExampleMiscToolbar(self)
+
+ self._mgr.AddPane(self.toolbars[name],
+ wx.aui.AuiPaneInfo().
+ Name(name).Caption(_("Misc Toolbar")).
+ ToolbarPane().Top().
+ LeftDockable(False).RightDockable(False).
+ BottomDockable(False).TopDockable(True).
+ CloseButton(False).Layer(1).Row(1).
+ BestSize((self.toolbars[name].GetBestSize())))
+
+ if name == "MainToolbar":
+ self.toolbars[name] = ExampleMainToolbar(self)
+
+ self._mgr.AddPane(self.toolbars[name],
+ wx.aui.AuiPaneInfo().
+ Name(name).Caption(_("Main Toolbar")).
+ ToolbarPane().Top().
+ LeftDockable(False).RightDockable(False).
+ BottomDockable(False).TopDockable(True).
+ CloseButton(False).Layer(1).Row(1).
+ BestSize((self.toolbars[name].GetBestSize())))
+
+ def GetMapToolbar(self):
+ """!Returns toolbar with zooming tools"""
+ return self.toolbars['MapToolbar']
+
+ def OnHelp(self, event):
+ """!Show help page"""
+ RunCommand('g.manual', entry = 'wxGUI.Example')
+
+ def OnSelectRaster(self, event):
+ """!Opens dialog to select raster map"""
+ dlg = ExampleMapDialog(self)
+
+ if dlg.ShowModal() == wx.ID_OK:
+ raster = grass.find_file(name = dlg.GetRasterMap(), element = 'cell')
+ if raster['fullname']:
+ self.SetLayer(name = raster['fullname'])
+
+ dlg.Destroy()
+
+ def SetLayer(self, name):
+ """!Sets layer in Map and updates statistics.
+
+ @param name layer (raster) name
+ """
+ Debug.msg (3, "ExampleMapFrame.SetLayer(): name=%s" % name)
+
+ # this simple application enables to keep only one raster
+ self.GetMap().DeleteAllLayers()
+ cmdlist = ['d.rast', 'map=%s' % name]
+ # add layer to Map instance (core.render)
+ newLayer = self.GetMap().AddLayer(type = 'raster', command = cmdlist, l_active = True,
+ name = name, l_hidden = False, l_opacity = 1.0,
+ l_render = True)
+ self.GetWindow().ZoomToMap(layers = [newLayer,], render = True)
+ self.currentRaster = name
+
+ # change comp. region to match new raster, so that the statistics
+ # are computed for the entire raster
+ RunCommand('g.region',
+ rast = self.currentRaster,
+ parent = self)
+
+ self.UpdateStatistics()
+
+ def ComputeStatitistics(self):
+ """!Computes statistics for raster map using 'r.univar' module.
+
+ @return statistic in form of dictionary
+ """
+ # RunCommand enables to run GRASS module
+ res = RunCommand('r.univar', # module name
+ flags = 'g', # command flags
+ map = self.currentRaster, # module parameters
+ read = True) # get command output
+
+ return grass.parse_key_val(res, val_type = float)
+
+ def UpdateStatistics(self):
+ """!Upadate statistic information.
+
+ Called after changing raster map.
+ """
+ stats = self.ComputeStatitistics()
+ self.info.WriteStatistics(name = self.currentRaster, statDict = stats)
+
+
+class ExampleInfoTextManager:
+ """!Class for displaying information.
+
+ Wrraper for wx.TextCtrl.
+ """
+ def __init__(self, parent):
+ """!Creates wx.TextCtrl for displaying information.
+ """
+ self.textCtrl = wx.TextCtrl(parent, id = wx.ID_ANY,
+ style = wx.TE_MULTILINE | wx.TE_RICH2 | wx.TE_READONLY)
+ self.textCtrl.SetInsertionPoint(0)
+ self.textCtrl.Disable()
+ self.font = self.textCtrl.GetFont()
+ self.bgColor = wx.SystemSettings.GetColour(wx.SYS_COLOUR_BACKGROUND)
+
+ def GetControl(self):
+ """!Returns control itself."""
+ return self.textCtrl
+
+ def _setStyle(self, style):
+ """!Sets default style of textCtrl.
+
+ @param style "title"/"value"
+ """
+ if style == "title":
+ self.font.SetWeight(wx.FONTWEIGHT_BOLD)
+ elif style == "value":
+ self.font.SetWeight(wx.FONTWEIGHT_NORMAL)
+ else:
+ return
+
+ self.textCtrl.SetDefaultStyle(wx.TextAttr(colBack = self.bgColor, font = self.font))
+
+ def _writeLine(self, title, value):
+ """!Formats text (key, value pair) with styles."""
+ self._setStyle("title")
+ self.textCtrl.AppendText("%s: " % title)
+ self._setStyle("value")
+ self.textCtrl.AppendText("%.2f\n" % value)
+
+ def _writeRasterTitle(self, name):
+ """!Writes title."""
+ self._setStyle("title")
+ self.textCtrl.AppendText("%s\n\n" % name)
+
+ def WriteStatistics(self, name, statDict):
+ """!Write and format information about raster map
+
+ @param name raster map name
+ @param statDict dictionary containing information
+ """
+ self.GetControl().Clear()
+ self._writeRasterTitle(name = name)
+ for key, value in statDict.iteritems():
+ self._writeLine(title = key, value = value)
+
+
+def main():
+ import gettext
+
+ gettext.install('grasswxpy', os.path.join(os.getenv("GISBASE"), 'locale'), unicode = True)
+
+ app = wx.PySimpleApp()
+ wx.InitAllImageHandlers()
+
+ frame = ExampleMapFrame()
+ frame.Show()
+ app.MainLoop()
+
+if __name__ == "__main__":
+ main()
Property changes on: grass/trunk/doc/gui/wxpython/example/frame.py
___________________________________________________________________
Added: svn:mime-type
+ text/x-python
Added: svn:keywords
+ Author Date Id
Added: svn:eol-style
+ native
Added: grass/trunk/doc/gui/wxpython/example/toolbars.py
===================================================================
--- grass/trunk/doc/gui/wxpython/example/toolbars.py (rev 0)
+++ grass/trunk/doc/gui/wxpython/example/toolbars.py 2012-02-05 19:21:42 UTC (rev 50672)
@@ -0,0 +1,110 @@
+"""!
+ at package example.toolbars
+
+ at brief Example toolbars and icons.
+
+Classes:
+ - toolbars::ExampleMapToolbar
+ - toolbars::ExampleMainToolbar
+ - toolbars::ExampleMiscToolbar
+
+(C) 2006-2011 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.
+
+ at author Anna Kratochvilova <kratochanna gmail.com>
+"""
+
+import wx
+
+from gui_core.toolbars import BaseToolbar, BaseIcons
+from icons.icon import MetaIcon
+
+
+class ExampleMapToolbar(BaseToolbar):
+ """!Map toolbar (to control map zoom and rendering)
+ """
+ def __init__(self, parent):
+ """!Map toolbar constructor
+ """
+ BaseToolbar.__init__(self, parent)
+
+ self.InitToolbar(self._toolbarData())
+
+ # realize the toolbar
+ self.Realize()
+
+ self.action = { 'id' : self.pan }
+ self.defaultAction = { 'id' : self.pan,
+ 'bind' : self.parent.OnPan }
+
+ self.EnableTool(self.zoomBack, False)
+
+ def _toolbarData(self):
+ """!Returns toolbar data (name, icon, handler)"""
+ # BaseIcons are a set of often used icons. It is possible
+ # to reuse icons in ./trunk/gui/icons/grass or add new ones there.
+ icons = BaseIcons
+ return self._getToolbarData((("displaymap", icons["display"],
+ self.parent.OnDraw),
+ ("rendermap", icons["render"],
+ self.parent.OnRender),
+ ("erase", icons["erase"],
+ self.parent.OnErase),
+ (None, ), # creates separator
+ ("pan", icons["pan"],
+ self.parent.OnPan,
+ wx.ITEM_CHECK), # toggle tool
+ ("zoomIn", icons["zoomIn"],
+ self.parent.OnZoomIn,
+ wx.ITEM_CHECK),
+ ("zoomOut", icons["zoomOut"],
+ self.parent.OnZoomOut,
+ wx.ITEM_CHECK),
+ (None, ),
+ ("zoomBack", icons["zoomBack"],
+ self.parent.OnZoomBack),
+ ("zoomToMap", icons["zoomExtent"],
+ self.parent.OnZoomToMap),
+ ))
+
+class ExampleMainToolbar(BaseToolbar):
+ """!Toolbar with tools related to application functionality
+ """
+ def __init__(self, parent):
+ """!Toolbar constructor
+ """
+ BaseToolbar.__init__(self, parent)
+
+ self.InitToolbar(self._toolbarData())
+
+ # realize the toolbar
+ self.Realize()
+
+ def _toolbarData(self):
+ """!Toolbar data"""
+ return self._getToolbarData((("addRaster", BaseIcons['addRast'],
+ self.parent.OnSelectRaster),
+ ))
+
+class ExampleMiscToolbar(BaseToolbar):
+ """!Toolbar with miscellaneous tools related to app
+ """
+ def __init__(self, parent):
+ """!Toolbar constructor
+ """
+ BaseToolbar.__init__(self, parent)
+
+ self.InitToolbar(self._toolbarData())
+ # realize the toolbar
+ self.Realize()
+
+ def _toolbarData(self):
+ """!Toolbar data"""
+ icons = BaseIcons
+ return self._getToolbarData((("help", icons['help'],
+ self.parent.OnHelp),
+ ("quit", icons['quit'],
+ self.parent.OnCloseWindow),
+ ))
Property changes on: grass/trunk/doc/gui/wxpython/example/toolbars.py
___________________________________________________________________
Added: svn:mime-type
+ text/x-python
Added: svn:keywords
+ Author Date Id
Added: svn:eol-style
+ native
Added: grass/trunk/doc/gui/wxpython/example/wxGUI.Example.html
===================================================================
--- grass/trunk/doc/gui/wxpython/example/wxGUI.Example.html (rev 0)
+++ grass/trunk/doc/gui/wxpython/example/wxGUI.Example.html 2012-02-05 19:21:42 UTC (rev 50672)
@@ -0,0 +1,76 @@
+<!-- meta page description: wxGUI Example Tool -->
+<!-- meta page index: wxGUI -->
+<h2>DESCRIPTION</h2>
+
+<p>
+The purpose of the <b>Example Tool</b> is to make life easier
+for new wxGUI developers. It can serve as a basic template when
+creating standalone GRASS GUI-based application. Example tool
+can display one raster map a show information about it.
+</p>
+
+<p>
+Following topics are covered:
+</p>
+
+<ul>
+ <li>creating standalone window</li>
+ <li>adding toolbars, statusbar</li>
+ <li>displaying raster map</li>
+ <li>running GRASS modules from application</li>
+ <li>creating dialog for element (raster, vector, ...) selection</li>
+ <li>using temporary region</li>
+ <li>access from main menu</li>
+ <li>writing programmer documentation</li>
+ <li>writing user documentation</li>
+</ul>
+
+<h2>NOTE</h2>
+
+<p>
+See README to learn how to get Example Tool to work.
+</p>
+
+<!--
+Put screenshot here
+<center>
+<br><img src="wxGUI_example.jpg" border="1"><br><br>
+</center>
+
+-->
+
+<h3>EXAMPLE TOOL TOOLBAR</h3>
+
+<dl>
+ <dt><img src="icons/layer-raster-add.png">
+ <em>Select raster layer</em></dt>
+ <dd>Select raster layer and compute statistics related to this layer.</dd>
+</dl>
+
+
+
+<h2>SEE ALSO</h2>
+
+<em>
+ <a href="wxGUI.html">wxGUI</a><br>
+ <a href="wxGUI.Components.html">wxGUI components</a>
+</em>
+
+<!--
+Create wiki page and put the link here:
+<p>
+See also
+user <a href="http://grass.osgeo.org/wiki/WxGUI_...">wiki</a> page.
+</p>
+-->
+
+<h2>AUTHOR</h2>
+
+<p>
+Anna Kratochvilova,
+ <a href="http://www.cvut.cz">Czech Technical University in Prague</a>, Czech Republic<br>
+</p>
+
+<p>
+<i>$Date$</i>
+
Property changes on: grass/trunk/doc/gui/wxpython/example/wxGUI.Example.html
___________________________________________________________________
Added: svn:mime-type
+ text/html
Added: svn:keywords
+ Author Date Id
Added: svn:eol-style
+ native
More information about the grass-commit
mailing list