[GRASS-SVN] r42368 - grass/trunk/gui/wxpython/gui_modules

svn_grass at osgeo.org svn_grass at osgeo.org
Sat May 29 05:42:35 EDT 2010


Author: martinl
Date: 2010-05-29 05:42:34 -0400 (Sat, 29 May 2010)
New Revision: 42368

Modified:
   grass/trunk/gui/wxpython/gui_modules/histogram.py
   grass/trunk/gui/wxpython/gui_modules/toolbars.py
Log:
wxGUI/histogram: major clean up


Modified: grass/trunk/gui/wxpython/gui_modules/histogram.py
===================================================================
--- grass/trunk/gui/wxpython/gui_modules/histogram.py	2010-05-29 08:49:17 UTC (rev 42367)
+++ grass/trunk/gui/wxpython/gui_modules/histogram.py	2010-05-29 09:42:34 UTC (rev 42368)
@@ -1,73 +1,54 @@
-"""
-MODULE: histogram
+"""!
+ at package histogram.py
 
-CLASSES:
-    * BufferedWindow
-    * HistFrame
+Plotting histogram
 
-PURPOSE: Plotting histogram
+Classes:
+ - BufferedWindow
+ - HistFrame
 
-AUTHORS: The GRASS Development Team
-         Michael Barton
+COPYRIGHT: (C) 2007, 2010 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.
 
-COPYRIGHT: (C) 2007 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 Michael Barton
+ at author Various updates by Martin Landa
 """
 
+import os
+import sys
+
 import wx
-import wx.aui
-import os, sys, time, glob, math
-from threading import Thread
 
-import globalvar
-try:
-    import subprocess
-except:
-    CompatPath = os.path.join(globalvar.ETCWXDIR)
-    sys.path.append(CompatPath)
-    from compat import subprocess
-
-gmpath = os.path.join(globalvar.ETCWXDIR, "icons")
-sys.path.append(gmpath)
-
 import render
 import menuform
 import disp_print
 import utils
-from gui_modules.preferences import DefaultFontDialog as DefaultFontDialog
-from debug import Debug as Debug
-from icon import Icons as Icons
+import gdialogs
+import globalvar
+from toolbars import HistogramToolbar
+from preferences import DefaultFontDialog
+from debug import Debug
+from icon import Icons
 
-import images
-imagepath = images.__path__[0]
-sys.path.append(imagepath)
-
-os.environ["GRASS_BACKGROUNDCOLOR"] = "blue"
-
 class BufferedWindow(wx.Window):
-    """
-    A Buffered window class.
+    """!A Buffered window class.
 
     When the drawing needs to change, you app needs to call the
     UpdateHist() method. Since the drawing is stored in a bitmap, you
     can also save the drawing to file by calling the
     SaveToFile(self,file_name,file_type) method.
     """
-
-    def __init__(self, parent, id,
-                 pos = wx.DefaultPosition,
-                 size = wx.DefaultSize,
-                 style=wx.NO_FULL_REPAINT_ON_RESIZE,
-                 Map=None):
-
-        wx.Window.__init__(self, parent, id, pos, size, style)
-
+    def __init__(self, parent, id =  wx.ID_ANY,
+                 style = wx.NO_FULL_REPAINT_ON_RESIZE,
+                 Map = None, **kwargs):
+        
+        wx.Window.__init__(self, parent, id = id, style = style, **kwargs)
+        
         self.parent = parent
         self.Map = Map
         self.mapname = self.parent.mapname
-
+        
         #
         # Flags
         #
@@ -75,36 +56,34 @@
         self.resize = False # indicates whether or not a resize event has taken place
         self.dragimg = None # initialize variable for map panning
         self.pen = None     # pen for drawing zoom boxes, etc.
-
+        
         #
         # Event bindings
         #
         self.Bind(wx.EVT_PAINT,        self.OnPaint)
         self.Bind(wx.EVT_SIZE,         self.OnSize)
         self.Bind(wx.EVT_IDLE,         self.OnIdle)
