toolbars.py 7.7 KB

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