diff options
Diffstat (limited to 'grc/gui')
-rw-r--r-- | grc/gui/ActionHandler.py | 42 | ||||
-rw-r--r-- | grc/gui/Actions.py | 6 | ||||
-rw-r--r-- | grc/gui/Bars.py | 3 | ||||
-rw-r--r-- | grc/gui/Block.py | 2 | ||||
-rw-r--r-- | grc/gui/Colors.py | 1 | ||||
-rw-r--r-- | grc/gui/FlowGraph.py | 18 |
6 files changed, 56 insertions, 16 deletions
diff --git a/grc/gui/ActionHandler.py b/grc/gui/ActionHandler.py index fee96624bb..1ce4aeda2d 100644 --- a/grc/gui/ActionHandler.py +++ b/grc/gui/ActionHandler.py @@ -29,7 +29,7 @@ import subprocess import Preferences from threading import Thread import Messages -from .. base import ParseXML +from .. base import ParseXML, Constants from MainWindow import MainWindow from PropsDialog import PropsDialog from ParserErrorsDialog import ParserErrorsDialog @@ -171,6 +171,11 @@ class ActionHandler: self.get_flow_graph().update() self.get_page().get_state_cache().save_new_state(self.get_flow_graph().export_data()) self.get_page().set_saved(False) + elif action == Actions.BLOCK_BYPASS: + if self.get_flow_graph().bypass_selected(): + self.get_flow_graph().update() + self.get_page().get_state_cache().save_new_state(self.get_flow_graph().export_data()) + self.get_page().set_saved(False) ################################################## # Cut/Copy/Paste ################################################## @@ -553,23 +558,34 @@ class ActionHandler: ################################################## # Global Actions for all States ################################################## + selected_block = self.get_flow_graph().get_selected_block() + selected_blocks = self.get_flow_graph().get_selected_blocks() + #update general buttons Actions.ERRORS_WINDOW_DISPLAY.set_sensitive(not self.get_flow_graph().is_valid()) Actions.ELEMENT_DELETE.set_sensitive(bool(self.get_flow_graph().get_selected_elements())) - Actions.BLOCK_PARAM_MODIFY.set_sensitive(bool(self.get_flow_graph().get_selected_block())) - Actions.BLOCK_ROTATE_CCW.set_sensitive(bool(self.get_flow_graph().get_selected_blocks())) - Actions.BLOCK_ROTATE_CW.set_sensitive(bool(self.get_flow_graph().get_selected_blocks())) + Actions.BLOCK_PARAM_MODIFY.set_sensitive(bool(selected_block)) + Actions.BLOCK_ROTATE_CCW.set_sensitive(bool(selected_blocks)) + Actions.BLOCK_ROTATE_CW.set_sensitive(bool(selected_blocks)) #update cut/copy/paste - Actions.BLOCK_CUT.set_sensitive(bool(self.get_flow_graph().get_selected_blocks())) - Actions.BLOCK_COPY.set_sensitive(bool(self.get_flow_graph().get_selected_blocks())) + Actions.BLOCK_CUT.set_sensitive(bool(selected_blocks)) + Actions.BLOCK_COPY.set_sensitive(bool(selected_blocks)) Actions.BLOCK_PASTE.set_sensitive(bool(self.clipboard)) - #update enable/disable - Actions.BLOCK_ENABLE.set_sensitive(bool(self.get_flow_graph().get_selected_blocks())) - Actions.BLOCK_DISABLE.set_sensitive(bool(self.get_flow_graph().get_selected_blocks())) - Actions.BLOCK_CREATE_HIER.set_sensitive(bool(self.get_flow_graph().get_selected_blocks())) - Actions.OPEN_HIER.set_sensitive(bool(self.get_flow_graph().get_selected_blocks())) - Actions.BUSSIFY_SOURCES.set_sensitive(bool(self.get_flow_graph().get_selected_blocks())) - Actions.BUSSIFY_SINKS.set_sensitive(bool(self.get_flow_graph().get_selected_blocks())) + #update enable/disable/bypass + can_enable = any(block.get_state() != Constants.BLOCK_ENABLED + for block in selected_blocks) + can_disable = any(block.get_state() != Constants.BLOCK_DISABLED + for block in selected_blocks) + can_bypass_all = all(block.can_bypass() for block in selected_blocks) \ + and any (not block.get_bypassed() for block in selected_blocks) + Actions.BLOCK_ENABLE.set_sensitive(can_enable) + Actions.BLOCK_DISABLE.set_sensitive(can_disable) + Actions.BLOCK_BYPASS.set_sensitive(can_bypass_all) + + Actions.BLOCK_CREATE_HIER.set_sensitive(bool(selected_blocks)) + Actions.OPEN_HIER.set_sensitive(bool(selected_blocks)) + Actions.BUSSIFY_SOURCES.set_sensitive(bool(selected_blocks)) + Actions.BUSSIFY_SINKS.set_sensitive(bool(selected_blocks)) Actions.RELOAD_BLOCKS.set_sensitive(True) Actions.FIND_BLOCKS.set_sensitive(True) #set the exec and stop buttons diff --git a/grc/gui/Actions.py b/grc/gui/Actions.py index b2b3a76386..a028a33a11 100644 --- a/grc/gui/Actions.py +++ b/grc/gui/Actions.py @@ -247,6 +247,12 @@ BLOCK_DISABLE = Action( stock_id=gtk.STOCK_DISCONNECT, keypresses=(gtk.keysyms.d, NO_MODS_MASK), ) +BLOCK_BYPASS = Action( + label='_Bypass', + tooltip='Bypass the selected block', + stock_id=gtk.STOCK_MEDIA_FORWARD, + keypresses=(gtk.keysyms.b, NO_MODS_MASK), +) TOGGLE_SNAP_TO_GRID = ToggleAction( label='_Snap to grid', tooltip='Snap blocks to a grid for an easier connection alignment', diff --git a/grc/gui/Bars.py b/grc/gui/Bars.py index 40ce20536c..abcc3c6434 100644 --- a/grc/gui/Bars.py +++ b/grc/gui/Bars.py @@ -49,6 +49,7 @@ TOOLBAR_LIST = ( None, Actions.BLOCK_ENABLE, Actions.BLOCK_DISABLE, + Actions.BLOCK_BYPASS, Actions.TOGGLE_HIDE_DISABLED_BLOCKS, None, Actions.FIND_BLOCKS, @@ -85,6 +86,7 @@ MENU_BAR_LIST = ( None, Actions.BLOCK_ENABLE, Actions.BLOCK_DISABLE, + Actions.BLOCK_BYPASS, None, Actions.BLOCK_PARAM_MODIFY, ]), @@ -134,6 +136,7 @@ CONTEXT_MENU_LIST = [ Actions.BLOCK_ROTATE_CW, Actions.BLOCK_ENABLE, Actions.BLOCK_DISABLE, + Actions.BLOCK_BYPASS, None, (gtk.Action('More', '_More', None, None), [ Actions.BLOCK_CREATE_HIER, diff --git a/grc/gui/Block.py b/grc/gui/Block.py index 60f19fc1a4..83706ed1aa 100644 --- a/grc/gui/Block.py +++ b/grc/gui/Block.py @@ -145,7 +145,9 @@ class Block(Element): """Create the labels for the signal block.""" Element.create_labels(self) self._bg_color = self.is_dummy_block() and Colors.MISSING_BLOCK_BACKGROUND_COLOR or \ + self.get_bypassed() and Colors.BLOCK_BYPASSED_COLOR or \ self.get_enabled() and Colors.BLOCK_ENABLED_COLOR or Colors.BLOCK_DISABLED_COLOR + layouts = list() #create the main layout layout = gtk.DrawingArea().create_pango_layout('') diff --git a/grc/gui/Colors.py b/grc/gui/Colors.py index f64106b03f..52c95e8edf 100644 --- a/grc/gui/Colors.py +++ b/grc/gui/Colors.py @@ -38,6 +38,7 @@ try: #block color constants BLOCK_ENABLED_COLOR = get_color('#F1ECFF') BLOCK_DISABLED_COLOR = get_color('#CCCCCC') + BLOCK_BYPASSED_COLOR = get_color('#FFFFE6') #connection color constants CONNECTION_ENABLED_COLOR = get_color('black') CONNECTION_DISABLED_COLOR = get_color('#BBBBBB') diff --git a/grc/gui/FlowGraph.py b/grc/gui/FlowGraph.py index 97f814f1bf..bf6e1eed78 100644 --- a/grc/gui/FlowGraph.py +++ b/grc/gui/FlowGraph.py @@ -211,9 +211,21 @@ class FlowGraph(Element): """ changed = False for selected_block in self.get_selected_blocks(): - if selected_block.get_enabled() != enable: - selected_block.set_enabled(enable) - changed = True + if selected_block.set_enabled(enable): changed = True + return changed + + def bypass_selected(self): + """ + Bypass the selected blocks. + + Args: + None + Returns: + true if changed + """ + changed = False + for selected_block in self.get_selected_blocks(): + if selected_block.set_bypassed(): changed = True return changed def move_selected(self, delta_coordinate): |