-
+        
         #
         # Render output objects
         #
         self.mapfile = None # image file to be rendered
         self.img = ""       # wx.Image object (self.mapfile)
-
+        
         self.imagedict = {} # images and their PseudoDC ID's for painting and dragging
-
+        
         self.pdc = wx.PseudoDC()
-        self._Buffer = '' # will store an off screen empty bitmap for saving to file
-
+        self._buffer = '' # will store an off screen empty bitmap for saving to file
+        
         # make sure that extents are updated at init
         self.Map.region = self.Map.GetRegion()
         self.Map.SetRegion() 
-
+        
         self.Bind(wx.EVT_ERASE_BACKGROUND, lambda x:None)
-
-    def Draw(self, pdc, img=None, drawid=None, pdctype='image', coords=[0,0,0,0]):
+        
+    def Draw(self, pdc, img = None, drawid = None, pdctype = 'image', coords = [0,0,0,0]):
+        """!Draws histogram or clears window
         """
-        Draws histogram or clears window
-        """
-
         if drawid == None:
             if pdctype == 'image' :
                 drawid = imagedict[img]
@@ -114,11 +93,11 @@
                 drawid = wx.NewId()
         else:
             pdc.SetId(drawid)
-
+        
         pdc.BeginDrawing()
-
+        
         Debug.msg (3, "BufferedWindow.Draw(): id=%s, pdctype=%s, coord=%s" % (drawid, pdctype, coords))
-
+        
         if pdctype == 'clear': # erase the display
             bg = wx.WHITE_BRUSH
             pdc.SetBackground(bg)
@@ -126,7 +105,7 @@
             self.Refresh()
             pdc.EndDrawing()
             return
-
+        
         if pdctype == 'image':
             bg = wx.TRANSPARENT_BRUSH
             pdc.SetBackground(bg)
@@ -134,17 +113,15 @@
             w,h = bitmap.GetSize()
             pdc.DrawBitmap(bitmap, coords[0], coords[1], True) # draw the composite map
             pdc.SetIdBounds(drawid, (coords[0],coords[1],w,h))
-
+        
         pdc.EndDrawing()
         self.Refresh()
-
+        
     def OnPaint(self, event):
+        """!Draw psuedo DC to buffer
         """
-        Draw psuedo DC to buffer
-        """
-
-        dc = wx.BufferedPaintDC(self, self._Buffer)
-
+        dc = wx.BufferedPaintDC(self, self._buffer)
+        
         # use PrepareDC to set position correctly
         self.PrepareDC(dc)
         # we need to clear the dc BEFORE calling PrepareDC
@@ -157,80 +134,83 @@
         r = rgn.GetBox()
         # draw to the dc using the calculated clipping rect
         self.pdc.DrawToDCClipped(dc,r)
-
-
+        
     def OnSize(self, event):
+        """!Init image size to match window size
         """
-         Init image size to match window size
-        """
-
-            # set size of the input image
+        # set size of the input image
         self.Map.width, self.Map.height = self.GetClientSize()
-
+        
         # Make new off screen bitmap: this bitmap will always have the
         # current drawing in it, so it can be used to save the image to
         # a file, or whatever.
-        self._Buffer = wx.EmptyBitmap(self.Map.width, self.Map.height)
-
+        self._buffer = wx.EmptyBitmap(self.Map.width, self.Map.height)
+        
         # get the image to be rendered
         self.img = self.GetImage()
-
+        
         # update map display
         if self.img and self.Map.width + self.Map.height > 0: # scale image during resize
             self.img = self.img.Scale(self.Map.width, self.Map.height)
             self.render = False
             self.UpdateHist()
-
+        
         # re-render image on idle
         self.resize = True
-
+        
     def OnIdle(self, event):
+        """!Only re-render a histogram image from GRASS during idle
+        time instead of multiple times during resizing.
         """
-        Only re-render a histogram image from GRASS during
-        idle time instead of multiple times during resizing.
-            """
-
         if self.resize:
             self.render = True
             self.UpdateHist()
         event.Skip()
