toolbars.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  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 gui_core.toolbars import BaseToolbar, BaseIcons
  14. from icons.icon import MetaIcon
  15. class PsMapToolbar(BaseToolbar):
  16. def __init__(self, parent, toolSwitcher):
  17. """Toolbar Cartographic Composer (psmap.py)
  18. :param parent: parent window
  19. """
  20. BaseToolbar.__init__(self, parent, toolSwitcher)
  21. # workaround for http://trac.wxwidgets.org/ticket/13888
  22. if sys.platform == "darwin":
  23. parent.SetToolBar(self)
  24. self.InitToolbar(self._toolbarData())
  25. self._default = self.pointer
  26. for tool in (
  27. self.pointer,
  28. self.pan,
  29. self.zoomin,
  30. self.zoomout,
  31. self.drawGraphics,
  32. self.addMap,
  33. ):
  34. self.toolSwitcher.AddToolToGroup(group="mouseUse", toolbar=self, tool=tool)
  35. # custom button for graphics mode selection
  36. # TODO: could this be somehow generalized?
  37. self.arrowButton = self.CreateSelectionButton()
  38. self.arrowButtonId = self.InsertControl(18, self.arrowButton)
  39. self.arrowButton.Bind(wx.EVT_BUTTON, self.OnDrawGraphicsMenu)
  40. self.drawGraphicsAction = None
  41. self.OnAddPoint(event=None)
  42. self.Realize()
  43. from psmap.frame import havePILImage
  44. if not havePILImage:
  45. self.EnableTool(self.preview, False)
  46. def _toolbarData(self):
  47. """Toolbar data"""
  48. icons = {
  49. "scriptSave": MetaIcon(
  50. img="script-save",
  51. label=_("Generate text file with mapping instructions"),
  52. ),
  53. "scriptLoad": MetaIcon(
  54. img="script-load", label=_("Load text file with mapping instructions")
  55. ),
  56. "psExport": MetaIcon(
  57. img="ps-export", label=_("Generate PostScript output")
  58. ),
  59. "pdfExport": MetaIcon(img="pdf-export", label=_("Generate PDF output")),
  60. "pageSetup": MetaIcon(
  61. img="page-settings",
  62. label=_("Page setup"),
  63. desc=_("Specify paper size, margins and orientation"),
  64. ),
  65. "fullExtent": MetaIcon(
  66. img="zoom-extent", label=_("Full extent"), desc=_("Zoom to full extent")
  67. ),
  68. "addMap": MetaIcon(
  69. img="layer-add",
  70. label=_("Map frame"),
  71. desc=_("Click and drag to place map frame"),
  72. ),
  73. "deleteObj": MetaIcon(
  74. img="layer-remove", label=_("Delete selected object")
  75. ),
  76. "preview": MetaIcon(img="execute", label=_("Show preview")),
  77. "addText": MetaIcon(img="text-add", label=_("Text")),
  78. "addMapinfo": MetaIcon(img="map-info", label=_("Map info")),
  79. "addLegend": MetaIcon(img="legend-add", label=_("Legend")),
  80. "addScalebar": MetaIcon(img="scalebar-add", label=_("Scale bar")),
  81. "addImage": MetaIcon(img="image-add", label=_("Image")),
  82. "addNorthArrow": MetaIcon(img="north-arrow-add", label=_("North Arrow")),
  83. "pointAdd": MetaIcon(img="point-add", label=_("Point")),
  84. "lineAdd": MetaIcon(img="line-add", label=_("Line")),
  85. "rectangleAdd": MetaIcon(img="rectangle-add", label=_("Rectangle")),
  86. "overlaysAdd": MetaIcon(img="layer-more", label=_("Add overlays")),
  87. "labelsAdd": MetaIcon(img="layer-label-add", label=_("Add labels")),
  88. }
  89. self.icons = icons
  90. return self._getToolbarData(
  91. (
  92. (
  93. ("loadFile", icons["scriptLoad"].label),
  94. icons["scriptLoad"],
  95. self.parent.OnLoadFile,
  96. ),
  97. (
  98. ("instructionFile", icons["scriptSave"].label),
  99. icons["scriptSave"],
  100. self.parent.OnInstructionFile,
  101. ),
  102. (None,),
  103. (
  104. ("pagesetup", icons["pageSetup"].label),
  105. icons["pageSetup"],
  106. self.parent.OnPageSetup,
  107. ),
  108. (None,),
  109. (
  110. ("pointer", BaseIcons["pointer"].label),
  111. BaseIcons["pointer"],
  112. self.parent.OnPointer,
  113. wx.ITEM_CHECK,
  114. ),
  115. (
  116. ("pan", BaseIcons["pan"].label),
  117. BaseIcons["pan"],
  118. self.parent.OnPan,
  119. wx.ITEM_CHECK,
  120. ),
  121. (
  122. ("zoomin", BaseIcons["zoomIn"].label),
  123. BaseIcons["zoomIn"],
  124. self.parent.OnZoomIn,
  125. wx.ITEM_CHECK,
  126. ),
  127. (
  128. ("zoomout", BaseIcons["zoomOut"].label),
  129. BaseIcons["zoomOut"],
  130. self.parent.OnZoomOut,
  131. wx.ITEM_CHECK,
  132. ),
  133. (
  134. ("zoomAll", icons["fullExtent"].label),
  135. icons["fullExtent"],
  136. self.parent.OnZoomAll,
  137. ),
  138. (None,),
  139. (
  140. ("addMap", icons["addMap"].label),
  141. icons["addMap"],
  142. self.parent.OnAddMap,
  143. wx.ITEM_CHECK,
  144. ),
  145. (
  146. ("addRaster", BaseIcons["addRast"].label),
  147. BaseIcons["addRast"],
  148. self.parent.OnAddRaster,
  149. ),
  150. (
  151. ("addVector", BaseIcons["addVect"].label),
  152. BaseIcons["addVect"],
  153. self.parent.OnAddVect,
  154. ),
  155. (
  156. ("overlaysAdd", icons["overlaysAdd"].label),
  157. icons["overlaysAdd"],
  158. self.OnAddOverlays,
  159. ),
  160. (
  161. ("delete", icons["deleteObj"].label),
  162. icons["deleteObj"],
  163. self.parent.OnDelete,
  164. ),
  165. (
  166. ("dec", BaseIcons["overlay"].label),
  167. BaseIcons["overlay"],
  168. self.OnDecoration,
  169. ),
  170. (
  171. ("drawGraphics", icons["pointAdd"].label),
  172. icons["pointAdd"],
  173. self.OnDrawGraphics,
  174. wx.ITEM_CHECK,
  175. ),
  176. (None,),
  177. (
  178. ("preview", icons["preview"].label),
  179. icons["preview"],
  180. self.parent.OnPreview,
  181. ),
  182. (
  183. ("generatePS", icons["psExport"].label),
  184. icons["psExport"],
  185. self.parent.OnPSFile,
  186. ),
  187. (
  188. ("generatePDF", icons["pdfExport"].label),
  189. icons["pdfExport"],
  190. self.parent.OnPDFFile,
  191. ),
  192. (None,),
  193. (
  194. ("help", BaseIcons["help"].label),
  195. BaseIcons["help"],
  196. self.parent.OnHelp,
  197. ),
  198. (
  199. ("quit", BaseIcons["quit"].label),
  200. BaseIcons["quit"],
  201. self.parent.OnCloseWindow,
  202. ),
  203. )
  204. )
  205. def OnDecoration(self, event):
  206. """Decorations overlay menu"""
  207. self._onMenu(
  208. (
  209. (self.icons["addLegend"], self.parent.OnAddLegend),
  210. (self.icons["addMapinfo"], self.parent.OnAddMapinfo),
  211. (self.icons["addScalebar"], self.parent.OnAddScalebar),
  212. (self.icons["addText"], self.parent.OnAddText),
  213. (self.icons["addImage"], self.parent.OnAddImage),
  214. (self.icons["addNorthArrow"], self.parent.OnAddNorthArrow),
  215. )
  216. )
  217. def OnAddOverlays(self, event):
  218. self._onMenu(((self.icons["labelsAdd"], self.parent.OnAddLabels),))
  219. def OnDrawGraphics(self, event):
  220. """Graphics tool activated."""
  221. # we need the previous id
  222. if self.drawGraphicsAction == "pointAdd":
  223. self.parent.OnAddPoint(event)
  224. elif self.drawGraphicsAction == "lineAdd":
  225. self.parent.OnAddLine(event)
  226. elif self.drawGraphicsAction == "rectangleAdd":
  227. self.parent.OnAddRectangle(event)
  228. def OnDrawGraphicsMenu(self, event):
  229. """Simple geometry features (point, line, rectangle) overlay menu"""
  230. self._onMenu(
  231. (
  232. (self.icons["pointAdd"], self.OnAddPoint),
  233. (self.icons["lineAdd"], self.OnAddLine),
  234. (self.icons["rectangleAdd"], self.OnAddRectangle),
  235. )
  236. )
  237. def OnAddPoint(self, event):
  238. """Point mode selected.
  239. Graphics drawing tool is activated. Tooltip changed.
  240. """
  241. self.SetToolNormalBitmap(self.drawGraphics, self.icons["pointAdd"].GetBitmap())
  242. self.SetToolShortHelp(self.drawGraphics, _("Add simple graphics: points"))
  243. self.drawGraphicsAction = "pointAdd"
  244. if event:
  245. self.ToggleTool(self.drawGraphics, True)
  246. self.parent.OnAddPoint(event)
  247. def OnAddLine(self, event):
  248. """Line mode selected.
  249. Graphics drawing tool is activated. Tooltip changed.
  250. """
  251. self.SetToolNormalBitmap(self.drawGraphics, self.icons["lineAdd"].GetBitmap())
  252. self.SetToolShortHelp(self.drawGraphics, _("Add simple graphics: lines"))
  253. self.ToggleTool(self.drawGraphics, True)
  254. if event:
  255. self.drawGraphicsAction = "lineAdd"
  256. self.parent.OnAddLine(event)
  257. def OnAddRectangle(self, event):
  258. """Rectangle mode selected.
  259. Graphics drawing tool is activated. Tooltip changed.
  260. """
  261. self.SetToolNormalBitmap(
  262. self.drawGraphics, self.icons["rectangleAdd"].GetBitmap()
  263. )
  264. self.SetToolShortHelp(self.drawGraphics, _("Add simple graphics: rectangles"))
  265. self.ToggleTool(self.drawGraphics, True)
  266. if event:
  267. self.drawGraphicsAction = "rectangleAdd"
  268. self.parent.OnAddRectangle(event)