toolbars.py 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. """
  2. @package vnet.toolbars
  3. @brief Vector network analysis dialog - toolbars
  4. Classes:
  5. - toolbars::PointListToolbar
  6. - toolbars::MainToolbar
  7. (C) 2012 by the GRASS Development Team
  8. This program is free software under the GNU General Public License
  9. (>=v2). Read the file COPYING that comes with GRASS for details.
  10. @author Stepan Turek <stepan.turek seznam.cz> (GSoC 2012, mentor: Martin Landa)
  11. @author Lukas Bocan <silent_bob centrum.cz> (turn costs support)
  12. @author Eliska Kyzlikova <eliska.kyzlikova gmail.com> (turn costs support)
  13. """
  14. import wx
  15. from icons.icon import MetaIcon
  16. from gui_core.toolbars import BaseToolbar, BaseIcons
  17. from gui_core.wrap import ComboBox
  18. from core.gcmd import RunCommand
  19. class PointListToolbar(BaseToolbar):
  20. """Toolbar for managing list of points
  21. :param parent: reference to VNETDialog
  22. """
  23. def __init__(self, parent, toolSwitcher, dialog, vnet_mgr):
  24. BaseToolbar.__init__(self, parent, toolSwitcher)
  25. self.vnet_mgr = vnet_mgr
  26. self.vnet_pts_mgr = self.vnet_mgr.GetPointsManager()
  27. self.dialog = dialog
  28. self.InitToolbar(self._toolbarData())
  29. self.toolSwitcher.AddToolToGroup("mouseUse", self, self.insertPoint)
  30. # realize the toolbar
  31. self.Realize()
  32. def _toolbarData(self):
  33. icons = {
  34. "insertPoint": MetaIcon(
  35. img="pointer", label=_("Insert points from Map Display")
  36. ),
  37. "snapping": MetaIcon(img="move", label=_("Activate snapping to nodes")),
  38. "isec_turn_edit": MetaIcon(
  39. img="line-edit", label=_("Activate mode for turns editing")
  40. ),
  41. "global_turn_edit": MetaIcon(
  42. img="vector-tools", label=_("Activate mode for global turns editing")
  43. ),
  44. "pointAdd": MetaIcon(img="point-create", label=_("Add new point")),
  45. "pointDelete": MetaIcon(img="gcp-delete", label=_("Delete selected point")),
  46. }
  47. return self._getToolbarData(
  48. (
  49. (
  50. ("insertPoint", icons["insertPoint"].label),
  51. icons["insertPoint"],
  52. self.OnEditPointMode, # TODO self.list.dialog
  53. wx.ITEM_CHECK,
  54. ),
  55. (
  56. ("snapping", icons["snapping"].label),
  57. icons["snapping"],
  58. lambda event: self.vnet_mgr.Snapping(event.IsChecked()),
  59. wx.ITEM_CHECK,
  60. ),
  61. (None,),
  62. (
  63. ("pointAdd", icons["pointAdd"].label),
  64. icons["pointAdd"],
  65. lambda event: self.vnet_pts_mgr.AddPoint(),
  66. ),
  67. (
  68. ("pointDelete", icons["pointDelete"].label),
  69. icons["pointDelete"],
  70. self.OnDeletePoint,
  71. ),
  72. (None,) # ,
  73. # ('isec_turn_edit', icons['isec_turn_edit'],
  74. # self.dialog.OnDefIsecTurnCosts,
  75. # wx.ITEM_CHECK),
  76. # ('global_turn_edit', icons['global_turn_edit'],
  77. # self.dialog.OnDefGlobalTurnCosts)
  78. )
  79. )
  80. def GetToolId(self, toolName): # TODO can be useful in base
  81. return vars(self)[toolName]
  82. def OnEditPointMode(self, event):
  83. self.vnet_pts_mgr.EditPointMode(not self.vnet_pts_mgr.IsEditPointModeActive())
  84. def OnDeletePoint(self, event):
  85. pt_id = self.vnet_pts_mgr.GetSelected()
  86. self.vnet_pts_mgr.DeletePoint(pt_id)
  87. class MainToolbar(BaseToolbar):
  88. """Main toolbar"""
  89. def __init__(self, parent, vnet_mgr):
  90. BaseToolbar.__init__(self, parent)
  91. self.InitToolbar(self._toolbarData())
  92. self.vnet_mgr = vnet_mgr
  93. # realize the toolbar
  94. self.Realize()
  95. def _toolbarData(self):
  96. icons = {
  97. "run": MetaIcon(img="execute", label=_("Execute analysis")),
  98. "undo": MetaIcon(img="undo", label=_("Go to previous analysis result")),
  99. "redo": MetaIcon(img="redo", label=_("Go to next analysis result")),
  100. "showResult": MetaIcon(img="layer-add", label=_("Show analysis result")),
  101. "saveTempLayer": MetaIcon(
  102. img="map-export", label=_("Save temporary result")
  103. ),
  104. "settings": BaseIcons["settings"],
  105. "help": BaseIcons["help"],
  106. "quit": BaseIcons["quit"],
  107. }
  108. return self._getToolbarData(
  109. (
  110. (
  111. ("run", icons["run"].label),
  112. icons["run"],
  113. self.parent.OnAnalyze,
  114. ),
  115. (None,),
  116. (
  117. ("undo", _("Previous analysis result")),
  118. icons["undo"],
  119. self.parent.OnUndo,
  120. ),
  121. (
  122. ("redo", _("Next analysis result")),
  123. icons["redo"],
  124. self.parent.OnRedo,
  125. ),
  126. (None,),
  127. (
  128. ("showResult", icons["showResult"].label),
  129. icons["showResult"],
  130. self.parent.OnShowResult,
  131. wx.ITEM_CHECK,
  132. ),
  133. (
  134. ("saveTempLayer", icons["saveTempLayer"].label),
  135. icons["saveTempLayer"],
  136. self.parent.OnSaveTmpLayer,
  137. ),
  138. (None,),
  139. (
  140. ("settings", icons["settings"].label),
  141. icons["settings"],
  142. self.parent.OnSettings,
  143. ),
  144. (
  145. ("help", icons["help"].label),
  146. icons["help"],
  147. self.OnHelp,
  148. ),
  149. (
  150. ("quit", icons["quit"].label),
  151. icons["quit"],
  152. self.parent.OnCloseDialog,
  153. ),
  154. )
  155. )
  156. def UpdateUndoRedo(self, curr_step, steps_num):
  157. id = vars(self)["showResult"]
  158. self.ToggleTool(id, True)
  159. if curr_step >= steps_num:
  160. self.Enable("undo", False)
  161. else:
  162. self.Enable("undo", True)
  163. if curr_step <= 0:
  164. self.Enable("redo", False)
  165. else:
  166. self.Enable("redo", True)
  167. def OnHelp(self, event):
  168. RunCommand("g.manual", entry="wxGUI.vnet")
  169. class AnalysisToolbar(BaseToolbar):
  170. """Main toolbar"""
  171. def __init__(self, parent, vnet_mgr):
  172. BaseToolbar.__init__(self, parent)
  173. self.vnet_mgr = vnet_mgr
  174. self.InitToolbar(self._toolbarData())
  175. choices = []
  176. for moduleName in self.vnet_mgr.GetAnalyses():
  177. choices.append(self.vnet_mgr.GetAnalysisProperties(moduleName)["label"])
  178. self.anChoice = ComboBox(
  179. parent=self,
  180. id=wx.ID_ANY,
  181. choices=choices,
  182. style=wx.CB_READONLY,
  183. size=(350, 30),
  184. ) # FIXME
  185. self.anChoice.SetToolTip(_("Available analyses"))
  186. self.anChoice.SetSelection(0)
  187. self.anChoiceId = self.AddControl(self.anChoice)
  188. self.parent.Bind(
  189. wx.EVT_COMBOBOX, self.parent.OnAnalysisChanged, self.anChoiceId
  190. )
  191. # workaround for Mac bug. May be fixed by 2.8.8, but not before then.
  192. self.anChoice.Hide()
  193. self.anChoice.Show()
  194. # realize the toolbar
  195. self.Realize()
  196. def _toolbarData(self):
  197. icons = {}
  198. return self._getToolbarData(())