-
-    def SaveToFile(self, FileName, FileType):
+        
+    def SaveToFile(self, FileName, FileType, width, height):
+        """!This will save the contents of the buffer to the specified
+        file. See the wx.Windows docs for wx.Bitmap::SaveFile for the
+        details
         """
-        This will save the contents of the buffer
-        to the specified file. See the wx.Windows docs for
-        wx.Bitmap::SaveFile for the details
-        """
-        dc = wx.BufferedPaintDC(self, self._Buffer)
+        busy = wx.BusyInfo(message=_("Please wait, exporting image..."),
+                           parent=self)
+        wx.Yield()
+        
+        self.Map.ChangeMapSize((width, height))
+        ibuffer = wx.EmptyBitmap(max(1, width), max(1, height))
+        self.Map.Render(force=True, windres = True)
+        img = self.GetImage()
+        self.Draw(self.pdc, img, drawid = 99)
+        dc = wx.BufferedPaintDC(self, ibuffer)
+        dc.Clear()
+        self.PrepareDC(dc)
         self.pdc.DrawToDC(dc)
-        self._Buffer.SaveFile(FileName, FileType)
-
+        ibuffer.SaveFile(FileName, FileType)
+        
+        busy.Destroy()
+        
     def GetImage(self):
+        """!Converts files to wx.Image
         """
-        Converts files to wx.Image
-        """
         if self.Map.mapfile and os.path.isfile(self.Map.mapfile) and \
                 os.path.getsize(self.Map.mapfile):
             img = wx.Image(self.Map.mapfile, wx.BITMAP_TYPE_ANY)
         else:
             img = None
-
+        
         self.imagedict[img] = 99 # set image PeudoDC ID
         return img
-
-
-    def UpdateHist(self, img=None):
+    
+    def UpdateHist(self, img = None):
+        """!Update canvas if histogram options changes or window
+        changes geometry
         """
-        Update canvas if histogram options changes or window changes geometry
-        """
-
         Debug.msg (2, "BufferedWindow.UpdateHist(%s): render=%s" % (img, self.render))
         oldfont = ""
         oldencoding = ""
-
+        
         if self.render:
             # render new map images
-
             # set default font and encoding environmental variables
             if "GRASS_FONT" in os.environ:
                 oldfont = os.environ["GRASS_FONT"]
@@ -241,294 +221,230 @@
                 os.environ[GRASS_ENCODING] = self.parent.encoding
             
             # using active comp region
-            self.Map.GetRegion(update=True)
+            self.Map.GetRegion(update = True)
             
             self.Map.width, self.Map.height = self.GetClientSize()
-            self.mapfile = self.Map.Render(force=self.render)
+            self.mapfile = self.Map.Render(force = self.render)
             self.img = self.GetImage()
             self.resize = False
-
+        
         if not self.img: return
         try:
             id = self.imagedict[self.img]
         except:
             return
-
+        
         # paint images to PseudoDC
         self.pdc.Clear()
         self.pdc.RemoveAll()
-        self.Draw(self.pdc, self.img, drawid=id) # draw map image background
-
+        self.Draw(self.pdc, self.img, drawid = id) # draw map image background
+        
         self.resize = False
-
+        
         # update statusbar
         # Debug.msg (3, "BufferedWindow.UpdateHist(%s): region=%s" % self.Map.region)
         self.Map.SetRegion()
         self.parent.statusbar.SetStatusText("Raster/Image map layer <%s>" % self.parent.mapname)
-
+        
         # set default font and encoding environmental variables
         if oldfont != "":
             os.environ["GRASS_FONT"] = oldfont
         if oldencoding != "":
             os.environ["GRASS_ENCODING"] = oldencoding
-
+        
     def EraseMap(self):
+        """!Erase the map display
         """
-        Erase the map display
-        """
-        self.Draw(self.pdc, pdctype='clear')
-
+        self.Draw(self.pdc, pdctype = 'clear')
+        
 class HistFrame(wx.Frame):
