""" @package psmap.toolbars @brief wxPsMap toolbars classes Classes: - toolbars::PsMapToolbar (C) 2007-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. @author Anna Kratochvilova """ import sys import wx from core import globalvar from gui_core.toolbars import BaseToolbar, BaseIcons from icons.icon import MetaIcon class PsMapToolbar(BaseToolbar): def __init__(self, parent, toolSwitcher): """Toolbar Cartographic Composer (psmap.py) :param parent: parent window """ BaseToolbar.__init__(self, parent, toolSwitcher) # workaround for http://trac.wxwidgets.org/ticket/13888 if sys.platform == 'darwin': parent.SetToolBar(self) self.InitToolbar(self._toolbarData()) self._default = self.pointer for tool in (self.pointer, self.pan, self.zoomin, self.zoomout, self.drawGraphics, self.addMap): self.toolSwitcher.AddToolToGroup( group='mouseUse', toolbar=self, tool=tool) # custom button for graphics mode selection # TODO: could this be somehow generalized? self.arrowButton = self.CreateSelectionButton() self.arrowButtonId = self.InsertControl(18, self.arrowButton) self.arrowButton.Bind(wx.EVT_BUTTON, self.OnDrawGraphicsMenu) self.drawGraphicsAction = None self.OnAddPoint(event=None) self.Realize() from psmap.frame import havePILImage if not havePILImage: self.EnableTool(self.preview, False) def _toolbarData(self): """Toolbar data """ icons = { 'scriptSave': MetaIcon(img='script-save', label=_('Generate text file with mapping instructions')), 'scriptLoad': MetaIcon(img='script-load', label=_('Load text file with mapping instructions')), 'psExport': MetaIcon(img='ps-export', label=_('Generate PostScript output')), 'pdfExport': MetaIcon(img='pdf-export', label=_('Generate PDF output')), 'pageSetup': MetaIcon(img='page-settings', label=_('Page setup'), desc=_('Specify paper size, margins and orientation')), 'fullExtent': MetaIcon(img='zoom-extent', label=_("Full extent"), desc=_("Zoom to full extent")), 'addMap': MetaIcon(img='layer-add', label=_("Map frame"), desc=_("Click and drag to place map frame")), 'deleteObj': MetaIcon(img='layer-remove', label=_("Delete selected object")), 'preview': MetaIcon(img='execute', label=_("Show preview")), 'quit': MetaIcon(img='quit', label=_('Quit Cartographic Composer')), 'addText': MetaIcon(img='text-add', label=_('Text')), 'addMapinfo': MetaIcon(img='map-info', label=_('Map info')), 'addLegend': MetaIcon(img='legend-add', label=_('Legend')), 'addScalebar': MetaIcon(img='scalebar-add', label=_('Scale bar')), 'addImage': MetaIcon(img='image-add', label=_('Image')), 'addNorthArrow': MetaIcon(img='north-arrow-add', label=_('North Arrow')), 'pointAdd': MetaIcon(img='point-add', label=_('Point')), 'lineAdd': MetaIcon(img='line-add', label=_('Line')), 'rectangleAdd': MetaIcon(img='rectangle-add', label=_('Rectangle')), 'overlaysAdd': MetaIcon(img='layer-more', label=_("Add overlays")), 'labelsAdd': MetaIcon(img='layer-label-add', label=_("Add labels")) } self.icons = icons return self._getToolbarData((('loadFile', icons['scriptLoad'], self.parent.OnLoadFile), ('instructionFile', icons['scriptSave'], self.parent.OnInstructionFile), (None, ), ('pagesetup', icons['pageSetup'], self.parent.OnPageSetup), (None, ), ("pointer", BaseIcons["pointer"], self.parent.OnPointer, wx.ITEM_CHECK), ('pan', BaseIcons['pan'], self.parent.OnPan, wx.ITEM_CHECK), ("zoomin", BaseIcons["zoomIn"], self.parent.OnZoomIn, wx.ITEM_CHECK), ("zoomout", BaseIcons["zoomOut"], self.parent.OnZoomOut, wx.ITEM_CHECK), ('zoomAll', icons['fullExtent'], self.parent.OnZoomAll), (None, ), ('addMap', icons['addMap'], self.parent.OnAddMap, wx.ITEM_CHECK), ('addRaster', BaseIcons['addRast'], self.parent.OnAddRaster), ('addVector', BaseIcons['addVect'], self.parent.OnAddVect), ('overlaysAdd', icons['overlaysAdd'], self.OnAddOverlays), ("delete", icons["deleteObj"], self.parent.OnDelete), ("dec", BaseIcons["overlay"], self.OnDecoration), ("drawGraphics", icons['pointAdd'], self.OnDrawGraphics, wx.ITEM_CHECK), (None, ), ("preview", icons["preview"], self.parent.OnPreview), ('generatePS', icons['psExport'], self.parent.OnPSFile), ('generatePDF', icons['pdfExport'], self.parent.OnPDFFile), (None, ), ("help", BaseIcons['help'], self.parent.OnHelp), ('quit', icons['quit'], self.parent.OnCloseWindow)) ) def OnDecoration(self, event): """Decorations overlay menu """ self._onMenu(((self.icons["addLegend"], self.parent.OnAddLegend), (self.icons["addMapinfo"], self.parent.OnAddMapinfo), (self.icons["addScalebar"], self.parent.OnAddScalebar), (self.icons["addText"], self.parent.OnAddText), (self.icons["addImage"], self.parent.OnAddImage), (self.icons["addNorthArrow"], self.parent.OnAddNorthArrow))) def OnAddOverlays(self, event): self._onMenu(((self.icons['labelsAdd'], self.parent.OnAddLabels), )) def OnDrawGraphics(self, event): """Graphics tool activated.""" # we need the previous id if self.drawGraphicsAction == 'pointAdd': self.parent.OnAddPoint(event) elif self.drawGraphicsAction == 'lineAdd': self.parent.OnAddLine(event) elif self.drawGraphicsAction == 'rectangleAdd': self.parent.OnAddRectangle(event) def OnDrawGraphicsMenu(self, event): """Simple geometry features (point, line, rectangle) overlay menu """ self._onMenu(((self.icons["pointAdd"], self.OnAddPoint), (self.icons["lineAdd"], self.OnAddLine), (self.icons["rectangleAdd"], self.OnAddRectangle), )) def OnAddPoint(self, event): """Point mode selected. Graphics drawing tool is activated. Tooltip changed. """ self.SetToolNormalBitmap( self.drawGraphics, self.icons["pointAdd"].GetBitmap()) self.SetToolShortHelp( self.drawGraphics, _("Add simple graphics: points")) self.drawGraphicsAction = 'pointAdd' if event: self.ToggleTool(self.drawGraphics, True) self.parent.OnAddPoint(event) def OnAddLine(self, event): """Line mode selected. Graphics drawing tool is activated. Tooltip changed. """ self.SetToolNormalBitmap( self.drawGraphics, self.icons["lineAdd"].GetBitmap()) self.SetToolShortHelp( self.drawGraphics, _("Add simple graphics: lines")) self.ToggleTool(self.drawGraphics, True) if event: self.drawGraphicsAction = 'lineAdd' self.parent.OnAddLine(event) def OnAddRectangle(self, event): """Rectangle mode selected. Graphics drawing tool is activated. Tooltip changed. """ self.SetToolNormalBitmap( self.drawGraphics, self.icons["rectangleAdd"].GetBitmap()) self.SetToolShortHelp( self.drawGraphics, _("Add simple graphics: rectangles")) self.ToggleTool(self.drawGraphics, True) if event: self.drawGraphicsAction = 'rectangleAdd' self.parent.OnAddRectangle(event)