summaryrefslogtreecommitdiff
path: root/grc
diff options
context:
space:
mode:
authorSebastian Koslowski <koslowski@kit.edu>2013-11-23 23:00:06 +0100
committerSebastian Koslowski <koslowski@kit.edu>2013-11-24 23:07:27 +0100
commit4c800c91617ee452987574862d8c0eeadfb7d611 (patch)
tree254d8f51481d293bd2e010f98bab48fa409865ea /grc
parenta00b94ec4a9949125ddb1711abf49d4d575d290d (diff)
grc: switched to ToggleActions; made visibility settings persistent
Diffstat (limited to 'grc')
-rw-r--r--grc/gui/ActionHandler.py20
-rw-r--r--grc/gui/Actions.py76
-rw-r--r--grc/gui/Bars.py8
-rw-r--r--grc/gui/BlockTreeWindow.py2
-rw-r--r--grc/gui/MainWindow.py2
-rw-r--r--grc/gui/Preferences.py12
6 files changed, 85 insertions, 35 deletions
diff --git a/grc/gui/ActionHandler.py b/grc/gui/ActionHandler.py
index acb546b691..a891298fa4 100644
--- a/grc/gui/ActionHandler.py
+++ b/grc/gui/ActionHandler.py
@@ -113,8 +113,8 @@ class ActionHandler:
Actions.FLOW_GRAPH_OPEN, Actions.FLOW_GRAPH_SAVE_AS,
Actions.FLOW_GRAPH_CLOSE, Actions.ABOUT_WINDOW_DISPLAY,
Actions.FLOW_GRAPH_SCREEN_CAPTURE, Actions.HELP_WINDOW_DISPLAY,
- Actions.TYPES_WINDOW_DISPLAY, Actions.TOGGLE_BLOCKTREE_WIDGET,
- Actions.TOGGLE_REPORT_WIDGET,
+ Actions.TYPES_WINDOW_DISPLAY, Actions.TOGGLE_BLOCKS_WINDOW,
+ Actions.TOGGLE_REPORTS_WINDOW,
): action.set_sensitive(True)
if not self.init_file_paths:
self.init_file_paths = Preferences.files_open()
@@ -126,6 +126,8 @@ class ActionHandler:
if not self.get_page(): self.main_window.new_page() #ensure that at least a blank page exists
self.main_window.btwin.search_entry.hide()
+ Actions.TOGGLE_REPORTS_WINDOW.set_active(Preferences.reports_window_visibility())
+ Actions.TOGGLE_BLOCKS_WINDOW.set_active(Preferences.blocks_window_visibility())
elif action == Actions.APPLICATION_QUIT:
if self.main_window.close_pages():
gtk.main_quit()
@@ -350,12 +352,14 @@ class ActionHandler:
Dialogs.TypesDialog(self.get_flow_graph().get_parent())
elif action == Actions.ERRORS_WINDOW_DISPLAY:
Dialogs.ErrorsDialog(self.get_flow_graph())
- elif action == Actions.TOGGLE_REPORT_WIDGET:
- widget = self.main_window.reports_scrolled_window
- widget.set_visible(not widget.get_visible())
- elif action == Actions.TOGGLE_BLOCKTREE_WIDGET:
- widget = self.main_window.btwin
- widget.set_visible(not widget.get_visible())
+ elif action == Actions.TOGGLE_REPORTS_WINDOW:
+ visible = action.get_active()
+ self.main_window.reports_scrolled_window.set_visible(visible)
+ Preferences.reports_window_visibility(visible)
+ elif action == Actions.TOGGLE_BLOCKS_WINDOW:
+ visible = action.get_active()
+ self.main_window.btwin.set_visible(visible)
+ Preferences.blocks_window_visibility(visible)
##################################################
# Param Modifications
##################################################
diff --git a/grc/gui/Actions.py b/grc/gui/Actions.py
index 90e23d7fb7..96d133f8df 100644
--- a/grc/gui/Actions.py
+++ b/grc/gui/Actions.py
@@ -57,27 +57,13 @@ def get_all_actions(): return _all_actions_list
_accel_group = gtk.AccelGroup()
def get_accel_group(): return _accel_group
-class Action(gtk.Action):
+
+class _ActionBase(object):
"""
- A custom Action class based on gtk.Action.
- Pass additional arguments such as keypresses.
+ Base class for Action and ToggleAction
Register actions and keypresses with this module.
"""
-
- def __init__(self, keypresses=(), name=None, label=None, tooltip=None, stock_id=None):
- """
- Create a new Action instance.
-
- Args:
- key_presses: a tuple of (keyval1, mod_mask1, keyval2, mod_mask2, ...)
- the: regular gtk.Action parameters (defaults to None)
- """
- if name is None: name = label
- gtk.Action.__init__(self,
- name=name, label=label,
- tooltip=tooltip, stock_id=stock_id,
- )
- #register this action
+ def __init__(self, label, keypresses):
_all_actions_list.append(self)
for i in range(len(keypresses)/2):
keyval, mod_mask = keypresses[i*2:(i+1)*2]
@@ -111,6 +97,52 @@ class Action(gtk.Action):
"""
self.emit('activate')
+
+class Action(gtk.Action, _ActionBase):
+ """
+ A custom Action class based on gtk.Action.
+ Pass additional arguments such as keypresses.
+ """
+
+ def __init__(self, keypresses=(), name=None, label=None, tooltip=None, stock_id=None):
+ """
+ Create a new Action instance.
+
+ Args:
+ key_presses: a tuple of (keyval1, mod_mask1, keyval2, mod_mask2, ...)
+ the: regular gtk.Action parameters (defaults to None)
+ """
+ if name is None: name = label
+ gtk.Action.__init__(self,
+ name=name, label=label,
+ tooltip=tooltip, stock_id=stock_id,
+ )
+ #register this action
+ _ActionBase.__init__(self, label, keypresses)
+
+
+class ToggleAction(gtk.ToggleAction, _ActionBase):
+ """
+ A custom Action class based on gtk.ToggleAction.
+ Pass additional arguments such as keypresses.
+ """
+
+ def __init__(self, keypresses=(), name=None, label=None, tooltip=None, stock_id=None):
+ """
+ Create a new ToggleAction instance.
+
+ Args:
+ key_presses: a tuple of (keyval1, mod_mask1, keyval2, mod_mask2, ...)
+ the: regular gtk.Action parameters (defaults to None)
+ """
+ if name is None: name = label
+ gtk.ToggleAction.__init__(self,
+ name=name, label=label,
+ tooltip=tooltip, stock_id=stock_id,
+ )
+ #register this action
+ _ActionBase.__init__(self, label, keypresses)
+
########################################################################
# Actions
########################################################################
@@ -233,13 +265,13 @@ ERRORS_WINDOW_DISPLAY = Action(
tooltip='View flow graph errors',
stock_id=gtk.STOCK_DIALOG_ERROR,
)
-TOGGLE_REPORT_WIDGET = Action(
- label='_Reports',
+TOGGLE_REPORTS_WINDOW = ToggleAction(
+ label='Show _Reports',
tooltip='Toggle visibility of the Report widget',
keypresses=(gtk.keysyms.r, gtk.gdk.CONTROL_MASK),
)
-TOGGLE_BLOCKTREE_WIDGET = Action(
- label='_Block Tree',
+TOGGLE_BLOCKS_WINDOW = ToggleAction(
+ label='Show _Block Tree',
tooltip='Toggle visibility of the block tree widget',
keypresses=(gtk.keysyms.b, gtk.gdk.CONTROL_MASK),
)
diff --git a/grc/gui/Bars.py b/grc/gui/Bars.py
index 6c72b04eca..0e2b29c4e3 100644
--- a/grc/gui/Bars.py
+++ b/grc/gui/Bars.py
@@ -57,6 +57,7 @@ TOOLBAR_LIST = (
)
##The list of actions and categories for the menu bar.
+
MENU_BAR_LIST = (
(gtk.Action('File', '_File', None, None), [
Actions.FLOW_GRAPH_NEW,
@@ -88,10 +89,10 @@ MENU_BAR_LIST = (
Actions.BLOCK_PARAM_MODIFY,
]),
(gtk.Action('View', '_View', None, None), [
- Actions.TOGGLE_BLOCKTREE_WIDGET,
- Actions.TOGGLE_REPORT_WIDGET,
- Actions.ERRORS_WINDOW_DISPLAY,
+ Actions.TOGGLE_BLOCKS_WINDOW,
+ Actions.TOGGLE_REPORTS_WINDOW,
None,
+ Actions.ERRORS_WINDOW_DISPLAY,
Actions.FIND_BLOCKS,
]),
(gtk.Action('Build', '_Build', None, None), [
@@ -106,7 +107,6 @@ MENU_BAR_LIST = (
Actions.ABOUT_WINDOW_DISPLAY,
]),
)
-
class Toolbar(gtk.Toolbar):
"""The gtk toolbar with actions added from the toolbar list."""
diff --git a/grc/gui/BlockTreeWindow.py b/grc/gui/BlockTreeWindow.py
index f4b35a5dca..b04a4dda7c 100644
--- a/grc/gui/BlockTreeWindow.py
+++ b/grc/gui/BlockTreeWindow.py
@@ -228,7 +228,7 @@ class BlockTreeWindow(gtk.VBox):
elif event.state & gtk.gdk.CONTROL_MASK and event.keyval == gtk.keysyms.b:
# ugly...
- Actions.TOGGLE_BLOCKTREE_WIDGET.activate()
+ Actions.TOGGLE_BLOCKS_WINDOW.activate()
else:
return False # propagate event
diff --git a/grc/gui/MainWindow.py b/grc/gui/MainWindow.py
index 14139691d2..5f2044aa64 100644
--- a/grc/gui/MainWindow.py
+++ b/grc/gui/MainWindow.py
@@ -109,6 +109,8 @@ class MainWindow(gtk.Window):
self.flow_graph_vpaned.set_position(Preferences.reports_window_position())
self.hpaned.set_position(Preferences.blocks_window_position())
self.show_all()
+ self.reports_scrolled_window.hide()
+ self.btwin.hide()
############################################################
# Event Handlers
diff --git a/grc/gui/Preferences.py b/grc/gui/Preferences.py
index ce545cab6a..c315436cae 100644
--- a/grc/gui/Preferences.py
+++ b/grc/gui/Preferences.py
@@ -84,3 +84,15 @@ def blocks_window_position(pos=None):
else:
try: return _config_parser.getint('main', 'blocks_window_position') or 1 #greater than 0
except: return -1
+
+def reports_window_visibility(visible=None):
+ if visible is not None: _config_parser.set('main', 'reports_window_visible', visible)
+ else:
+ try: return _config_parser.getboolean('main', 'reports_window_visible')
+ except: return True
+
+def blocks_window_visibility(visible=None):
+ if visible is not None: _config_parser.set('main', 'blocks_window_visible', visible)
+ else:
+ try: return _config_parser.getboolean('main', 'blocks_window_visible')
+ except: return True