+    """!Main frame for hisgram display window.  Uses d.histogram
+    rendered onto canvas
     """
-    Main frame for hisgram display window.
-    Uses d.histogram rendered onto canvas
-    """
-
-    def __init__(self, parent=None, id = wx.ID_ANY, title="Histogram of image or raster map",
-                 pos=wx.DefaultPosition, size=wx.DefaultSize,
-                 style=wx.DEFAULT_FRAME_STYLE):
-
-        wx.Frame.__init__(self, parent, id, title, pos, size, style)
-
-        toolbar = self.__createToolBar()
-
+    def __init__(self, parent = None, id = wx.ID_ANY,
+                 title = _("GRASS GIS Histogram of image or raster map"),
+                 style = wx.DEFAULT_FRAME_STYLE, **kwargs):
+        wx.Frame.__init__(self, parent, id, title, style = style, **kwargs)
+        self.SetIcon(wx.Icon(os.path.join(globalvar.ETCICONDIR, 'grass.ico'), wx.BITMAP_TYPE_ICO))
+        
         self.Map   = render.Map()  # instance of render.Map to be associated with display
         self.layer = None          # reference to layer with histogram
-        #
-        # Set the size & cursor
-        #
-        self.SetClientSize(size)
-        self.iconsize = (16, 16)
-
+        
         # Init variables
         self.params = {}  # previously set histogram parameters
         self.propwin = '' # ID of properties dialog
-
+        
         self.font = ""
         self.encoding = 'ISO-8859-1' # default encoding for display fonts
+        
+        self.toolbar = HistogramToolbar(parent = self)
+        self.SetToolBar(self.toolbar)
 
-        #
         # Add statusbar
-        #
         self.mapname = ''
-        self.statusbar = self.CreateStatusBar(number=1, style=0)
+        self.statusbar = self.CreateStatusBar(number = 1, style = 0)
         # self.statusbar.SetStatusWidths([-2, -1])
         hist_frame_statusbar_fields = ["Histogramming %s" % self.mapname]
         for i in range(len(hist_frame_statusbar_fields)):
             self.statusbar.SetStatusText(hist_frame_statusbar_fields[i], i)
-
-        #
+        
         # Init map display
-        #
         self.InitDisplay() # initialize region values
-
+        
         # initialize buffered DC
-        self.HistWindow = BufferedWindow(self, id = wx.ID_ANY, Map=self.Map) # initialize buffered DC
-
-        #
+        self.HistWindow = BufferedWindow(self, id = wx.ID_ANY, Map = self.Map) # initialize buffered DC
+        
         # Bind various events
-        #
         self.Bind(wx.EVT_CLOSE,    self.OnCloseWindow)
-
-        #
+        
         # Init print module and classes
-        #
         self.printopt = disp_print.PrintOptions(self, self.HistWindow)
-
-        #
+        
         # Add layer to the map
-        #
-        self.layer = self.Map.AddLayer(type="command", name='histogram', command=['d.histogram'],
-                                       l_active=False, l_hidden=False, l_opacity=1, l_render=False)
-
-
-    def __createToolBar(self):
-        """!Creates toolbar"""
-
-        toolbar = self.CreateToolBar()
-        for each in self.toolbarData():
-            self.AddToolbarButton(toolbar, *each)
-        toolbar.Realize()
-
-    def AddToolbarButton(self, toolbar, label, icon, help, handler):
-        """!Adds buttons to the toolbar"""
-
-        if not label:
-            toolbar.AddSeparator()
-            return
-        tool = toolbar.AddLabelTool(id=wx.ID_ANY, label=label, bitmap=icon, shortHelp=help)
-        self.Bind(wx.EVT_TOOL, handler, tool)
-
-    def toolbarData(self):
-
-        return   (
-                 ('histogram',
-                  Icons["histogram"].GetBitmap(),
-                  Icons["histogram"].GetLabel(),
-                  self.OnOptions),
-                 ('rendermap',
-                  Icons["displaymap"].GetBitmap(),
-                  Icons["displaymap"].GetLabel(),
-                  self.OnRender),
-                 ('erase',
-                  Icons["erase"].GetBitmap(),
-                  Icons["erase"].GetLabel(),
-                  self.OnErase),
-                 ('font',
-                  Icons["font"].GetBitmap(),
-                  Icons["font"].GetLabel(),
-                  self.SetHistFont),
-                 ('', '', '', ''),
-                 ('save', 
-                  Icons["savefile"].GetBitmap(),
-                  Icons["savefile"].GetLabel(),
-                  self.SaveToFile),
-                 ('print',
-                  Icons["printmap"].GetBitmap(),
-                  Icons["printmap"].GetLabel(),
-                  self.PrintMenu),
-                 ('quit', 
-                  Icons["quit"].GetBitmap(),
-                  Icons["quit"].GetLabel(),
-                  self.OnQuit))
-
+        self.layer = self.Map.AddLayer(type = "command", name = 'histogram', command = ['d.histogram'],
+                                       l_active = False, l_hidden = False, l_opacity = 1, l_render = False)
+        
     def InitDisplay(self):
+        """!Initialize histogram display, set dimensions and region
         """
-        Initialize histogram display, set dimensions and region
-        """
         self.width, self.height = self.GetClientSize()
         self.Map.geom = self.width, self.height
