diff options
Diffstat (limited to 'lvc/widgets/menus.py')
-rw-r--r-- | lvc/widgets/menus.py | 50 |
1 files changed, 33 insertions, 17 deletions
diff --git a/lvc/widgets/menus.py b/lvc/widgets/menus.py index 4e23b46..64e73aa 100644 --- a/lvc/widgets/menus.py +++ b/lvc/widgets/menus.py @@ -13,16 +13,20 @@ from lvc.widgets import widgetset from lvc.widgets import app from lvc.widgets.keyboard import (Shortcut, CTRL, ALT, SHIFT, CMD, - MOD, RIGHT_ARROW, LEFT_ARROW, UP_ARROW, DOWN_ARROW, SPACE, ENTER, DELETE, - BKSPACE, ESCAPE, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12) + MOD, RIGHT_ARROW, LEFT_ARROW, UP_ARROW, + DOWN_ARROW, SPACE, ENTER, DELETE, BKSPACE, + ESCAPE, F1, F2, F3, F4, F5, F6, F7, F8, F9, + F10, F11, F12) # XXX hack: + def _(text, *params): if params: - return text % params[0] + return text % params[0] return text + class MenuItem(widgetset.MenuItem): """Portable MenuItem class. @@ -41,6 +45,7 @@ class MenuItem(widgetset.MenuItem): raise ValueError("only support one group") MenuItem.group_map[groups[0]].add(self) + class MenuItemFetcher(object): """Get MenuItems by their name quickly. """ @@ -55,21 +60,22 @@ class MenuItemFetcher(object): self._cache[name] = menu_item return menu_item + def get_app_menu(): """Returns the default menu structure.""" app_name = "Libre Video Converter" # XXX HACK - file_menu = widgetset.Menu(_("_File"), "FileMenu", [ - MenuItem(_("_Open"), "Open", Shortcut("o", MOD), - groups=["NonPlaying"]), - MenuItem(_("_Quit"), "Quit", Shortcut("q", MOD)), - ]) - help_menu = widgetset.Menu(_("_Help"), "HelpMenu", [ - MenuItem(_("About %(name)s", - {'name': app_name}), - "About") - ]) + file_menu = widgetset.Menu(_("_File"), "FileMenu", + [MenuItem(_("_Open"), "Open", + Shortcut("o", MOD), + groups=["NonPlaying"]), + MenuItem(_("_Quit"), "Quit", + Shortcut("q", MOD)), ]) + help_menu = widgetset.Menu(_("_Help"), "HelpMenu", + [MenuItem(_("About %(name)s", + {'name': app_name}), + "About")]) all_menus = [file_menu, help_menu] return all_menus @@ -77,11 +83,13 @@ def get_app_menu(): action_handlers = {} group_action_handlers = {} + def on_menubar_activate(menubar, action_name): callback = lookup_handler(action_name) if callback is not None: callback() + def lookup_handler(action_name): """For a given action name, get a callback to handle it. Return None if no callback is found. @@ -92,11 +100,12 @@ def lookup_handler(action_name): retval = action_handlers.get(action_name) return retval + def _lookup_group_handler(action_name): try: group_name, callback_arg = action_name.split('-', 1) except ValueError: - return None # split return tuple of length 1 + return None # split return tuple of length 1 try: group_handler = group_action_handlers[group_name] except KeyError: @@ -104,6 +113,7 @@ def _lookup_group_handler(action_name): else: return lambda: group_handler(callback_arg) + def action_handler(name): """Decorator for functions that handle menu actions.""" def decorator(func): @@ -111,26 +121,31 @@ def action_handler(name): return func return decorator + def group_action_handler(action_prefix): def decorator(func): group_action_handlers[action_prefix] = func return func return decorator + # File menu @action_handler("Open") def on_open(): app.widgetapp.choose_file() + @action_handler("Quit") def on_quit(): app.widgetapp.quit() + # Help menu @action_handler("About") def on_about(): app.widgetapp.about() + class MenuManager(signals.SignalEmitter): """Updates the menu based on the current selection. @@ -149,7 +164,7 @@ class MenuManager(signals.SignalEmitter): def __init__(self): signals.SignalEmitter.__init__(self, 'menus-updated') self.menu_item_fetcher = MenuItemFetcher() - #self.subtitle_encoding_updater = SubtitleEncodingMenuUpdater() + # self.subtitle_encoding_updater = SubtitleEncodingMenuUpdater() self.subtitle_encoding_updater = None def setup_menubar(self, menubar): @@ -160,8 +175,8 @@ class MenuManager(signals.SignalEmitter): self.menu_updaters = [] def _set_play_pause(self): - if ((not app.playback_manager.is_playing - or app.playback_manager.is_paused)): + if ((not app.playback_manager.is_playing or + app.playback_manager.is_paused)): label = _('Play') else: label = _('Pause') @@ -204,6 +219,7 @@ class MenuManager(signals.SignalEmitter): menu_updater.update(reasons) self.emit('menus-updated', reasons) + class MenuUpdater(object): """Base class for objects that dynamically update menus.""" def __init__(self, menu_name): |