toolbars.py 7.7 KB

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