-
+        
     def OnOptions(self, event):
         """!Change histogram settings"""
-
         cmd = ['d.histogram']
         if self.mapname != '':
             cmd.append('map=%s' % self.mapname)
-
+        
         menuform.GUI().ParseCommand(cmd,
-                                    completed=(self.GetOptData, None, self.params),
-                                    parentframe=self)
+                                    completed = (self.GetOptData, None, self.params),
+                                    parentframe = self)
         
     def GetOptData(self, dcmd, layer, params, propwin):
+        """!Callback method for histogram command generated by dialog
+        created in menuform.py
         """
-        Callback method for histogram command generated by
-        dialog created in menuform.py
-        """
         if dcmd:
-            name = utils.GetLayerNameFromCmd(dcmd, fullyQualified=True)
+            name = utils.GetLayerNameFromCmd(dcmd, fullyQualified = True)
             self.SetHistLayer(name)
         self.params = params
         self.propwin = propwin
-
+        
         self.HistWindow.UpdateHist()
-
+        
     def SetHistLayer(self, name):
+        """!Set histogram layer
         """
-        Set histogram layer
-        """
         self.mapname = name
-
-        self.layer = self.Map.ChangeLayer(layer=self.layer,
-                                          command=[['d.histogram', 'map=%s' % self.mapname],],
-                                          active=True)
-
+        
+        self.layer = self.Map.ChangeLayer(layer = self.layer,
+                                          command = [['d.histogram', 'map=%s' % self.mapname],],
+                                          active = True)
+        
         return self.layer
 
     def SetHistFont(self, event):
+        """!Set font for histogram. If not set, font will be default
+        display font.
         """
-        Set font for histogram. If not
-        set, font will be default display font.
-        """
-
-        dlg = DefaultFontDialog(parent=self, id=wx.ID_ANY,
-                                title=_('Select font for histogram text'))        
+        dlg = DefaultFontDialog(parent = self, id = wx.ID_ANY,
+                                title = _('Select font for histogram text'))        
         dlg.fontlb.SetStringSelection(self.font, True)
         
         if dlg.ShowModal() == wx.ID_CANCEL:
             dlg.Destroy()
             return
-
+        
         # set default font type, font, and encoding to whatever selected in dialog
         if dlg.font != None:
             self.font = dlg.font
         if dlg.encoding != None:
             self.encoding = dlg.encoding
-
+        
         dlg.Destroy()
         self.HistWindow.UpdateHist()
 
     def OnErase(self, event):
+        """!Erase the histogram display
         """
-        Erase the histogram display
-        """
-        self.HistWindow.Draw(self.HistWindow.pdc, pdctype='clear')
-
+        self.HistWindow.Draw(self.HistWindow.pdc, pdctype = 'clear')
+        
     def OnRender(self, event):
