toolbars.py 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  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',
  36. label=_('Insert points from Map Display')),
  37. 'snapping': MetaIcon(
  38. img='move',
  39. label=_('Activate snapping to nodes')),
  40. 'isec_turn_edit': MetaIcon(
  41. img='line-edit',
  42. label=_('Activate mode for turns editing')),
  43. 'global_turn_edit': MetaIcon(
  44. img='vector-tools',
  45. label=_('Activate mode for global turns editing')),
  46. 'pointAdd': MetaIcon(
  47. img='point-create',
  48. label=_('Add new point')),
  49. 'pointDelete': MetaIcon(
  50. img='gcp-delete',
  51. label=_('Delete selected point'))}
  52. return self._getToolbarData((('insertPoint', icons['insertPoint'],
  53. self.OnEditPointMode, # TODO self.list.dialog
  54. wx.ITEM_CHECK),
  55. ('snapping', icons['snapping'],
  56. lambda event: self.vnet_mgr.Snapping(
  57. event.IsChecked()),
  58. wx.ITEM_CHECK),
  59. (None, ),
  60. ('pointAdd', icons["pointAdd"],
  61. lambda event: self.vnet_pts_mgr.AddPoint()),
  62. ('pointDelete', icons["pointDelete"],
  63. self.OnDeletePoint),
  64. (None, ) # ,
  65. #('isec_turn_edit', icons['isec_turn_edit'],
  66. # self.dialog.OnDefIsecTurnCosts,
  67. # wx.ITEM_CHECK),
  68. #('global_turn_edit', icons['global_turn_edit'],
  69. # self.dialog.OnDefGlobalTurnCosts)
  70. ))
  71. def GetToolId(self, toolName): # TODO can be useful in base
  72. return vars(self)[toolName]
  73. def OnEditPointMode(self, event):
  74. self.vnet_pts_mgr.EditPointMode(
  75. not self.vnet_pts_mgr.IsEditPointModeActive())
  76. def OnDeletePoint(self, event):
  77. pt_id = self.vnet_pts_mgr.GetSelected()
  78. self.vnet_pts_mgr.DeletePoint(pt_id)
  79. class MainToolbar(BaseToolbar):
  80. """Main toolbar
  81. """
  82. def __init__(self, parent, vnet_mgr):
  83. BaseToolbar.__init__(self, parent)
  84. self.InitToolbar(self._toolbarData())
  85. self.vnet_mgr = vnet_mgr
  86. # realize the toolbar
  87. self.Realize()
  88. def _toolbarData(self):
  89. icons = {
  90. 'run': MetaIcon(
  91. img='execute',
  92. label=_('Execute analysis')),
  93. 'undo': MetaIcon(
  94. img='undo',
  95. label=_('Go to previous analysis result')),
  96. 'redo': MetaIcon(
  97. img='redo',
  98. label=_('Go to next analysis result')),
  99. 'showResult': MetaIcon(
  100. img='layer-add',
  101. label=_("Show analysis result")),
  102. 'saveTempLayer': MetaIcon(
  103. img='map-export',
  104. label=_('Save temporary result')),
  105. 'settings': BaseIcons['settings'].SetLabel(
  106. _('Vector network analysis settings')),
  107. 'help': MetaIcon(
  108. img='help',
  109. label=_('Show manual'))}
  110. return self._getToolbarData((
  111. ("run", icons['run'],
  112. self.parent.OnAnalyze),
  113. (None, ),
  114. ("undo", icons['undo'],
  115. self.parent.OnUndo),
  116. ("redo", icons['redo'],
  117. self.parent.OnRedo),
  118. (None, ),
  119. ("showResult", icons['showResult'],
  120. self.parent.OnShowResult, wx.ITEM_CHECK),
  121. ("saveTempLayer", icons['saveTempLayer'],
  122. self.parent.OnSaveTmpLayer),
  123. (None, ),
  124. ('settings', icons["settings"],
  125. self.parent.OnSettings),
  126. ('help', icons["help"],
  127. self.OnHelp),
  128. ("quit", BaseIcons['quit'],
  129. self.parent.OnCloseDialog)
  130. ))
  131. def UpdateUndoRedo(self, curr_step, steps_num):
  132. id = vars(self)['showResult']
  133. self.ToggleTool(id, True)
  134. if curr_step >= steps_num:
  135. self.Enable("undo", False)
  136. else:
  137. self.Enable("undo", True)
  138. if curr_step <= 0:
  139. self.Enable("redo", False)
  140. else:
  141. self.Enable("redo", True)
  142. def OnHelp(self, event):
  143. RunCommand('g.manual',
  144. entry='wxGUI.vnet')
  145. class AnalysisToolbar(BaseToolbar):
  146. """Main toolbar
  147. """
  148. def __init__(self, parent, vnet_mgr):
  149. BaseToolbar.__init__(self, parent)
  150. self.vnet_mgr = vnet_mgr
  151. self.InitToolbar(self._toolbarData())
  152. choices = []
  153. for moduleName in self.vnet_mgr.GetAnalyses():
  154. choices.append(
  155. self.vnet_mgr.GetAnalysisProperties(moduleName)['label'])
  156. self.anChoice = ComboBox(
  157. parent=self,
  158. id=wx.ID_ANY,
  159. choices=choices,
  160. style=wx.CB_READONLY,
  161. size=(
  162. 350,
  163. 30)) # FIXME
  164. self.anChoice.SetToolTip(_('Available analyses'))
  165. self.anChoice.SetSelection(0)
  166. self.anChoiceId = self.AddControl(self.anChoice)
  167. self.parent.Bind(
  168. wx.EVT_COMBOBOX,
  169. self.parent.OnAnalysisChanged,
  170. self.anChoiceId)
  171. # workaround for Mac bug. May be fixed by 2.8.8, but not before then.
  172. self.anChoice.Hide()
  173. self.anChoice.Show()
  174. # realize the toolbar
  175. self.Realize()
  176. def _toolbarData(self):
  177. icons = {}
  178. return self._getToolbarData(())