commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] r10075 - gnuradio/trunk/grc/src/gui


From: jblum
Subject: [Commit-gnuradio] r10075 - gnuradio/trunk/grc/src/gui
Date: Wed, 26 Nov 2008 16:51:45 -0700 (MST)

Author: jblum
Date: 2008-11-26 16:51:43 -0700 (Wed, 26 Nov 2008)
New Revision: 10075

Modified:
   gnuradio/trunk/grc/src/gui/ActionHandler.py
   gnuradio/trunk/grc/src/gui/Actions.py
   gnuradio/trunk/grc/src/gui/Bars.py
   gnuradio/trunk/grc/src/gui/Dialogs.py
   gnuradio/trunk/grc/src/gui/MainWindow.py
Log:
switched hotkey handling to gtk accelerators

Modified: gnuradio/trunk/grc/src/gui/ActionHandler.py
===================================================================
--- gnuradio/trunk/grc/src/gui/ActionHandler.py 2008-11-26 19:03:54 UTC (rev 
10074)
+++ gnuradio/trunk/grc/src/gui/ActionHandler.py 2008-11-26 23:51:43 UTC (rev 
10075)
@@ -32,7 +32,7 @@
 import random
 from .. platforms.gui.Platform import Platform
 from MainWindow import MainWindow
-from Dialogs import PreferencesDialog, AboutDialog, HotKeysDialog
+from Dialogs import PreferencesDialog, AboutDialog
 from FileDialogs import OpenFlowGraphFileDialog, SaveFlowGraphFileDialog, 
SaveImageFileDialog
 
 gobject.threads_init()
@@ -56,7 +56,7 @@
                #setup icon using icon theme
                try: 
gtk.window_set_default_icon(gtk.IconTheme().load_icon('gnuradio-grc', 256, 0))
                except: pass
-               for action in Actions.ACTIONS_LIST: action.connect('activate', 
self._handle_actions)
+               for action in Actions.get_all_actions(): 
action.connect('activate', self._handle_actions)
                #setup the main window
                self.main_window = MainWindow(self.handle_states, platform)
                self.main_window.connect('delete_event', self._quit)
@@ -77,72 +77,26 @@
                """
                Handle key presses from the keyboard.
                Translate key combos into actions.
-               Key combinations that do not include special keys, such as ctrl 
or Fcn*,
-               Also, require that the flow graph has mouse focus when choosing 
to handle keys.
-               @return true if the flow graph is in active use
+               @return false to let the accelerators handle the key action
                """
