toolbars.py 7.1 KB

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