toolbars.py 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  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. "quit": MetaIcon(img="quit", label=_("Quit Cartographic Composer")),
  78. "addText": MetaIcon(img="text-add", label=_("Text")),
  79. "addMapinfo": MetaIcon(img="map-info", label=_("Map info")),
  80. "addLegend": MetaIcon(img="legend-add", label=_("Legend")),
  81. "addScalebar": MetaIcon(img="scalebar-add", label=_("Scale bar")),
  82. "addImage": MetaIcon(img="image-add", label=_("Image")),
  83. "addNorthArrow": MetaIcon(img="north-arrow-add", label=_("North Arrow")),
  84. "pointAdd": MetaIcon(img="point-add", label=_("Point")),
  85. "lineAdd": MetaIcon(img="line-add", label=_("Line")),
  86. "rectangleAdd": MetaIcon(img="rectangle-add", label=_("Rectangle")),
  87. "overlaysAdd": MetaIcon(img="layer-more", label=_("Add overlays")),
  88. "labelsAdd": MetaIcon(img="layer-label-add", label=_("Add labels")),
  89. }
  90. self.icons = icons
  91. return self._getToolbarData(
  92. (
  93. ("loadFile", icons["scriptLoad"], self.parent.OnLoadFile),
  94. ("instructionFile", icons["scriptSave"], self.parent.OnInstructionFile),
  95. (None,),
  96. ("pagesetup", icons["pageSetup"], self.parent.OnPageSetup),
  97. (None,),
  98. ("pointer", BaseIcons["pointer"], self.parent.OnPointer, wx.ITEM_CHECK),
  99. ("pan", BaseIcons["pan"], self.parent.OnPan, wx.ITEM_CHECK),
  100. ("zoomin", BaseIcons["zoomIn"], self.parent.OnZoomIn, wx.ITEM_CHECK),
  101. ("zoomout", BaseIcons["zoomOut"], self.parent.OnZoomOut, wx.ITEM_CHECK),
  102. ("zoomAll", icons["fullExtent"], self.parent.OnZoomAll),
  103. (None,),
  104. ("addMap", icons["addMap"], self.parent.OnAddMap, wx.ITEM_CHECK),
  105. ("addRaster", BaseIcons["addRast"], self.parent.OnAddRaster),
  106. ("addVector", BaseIcons["addVect"], self.parent.OnAddVect),
  107. ("overlaysAdd", icons["overlaysAdd"], self.OnAddOverlays),
  108. ("delete", icons["deleteObj"], self.parent.OnDelete),
  109. ("dec", BaseIcons["overlay"], self.OnDecoration),
  110. ("drawGraphics", icons["pointAdd"], self.OnDrawGraphics, wx.ITEM_CHECK),
  111. (None,),
  112. ("preview", icons["preview"], self.parent.OnPreview),
  113. ("generatePS", icons["psExport"], self.parent.OnPSFile),
  114. ("generatePDF", icons["pdfExport"], self.parent.OnPDFFile),
  115. (None,),
  116. ("help", BaseIcons["help"], self.parent.OnHelp),
  117. ("quit", icons["quit"], self.parent.OnCloseWindow),
  118. )
  119. )
  120. def OnDecoration(self, event):
  121. """Decorations overlay menu"""
  122. self._onMenu(
  123. (
  124. (self.icons["addLegend"], self.parent.OnAddLegend),
  125. (self.icons["addMapinfo"], self.parent.OnAddMapinfo),
  126. (self.icons["addScalebar"], self.parent.OnAddScalebar),
  127. (self.icons["addText"], self.parent.OnAddText),
  128. (self.icons["addImage"], self.parent.OnAddImage),
  129. (self.icons["addNorthArrow"], self.parent.OnAddNorthArrow),
  130. )
  131. )
  132. def OnAddOverlays(self, event):
  133. self._onMenu(((self.icons["labelsAdd"], self.parent.OnAddLabels),))
  134. def OnDrawGraphics(self, event):
  135. """Graphics tool activated."""
  136. # we need the previous id
  137. if self.drawGraphicsAction == "pointAdd":
  138. self.parent.OnAddPoint(event)
  139. elif self.drawGraphicsAction == "lineAdd":
  140. self.parent.OnAddLine(event)
  141. elif self.drawGraphicsAction == "rectangleAdd":
  142. self.parent.OnAddRectangle(event)
  143. def OnDrawGraphicsMenu(self, event):
  144. """Simple geometry features (point, line, rectangle) overlay menu"""
  145. self._onMenu(
  146. (
  147. (self.icons["pointAdd"], self.OnAddPoint),
  148. (self.icons["lineAdd"], self.OnAddLine),
  149. (self.icons["rectangleAdd"], self.OnAddRectangle),
  150. )
  151. )
  152. def OnAddPoint(self, event):
  153. """Point mode selected.
  154. Graphics drawing tool is activated. Tooltip changed.
  155. """
  156. self.SetToolNormalBitmap(self.drawGraphics, self.icons["pointAdd"].GetBitmap())
  157. self.SetToolShortHelp(self.drawGraphics, _("Add simple graphics: points"))
  158. self.drawGraphicsAction = "pointAdd"
  159. if event:
  160. self.ToggleTool(self.drawGraphics, True)
  161. self.parent.OnAddPoint(event)
  162. def OnAddLine(self, event):
  163. """Line mode selected.
  164. Graphics drawing tool is activated. Tooltip changed.
  165. """
  166. self.SetToolNormalBitmap(self.drawGraphics, self.icons["lineAdd"].GetBitmap())
  167. self.SetToolShortHelp(self.drawGraphics, _("Add simple graphics: lines"))
  168. self.ToggleTool(self.drawGraphics, True)
  169. if event:
  170. self.drawGraphicsAction = "lineAdd"
  171. self.parent.OnAddLine(event)
  172. def OnAddRectangle(self, event):
  173. """Rectangle mode selected.
  174. Graphics drawing tool is activated. Tooltip changed.
  175. """
  176. self.SetToolNormalBitmap(
  177. self.drawGraphics, self.icons["rectangleAdd"].GetBitmap()
  178. )
  179. self.SetToolShortHelp(self.drawGraphics, _("Add simple graphics: rectangles"))
  180. self.ToggleTool(self.drawGraphics, True)
  181. if event:
  182. self.drawGraphicsAction = "rectangleAdd"
  183. self.parent.OnAddRectangle(event)