+        """!Re-render histogram
         """
-        Re-render histogram
-        """
         self.HistWindow.UpdateHist()
-
+        
+    def GetWindow(self):
+        """!Get buffered window"""
+        return self.HistWindow
+    
     def SaveToFile(self, event):
+        """!Save to file
         """
-        Save to file
-        """
-        filetype =  "PNG file (*.png)|*.png|"\
-                    "TIF file (*.tif)|*.tif|"\
-                    "GIF file (*.gif)|*.gif"
-
-        dlg = wx.FileDialog(self, "Choose a file name to save the image as a PNG to",
-            defaultDir = "",
-            defaultFile = "",
-            wildcard = filetype,
-            style=wx.SAVE|wx.FD_OVERWRITE_PROMPT)
+        filetype, ltype = gdialogs.GetImageHandlers(self.HistWindow.img)
+        
+        # get size
+        dlg = gdialogs.ImageSizeDialog(self)
+        dlg.CentreOnParent()
+        if dlg.ShowModal() != wx.ID_OK:
+            dlg.Destroy()
+            return
+        width, height = dlg.GetValues()
+        dlg.Destroy()
+        
+        # get filename
+        dlg = wx.FileDialog(parent = self,
+                            message = _("Choose a file name to save the image "
+                                        "(no need to add extension)"),
+                            wildcard = filetype,
+                            style=wx.SAVE | wx.FD_OVERWRITE_PROMPT)
+        
         if dlg.ShowModal() == wx.ID_OK:
-            base = os.path.splitext(dlg.GetPath())[0]
-            ext = os.path.splitext(dlg.GetPath())[1]
-            if dlg.GetFilterIndex() == 0:
-                type = wx.BITMAP_TYPE_PNG
-                path = dlg.GetPath()
-                if ext != '.png': path = base+'.png'
-            elif dlg.GetFilterIndex() == 1:
-                type = wx.BITMAP_TYPE_TIF
-                if ext != '.tif': path = base+'.tif'
-            elif dlg.GetFilterIndex() == 2:
-                type = wx.BITMAP_TYPE_TIF
-                if ext != '.gif': path = base+'.gif'
-            self.HistWindow.SaveToFile(path, type)
+            path = dlg.GetPath()
+            if not path:
+                dlg.Destroy()
+                return
+            
+            base, ext = os.path.splitext(path)
+            fileType = ltype[dlg.GetFilterIndex()]['type']
+            extType  = ltype[dlg.GetFilterIndex()]['ext']
+            if ext != extType:
+                path = base + '.' + extType
+            
+            self.HistWindow.SaveToFile(path, fileType,
+                                       width, height)
+        
+        self.HistWindow.UpdateHist()
         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
-        setup = wx.MenuItem(printmenu, -1,'Page setup')
+        setup = wx.MenuItem(printmenu, id = wx.ID_ANY, text = _('Page setup'))
         printmenu.AppendItem(setup)
         self.Bind(wx.EVT_MENU, self.printopt.OnPageSetup, setup)
-
-        preview = wx.MenuItem(printmenu, -1,'Print preview')
+        
+        preview = wx.MenuItem(printmenu, id = wx.ID_ANY, text = _('Print preview'))
         printmenu.AppendItem(preview)
         self.Bind(wx.EVT_MENU, self.printopt.OnPrintPreview, preview)
-
-        doprint = wx.MenuItem(printmenu, -1,'Print display')
+        
+        doprint = wx.MenuItem(printmenu, id = wx.ID_ANY, text = _('Print display'))
         printmenu.AppendItem(doprint)
         self.Bind(wx.EVT_MENU, self.printopt.OnDoPrint, doprint)
