Exemple #1
0
    def show_songs(self, songs=None, songs_g=None, show_count=False):
        self.container.current_table = self.songs_table
        self.toolbar.show()

        if show_count:
            if songs is not None:
                self.meta_widget.songs_count = len(songs)
            if songs_g is not None:
                count = songs_g.count
                self.meta_widget.songs_count = -1 if count is None else count

        songs = songs or []
        logger.debug('Show songs in table, total: %d', len(songs))
        source_name_map = {
            p.identifier: p.name
            for p in self._app.library.list()
        }
        model = SongsTableModel(source_name_map=source_name_map,
                                songs_g=songs_g,
                                songs=songs,
                                parent=self.songs_table)
        filter_model = SongFilterProxyModel(self.songs_table)
        filter_model.setSourceModel(model)
        self.songs_table.setModel(filter_model)
        self.songs_table.scrollToTop()
        disconnect_slots_if_has(self._app.ui.magicbox.filter_text_changed)
        self._app.ui.magicbox.filter_text_changed.connect(
            filter_model.filter_by_text)
Exemple #2
0
 def _show_model_with_cover(self, reader, table, model_cls, filter_model_cls):
     self.container.current_table = table
     filter_model = filter_model_cls(self.albums_table)
     source_name_map = {p.identifier: p.name for p in self._app.library.list()}
     model = model_cls(reader,
                       fetch_cover_wrapper(self._app.img_mgr),
                       parent=self.artists_table,
                       source_name_map=source_name_map)
     filter_model.setSourceModel(model)
     table.setModel(filter_model)
     table.scrollToTop()
     disconnect_slots_if_has(self._app.ui.magicbox.filter_text_changed)
     self._app.ui.magicbox.filter_text_changed.connect(filter_model.filter_by_text)
Exemple #3
0
    def show_albums(self, albums_g):
        # always bind signal first
        # album list filters
        # show the layout
        self.container.current_table = self.albums_table

        # fill the data
        filter_model = AlbumFilterProxyModel(self.albums_table)
        model = AlbumListModel(albums_g,
                               fetch_album_cover_wrapper(self._app.img_mgr),
                               parent=self.albums_table)
        filter_model.setSourceModel(model)
        self.albums_table.setModel(filter_model)
        self.albums_table.scrollToTop()
        disconnect_slots_if_has(self._app.ui.magicbox.filter_text_changed)
        self._app.ui.magicbox.filter_text_changed.connect(
            filter_model.filter_by_text)
Exemple #4
0
    async def set_renderer(self, renderer):
        """set ui renderer

        TODO: add lock for set_renderer
        """

        if renderer is None:
            return

        # firstly, tear down everything
        # tear down last renderer
        if self._renderer is not None:
            await self._renderer.tearDown()
        self.meta_widget.hide()
        self.meta_widget.clear()
        self.tabbar.hide()
        self.tabbar.check_default()
        self.current_table = None
        self.current_extra = None
        # clean right_panel background image
        self._app.ui.right_panel.show_background_image(None)
        # disconnect songs_table signal
        signals = (
            self.tabbar.show_contributed_albums_needed,
            self.tabbar.show_albums_needed,
            self.tabbar.show_songs_needed,
            self.tabbar.show_artists_needed,
            self.tabbar.show_playlists_needed,
            self.tabbar.show_desc_needed,
        )
        for signal in signals:
            disconnect_slots_if_has(signal)

        # unbind some callback function
        self.songs_table.remove_song_func = None

        # secondly, prepare environment
        self.show()

        # thirdly, setup new renderer
        await renderer.setUp(self)
        self._renderer = renderer
        await self._renderer.render()