-               keyname = gtk.gdk.keyval_name(event.keyval)
-               ctrl = event.state & gtk.gdk.CONTROL_MASK
-               alt = event.state & gtk.gdk.MOD1_MASK
-               shift = event.state & gtk.gdk.SHIFT_MASK
-               #################### save/open/new/close 
###############################
-               if ctrl and keyname == 's':
-                       self.handle_states(Actions.FLOW_GRAPH_SAVE)
-               elif ctrl and keyname == 'o':
-                       self.handle_states(Actions.FLOW_GRAPH_OPEN)
-               elif ctrl and keyname == 'n':
-                       self.handle_states(Actions.FLOW_GRAPH_NEW)
-               elif ctrl and keyname == 'q':
-                       self.handle_states(Actions.FLOW_GRAPH_CLOSE)
-               #################### Cut/Copy/Paste 
###############################
-               elif self.get_focus_flag() and ctrl and keyname == 'x': #mouse 
focus
-                       self.handle_states(Actions.BLOCK_CUT)
-               elif self.get_focus_flag() and ctrl and keyname == 'c': #mouse 
focus
-                       self.handle_states(Actions.BLOCK_COPY)
-               elif self.get_focus_flag() and ctrl and keyname == 'v': #mouse 
focus
-                       self.handle_states(Actions.BLOCK_PASTE)
-               #################### Undo/Redo ###############################
-               elif ctrl and keyname == 'z':
-                       self.handle_states(Actions.FLOW_GRAPH_UNDO)
-               elif ctrl and keyname == 'y':
-                       self.handle_states(Actions.FLOW_GRAPH_REDO)
-               #################### Delete ###############################
-               elif self.get_focus_flag() and keyname == 'Delete':     #mouse 
focus
-                       self.handle_states(Actions.ELEMENT_DELETE)
-               #################### Params     ###############################
-               elif self.get_focus_flag() and keyname == 'Return':     #mouse 
focus
-                       self.handle_states(Actions.BLOCK_PARAM_MODIFY)
-               #################### Rotate ###############################
-               elif self.get_focus_flag() and keyname == 'Right': #mouse focus
-                       self.handle_states(Actions.BLOCK_ROTATE_RIGHT)
-               elif self.get_focus_flag() and keyname == 'Left': #mouse focus
-                       self.handle_states(Actions.BLOCK_ROTATE_LEFT)
-               #################### Enable/Disable 
###############################
-               elif self.get_focus_flag() and keyname == 'e': #mouse focus
-                       self.handle_states(Actions.BLOCK_ENABLE)
-               elif self.get_focus_flag() and keyname == 'd': #mouse focus
-                       self.handle_states(Actions.BLOCK_DISABLE)
-               #################### Data Type ###############################
-               elif self.get_focus_flag() and keyname == 'Down': #mouse focus
-                       self.handle_states(Actions.BLOCK_INC_TYPE)
-               elif self.get_focus_flag() and keyname == 'Up': #mouse focus
-                       self.handle_states(Actions.BLOCK_DEC_TYPE)
-               #################### Port Controllers 
###############################
-               elif self.get_focus_flag() and keyname in ('equal','plus', 
'KP_Add'): #mouse focus
-                       self.handle_states(Actions.PORT_CONTROLLER_INC)
-               elif self.get_focus_flag() and keyname in ('minus', 
'KP_Subtract'): #mouse focus
-                       self.handle_states(Actions.PORT_CONTROLLER_DEC)
-               #################### Gen/Exec/Stop/Print 
###############################
-               elif keyname == 'F5':
-                       self.handle_states(Actions.FLOW_GRAPH_GEN)
-               elif keyname == 'F6':
-                       self.handle_states(Actions.FLOW_GRAPH_EXEC)
-               elif keyname == 'F7':
-                       self.handle_states(Actions.FLOW_GRAPH_KILL)
-               elif keyname == 'Print':
-                       self.handle_states(Actions.FLOW_GRAPH_SCREEN_CAPTURE)
-               #propagate this if the fg is not in focus or nothing is selected
-               return self.get_focus_flag() and 
self.get_flow_graph().is_selected()
+               if self.get_focus_flag() and 
self.get_flow_graph().is_selected():
+                       try:
+                               self.handle_states({
+                                       'Left': Actions.BLOCK_ROTATE_LEFT,
+                                       'Right': Actions.BLOCK_ROTATE_RIGHT,
+                                       'Up': Actions.BLOCK_DEC_TYPE,
+                                       'Down': Actions.BLOCK_INC_TYPE,
+                                       'equal': Actions.PORT_CONTROLLER_INC,
+                                       'plus': Actions.PORT_CONTROLLER_INC,
+                                       'KP_Add': Actions.PORT_CONTROLLER_INC,
+                                       'minus': Actions.PORT_CONTROLLER_DEC,
+                                       'KP_Subtract': 
Actions.PORT_CONTROLLER_DEC,
+                               }[gtk.gdk.keyval_name(event.keyval)])
+                               return True
+                       #focus + selection: always return false for accelerator 
to handle
+                       except: return False
+               #no focus + selection: only allow accelerator to handle when a 
mod is used
+               return not event.state
 
        def _quit(self, window, event):
                """
@@ -177,14 +131,13 @@
                # Initalize/Quit
                ##################################################
                if state == Actions.APPLICATION_INITIALIZE:
-                       for action in Actions.ACTIONS_LIST: 
action.set_sensitive(False) #set all actions disabled
+                       for action in Actions.get_all_actions(): 
action.set_sensitive(False) #set all actions disabled
                        # enable a select few actions
                        for action in (
                                Actions.APPLICATION_QUIT, 
Actions.FLOW_GRAPH_NEW,
                                Actions.FLOW_GRAPH_OPEN, 
Actions.FLOW_GRAPH_SAVE_AS,
                                Actions.FLOW_GRAPH_CLOSE, 
Actions.ABOUT_WINDOW_DISPLAY,
-                               Actions.HOTKEYS_WINDOW_DISPLAY, 
Actions.PREFS_WINDOW_DISPLAY,
-                               Actions.FLOW_GRAPH_SCREEN_CAPTURE,
+                               Actions.PREFS_WINDOW_DISPLAY, 
Actions.FLOW_GRAPH_SCREEN_CAPTURE,
                        ): 
Actions.get_action_from_name(action).set_sensitive(True)
                        if not self.init_file_paths and 
Preferences.restore_files():
                                self.init_file_paths = Preferences.files_open()
@@ -288,8 +241,6 @@
                        self.get_flow_graph().update()
                elif state == Actions.ABOUT_WINDOW_DISPLAY:
                        AboutDialog()
-               elif state == Actions.HOTKEYS_WINDOW_DISPLAY:
-                       HotKeysDialog()
                ##################################################
                # Param Modifications
                ##################################################

Modified: gnuradio/trunk/grc/src/gui/Actions.py
===================================================================
--- gnuradio/trunk/grc/src/gui/Actions.py       2008-11-26 19:03:54 UTC (rev 
10074)
+++ gnuradio/trunk/grc/src/gui/Actions.py       2008-11-26 23:51:43 UTC (rev 
10075)
@@ -22,7 +22,7 @@
 import gtk
 
 
######################################################################################################
-# States
+# Action Names
 
######################################################################################################
 APPLICATION_INITIALIZE = 'app init'
 APPLICATION_QUIT = 'app quit'
@@ -56,13 +56,39 @@
 FLOW_GRAPH_KILL = 'flow graph kill'
 FLOW_GRAPH_SCREEN_CAPTURE = 'flow graph screen capture'
 ABOUT_WINDOW_DISPLAY = 'about window display'
-HOTKEYS_WINDOW_DISPLAY = 'hotkeys window display'
 PREFS_WINDOW_DISPLAY = 'prefs window display'
 
 
######################################################################################################
+# Action Key Map
+######################################################################################################
+_actions_key_map = {
+       #action name: (key name, mask)
+       FLOW_GRAPH_NEW: ('n', gtk.gdk.CONTROL_MASK),
+       FLOW_GRAPH_OPEN: ('o', gtk.gdk.CONTROL_MASK),
+       FLOW_GRAPH_SAVE: ('s', gtk.gdk.CONTROL_MASK),
+       FLOW_GRAPH_CLOSE: ('w', gtk.gdk.CONTROL_MASK),
+       APPLICATION_QUIT: ('q', gtk.gdk.CONTROL_MASK),
+       FLOW_GRAPH_UNDO: ('z', gtk.gdk.CONTROL_MASK),
+       FLOW_GRAPH_REDO: ('y', gtk.gdk.CONTROL_MASK),
+       ELEMENT_DELETE: ('Delete', 0),
+       BLOCK_ROTATE_LEFT: ('Left', 0),
+       BLOCK_ROTATE_RIGHT: ('Right', 0),
+       BLOCK_PARAM_MODIFY: ('Return', 0),
+       BLOCK_ENABLE: ('e', 0),
+       BLOCK_DISABLE: ('d', 0),
+       BLOCK_CUT: ('x', gtk.gdk.CONTROL_MASK),
+       BLOCK_COPY: ('c', gtk.gdk.CONTROL_MASK),
+       BLOCK_PASTE: ('v', gtk.gdk.CONTROL_MASK),
+       FLOW_GRAPH_GEN: ('F5', 0),
+       FLOW_GRAPH_EXEC: ('F6', 0),
+       FLOW_GRAPH_KILL: ('F7', 0),
+       FLOW_GRAPH_SCREEN_CAPTURE: ('Print', 0),
+}
+
+######################################################################################################
 # Actions
 
######################################################################################################
-ACTIONS_LIST = (
+_actions_list = (
        gtk.Action(FLOW_GRAPH_NEW, '_New', 'Create a new flow graph', 
'gtk-new'),
        gtk.Action(FLOW_GRAPH_OPEN, '_Open', 'Open an existing flow graph', 
'gtk-open'),
        gtk.Action(FLOW_GRAPH_SAVE, '_Save', 'Save the current flow graph', 
'gtk-save'),
@@ -82,15 +108,14 @@
        gtk.Action(BLOCK_PASTE, '_Paste', 'Paste', 'gtk-paste'),
        gtk.Action(PREFS_WINDOW_DISPLAY, '_Preferences', 'Configure 
Preferences', 'gtk-preferences'),
        gtk.Action(ABOUT_WINDOW_DISPLAY, '_About', 'About this program', 
'gtk-about'),
-       gtk.Action(HOTKEYS_WINDOW_DISPLAY, '_HotKeys', 'Hot Keys', 'gtk-info'),
        gtk.Action(FLOW_GRAPH_GEN, '_Generate', 'Generate the flow graph', 
'gtk-convert'),
        gtk.Action(FLOW_GRAPH_EXEC, '_Execute', 'Execute the flow graph', 
'gtk-execute'),
        gtk.Action(FLOW_GRAPH_KILL, '_Kill', 'Kill the flow graph', 'gtk-stop'),
        gtk.Action(FLOW_GRAPH_SCREEN_CAPTURE, 'S_creen Capture', 'Create a 
screen capture of the flow graph', 'gtk-print'),
 )
+def get_all_actions(): return _actions_list
 
-ACTIONS_DICT = dict((action.get_name(), action) for action in ACTIONS_LIST)
-
+_actions_dict = dict((action.get_name(), action) for action in _actions_list)
 def get_action_from_name(action_name):
        """
        Retrieve the action from the action list.
