toolbars.py 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  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. class MainToolbar(BaseToolbar):
  73. """Main toolbar
  74. """
  75. def __init__(self, parent, vnet_mgr):
  76. BaseToolbar.__init__(self, parent)
  77. self.InitToolbar(self._toolbarData())
  78. self.vnet_mgr = vnet_mgr
  79. # realize the toolbar
  80. self.Realize()
  81. def _toolbarData(self):
  82. icons = {
  83. 'run' : MetaIcon(img = 'execute',
  84. label = _('Execute analysis')),
  85. 'undo' : MetaIcon(img = 'undo',
  86. label = _('Go to previous analysis result')),
  87. 'redo' : MetaIcon(img = 'redo',
  88. label = _('Go to next analysis result')),
  89. 'showResult' : MetaIcon(img = 'layer-add',
  90. label = _("Show analysis result")),
  91. 'saveTempLayer' : MetaIcon(img = 'map-export',
  92. label = _('Save temporary result')),
  93. 'settings' : BaseIcons['settings'].SetLabel( _('Vector network analysis settings')),
  94. 'help' : MetaIcon(img = 'help',
  95. label = _('Show manual'))
  96. }
  97. return self._getToolbarData((
  98. ("run", icons['run'],
  99. self.parent.OnAnalyze),
  100. (None, ),
  101. ("undo", icons['undo'],
  102. self.parent.OnUndo),
  103. ("redo", icons['redo'],
  104. self.parent.OnRedo),
  105. (None, ),
  106. ("showResult", icons['showResult'],
  107. self.parent.OnShowResult, wx.ITEM_CHECK),
  108. ("saveTempLayer", icons['saveTempLayer'],
  109. self.parent.OnSaveTmpLayer),
  110. (None, ),
  111. ('settings', icons["settings"],
  112. self.parent.OnSettings),
  113. ('help', icons["help"],
  114. self.OnHelp),
  115. ("quit", BaseIcons['quit'],
  116. self.parent.OnCloseDialog)
  117. ))
  118. def UpdateUndoRedo(self, curr_step, steps_num):
  119. id = vars(self)['showResult']
  120. self.ToggleTool(id =id,
  121. toggle = True)
  122. if curr_step >= steps_num:
  123. self.Enable("undo", False)
  124. else:
  125. self.Enable("undo", True)
  126. if curr_step <= 0:
  127. self.Enable("redo", False)
  128. else:
  129. self.Enable("redo", True)
  130. def OnHelp(self, event) :
  131. RunCommand('g.manual',
  132. entry = 'wxGUI.vnet')
  133. class AnalysisToolbar(BaseToolbar):
  134. """Main toolbar
  135. """
  136. def __init__(self, parent, vnet_mgr):
  137. BaseToolbar.__init__(self, parent)
  138. self.vnet_mgr = vnet_mgr
  139. self.InitToolbar(self._toolbarData())
  140. choices = []
  141. for moduleName in self.vnet_mgr.GetAnalyses():
  142. choices.append(self.vnet_mgr.GetAnalysisProperties(moduleName)['label'])
  143. self.anChoice = wx.ComboBox(parent = self, id = wx.ID_ANY,
  144. choices = choices,
  145. style = wx.CB_READONLY, size = (350, 30))#FIXME
  146. self.anChoice.SetToolTipString(_('Availiable analyses'))
  147. self.anChoice.SetSelection(0)
  148. self.anChoiceId = self.AddControl(self.anChoice)
  149. self.parent.Bind(wx.EVT_COMBOBOX, self.parent.OnAnalysisChanged, self.anChoiceId)
  150. # workaround for Mac bug. May be fixed by 2.8.8, but not before then.
  151. self.anChoice.Hide()
  152. self.anChoice.Show()
  153. # realize the toolbar
  154. self.Realize()
  155. def _toolbarData(self):
  156. icons = {}
  157. return self._getToolbarData(())