toolbars.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. """!
  2. @package psmap.toolbars
  3. @brief wxPsMap toolbars classes
  4. Classes:
  5. - toolbars::PsMapToolbar
  6. (C) 2007-2011 by the GRASS Development Team
  7. This program is free software under the GNU General Public License
  8. (>=v2). Read the file COPYING that comes with GRASS for details.
  9. @author Anna Kratochvilova <kratochanna gmail.com>
  10. """
  11. import sys
  12. import wx
  13. from core import globalvar
  14. from core.utils import _
  15. from gui_core.toolbars import BaseToolbar, BaseIcons
  16. from icons.icon import MetaIcon
  17. class PsMapToolbar(BaseToolbar):
  18. def __init__(self, parent, toolSwitcher):
  19. """!Toolbar Cartographic Composer (psmap.py)
  20. @param parent parent window
  21. """
  22. BaseToolbar.__init__(self, parent, toolSwitcher)
  23. self.InitToolbar(self._toolbarData())
  24. self._default = self.pointer
  25. for tool in (self.pointer, self.pan, self.zoomin, self.zoomout,
  26. self.drawGraphics, self.addMap):
  27. self.toolSwitcher.AddToolToGroup(group='mouseUse', toolbar=self, tool=tool)
  28. # custom button for graphics mode selection
  29. # TODO: could this be somehow generalized?
  30. self.arrowButton = self.CreateSelectionButton()
  31. self.arrowButtonId = self.InsertControl(18, self.arrowButton)
  32. self.arrowButton.Bind(wx.EVT_BUTTON, self.OnDrawGraphicsMenu)
  33. self.drawGraphicsAction = None
  34. self.OnAddPoint(event = None)
  35. self.Realize()
  36. from psmap.frame import havePILImage
  37. if not havePILImage:
  38. self.EnableTool(self.preview, False)
  39. def _toolbarData(self):
  40. """!Toolbar data
  41. """
  42. icons = {
  43. 'scriptSave' : MetaIcon(img = 'script-save',
  44. label = _('Generate text file with mapping instructions')),
  45. 'scriptLoad' : MetaIcon(img = 'script-load',
  46. label = _('Load text file with mapping instructions')),
  47. 'psExport' : MetaIcon(img = 'ps-export',
  48. label = _('Generate PostScript output')),
  49. 'pdfExport' : MetaIcon(img = 'pdf-export',
  50. label = _('Generate PDF output')),
  51. 'pageSetup' : MetaIcon(img = 'page-settings',
  52. label = _('Page setup'),
  53. desc = _('Specify paper size, margins and orientation')),
  54. 'fullExtent' : MetaIcon(img = 'zoom-extent',
  55. label = _("Full extent"),
  56. desc = _("Zoom to full extent")),
  57. 'addMap' : MetaIcon(img = 'layer-add',
  58. label = _("Map frame"),
  59. desc = _("Click and drag to place map frame")),
  60. 'deleteObj' : MetaIcon(img = 'layer-remove',
  61. label = _("Delete selected object")),
  62. 'preview' : MetaIcon(img = 'execute',
  63. label = _("Show preview")),
  64. 'quit' : MetaIcon(img = 'quit',
  65. label = _('Quit Cartographic Composer')),
  66. 'addText' : MetaIcon(img = 'text-add',
  67. label = _('Text')),
  68. 'addMapinfo' : MetaIcon(img = 'map-info',
  69. label = _('Map info')),
  70. 'addLegend' : MetaIcon(img = 'legend-add',
  71. label = _('Legend')),
  72. 'addScalebar' : MetaIcon(img = 'scalebar-add',
  73. label = _('Scale bar')),
  74. 'addImage' : MetaIcon(img = 'image-add',
  75. label = _('Image')),
  76. 'addNorthArrow': MetaIcon(img = 'north-arrow-add',
  77. label = _('North Arrow')),
  78. 'pointAdd' : MetaIcon(img = 'point-add',
  79. label = _('Point')),
  80. 'lineAdd' : MetaIcon(img = 'line-add',
  81. label = _('Line')),
  82. 'rectangleAdd': MetaIcon(img = 'rectangle-add',
  83. label = _('Rectangle')),
  84. 'overlaysAdd': MetaIcon(img = 'layer-more',
  85. label = _("Add overlays")),
  86. 'labelsAdd': MetaIcon(img = 'layer-label-add',
  87. label = _("Add labels"))
  88. }
  89. self.icons = icons
  90. return self._getToolbarData((('loadFile', icons['scriptLoad'],
  91. self.parent.OnLoadFile),
  92. ('instructionFile', icons['scriptSave'],
  93. self.parent.OnInstructionFile),
  94. (None, ),
  95. ('pagesetup', icons['pageSetup'],
  96. self.parent.OnPageSetup),
  97. (None, ),
  98. ("pointer", BaseIcons["pointer"],
  99. self.parent.OnPointer, wx.ITEM_CHECK),
  100. ('pan', BaseIcons['pan'],
  101. self.parent.OnPan, wx.ITEM_CHECK),
  102. ("zoomin", BaseIcons["zoomIn"],
  103. self.parent.OnZoomIn, wx.ITEM_CHECK),
  104. ("zoomout", BaseIcons["zoomOut"],
  105. self.parent.OnZoomOut, wx.ITEM_CHECK),
  106. ('zoomAll', icons['fullExtent'],
  107. self.parent.OnZoomAll),
  108. (None, ),
  109. ('addMap', icons['addMap'],
  110. self.parent.OnAddMap, wx.ITEM_CHECK),
  111. ('addRaster', BaseIcons['addRast'],
  112. self.parent.OnAddRaster),
  113. ('addVector', BaseIcons['addVect'],
  114. self.parent.OnAddVect),
  115. ('overlaysAdd', icons['overlaysAdd'],
  116. self.OnAddOverlays),
  117. ("delete", icons["deleteObj"],
  118. self.parent.OnDelete),
  119. ("dec", BaseIcons["overlay"],
  120. self.OnDecoration),
  121. ("drawGraphics", icons['pointAdd'],
  122. self.OnDrawGraphics, wx.ITEM_CHECK),
  123. (None, ),
  124. ("preview", icons["preview"],
  125. self.parent.OnPreview),
  126. ('generatePS', icons['psExport'],
  127. self.parent.OnPSFile),
  128. ('generatePDF', icons['pdfExport'],
  129. self.parent.OnPDFFile),
  130. (None, ),
  131. ("help", BaseIcons['help'],
  132. self.parent.OnHelp),
  133. ('quit', icons['quit'],
  134. self.parent.OnCloseWindow))
  135. )
  136. def OnDecoration(self, event):
  137. """!Decorations overlay menu
  138. """
  139. self._onMenu(((self.icons["addLegend"], self.parent.OnAddLegend),
  140. (self.icons["addMapinfo"], self.parent.OnAddMapinfo),
  141. (self.icons["addScalebar"], self.parent.OnAddScalebar),
  142. (self.icons["addText"], self.parent.OnAddText),
  143. (self.icons["addImage"], self.parent.OnAddImage),
  144. (self.icons["addNorthArrow"], self.parent.OnAddNorthArrow)))
  145. def OnAddOverlays(self, event):
  146. self._onMenu(((self.icons['labelsAdd'], self.parent.OnAddLabels), ))
  147. def OnDrawGraphics(self, event):
  148. """!Graphics tool activated."""
  149. # we need the previous id
  150. if self.drawGraphicsAction == 'pointAdd':
  151. self.parent.OnAddPoint(event)
  152. elif self.drawGraphicsAction == 'lineAdd':
  153. self.parent.OnAddLine(event)
  154. elif self.drawGraphicsAction == 'rectangleAdd':
  155. self.parent.OnAddRectangle(event)
  156. def OnDrawGraphicsMenu(self, event):
  157. """!Simple geometry features (point, line, rectangle) overlay menu
  158. """
  159. self._onMenu(((self.icons["pointAdd"], self.OnAddPoint),
  160. (self.icons["lineAdd"], self.OnAddLine),
  161. (self.icons["rectangleAdd"], self.OnAddRectangle),
  162. ))
  163. def OnAddPoint(self, event):
  164. """!Point mode selected.
  165. Graphics drawing tool is activated. Tooltip changed.
  166. """
  167. self.SetToolNormalBitmap(self.drawGraphics, self.icons["pointAdd"].GetBitmap())
  168. self.SetToolShortHelp(self.drawGraphics, _("Add simple graphics: points"))
  169. self.drawGraphicsAction = 'pointAdd'
  170. if event:
  171. self.ToggleTool(self.drawGraphics, True)
  172. self.parent.OnAddPoint(event)
  173. def OnAddLine(self, event):
  174. """!Line mode selected.
  175. Graphics drawing tool is activated. Tooltip changed.
  176. """
  177. self.SetToolNormalBitmap(self.drawGraphics, self.icons["lineAdd"].GetBitmap())
  178. self.SetToolShortHelp(self.drawGraphics, _("Add simple graphics: lines"))
  179. self.ToggleTool(self.drawGraphics, True)
  180. if event:
  181. self.drawGraphicsAction = 'lineAdd'
  182. self.parent.OnAddLine(event)
  183. def OnAddRectangle(self, event):
  184. """!Rectangle mode selected.
  185. Graphics drawing tool is activated. Tooltip changed.
  186. """
  187. self.SetToolNormalBitmap(self.drawGraphics, self.icons["rectangleAdd"].GetBitmap())
  188. self.SetToolShortHelp(self.drawGraphics, _("Add simple graphics: rectangles"))
  189. self.ToggleTool(self.drawGraphics, True)
  190. if event:
  191. self.drawGraphicsAction = 'rectangleAdd'
  192. self.parent.OnAddRectangle(event)