toolbars.py 8.3 KB

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