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)
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)
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)
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()