|
@@ -7,12 +7,12 @@ Classes:
|
|
- frame::ExampleMapFrame
|
|
- frame::ExampleMapFrame
|
|
- frame::ExampleInfoTextManager
|
|
- frame::ExampleInfoTextManager
|
|
|
|
|
|
-(C) 2006-2011 by the GRASS Development Team
|
|
|
|
|
|
+(C) 2011-2014 by the GRASS Development Team
|
|
This program is free software under the GNU General Public
|
|
This program is free software under the GNU General Public
|
|
License (>=v2). Read the file COPYING that comes with GRASS
|
|
License (>=v2). Read the file COPYING that comes with GRASS
|
|
for details.
|
|
for details.
|
|
|
|
|
|
-@author Anna Kratochvilova <kratochanna gmail.com>
|
|
|
|
|
|
+@author Anna Petrasova <kratochanna gmail.com>
|
|
"""
|
|
"""
|
|
|
|
|
|
import os
|
|
import os
|
|
@@ -24,16 +24,18 @@ if __name__ == "__main__":
|
|
sys.path.append(os.path.join(os.environ['GISBASE'], "etc", "gui", "wxpython"))
|
|
sys.path.append(os.path.join(os.environ['GISBASE'], "etc", "gui", "wxpython"))
|
|
|
|
|
|
from gui_core.mapdisp import SingleMapFrame
|
|
from gui_core.mapdisp import SingleMapFrame
|
|
-from mapdisp.mapwindow import BufferedWindow
|
|
|
|
|
|
+from mapwin.buffered import BufferedMapWindow
|
|
|
|
+from mapwin.base import MapWindowProperties
|
|
from mapdisp import statusbar as sb
|
|
from mapdisp import statusbar as sb
|
|
from core.render import Map
|
|
from core.render import Map
|
|
from core.debug import Debug
|
|
from core.debug import Debug
|
|
-from core.gcmd import RunCommand
|
|
|
|
|
|
+from core.gcmd import RunCommand, GError
|
|
|
|
+from core.utils import _
|
|
|
|
|
|
-import grass.script as grass
|
|
|
|
|
|
+from grass.script import core as gcore
|
|
|
|
|
|
from toolbars import ExampleMapToolbar, ExampleMiscToolbar, ExampleMainToolbar
|
|
from toolbars import ExampleMapToolbar, ExampleMiscToolbar, ExampleMainToolbar
|
|
-from dialogs import ExampleMapDialog
|
|
|
|
|
|
+from dialogs import ExampleMapDialog
|
|
|
|
|
|
# It is possible to call grass library functions (in C) directly via ctypes
|
|
# 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
|
|
# however this is less stable. Example is available in trunk/doc/python/, ctypes
|
|
@@ -48,33 +50,34 @@ from dialogs import ExampleMapDialog
|
|
# haveExample = False
|
|
# haveExample = False
|
|
# errMsg = _("Loading raster lib failed.\n%s") % e
|
|
# errMsg = _("Loading raster lib failed.\n%s") % e
|
|
|
|
|
|
|
|
+
|
|
class ExampleMapFrame(SingleMapFrame):
|
|
class ExampleMapFrame(SingleMapFrame):
|
|
"""! Main frame of example tool.
|
|
"""! Main frame of example tool.
|
|
-
|
|
|
|
|
|
+
|
|
Inherits from SingleMapFrame, so map is displayed in one map widow.
|
|
Inherits from SingleMapFrame, so map is displayed in one map widow.
|
|
In case two map windows are needed, use DoubleMapFrame from (gui_core.mapdisp).
|
|
In case two map windows are needed, use DoubleMapFrame from (gui_core.mapdisp).
|
|
-
|
|
|
|
|
|
+
|
|
@see IClassMapFrame in iclass.frame
|
|
@see IClassMapFrame in iclass.frame
|
|
"""
|
|
"""
|
|
- def __init__(self, parent = None, title = _("Example Tool"),
|
|
|
|
- toolbars = ["MiscToolbar", "MapToolbar", "MainToolbar"],
|
|
|
|
- size = (800, 600), name = 'exampleWindow', **kwargs):
|
|
|
|
|
|
+ def __init__(self, parent, giface, title=_("Example Tool"),
|
|
|
|
+ toolbars=["MiscToolbar", "MapToolbar", "MainToolbar"],
|
|
|
|
+ size=(800, 600), name='exampleWindow', **kwargs):
|
|
"""!Map Frame constructor
|
|
"""!Map Frame constructor
|
|
-
|
|
|
|
|
|
+
|
|
@param parent (no parent is expected)
|
|
@param parent (no parent is expected)
|
|
@param title window title
|
|
@param title window title
|
|
@param toolbars list of active toolbars (default value represents all toolbars)
|
|
@param toolbars list of active toolbars (default value represents all toolbars)
|
|
@param size default size
|
|
@param size default size
|
|
"""
|
|
"""
|
|
- SingleMapFrame.__init__(self, parent = parent, title = title,
|
|
|
|
- name = name, Map = Map(), **kwargs)
|
|
|
|
-
|
|
|
|
|
|
+ SingleMapFrame.__init__(self, parent=parent, title=title,
|
|
|
|
+ name=name, Map=Map(), **kwargs)
|
|
|
|
+
|
|
# Place debug message where appropriate
|
|
# Place debug message where appropriate
|
|
# and set debug level from 1 to 5 (higher to lower level functions).
|
|
# and set debug level from 1 to 5 (higher to lower level functions).
|
|
# To enable debug mode write:
|
|
# To enable debug mode write:
|
|
# > g.gisenv set=WX_DEBUG=5
|
|
# > g.gisenv set=WX_DEBUG=5
|
|
Debug.msg(1, "ExampleMapFrame.__init__()")
|
|
Debug.msg(1, "ExampleMapFrame.__init__()")
|
|
-
|
|
|
|
|
|
+
|
|
#
|
|
#
|
|
# Add toolbars to aui manager
|
|
# Add toolbars to aui manager
|
|
#
|
|
#
|
|
@@ -82,14 +85,18 @@ class ExampleMapFrame(SingleMapFrame):
|
|
# workaround to have the same toolbar order on all platforms
|
|
# workaround to have the same toolbar order on all platforms
|
|
if sys.platform == 'win32':
|
|
if sys.platform == 'win32':
|
|
toolbarsCopy.reverse()
|
|
toolbarsCopy.reverse()
|
|
-
|
|
|
|
|
|
+
|
|
for toolbar in toolbarsCopy:
|
|
for toolbar in toolbarsCopy:
|
|
self.AddToolbar(toolbar)
|
|
self.AddToolbar(toolbar)
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+ self.mapWindowProperties = MapWindowProperties()
|
|
|
|
+ self.mapWindowProperties.setValuesFromUserSettings()
|
|
|
|
+ self.mapWindowProperties.autoRenderChanged.connect(
|
|
|
|
+ lambda value: self.OnRender(None) if value else None)
|
|
#
|
|
#
|
|
# Add statusbar
|
|
# Add statusbar
|
|
#
|
|
#
|
|
-
|
|
|
|
|
|
+
|
|
# choose items in statusbar choice, which makes sense for your application
|
|
# choose items in statusbar choice, which makes sense for your application
|
|
self.statusbarItems = [sb.SbCoordinates,
|
|
self.statusbarItems = [sb.SbCoordinates,
|
|
sb.SbRegionExtent,
|
|
sb.SbRegionExtent,
|
|
@@ -101,94 +108,90 @@ class ExampleMapFrame(SingleMapFrame):
|
|
sb.SbMapScale,
|
|
sb.SbMapScale,
|
|
sb.SbGoTo,
|
|
sb.SbGoTo,
|
|
sb.SbProjection]
|
|
sb.SbProjection]
|
|
-
|
|
|
|
|
|
+
|
|
# create statusbar and its manager
|
|
# create statusbar and its manager
|
|
- statusbar = self.CreateStatusBar(number = 4, style = 0)
|
|
|
|
|
|
+ statusbar = self.CreateStatusBar(number=4, style=0)
|
|
statusbar.SetStatusWidths([-5, -2, -1, -1])
|
|
statusbar.SetStatusWidths([-5, -2, -1, -1])
|
|
- self.statusbarManager = sb.SbManager(mapframe = self, statusbar = statusbar)
|
|
|
|
-
|
|
|
|
|
|
+ self.statusbarManager = sb.SbManager(mapframe=self, statusbar=statusbar)
|
|
|
|
+
|
|
# fill statusbar manager
|
|
# 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.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()
|
|
self.statusbarManager.Update()
|
|
-
|
|
|
|
-
|
|
|
|
|
|
+
|
|
# create map window
|
|
# create map window
|
|
- self.MapWindow = BufferedWindow(self, Map = self.GetMap(), frame = self, giface = self)
|
|
|
|
-
|
|
|
|
|
|
+ self.MapWindow = BufferedMapWindow(parent=self, Map=self.GetMap(),
|
|
|
|
+ properties=self.mapWindowProperties, giface=self)
|
|
|
|
+ self._setUpMapWindow(self.MapWindow)
|
|
|
|
+ self.MapWindow.InitZoomHistory()
|
|
|
|
+
|
|
# create whatever you want, here it is a widget for displaying raster info
|
|
# create whatever you want, here it is a widget for displaying raster info
|
|
self.info = ExampleInfoTextManager(self)
|
|
self.info = ExampleInfoTextManager(self)
|
|
-
|
|
|
|
|
|
+
|
|
# add map window (and other widgets) to aui manager
|
|
# add map window (and other widgets) to aui manager
|
|
self._addPanes()
|
|
self._addPanes()
|
|
self._mgr.Update()
|
|
self._mgr.Update()
|
|
-
|
|
|
|
- # default action in map toolbar
|
|
|
|
- self.OnPan(event = None)
|
|
|
|
-
|
|
|
|
|
|
+
|
|
# initialize variables related to your application functionality
|
|
# initialize variables related to your application functionality
|
|
self.InitVariables()
|
|
self.InitVariables()
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+ # default action
|
|
|
|
+ self.GetMapToolbar().SelectDefault()
|
|
|
|
+
|
|
|
|
+ self.Bind(wx.EVT_SIZE, self.OnSize)
|
|
self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
|
|
self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
|
|
-
|
|
|
|
|
|
+
|
|
self.SetSize(size)
|
|
self.SetSize(size)
|
|
-
|
|
|
|
|
|
+
|
|
def __del__(self):
|
|
def __del__(self):
|
|
"""!Destructor deletes temporary region"""
|
|
"""!Destructor deletes temporary region"""
|
|
- grass.del_temp_region()
|
|
|
|
-
|
|
|
|
|
|
+ gcore.del_temp_region()
|
|
|
|
+
|
|
def OnCloseWindow(self, event):
|
|
def OnCloseWindow(self, event):
|
|
"""!Destroy frame"""
|
|
"""!Destroy frame"""
|
|
self.Destroy()
|
|
self.Destroy()
|
|
-
|
|
|
|
|
|
+
|
|
def IsStandalone(self):
|
|
def IsStandalone(self):
|
|
"""!Check if application is standalone.
|
|
"""!Check if application is standalone.
|
|
-
|
|
|
|
|
|
+
|
|
Standalone application can work without parent.
|
|
Standalone application can work without parent.
|
|
Parent can be e.g. Layer Manager.
|
|
Parent can be e.g. Layer Manager.
|
|
"""
|
|
"""
|
|
if self.parent:
|
|
if self.parent:
|
|
return False
|
|
return False
|
|
-
|
|
|
|
|
|
+
|
|
return True
|
|
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):
|
|
def InitVariables(self):
|
|
"""!Initialize any variables nneded by application"""
|
|
"""!Initialize any variables nneded by application"""
|
|
self.currentRaster = None
|
|
self.currentRaster = None
|
|
self.statitistics = dict()
|
|
self.statitistics = dict()
|
|
-
|
|
|
|
|
|
+
|
|
# use WIND_OVERRIDE region not to affect current region
|
|
# use WIND_OVERRIDE region not to affect current region
|
|
- grass.use_temp_region()
|
|
|
|
-
|
|
|
|
|
|
+ gcore.use_temp_region()
|
|
|
|
+
|
|
def _addPanes(self):
|
|
def _addPanes(self):
|
|
"""!Add mapwindow (and other widgets) to aui manager"""
|
|
"""!Add mapwindow (and other widgets) to aui manager"""
|
|
window = self.GetWindow()
|
|
window = self.GetWindow()
|
|
name = "mainWindow"
|
|
name = "mainWindow"
|
|
self._mgr.AddPane(window, wx.aui.AuiPaneInfo().
|
|
self._mgr.AddPane(window, wx.aui.AuiPaneInfo().
|
|
- Name(name).CentrePane().
|
|
|
|
- Dockable(False).CloseButton(False).DestroyOnClose(True).
|
|
|
|
- Layer(0))
|
|
|
|
-
|
|
|
|
|
|
+ Name(name).CentrePane().
|
|
|
|
+ Dockable(False).CloseButton(False).DestroyOnClose(True).
|
|
|
|
+ Layer(0))
|
|
|
|
+
|
|
window = self.info.GetControl()
|
|
window = self.info.GetControl()
|
|
name = "infoText"
|
|
name = "infoText"
|
|
self._mgr.AddPane(window, wx.aui.AuiPaneInfo().
|
|
self._mgr.AddPane(window, wx.aui.AuiPaneInfo().
|
|
- Name(name).Caption(_("Raster Info")).MinSize((250, -1)).
|
|
|
|
- Dockable(True).CloseButton(False).
|
|
|
|
- Layer(0).Left())
|
|
|
|
-
|
|
|
|
|
|
+ Name(name).Caption(_("Raster Info")).MinSize((250, -1)).
|
|
|
|
+ Dockable(True).CloseButton(False).
|
|
|
|
+ Layer(0).Left())
|
|
|
|
+
|
|
def AddToolbar(self, name):
|
|
def AddToolbar(self, name):
|
|
"""!Add defined toolbar to the window
|
|
"""!Add defined toolbar to the window
|
|
-
|
|
|
|
|
|
+
|
|
Currently known toolbars are:
|
|
Currently known toolbars are:
|
|
- 'ExampleMapToolbar' - basic map toolbar
|
|
- 'ExampleMapToolbar' - basic map toolbar
|
|
- 'ExampleMainToolbar' - toolbar with application specific tools
|
|
- 'ExampleMainToolbar' - toolbar with application specific tools
|
|
@@ -196,8 +199,8 @@ class ExampleMapFrame(SingleMapFrame):
|
|
"""
|
|
"""
|
|
# see wx.aui.AuiPaneInfo documentation for understanding all options
|
|
# see wx.aui.AuiPaneInfo documentation for understanding all options
|
|
if name == "MapToolbar":
|
|
if name == "MapToolbar":
|
|
- self.toolbars[name] = ExampleMapToolbar(self)
|
|
|
|
-
|
|
|
|
|
|
+ self.toolbars[name] = ExampleMapToolbar(self, self._toolSwitcher)
|
|
|
|
+
|
|
self._mgr.AddPane(self.toolbars[name],
|
|
self._mgr.AddPane(self.toolbars[name],
|
|
wx.aui.AuiPaneInfo().
|
|
wx.aui.AuiPaneInfo().
|
|
Name(name).Caption(_("Map Toolbar")).
|
|
Name(name).Caption(_("Map Toolbar")).
|
|
@@ -206,10 +209,10 @@ class ExampleMapFrame(SingleMapFrame):
|
|
BottomDockable(False).TopDockable(True).
|
|
BottomDockable(False).TopDockable(True).
|
|
CloseButton(False).Layer(1).Row(1).
|
|
CloseButton(False).Layer(1).Row(1).
|
|
BestSize((self.toolbars[name].GetBestSize())))
|
|
BestSize((self.toolbars[name].GetBestSize())))
|
|
-
|
|
|
|
|
|
+
|
|
if name == "MiscToolbar":
|
|
if name == "MiscToolbar":
|
|
self.toolbars[name] = ExampleMiscToolbar(self)
|
|
self.toolbars[name] = ExampleMiscToolbar(self)
|
|
-
|
|
|
|
|
|
+
|
|
self._mgr.AddPane(self.toolbars[name],
|
|
self._mgr.AddPane(self.toolbars[name],
|
|
wx.aui.AuiPaneInfo().
|
|
wx.aui.AuiPaneInfo().
|
|
Name(name).Caption(_("Misc Toolbar")).
|
|
Name(name).Caption(_("Misc Toolbar")).
|
|
@@ -218,10 +221,10 @@ class ExampleMapFrame(SingleMapFrame):
|
|
BottomDockable(False).TopDockable(True).
|
|
BottomDockable(False).TopDockable(True).
|
|
CloseButton(False).Layer(1).Row(1).
|
|
CloseButton(False).Layer(1).Row(1).
|
|
BestSize((self.toolbars[name].GetBestSize())))
|
|
BestSize((self.toolbars[name].GetBestSize())))
|
|
-
|
|
|
|
|
|
+
|
|
if name == "MainToolbar":
|
|
if name == "MainToolbar":
|
|
self.toolbars[name] = ExampleMainToolbar(self)
|
|
self.toolbars[name] = ExampleMainToolbar(self)
|
|
-
|
|
|
|
|
|
+
|
|
self._mgr.AddPane(self.toolbars[name],
|
|
self._mgr.AddPane(self.toolbars[name],
|
|
wx.aui.AuiPaneInfo().
|
|
wx.aui.AuiPaneInfo().
|
|
Name(name).Caption(_("Main Toolbar")).
|
|
Name(name).Caption(_("Main Toolbar")).
|
|
@@ -230,95 +233,97 @@ class ExampleMapFrame(SingleMapFrame):
|
|
BottomDockable(False).TopDockable(True).
|
|
BottomDockable(False).TopDockable(True).
|
|
CloseButton(False).Layer(1).Row(1).
|
|
CloseButton(False).Layer(1).Row(1).
|
|
BestSize((self.toolbars[name].GetBestSize())))
|
|
BestSize((self.toolbars[name].GetBestSize())))
|
|
-
|
|
|
|
|
|
+
|
|
def GetMapToolbar(self):
|
|
def GetMapToolbar(self):
|
|
"""!Returns toolbar with zooming tools"""
|
|
"""!Returns toolbar with zooming tools"""
|
|
return self.toolbars['MapToolbar']
|
|
return self.toolbars['MapToolbar']
|
|
-
|
|
|
|
|
|
+
|
|
def OnHelp(self, event):
|
|
def OnHelp(self, event):
|
|
"""!Show help page"""
|
|
"""!Show help page"""
|
|
- RunCommand('g.manual', entry = 'wxGUI.Example')
|
|
|
|
-
|
|
|
|
|
|
+ RunCommand('g.manual', entry='wxGUI.Example')
|
|
|
|
+
|
|
def OnSelectRaster(self, event):
|
|
def OnSelectRaster(self, event):
|
|
"""!Opens dialog to select raster map"""
|
|
"""!Opens dialog to select raster map"""
|
|
dlg = ExampleMapDialog(self)
|
|
dlg = ExampleMapDialog(self)
|
|
-
|
|
|
|
|
|
+
|
|
if dlg.ShowModal() == wx.ID_OK:
|
|
if dlg.ShowModal() == wx.ID_OK:
|
|
- raster = grass.find_file(name = dlg.GetRasterMap(), element = 'cell')
|
|
|
|
|
|
+ raster = gcore.find_file(name=dlg.GetRasterMap(), element='cell')
|
|
if raster['fullname']:
|
|
if raster['fullname']:
|
|
- self.SetLayer(name = raster['fullname'])
|
|
|
|
-
|
|
|
|
|
|
+ self.SetLayer(name=raster['fullname'])
|
|
|
|
+ else:
|
|
|
|
+ # show user that the map name is incorrect
|
|
|
|
+ GError(parent=self,
|
|
|
|
+ message=_("Raster map <{raster}> not found").format(raster=dlg.GetRasterMap()))
|
|
|
|
+
|
|
dlg.Destroy()
|
|
dlg.Destroy()
|
|
-
|
|
|
|
|
|
+
|
|
def SetLayer(self, name):
|
|
def SetLayer(self, name):
|
|
"""!Sets layer in Map and updates statistics.
|
|
"""!Sets layer in Map and updates statistics.
|
|
-
|
|
|
|
|
|
+
|
|
@param name layer (raster) name
|
|
@param name layer (raster) name
|
|
"""
|
|
"""
|
|
Debug.msg (3, "ExampleMapFrame.SetLayer(): name=%s" % name)
|
|
Debug.msg (3, "ExampleMapFrame.SetLayer(): name=%s" % name)
|
|
-
|
|
|
|
|
|
+
|
|
# this simple application enables to keep only one raster
|
|
# this simple application enables to keep only one raster
|
|
self.GetMap().DeleteAllLayers()
|
|
self.GetMap().DeleteAllLayers()
|
|
cmdlist = ['d.rast', 'map=%s' % name]
|
|
cmdlist = ['d.rast', 'map=%s' % name]
|
|
# add layer to Map instance (core.render)
|
|
# add layer to Map instance (core.render)
|
|
- newLayer = self.GetMap().AddLayer(ltype = 'raster', command = cmdlist, active = True,
|
|
|
|
- name = name, hidden = False, opacity = 1.0,
|
|
|
|
- render = True)
|
|
|
|
- self.GetWindow().ZoomToMap(layers = [newLayer,], render = True)
|
|
|
|
|
|
+ newLayer = self.GetMap().AddLayer(ltype='raster', command=cmdlist, active=True,
|
|
|
|
+ name=name, hidden=False, opacity=1.0,
|
|
|
|
+ render=True)
|
|
|
|
+ self.GetWindow().ZoomToMap(layers=[newLayer, ], render=True)
|
|
self.currentRaster = name
|
|
self.currentRaster = name
|
|
-
|
|
|
|
|
|
+
|
|
# change comp. region to match new raster, so that the statistics
|
|
# change comp. region to match new raster, so that the statistics
|
|
# are computed for the entire raster
|
|
# are computed for the entire raster
|
|
RunCommand('g.region',
|
|
RunCommand('g.region',
|
|
- rast = self.currentRaster,
|
|
|
|
- parent = self)
|
|
|
|
-
|
|
|
|
|
|
+ rast=self.currentRaster,
|
|
|
|
+ parent=self)
|
|
|
|
+
|
|
self.UpdateStatistics()
|
|
self.UpdateStatistics()
|
|
-
|
|
|
|
|
|
+
|
|
def ComputeStatitistics(self):
|
|
def ComputeStatitistics(self):
|
|
"""!Computes statistics for raster map using 'r.univar' module.
|
|
"""!Computes statistics for raster map using 'r.univar' module.
|
|
-
|
|
|
|
- @return statistic in form of dictionary
|
|
|
|
|
|
+
|
|
|
|
+ @return statistic in form of dictionary
|
|
"""
|
|
"""
|
|
# RunCommand enables to run GRASS module
|
|
# 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)
|
|
|
|
-
|
|
|
|
|
|
+ res = RunCommand('r.univar', # module name
|
|
|
|
+ flags='g', # command flags
|
|
|
|
+ map=self.currentRaster, # module parameters
|
|
|
|
+ read=True) # get command output
|
|
|
|
+
|
|
|
|
+ return gcore.parse_key_val(res, val_type=float)
|
|
|
|
+
|
|
def UpdateStatistics(self):
|
|
def UpdateStatistics(self):
|
|
"""!Upadate statistic information.
|
|
"""!Upadate statistic information.
|
|
-
|
|
|
|
|
|
+
|
|
Called after changing raster map.
|
|
Called after changing raster map.
|
|
"""
|
|
"""
|
|
stats = self.ComputeStatitistics()
|
|
stats = self.ComputeStatitistics()
|
|
- self.info.WriteStatistics(name = self.currentRaster, statDict = stats)
|
|
|
|
-
|
|
|
|
-
|
|
|
|
|
|
+ self.info.WriteStatistics(name=self.currentRaster, statDict=stats)
|
|
|
|
+
|
|
|
|
+
|
|
class ExampleInfoTextManager:
|
|
class ExampleInfoTextManager:
|
|
"""!Class for displaying information.
|
|
"""!Class for displaying information.
|
|
-
|
|
|
|
- Wrraper for wx.TextCtrl.
|
|
|
|
|
|
+
|
|
|
|
+ Wrraper for wx.TextCtrl.
|
|
"""
|
|
"""
|
|
def __init__(self, parent):
|
|
def __init__(self, parent):
|
|
"""!Creates wx.TextCtrl for displaying information.
|
|
"""!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 = wx.TextCtrl(parent, id=wx.ID_ANY,
|
|
|
|
+ style=wx.TE_MULTILINE | wx.TE_RICH2 | wx.TE_READONLY)
|
|
self.textCtrl.SetInsertionPoint(0)
|
|
self.textCtrl.SetInsertionPoint(0)
|
|
- self.textCtrl.Disable()
|
|
|
|
self.font = self.textCtrl.GetFont()
|
|
self.font = self.textCtrl.GetFont()
|
|
- self.bgColor = wx.SystemSettings.GetColour(wx.SYS_COLOUR_BACKGROUND)
|
|
|
|
-
|
|
|
|
|
|
+
|
|
def GetControl(self):
|
|
def GetControl(self):
|
|
"""!Returns control itself."""
|
|
"""!Returns control itself."""
|
|
return self.textCtrl
|
|
return self.textCtrl
|
|
-
|
|
|
|
|
|
+
|
|
def _setStyle(self, style):
|
|
def _setStyle(self, style):
|
|
"""!Sets default style of textCtrl.
|
|
"""!Sets default style of textCtrl.
|
|
-
|
|
|
|
|
|
+
|
|
@param style "title"/"value"
|
|
@param style "title"/"value"
|
|
"""
|
|
"""
|
|
if style == "title":
|
|
if style == "title":
|
|
@@ -327,44 +332,28 @@ class ExampleInfoTextManager:
|
|
self.font.SetWeight(wx.FONTWEIGHT_NORMAL)
|
|
self.font.SetWeight(wx.FONTWEIGHT_NORMAL)
|
|
else:
|
|
else:
|
|
return
|
|
return
|
|
-
|
|
|
|
- self.textCtrl.SetDefaultStyle(wx.TextAttr(colBack = self.bgColor, font = self.font))
|
|
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+ self.textCtrl.SetDefaultStyle(wx.TextAttr(font=self.font))
|
|
|
|
+
|
|
def _writeLine(self, title, value):
|
|
def _writeLine(self, title, value):
|
|
"""!Formats text (key, value pair) with styles."""
|
|
"""!Formats text (key, value pair) with styles."""
|
|
self._setStyle("title")
|
|
self._setStyle("title")
|
|
self.textCtrl.AppendText("%s: " % title)
|
|
self.textCtrl.AppendText("%s: " % title)
|
|
self._setStyle("value")
|
|
self._setStyle("value")
|
|
self.textCtrl.AppendText("%.2f\n" % value)
|
|
self.textCtrl.AppendText("%.2f\n" % value)
|
|
-
|
|
|
|
|
|
+
|
|
def _writeRasterTitle(self, name):
|
|
def _writeRasterTitle(self, name):
|
|
"""!Writes title."""
|
|
"""!Writes title."""
|
|
self._setStyle("title")
|
|
self._setStyle("title")
|
|
self.textCtrl.AppendText("%s\n\n" % name)
|
|
self.textCtrl.AppendText("%s\n\n" % name)
|
|
-
|
|
|
|
|
|
+
|
|
def WriteStatistics(self, name, statDict):
|
|
def WriteStatistics(self, name, statDict):
|
|
"""!Write and format information about raster map
|
|
"""!Write and format information about raster map
|
|
-
|
|
|
|
|
|
+
|
|
@param name raster map name
|
|
@param name raster map name
|
|
@param statDict dictionary containing information
|
|
@param statDict dictionary containing information
|
|
"""
|
|
"""
|
|
self.GetControl().Clear()
|
|
self.GetControl().Clear()
|
|
- self._writeRasterTitle(name = name)
|
|
|
|
|
|
+ self._writeRasterTitle(name=name)
|
|
for key, value in statDict.iteritems():
|
|
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()
|
|
|
|
|
|
+ self._writeLine(title=key, value=value)
|