@@ -99,5 +124,16 @@
        @throw KeyError bad action name
        @return a gtk action object
        """
-       if ACTIONS_DICT.has_key(action_name): return ACTIONS_DICT[action_name]
+       if _actions_dict.has_key(action_name): return _actions_dict[action_name]
        raise KeyError('Action Name: "%s" does not exist'%action_name)
+
+_accel_group = gtk.AccelGroup()
+def get_accel_group(): return _accel_group
+
+#load the actions key map
+#set the accelerator group, and accelerator path
+#register the key and mod with the accelerator path
+for action_name, (key_name, mod) in _actions_key_map.iteritems():
+       get_action_from_name(action_name).set_accel_group(get_accel_group())
+       get_action_from_name(action_name).set_accel_path('<main>/'+action_name)
+       gtk.accel_map_add_entry('<main>/'+action_name, 
gtk.gdk.keyval_from_name(key_name),mod)

Modified: gnuradio/trunk/grc/src/gui/Bars.py
===================================================================
--- gnuradio/trunk/grc/src/gui/Bars.py  2008-11-26 19:03:54 UTC (rev 10074)
+++ gnuradio/trunk/grc/src/gui/Bars.py  2008-11-26 23:51:43 UTC (rev 10075)
@@ -91,7 +91,6 @@
        ]),
        (gtk.Action('Help', '_Help', None, None), [
                Actions.ABOUT_WINDOW_DISPLAY,
-               Actions.HOTKEYS_WINDOW_DISPLAY,
        ]),
 )
 

Modified: gnuradio/trunk/grc/src/gui/Dialogs.py
===================================================================
--- gnuradio/trunk/grc/src/gui/Dialogs.py       2008-11-26 19:03:54 UTC (rev 
10074)
+++ gnuradio/trunk/grc/src/gui/Dialogs.py       2008-11-26 23:51:43 UTC (rev 
10075)
@@ -103,43 +103,3 @@
 -----""")
                self.run()
                self.destroy()