-
+        
         # Popup the menu.  If an item is selected then its handler
         # will be called before PopupMenu returns.
         self.PopupMenu(printmenu)
         printmenu.Destroy()
-
+        
     def OnQuit(self, event):
         self.Close(True)
-
+        
     def OnCloseWindow(self, event):
-        """
-        Window closed
+        """!Window closed
         Also remove associated rendered images
         """
         try:
@@ -537,5 +453,4 @@
             pass
         self.Map.Clean()
         self.Destroy()
-
-
+        

Modified: grass/trunk/gui/wxpython/gui_modules/toolbars.py
===================================================================
--- grass/trunk/gui/wxpython/gui_modules/toolbars.py	2010-05-29 08:49:17 UTC (rev 42367)
+++ grass/trunk/gui/wxpython/gui_modules/toolbars.py	2010-05-29 09:42:34 UTC (rev 42368)
@@ -12,7 +12,8 @@
  - ProfileToolbar
  - NvizToolbar
  - ModelToolbar
-
+ - HistogramToolbar
+ 
 (C) 2007-2010 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.
@@ -1447,5 +1448,52 @@
              wx.ITEM_NORMAL, Icons['quit'].GetLabel(), Icons['quit'].GetDesc(),
              self.parent.OnCloseWindow),
             )
+
+class HistogramToolbar(AbstractToolbar):
+    """!Histogram modeler toolbar (see histogram.py)
+    """
+    def __init__(self, parent):
+        AbstractToolbar.__init__(self, parent)
+        
+        self.InitToolbar(self.ToolbarData())
+        
+        # realize the toolbar
+        self.Realize()
+        
+    def ToolbarData(self):
+        """!Toolbar data"""
+        self.histogram = wx.NewId()
+        self.rendermap = wx.NewId()
+        self.erase = wx.NewId()
+        self.font = wx.NewId()
+        self.save = wx.NewId()
+        self.hprint = wx.NewId()
+        self.quit = wx.NewId()
+        
+        # tool, label, bitmap, kind, shortHelp, longHelp, handler
+        return (
+            (self.histogram, 'histogram', Icons["histogram"].GetBitmap(),
+             wx.ITEM_NORMAL, Icons["histogram"].GetLabel(), Icons["histogram"].GetDesc(),
+             self.parent.OnOptions),
+            (self.rendermap, 'rendermap', Icons["displaymap"].GetBitmap(),
+             wx.ITEM_NORMAL, Icons["displaymap"].GetLabel(), Icons["displaymap"].GetDesc(),
+             self.parent.OnRender),
+            (self.erase, 'erase', Icons["erase"].GetBitmap(),
+             wx.ITEM_NORMAL, Icons["erase"].GetLabel(), Icons["erase"].GetDesc(),
+             self.parent.OnErase),
+            (self.font, 'font', Icons["font"].GetBitmap(),
+             wx.ITEM_NORMAL, Icons["font"].GetLabel(), Icons["font"].GetDesc(),
+             self.parent.SetHistFont),
+            ('', '', '', '', '', '', ''),
+            (self.save, 'save', Icons["savefile"].GetBitmap(),
+             wx.ITEM_NORMAL, Icons["savefile"].GetLabel(), Icons["savefile"].GetDesc(),
+             self.parent.SaveToFile),
+            (self.hprint, 'print', Icons["printmap"].GetBitmap(),
+             wx.ITEM_NORMAL, Icons["printmap"].GetLabel(), Icons["printmap"].GetDesc(),
+             self.parent.PrintMenu),
+            ('', '', '', '', '', '', ''),
+            (self.quit, 'quit', Icons["quit"].GetBitmap(),
+             wx.ITEM_NORMAL, Icons["quit"].GetLabel(), Icons["quit"].GetDesc(),
+             self.parent.OnQuit)
+            )
     
-    



More information about the grass-commit mailing list