def test_get(self): self.failUnless(browsers.get("EmptyBar") is browsers.empty.EmptyBar) self.failUnless( browsers.get("FileSystem") is browsers.filesystem.FileSystem) self.assertEqual(browsers.get("Paned"), browsers.paned.PanedBrowser) self.assertEqual(browsers.get("paned"), browsers.paned.PanedBrowser) self.assertEqual(browsers.get("panedbrowser"), browsers.paned.PanedBrowser)
def test_get(self): self.failUnless(browsers.get("SearchBar") is browsers.tracks.TrackList) self.failUnless( browsers.get("FileSystem") is browsers.filesystem.FileSystem) self.assertEqual(browsers.get("Paned"), browsers.paned.PanedBrowser) self.assertEqual(browsers.get("paned"), browsers.paned.PanedBrowser) self.assertEqual(browsers.get("panedbrowser"), browsers.paned.PanedBrowser)
def restore(cls, library): """restore saved browser windows""" value = config.get("memory", "open_browsers", "") for name in value.split(): kind = browsers.get(name) cls.open(kind, library)
def _select_browser(self, activator, current, library, player, restore=False): Browser = browsers.get(current) window = self.get_window() if window: window.set_cursor(Gdk.Cursor.new(Gdk.CursorType.WATCH)) # Wait for the cursor to update before continuing while Gtk.events_pending(): Gtk.main_iteration() config.set("memory", "browser", current) if self.browser: if not (self.browser.uses_main_library and Browser.uses_main_library): self.songlist.clear() container = self.browser.__container self.browser.unpack(container, self.songpane) if self.browser.accelerators: self.remove_accel_group(self.browser.accelerators) container.destroy() self.browser.destroy() self.browser = Browser(library) self.browser.connect('songs-selected', self.__browser_cb, library, player) self.browser.connect('songs-activated', self.__browser_activate) if restore: self.browser.restore() self.browser.activate() self.browser.finalize(restore) if not restore: self.browser.unfilter() if self.browser.can_reorder: self.songlist.enable_drop() elif self.browser.dropped: self.songlist.enable_drop(False) else: self.songlist.disable_drop() if self.browser.accelerators: self.add_accel_group(self.browser.accelerators) container = self.browser.__container = self.browser.pack(self.songpane) # Reset the cursor when done loading the browser if window: GLib.idle_add(window.set_cursor, None) player.replaygain_profiles[1] = self.browser.replaygain_profiles player.reset_replaygain() self.__browserbox.add(container) container.show() self._filter_menu.set_browser(self.browser) self.__hide_headers()
def restore(cls, library, player): """restore saved browser windows""" value = config.get("memory", "open_browsers", "") for name in value.split(): kind = browsers.get(name) browser = cls(kind, library, player) browser.show_maybe()
def _open_browser(app, value): value = arg2text(value) try: Kind = browsers.get(value) except ValueError: raise CommandError("Unknown browser %r" % value) LibraryBrowser.open(Kind, app.library, app.player)
def select_browser(self, activator, current, library, player, restore=False): if isinstance(current, Gtk.RadioAction): current = current.get_current_value() Browser = browsers.get(current) config.set("memory", "browser", Browser.__name__) if self.browser: container = self.browser.__container self.browser.unpack(container, self.songpane) if self.browser.accelerators: self.remove_accel_group(self.browser.accelerators) container.destroy() self.browser.destroy() self.browser = Browser(library, True) self.browser.connect('songs-selected', self.__browser_cb) self.browser.connect('activated', self.__browser_activate) if restore: self.browser.restore() self.browser.activate() self.browser.finalize(restore) if self.browser.reordered: self.songlist.enable_drop() elif self.browser.dropped: self.songlist.enable_drop(False) else: self.songlist.disable_drop() if self.browser.accelerators: self.add_accel_group(self.browser.accelerators) container = self.browser.__container = self.browser.pack(self.songpane) # find a paned and save the position paned = None for widget in qltk.find_widgets(container, RPaned): if widget is not self.songpane: paned = widget break if paned: try: key = "%s_pos" % self.browser.__class__.__name__ val = config.getfloat("browsers", key) # Use a minimum restore size val = max(val, 0.1) except: val = 0.4 paned.connect( 'notify::position', self.__browser_configure, self.browser) paned.set_relative(val) player.replaygain_profiles[1] = self.browser.replaygain_profiles player.volume = player.volume self.__browserbox.add(container) container.show() self.__hide_menus() self.__hide_headers() self.__refresh_size()
def plugin_songs(self, songs): tag = "~dirname" values = [] for song in songs: values.extend(song.list(tag)) browser = LibraryBrowser.open(browsers.get("SearchBar"), app.library) browser.browser.filter(tag, set(values))
def plugin_songs(self, songs): tag = "~dirname" values = [] for song in songs: values.extend(song.list(tag)) browser = LibraryBrowser.open( browsers.get("SearchBar"), app.library, app.player) browser.browser.filter(tag, set(values))
def _select_browser(self, activator, current, library, player, restore=False): Browser = browsers.get(current) window = self.get_window() if window: window.set_cursor(Gdk.Cursor.new(Gdk.CursorType.WATCH)) # Wait for the cursor to update before continuing while Gtk.events_pending(): Gtk.main_iteration() config.set("memory", "browser", current) if self.browser: if not (self.browser.uses_main_library and Browser.uses_main_library): self.songlist.clear() container = self.browser.__container self.browser.unpack(container, self.songpane) if self.browser.accelerators: self.remove_accel_group(self.browser.accelerators) container.destroy() self.browser.destroy() self.browser = Browser(library) self.browser.connect('songs-selected', self.__browser_cb, library, player) self.browser.connect('songs-activated', self.__browser_activate) if restore: self.browser.restore() self.browser.activate() self.browser.finalize(restore) if self.browser.can_reorder: self.songlist.enable_drop() elif self.browser.dropped: self.songlist.enable_drop(False) else: self.songlist.disable_drop() if self.browser.accelerators: self.add_accel_group(self.browser.accelerators) container = self.browser.__container = self.browser.pack(self.songpane) # Reset the cursor when done loading the browser if window: GLib.idle_add(window.set_cursor, None) player.replaygain_profiles[1] = self.browser.replaygain_profiles player.reset_replaygain() self.__browserbox.add(container) container.show() self._filter_menu.set_browser(self.browser) self.__hide_headers()
def select_browser(self, activator, current, library, player, restore=False): if isinstance(current, Gtk.RadioAction): current = current.get_current_value() Browser = browsers.get(current) config.set("memory", "browser", Browser.__name__) if self.browser: if not (self.browser.uses_main_library and Browser.uses_main_library): self.songlist.clear() container = self.browser.__container self.browser.unpack(container, self.songpane) if self.browser.accelerators: self.remove_accel_group(self.browser.accelerators) container.destroy() self.browser.destroy() self.browser = Browser(library) self.browser.connect('songs-selected', self.__browser_cb, library, player) self.browser.connect('songs-activated', self.__browser_activate) if restore: self.browser.restore() self.browser.activate() self.browser.finalize(restore) if self.browser.can_reorder: self.songlist.enable_drop() elif self.browser.dropped: self.songlist.enable_drop(False) else: self.songlist.disable_drop() if self.browser.accelerators: self.add_accel_group(self.browser.accelerators) container = self.browser.__container = self.browser.pack(self.songpane) player.replaygain_profiles[1] = self.browser.replaygain_profiles player.reset_replaygain() self.__browserbox.add(container) container.show() self._filter_menu.set_browser(self.browser) self.__hide_headers() self.__refresh_size()
def test_header_menu(self): from quodlibet import browsers from quodlibet.library import SongLibrary, SongLibrarian song = AudioFile({"~filename": fsnative(u"/dev/null")}) song.sanitize() self.songlist.set_songs([song]) library = SongLibrary() library.librarian = SongLibrarian() browser = browsers.get("SearchBar")(library) self.songlist.set_column_headers(["foo"]) self.assertFalse(self.songlist.Menu("foo", browser, library)) sel = self.songlist.get_selection() sel.select_all() self.assertTrue(self.songlist.Menu("foo", browser, library))
def select_browser(self, browser_key, library, player): """Given a browser name (see browsers.get()) changes the current browser. Returns True if the passed browser ID is known and the change was initiated. """ try: Browser = browsers.get(browser_key) except ValueError: return False action_name = "View%s" % Browser.__name__ for action in self._browser_action.get_group(): if action.get_name() == action_name: action.set_active(True) return True return False
def test_old_names(self): self.assertEqual(browsers.get("PanedBrowser"), browsers.get("Paned")) self.assertEqual(browsers.get("PlaylistsBrowser"), browsers.get("Playlists"))
def __create_menu(self, player, library): def add_view_items(ag): act = Action(name="Information", label=_('_Information'), icon_name=Icons.DIALOG_INFORMATION) act.connect('activate', self.__current_song_info) ag.add_action(act) act = Action(name="Jump", label=_('_Jump to Playing Song'), icon_name=Icons.GO_JUMP) self.__jump_to_current(True, None, True) act.connect('activate', self.__jump_to_current) ag.add_action_with_accel(act, "<Primary>J") def add_top_level_items(ag): ag.add_action(Action(name="File", label=_("_File"))) ag.add_action(Action(name="Song", label=_("_Song"))) ag.add_action(Action(name="View", label=_('_View'))) ag.add_action(Action(name="Browse", label=_("_Browse"))) ag.add_action(Action(name="Control", label=_('_Control'))) ag.add_action(Action(name="Help", label=_('_Help'))) ag = Gtk.ActionGroup.new('QuodLibetWindowActions') add_top_level_items(ag) add_view_items(ag) act = Action(name="AddFolders", label=_(u'_Add a Folder…'), icon_name=Icons.LIST_ADD) act.connect('activate', self.open_chooser) ag.add_action_with_accel(act, "<Primary>O") act = Action(name="AddFiles", label=_(u'_Add a File…'), icon_name=Icons.LIST_ADD) act.connect('activate', self.open_chooser) ag.add_action(act) act = Action(name="AddLocation", label=_(u'_Add a Location…'), icon_name=Icons.LIST_ADD) act.connect('activate', self.open_location) ag.add_action(act) act = Action(name="BrowseLibrary", label=_('Open _Browser'), icon_name=Icons.EDIT_FIND) ag.add_action(act) act = Action(name="Preferences", label=_('_Preferences'), icon_name=Icons.PREFERENCES_SYSTEM) act.connect('activate', self.__preferences) ag.add_action(act) act = Action(name="Plugins", label=_('_Plugins'), icon_name=Icons.SYSTEM_RUN) act.connect('activate', self.__plugins) ag.add_action(act) act = Action(name="Quit", label=_('_Quit'), icon_name=Icons.APPLICATION_EXIT) act.connect('activate', lambda *x: self.destroy()) ag.add_action_with_accel(act, "<Primary>Q") act = Action(name="EditTags", label=_('Edit _Tags'), icon_name=Icons.DOCUMENT_PROPERTIES) act.connect('activate', self.__current_song_prop) ag.add_action(act) act = Action(name="EditBookmarks", label=_(u"Edit Bookmarks…")) connect_obj(act, 'activate', self.__edit_bookmarks, library.librarian, player) ag.add_action_with_accel(act, "<Primary>B") act = Action(name="Previous", label=_('Pre_vious'), icon_name=Icons.MEDIA_SKIP_BACKWARD) act.connect('activate', self.__previous_song) ag.add_action_with_accel(act, "<Primary>comma") act = Action(name="PlayPause", label=_('_Play'), icon_name=Icons.MEDIA_PLAYBACK_START) act.connect('activate', self.__play_pause) ag.add_action_with_accel(act, "<Primary>space") act = Action(name="Next", label=_('_Next'), icon_name=Icons.MEDIA_SKIP_FORWARD) act.connect('activate', self.__next_song) ag.add_action_with_accel(act, "<Primary>period") act = ToggleAction(name="StopAfter", label=_("Stop After This Song")) ag.add_action_with_accel(act, "<shift>space") # access point for the tray icon self.stop_after = act act = Action(name="Shortcuts", label=_("_Keyboard Shortcuts")) act.connect('activate', self.__keyboard_shortcuts) ag.add_action_with_accel(act, "<Primary>question") act = Action(name="About", label=_("_About"), icon_name=Icons.HELP_ABOUT) act.connect('activate', self.__show_about) ag.add_action_with_accel(act, None) act = Action(name="OnlineHelp", label=_("Online Help"), icon_name=Icons.HELP_BROWSER) def website_handler(*args): util.website(const.ONLINE_HELP) act.connect('activate', website_handler) ag.add_action_with_accel(act, "F1") act = Action(name="SearchHelp", label=_("Search Help")) def search_help_handler(*args): util.website(const.SEARCH_HELP) act.connect('activate', search_help_handler) ag.add_action_with_accel(act, None) act = Action(name="CheckUpdates", label=_("_Check for Updates…"), icon_name=Icons.NETWORK_SERVER) def check_updates_handler(*args): d = UpdateDialog(self) d.run() d.destroy() act.connect('activate', check_updates_handler) ag.add_action_with_accel(act, None) act = Action(name="RefreshLibrary", label=_("_Scan Library"), icon_name=Icons.VIEW_REFRESH) act.connect('activate', self.__rebuild, False) ag.add_action(act) current = config.get("memory", "browser") try: browsers.get(current) except ValueError: current = browsers.name(browsers.default) first_action = None for Kind in browsers.browsers: name = browsers.name(Kind) index = browsers.index(name) action_name = "View" + Kind.__name__ act = RadioAction(name=action_name, label=Kind.accelerated_name, value=index) act.join_group(first_action) first_action = first_action or act if name == current: act.set_active(True) ag.add_action_with_accel(act, "<Primary>%d" % ((index + 1) % 10, )) assert first_action self._browser_action = first_action def action_callback(view_action, current_action): current = browsers.name( browsers.get(current_action.get_current_value())) self._select_browser(view_action, current, library, player) first_action.connect("changed", action_callback) for Kind in browsers.browsers: action = "Browser" + Kind.__name__ label = Kind.accelerated_name name = browsers.name(Kind) index = browsers.index(name) act = Action(name=action, label=label) def browser_activate(action, Kind): LibraryBrowser.open(Kind, library, player) act.connect('activate', browser_activate, Kind) ag.add_action_with_accel(act, "<Primary><alt>%d" % ((index + 1) % 10, )) ui = Gtk.UIManager() ui.insert_action_group(ag, -1) menustr = MENU % { "views": browser_menu_items(), "browsers": secondary_browser_menu_items(), "filters_menu": FilterMenu.MENU } ui.add_ui_from_string(menustr) self._filter_menu = FilterMenu(library, player, ui) # Cute. So. UIManager lets you attach tooltips, but when they're # for menu items, they just get ignored. So here I get to actually # attach them. ui.get_widget("/Menu/File/RefreshLibrary").set_tooltip_text( _("Check for changes in your library")) return ui
def __create_menu(self, player, library): def add_view_items(ag): act = Action(name="Information", label=_('_Information'), icon_name=Icons.DIALOG_INFORMATION) act.connect('activate', self.__current_song_info) ag.add_action(act) act = Action(name="Jump", label=_('_Jump to Playing Song'), icon_name=Icons.GO_JUMP) self.__jump_to_current(True, None, True) act.connect('activate', self.__jump_to_current) ag.add_action_with_accel(act, "<Primary>J") def add_top_level_items(ag): ag.add_action(Action(name="File", label=_("_File"))) ag.add_action(Action(name="Song", label=_("_Song"))) ag.add_action(Action(name="View", label=_('_View'))) ag.add_action(Action(name="Browse", label=_("_Browse"))) ag.add_action(Action(name="Control", label=_('_Control'))) ag.add_action(Action(name="Help", label=_('_Help'))) ag = Gtk.ActionGroup.new('QuodLibetWindowActions') add_top_level_items(ag) add_view_items(ag) act = Action(name="AddFolders", label=_(u'_Add a Folder…'), icon_name=Icons.LIST_ADD) act.connect('activate', self.open_chooser) ag.add_action_with_accel(act, "<Primary>O") act = Action(name="AddFiles", label=_(u'_Add a File…'), icon_name=Icons.LIST_ADD) act.connect('activate', self.open_chooser) ag.add_action(act) act = Action(name="AddLocation", label=_(u'_Add a Location…'), icon_name=Icons.LIST_ADD) act.connect('activate', self.open_location) ag.add_action(act) act = Action(name="BrowseLibrary", label=_('Open _Browser'), icon_name=Icons.EDIT_FIND) ag.add_action(act) act = Action(name="Preferences", label=_('_Preferences'), icon_name=Icons.PREFERENCES_SYSTEM) act.connect('activate', self.__preferences) ag.add_action(act) act = Action(name="Plugins", label=_('_Plugins'), icon_name=Icons.SYSTEM_RUN) act.connect('activate', self.__plugins) ag.add_action(act) act = Action(name="Quit", label=_('_Quit'), icon_name=Icons.APPLICATION_EXIT) act.connect('activate', lambda *x: self.destroy()) ag.add_action_with_accel(act, "<Primary>Q") act = Action(name="EditTags", label=_('Edit _Tags'), icon_name=Icons.DOCUMENT_PROPERTIES) act.connect('activate', self.__current_song_prop) ag.add_action(act) act = Action(name="EditBookmarks", label=_(u"Edit Bookmarks…")) connect_obj(act, 'activate', self.__edit_bookmarks, library.librarian, player) ag.add_action_with_accel(act, "<Primary>B") act = Action(name="Previous", label=_('Pre_vious'), icon_name=Icons.MEDIA_SKIP_BACKWARD) act.connect('activate', self.__previous_song) ag.add_action_with_accel(act, "<Primary>comma") act = Action(name="PlayPause", label=_('_Play'), icon_name=Icons.MEDIA_PLAYBACK_START) act.connect('activate', self.__play_pause) ag.add_action_with_accel(act, "<Primary>space") act = Action(name="Next", label=_('_Next'), icon_name=Icons.MEDIA_SKIP_FORWARD) act.connect('activate', self.__next_song) ag.add_action_with_accel(act, "<Primary>period") act = ToggleAction(name="StopAfter", label=_("Stop After This Song")) ag.add_action_with_accel(act, "<shift>space") # access point for the tray icon self.stop_after = act act = Action(name="Shortcuts", label=_("_Keyboard Shortcuts")) act.connect('activate', self.__keyboard_shortcuts) ag.add_action_with_accel(act, "<Primary>question") act = Action(name="About", label=_("_About"), icon_name=Icons.HELP_ABOUT) act.connect('activate', self.__show_about) ag.add_action_with_accel(act, None) act = Action(name="OnlineHelp", label=_("Online Help"), icon_name=Icons.HELP_BROWSER) def website_handler(*args): util.website(const.ONLINE_HELP) act.connect('activate', website_handler) ag.add_action_with_accel(act, "F1") act = Action(name="SearchHelp", label=_("Search Help")) def search_help_handler(*args): util.website(const.SEARCH_HELP) act.connect('activate', search_help_handler) ag.add_action_with_accel(act, None) act = Action(name="CheckUpdates", label=_("_Check for Updates…"), icon_name=Icons.NETWORK_SERVER) def check_updates_handler(*args): d = UpdateDialog(self) d.run() d.destroy() act.connect('activate', check_updates_handler) ag.add_action_with_accel(act, None) act = Action( name="RefreshLibrary", label=_("_Scan Library"), icon_name=Icons.VIEW_REFRESH) act.connect('activate', self.__rebuild, False) ag.add_action(act) current = config.get("memory", "browser") try: browsers.get(current) except ValueError: current = browsers.name(browsers.default) first_action = None for Kind in browsers.browsers: name = browsers.name(Kind) index = browsers.index(name) action_name = "View" + Kind.__name__ act = RadioAction(name=action_name, label=Kind.accelerated_name, value=index) act.join_group(first_action) first_action = first_action or act if name == current: act.set_active(True) ag.add_action_with_accel(act, "<Primary>%d" % ((index + 1) % 10,)) assert first_action self._browser_action = first_action def action_callback(view_action, current_action): current = browsers.name( browsers.get(current_action.get_current_value())) self._select_browser(view_action, current, library, player) first_action.connect("changed", action_callback) for Kind in browsers.browsers: action = "Browser" + Kind.__name__ label = Kind.accelerated_name name = browsers.name(Kind) index = browsers.index(name) act = Action(name=action, label=label) def browser_activate(action, Kind): LibraryBrowser.open(Kind, library, player) act.connect('activate', browser_activate, Kind) ag.add_action_with_accel(act, "<Primary><alt>%d" % ((index + 1) % 10,)) ui = Gtk.UIManager() ui.insert_action_group(ag, -1) menustr = MENU % { "views": browser_menu_items(), "browsers": secondary_browser_menu_items(), "filters_menu": FilterMenu.MENU } ui.add_ui_from_string(menustr) self._filter_menu = FilterMenu(library, player, ui) # Cute. So. UIManager lets you attach tooltips, but when they're # for menu items, they just get ignored. So here I get to actually # attach them. ui.get_widget("/Menu/File/RefreshLibrary").set_tooltip_text( _("Check for changes in your library")) return ui
def action_callback(view_action, current_action): current = browsers.name( browsers.get(current_action.get_current_value())) self._select_browser(view_action, current, library, player)
def action_callback(view_action, current_action): current = browsers.name(browsers.get(current_action.get_current_value())) self.select_browser(view_action, current, library, player)
def select_browser(self, activator, current, library, player, restore=False): if isinstance(current, gtk.RadioAction): current = current.get_current_value() Browser = browsers.get(current) config.set("memory", "browser", Browser.__name__) if self.browser: container = self.browser.__container self.browser.unpack(container, self.songpane) if self.browser.accelerators: self.remove_accel_group(self.browser.accelerators) container.destroy() self.browser.destroy() self.browser = Browser(library, True) self.browser.connect('songs-selected', self.__browser_cb) self.browser.connect('activated', self.__browser_activate) if restore: self.browser.restore() self.browser.activate() self.browser.finalize(restore) if self.browser.reordered: self.songlist.enable_drop() elif self.browser.dropped: self.songlist.enable_drop(False) else: self.songlist.disable_drop() if self.browser.accelerators: self.add_accel_group(self.browser.accelerators) container = self.browser.__container = self.browser.pack(self.songpane) # Look for a paned if the container is none sub = container if not isinstance(container, RPaned): for child in container.get_children(): if isinstance(child, RPaned): sub = child # Save position if container is a RPaned if isinstance(sub, RPaned): try: key = "%s_pos" % self.browser.__class__.__name__ val = config.getfloat("browsers", key) # Use a minimum restore size val = max(val, 0.1) except: val = 0.4 sub.connect( 'notify::position', self.__browser_configure, self.browser) def set_size(paned, alloc, pos): paned.set_relative(pos) paned.disconnect(paned._size_sig) # The signal disconnects itself! I hate GTK sizing. del(paned._size_sig) sig = sub.connect('size-allocate', set_size, val) sub._size_sig = sig player.replaygain_profiles[1] = self.browser.replaygain_profiles player.volume = player.volume self.__browserbox.add(container) container.show() self.__hide_menus() self.__hide_headers() self.__refresh_size()
def test_key(self): self.assertEqual(browsers.get(browsers.name(self.Kind)), self.Kind)
def __create_menu(self, player, library): ag = Gtk.ActionGroup.new('QuodLibetWindowActions') actions = [ ('Music', None, _("_Music")), ('AddFolders', Gtk.STOCK_ADD, _(u'_Add a Folder…'), "<control>O", None, self.open_chooser), ('AddFiles', Gtk.STOCK_ADD, _(u'_Add a File…'), None, None, self.open_chooser), ('AddLocation', Gtk.STOCK_ADD, _(u'_Add a Location…'), None, None, self.open_location), ('BrowseLibrary', Gtk.STOCK_FIND, _('Open _Browser'), ""), ("Preferences", Gtk.STOCK_PREFERENCES, None, None, None, self.__preferences), ("Plugins", Gtk.STOCK_EXECUTE, _("_Plugins"), None, None, self.__plugins), ("Quit", Gtk.STOCK_QUIT, None, None, None, lambda *x: self.destroy()), ("Control", None, _("_Control")), ("EditTags", Gtk.STOCK_PROPERTIES, _("Edit _Tags"), "", None, self.__current_song_prop), ("Information", Gtk.STOCK_INFO, None, None, None, self.__current_song_info), ("Jump", Gtk.STOCK_JUMP_TO, _("_Jump to Playing Song"), "<control>J", None, self.__jump_to_current), ("View", None, _("_View")), ("Help", None, _("_Help")), ] actions.append(("Previous", Gtk.STOCK_MEDIA_PREVIOUS, None, "<control>comma", None, self.__previous_song)) actions.append(("PlayPause", Gtk.STOCK_MEDIA_PLAY, None, "<control>space", None, self.__play_pause)) actions.append(("Next", Gtk.STOCK_MEDIA_NEXT, None, "<control>period", None, self.__next_song)) ag.add_actions(actions) act = Gtk.ToggleAction.new("StopAfter", _("Stop After This Song"), None, "") ag.add_action_with_accel(act, "<shift>space") # access point for the tray icon self.stop_after = act act = Gtk.Action.new( "AddBookmark", _("Add Bookmark"), None, Gtk.STOCK_ADD) connect_obj(act, 'activate', self.__add_bookmark, library.librarian, player) ag.add_action_with_accel(act, "<ctrl>D") act = Gtk.Action.new("EditBookmarks", _(u"Edit Bookmarks…"), None, "") connect_obj(act, 'activate', self.__edit_bookmarks, library.librarian, player) ag.add_action_with_accel(act, "<ctrl>B") act = Gtk.Action.new("About", None, None, Gtk.STOCK_ABOUT) connect_obj(act, 'activate', self.__show_about, player) ag.add_action_with_accel(act, None) act = Gtk.Action.new( "OnlineHelp", _("Online Help"), None, Gtk.STOCK_HELP) def website_handler(*args): util.website(const.ONLINE_HELP) act.connect('activate', website_handler) ag.add_action_with_accel(act, "F1") act = Gtk.Action.new("SearchHelp", _("Search Help"), None, "") def search_help_handler(*args): util.website(const.SEARCH_HELP) act.connect('activate', search_help_handler) ag.add_action_with_accel(act, None) act = Gtk.Action.new( "RefreshLibrary", _("Re_fresh Library"), None, Gtk.STOCK_REFRESH) act.connect('activate', self.__rebuild, False) ag.add_action_with_accel(act, None) ag.add_toggle_actions([ ("SongList", None, _("Song _List"), None, None, self.showhide_playlist, config.getboolean("memory", "songlist"))]) ag.add_toggle_actions([ ("Queue", None, _("_Queue"), None, None, self.showhide_playqueue, config.getboolean("memory", "queue"))]) view_actions = [] for i, Kind in enumerate(browsers.browsers): action = "View" + Kind.__name__ label = Kind.accelerated_name view_actions.append((action, None, label, None, None, i)) current = config.get("memory", "browser") try: browsers.get(current) except ValueError: current = browsers.name(browsers.default) def action_callback(view_action, current): self.select_browser(view_action, current, library, player) ag.add_radio_actions( view_actions, current, action_callback, None) for Kind in browsers.browsers: if Kind.is_empty: continue action = "Browser" + Kind.__name__ label = Kind.accelerated_name act = Gtk.Action.new(action, label, None, None) def browser_activate(action, Kind): LibraryBrowser.open(Kind, library, player) act.connect('activate', browser_activate, Kind) ag.add_action_with_accel(act, None) ui = Gtk.UIManager() ui.insert_action_group(ag, -1) ui.add_ui_from_string( MAIN_MENU % {"browsers": BrowseLibrary()}) self._filter_menu = FilterMenu(library, player, ui) menustr = MENU % { "views": ViewBrowser(), } ui.add_ui_from_string(menustr) # Cute. So. UIManager lets you attach tooltips, but when they're # for menu items, they just get ignored. So here I get to actually # attach them. ui.get_widget("/Menu/Music/RefreshLibrary").set_tooltip_text( _("Check for changes in your library")) return ui
def _set_browser(app, value): try: browsers.get(value) except ValueError: raise CommandError("Unknown browser %r" % value) app.window.select_browser(None, value, app.library, app.player)
def _open_browser(app, value): Kind = browsers.get(value) if Kind is not browsers.empty.EmptyBar: LibraryBrowser.open(Kind, app.library, app.player) else: raise CommandError("Unknown browser %r" % value)
def _set_browser(self, value, library, window, player): Kind = browsers.get(value) if Kind is not browsers.search.EmptyBar: window.select_browser(None, value, library, player) else: print_w(_("Unknown browser %r.") % value)
def test_get(self): self.failUnless(browsers.get("EmptyBar") is browsers.search.EmptyBar) self.failUnless( browsers.get("FileSystem") is browsers.filesystem.FileSystem)
def _set_browser(app, value): Kind = browsers.get(value) if Kind is not browsers.empty.EmptyBar: app.window.select_browser(None, value, app.library, app.player) else: raise CommandError("Unknown browser %r" % value)
def __create_menu(self, player, library): ag = Gtk.ActionGroup.new("QuodLibetWindowActions") act = Action(name="Music", label=_("_Music")) ag.add_action(act) act = Action(name="AddFolders", label=_(u"_Add a Folder…"), icon_name=Icons.LIST_ADD) act.connect("activate", self.open_chooser) ag.add_action_with_accel(act, "<Primary>O") act = Action(name="AddFiles", label=_(u"_Add a File…"), icon_name=Icons.LIST_ADD) act.connect("activate", self.open_chooser) ag.add_action(act) act = Action(name="AddLocation", label=_(u"_Add a Location…"), icon_name=Icons.LIST_ADD) act.connect("activate", self.open_location) ag.add_action(act) act = Action(name="BrowseLibrary", label=_("Open _Browser"), icon_name=Icons.EDIT_FIND) ag.add_action(act) act = Action(name="Preferences", label=_("_Preferences"), icon_name=Icons.PREFERENCES_SYSTEM) act.connect("activate", self.__preferences) ag.add_action(act) act = Action(name="Plugins", label=_("_Plugins"), icon_name=Icons.SYSTEM_RUN) act.connect("activate", self.__plugins) ag.add_action(act) act = Action(name="Quit", label=_("_Quit"), icon_name=Icons.APPLICATION_EXIT) act.connect("activate", lambda *x: self.destroy()) ag.add_action_with_accel(act, "<Primary>Q") act = Action(name="Control", label=_("_Control")) ag.add_action(act) act = Action(name="EditTags", label=_("Edit _Tags"), icon_name=Icons.DOCUMENT_PROPERTIES) act.connect("activate", self.__current_song_prop) ag.add_action(act) act = Action(name="Information", label=_("_Information"), icon_name=Icons.DIALOG_INFORMATION) act.connect("activate", self.__current_song_info) ag.add_action(act) act = Action(name="Jump", label=_("_Jump to Playing Song"), icon_name=Icons.GO_JUMP) act.connect("activate", self.__jump_to_current) ag.add_action_with_accel(act, "<Primary>J") act = Action(name="View", label=_("_View")) ag.add_action(act) act = Action(name="Help", label=_("_Help")) ag.add_action(act) act = Action(name="Previous", label=_("Pre_vious"), icon_name=Icons.MEDIA_SKIP_BACKWARD) act.connect("activate", self.__previous_song) ag.add_action_with_accel(act, "<Primary>comma") act = Action(name="PlayPause", label=_("_Play"), icon_name=Icons.MEDIA_PLAYBACK_START) act.connect("activate", self.__play_pause) ag.add_action_with_accel(act, "<Primary>space") act = Action(name="Next", label=_("_Next"), icon_name=Icons.MEDIA_SKIP_FORWARD) act.connect("activate", self.__next_song) ag.add_action_with_accel(act, "<Primary>period") act = ToggleAction(name="StopAfter", label=_("Stop After This Song")) ag.add_action_with_accel(act, "<shift>space") # access point for the tray icon self.stop_after = act act = Action(name="AddBookmark", label=_("Add Bookmark"), icon_name=Icons.LIST_ADD) connect_obj(act, "activate", self.__add_bookmark, library.librarian, player) ag.add_action_with_accel(act, "<Primary>D") act = Action(name="EditBookmarks", label=_(u"Edit Bookmarks…")) connect_obj(act, "activate", self.__edit_bookmarks, library.librarian, player) ag.add_action_with_accel(act, "<Primary>B") act = Action(name="About", label=_("_About"), icon_name=Icons.HELP_ABOUT) connect_obj(act, "activate", self.__show_about, player) ag.add_action_with_accel(act, None) act = Action(name="OnlineHelp", label=_("Online Help"), icon_name=Icons.HELP_BROWSER) def website_handler(*args): util.website(const.ONLINE_HELP) act.connect("activate", website_handler) ag.add_action_with_accel(act, "F1") act = Action(name="SearchHelp", label=_("Search Help")) def search_help_handler(*args): util.website(const.SEARCH_HELP) act.connect("activate", search_help_handler) ag.add_action_with_accel(act, None) act = Action(name="RefreshLibrary", label=_("Re_fresh Library"), icon_name=Icons.VIEW_REFRESH) act.connect("activate", self.__rebuild, False) ag.add_action(act) act = ToggleAction(name="SongList", label=_("Song _List")) act.set_active(config.getboolean("memory", "songlist")) act.connect("activate", self.showhide_playlist) ag.add_action(act) act = ToggleAction(name="Queue", label=_("_Queue")) act.set_active(config.getboolean("memory", "queue")) act.connect("activate", self.showhide_playqueue) ag.add_action(act) current = config.get("memory", "browser") try: browsers.get(current) except ValueError: current = browsers.name(browsers.default) first_action = None for Kind in browsers.browsers: name = browsers.name(Kind) index = browsers.index(name) action_name = "View" + Kind.__name__ label = Kind.accelerated_name act = RadioAction(name=action_name, label=Kind.accelerated_name, value=index) act.join_group(first_action) first_action = first_action or act if name == current: act.set_active(True) ag.add_action(act) assert first_action def action_callback(view_action, current_action): current = browsers.name(browsers.get(current_action.get_current_value())) self.select_browser(view_action, current, library, player) first_action.connect("changed", action_callback) for Kind in browsers.browsers: if Kind.is_empty: continue action = "Browser" + Kind.__name__ label = Kind.accelerated_name act = Action(name=action, label=label) def browser_activate(action, Kind): LibraryBrowser.open(Kind, library, player) act.connect("activate", browser_activate, Kind) ag.add_action_with_accel(act, None) ui = Gtk.UIManager() ui.insert_action_group(ag, -1) ui.add_ui_from_string(MAIN_MENU % {"browsers": BrowseLibrary()}) self._filter_menu = FilterMenu(library, player, ui) menustr = MENU % {"views": ViewBrowser()} ui.add_ui_from_string(menustr) # Cute. So. UIManager lets you attach tooltips, but when they're # for menu items, they just get ignored. So here I get to actually # attach them. ui.get_widget("/Menu/Music/RefreshLibrary").set_tooltip_text(_("Check for changes in your library")) return ui
def test_get(self): self.failUnless(browsers.get("EmptyBar") is browsers.empty.EmptyBar) self.failUnless( browsers.get("FileSystem") is browsers.filesystem.FileSystem)
def test_get_invalid(self): self.failUnless( browsers.get("DoesNotExist") is browsers.empty.EmptyBar)
def test_get_invalid(self): self.failUnless( browsers.get("DoesNotExist") is browsers.search.EmptyBar)
def _open_browser(self, value, library, window, player): Kind = browsers.get(value) if Kind is not browsers.search.EmptyBar: LibraryBrowser(Kind, library) else: print_w(_("Unknown browser %r.") % value)