-
-class HotKeysDialog(gtk.Dialog):
-       """Display each action with the associated hotkey."""
-
-       def __init__(self):
-               """HotKeysDialog constructor."""
-               gtk.Dialog.__init__(self, buttons=('gtk-close', 
gtk.RESPONSE_CLOSE))
-               self.set_title('Hot Keys')
-               markup = ''
-               for action, hotkey in (
-                       ('New Flow Graph', 'Ctrl + n'),
-                       ('Open Flow Graph', 'Ctrl + o'),
-                       ('Save Flow Graph', 'Ctrl + s'),
-                       ('Close Flow Graph', 'Ctrl + q'),
-                       ('Cut Block', 'Ctrl + x'),
-                       ('Copy Block', 'Ctrl + c'),
-                       ('Paste Block', 'Ctrl + v'),
-                       ('Undo Change', 'Ctrl + z'),
-                       ('Redo Change', 'Ctrl + y'),
-                       ('Delete Element', 'Delete'),
-                       ('Modify Parameters', 'Enter'),
-                       ('Rotate Block', 'Right'),
-                       ('Rotate Block', 'Left'),
-                       ('Enable Block', 'e'),
-                       ('Disable Block', 'd'),
-                       ('Modify Data Type', 'Up'),
-                       ('Modify Data Type', 'Down'),
-                       ('Add a Port', '+'),
-                       ('Remove a Port', '-'),
-                       ('Flow Graph Generate', 'F5'),
-                       ('Flow Graph Execute', 'F6'),
-                       ('Flow Graph Kill', 'F7'),
-                       ('Screen Shot', 'PrintScreen'),
-               ): markup = '%s\n<b>%s:</b>%s'%(markup, action, 
hotkey.rjust(25-len(action), ' '))
-               label = gtk.Label()
-               label.set_markup('<tt>%s</tt>\n'%markup) #append newline
-               self.vbox.pack_start(label, False)
-               self.show_all()
-               self.run()
-               self.destroy()

Modified: gnuradio/trunk/grc/src/gui/MainWindow.py
===================================================================
--- gnuradio/trunk/grc/src/gui/MainWindow.py    2008-11-26 19:03:54 UTC (rev 
10074)
+++ gnuradio/trunk/grc/src/gui/MainWindow.py    2008-11-26 23:51:43 UTC (rev 
10075)
@@ -22,7 +22,7 @@
        NEW_FLOGRAPH_TITLE, REPORTS_WINDOW_HEIGHT
 from Actions import \
        APPLICATION_QUIT, FLOW_GRAPH_KILL, \
-       FLOW_GRAPH_SAVE
+       FLOW_GRAPH_SAVE, get_accel_group
 import pygtk
 pygtk.require('2.0')
 import gtk
@@ -55,6 +55,7 @@
                hbox = gtk.HBox()
                self.add(vbox)
                #create the menu bar and toolbar
+               self.add_accel_group(get_accel_group())
                vbox.pack_start(Bars.MenuBar(), False)
                vbox.pack_start(Bars.Toolbar(), False)
                #setup scrolled window





reply via email to

[Prev in Thread] Current Thread [Next in Thread]