bauiv1lib.soundtrack.macmusicapp
UI functionality related to using the macOS Music app for soundtracks.
1# Released under the MIT License. See LICENSE for details. 2# 3"""UI functionality related to using the macOS Music app for soundtracks.""" 4 5from __future__ import annotations 6 7import copy 8from typing import TYPE_CHECKING 9 10import bauiv1 as bui 11 12if TYPE_CHECKING: 13 from typing import Any, Callable 14 15 16class MacMusicAppPlaylistSelectWindow(bui.Window): 17 """Window for selecting an iTunes playlist.""" 18 19 def __init__( 20 self, 21 callback: Callable[[Any], Any], 22 existing_playlist: str | None, 23 existing_entry: Any, 24 ): 25 from baclassic.macmusicapp import MacMusicAppMusicPlayer 26 27 self._r = 'editSoundtrackWindow' 28 self._callback = callback 29 self._existing_playlist = existing_playlist 30 self._existing_entry = copy.deepcopy(existing_entry) 31 self._width = 520.0 32 self._height = 520.0 33 self._spacing = 45.0 34 v = self._height - 90.0 35 v -= self._spacing * 1.0 36 super().__init__( 37 root_widget=bui.containerwidget( 38 size=(self._width, self._height), transition='in_right' 39 ) 40 ) 41 btn = bui.buttonwidget( 42 parent=self._root_widget, 43 position=(35, self._height - 65), 44 size=(130, 50), 45 label=bui.Lstr(resource='cancelText'), 46 on_activate_call=self._back, 47 autoselect=True, 48 ) 49 bui.containerwidget(edit=self._root_widget, cancel_button=btn) 50 assert bui.app.classic is not None 51 bui.textwidget( 52 parent=self._root_widget, 53 position=(20, self._height - 54), 54 size=(self._width, 25), 55 text=bui.Lstr(resource=self._r + '.selectAPlaylistText'), 56 color=bui.app.ui_v1.title_color, 57 h_align='center', 58 v_align='center', 59 maxwidth=200, 60 ) 61 self._scrollwidget = bui.scrollwidget( 62 parent=self._root_widget, 63 position=(40, v - 340), 64 size=(self._width - 80, 400), 65 claims_tab=True, 66 selection_loops_to_parent=True, 67 ) 68 bui.widget(edit=self._scrollwidget, right_widget=self._scrollwidget) 69 self._column = bui.columnwidget( 70 parent=self._scrollwidget, 71 claims_tab=True, 72 selection_loops_to_parent=True, 73 ) 74 75 bui.textwidget( 76 parent=self._column, 77 size=(self._width - 80, 22), 78 text=bui.Lstr(resource=self._r + '.fetchingITunesText'), 79 color=(0.6, 0.9, 0.6, 1.0), 80 scale=0.8, 81 ) 82 assert bui.app.classic is not None 83 musicplayer = bui.app.classic.music.get_music_player() 84 assert isinstance(musicplayer, MacMusicAppMusicPlayer) 85 musicplayer.get_playlists(self._playlists_cb) 86 bui.containerwidget( 87 edit=self._root_widget, selected_child=self._scrollwidget 88 ) 89 90 def _playlists_cb(self, playlists: list[str]) -> None: 91 if self._column: 92 for widget in self._column.get_children(): 93 widget.delete() 94 for i, playlist in enumerate(playlists): 95 txt = bui.textwidget( 96 parent=self._column, 97 size=(self._width - 80, 30), 98 text=playlist, 99 v_align='center', 100 maxwidth=self._width - 110, 101 selectable=True, 102 on_activate_call=bui.Call(self._sel, playlist), 103 click_activate=True, 104 ) 105 bui.widget(edit=txt, show_buffer_top=40, show_buffer_bottom=40) 106 if playlist == self._existing_playlist: 107 bui.columnwidget( 108 edit=self._column, selected_child=txt, visible_child=txt 109 ) 110 if i == len(playlists) - 1: 111 bui.widget(edit=txt, down_widget=txt) 112 113 def _sel(self, selection: str) -> None: 114 if self._root_widget: 115 bui.containerwidget(edit=self._root_widget, transition='out_right') 116 self._callback({'type': 'iTunesPlaylist', 'name': selection}) 117 118 def _back(self) -> None: 119 bui.containerwidget(edit=self._root_widget, transition='out_right') 120 self._callback(self._existing_entry)
class
MacMusicAppPlaylistSelectWindow(bauiv1._uitypes.Window):
17class MacMusicAppPlaylistSelectWindow(bui.Window): 18 """Window for selecting an iTunes playlist.""" 19 20 def __init__( 21 self, 22 callback: Callable[[Any], Any], 23 existing_playlist: str | None, 24 existing_entry: Any, 25 ): 26 from baclassic.macmusicapp import MacMusicAppMusicPlayer 27 28 self._r = 'editSoundtrackWindow' 29 self._callback = callback 30 self._existing_playlist = existing_playlist 31 self._existing_entry = copy.deepcopy(existing_entry) 32 self._width = 520.0 33 self._height = 520.0 34 self._spacing = 45.0 35 v = self._height - 90.0 36 v -= self._spacing * 1.0 37 super().__init__( 38 root_widget=bui.containerwidget( 39 size=(self._width, self._height), transition='in_right' 40 ) 41 ) 42 btn = bui.buttonwidget( 43 parent=self._root_widget, 44 position=(35, self._height - 65), 45 size=(130, 50), 46 label=bui.Lstr(resource='cancelText'), 47 on_activate_call=self._back, 48 autoselect=True, 49 ) 50 bui.containerwidget(edit=self._root_widget, cancel_button=btn) 51 assert bui.app.classic is not None 52 bui.textwidget( 53 parent=self._root_widget, 54 position=(20, self._height - 54), 55 size=(self._width, 25), 56 text=bui.Lstr(resource=self._r + '.selectAPlaylistText'), 57 color=bui.app.ui_v1.title_color, 58 h_align='center', 59 v_align='center', 60 maxwidth=200, 61 ) 62 self._scrollwidget = bui.scrollwidget( 63 parent=self._root_widget, 64 position=(40, v - 340), 65 size=(self._width - 80, 400), 66 claims_tab=True, 67 selection_loops_to_parent=True, 68 ) 69 bui.widget(edit=self._scrollwidget, right_widget=self._scrollwidget) 70 self._column = bui.columnwidget( 71 parent=self._scrollwidget, 72 claims_tab=True, 73 selection_loops_to_parent=True, 74 ) 75 76 bui.textwidget( 77 parent=self._column, 78 size=(self._width - 80, 22), 79 text=bui.Lstr(resource=self._r + '.fetchingITunesText'), 80 color=(0.6, 0.9, 0.6, 1.0), 81 scale=0.8, 82 ) 83 assert bui.app.classic is not None 84 musicplayer = bui.app.classic.music.get_music_player() 85 assert isinstance(musicplayer, MacMusicAppMusicPlayer) 86 musicplayer.get_playlists(self._playlists_cb) 87 bui.containerwidget( 88 edit=self._root_widget, selected_child=self._scrollwidget 89 ) 90 91 def _playlists_cb(self, playlists: list[str]) -> None: 92 if self._column: 93 for widget in self._column.get_children(): 94 widget.delete() 95 for i, playlist in enumerate(playlists): 96 txt = bui.textwidget( 97 parent=self._column, 98 size=(self._width - 80, 30), 99 text=playlist, 100 v_align='center', 101 maxwidth=self._width - 110, 102 selectable=True, 103 on_activate_call=bui.Call(self._sel, playlist), 104 click_activate=True, 105 ) 106 bui.widget(edit=txt, show_buffer_top=40, show_buffer_bottom=40) 107 if playlist == self._existing_playlist: 108 bui.columnwidget( 109 edit=self._column, selected_child=txt, visible_child=txt 110 ) 111 if i == len(playlists) - 1: 112 bui.widget(edit=txt, down_widget=txt) 113 114 def _sel(self, selection: str) -> None: 115 if self._root_widget: 116 bui.containerwidget(edit=self._root_widget, transition='out_right') 117 self._callback({'type': 'iTunesPlaylist', 'name': selection}) 118 119 def _back(self) -> None: 120 bui.containerwidget(edit=self._root_widget, transition='out_right') 121 self._callback(self._existing_entry)
Window for selecting an iTunes playlist.
MacMusicAppPlaylistSelectWindow( callback: Callable[[Any], Any], existing_playlist: str | None, existing_entry: Any)
20 def __init__( 21 self, 22 callback: Callable[[Any], Any], 23 existing_playlist: str | None, 24 existing_entry: Any, 25 ): 26 from baclassic.macmusicapp import MacMusicAppMusicPlayer 27 28 self._r = 'editSoundtrackWindow' 29 self._callback = callback 30 self._existing_playlist = existing_playlist 31 self._existing_entry = copy.deepcopy(existing_entry) 32 self._width = 520.0 33 self._height = 520.0 34 self._spacing = 45.0 35 v = self._height - 90.0 36 v -= self._spacing * 1.0 37 super().__init__( 38 root_widget=bui.containerwidget( 39 size=(self._width, self._height), transition='in_right' 40 ) 41 ) 42 btn = bui.buttonwidget( 43 parent=self._root_widget, 44 position=(35, self._height - 65), 45 size=(130, 50), 46 label=bui.Lstr(resource='cancelText'), 47 on_activate_call=self._back, 48 autoselect=True, 49 ) 50 bui.containerwidget(edit=self._root_widget, cancel_button=btn) 51 assert bui.app.classic is not None 52 bui.textwidget( 53 parent=self._root_widget, 54 position=(20, self._height - 54), 55 size=(self._width, 25), 56 text=bui.Lstr(resource=self._r + '.selectAPlaylistText'), 57 color=bui.app.ui_v1.title_color, 58 h_align='center', 59 v_align='center', 60 maxwidth=200, 61 ) 62 self._scrollwidget = bui.scrollwidget( 63 parent=self._root_widget, 64 position=(40, v - 340), 65 size=(self._width - 80, 400), 66 claims_tab=True, 67 selection_loops_to_parent=True, 68 ) 69 bui.widget(edit=self._scrollwidget, right_widget=self._scrollwidget) 70 self._column = bui.columnwidget( 71 parent=self._scrollwidget, 72 claims_tab=True, 73 selection_loops_to_parent=True, 74 ) 75 76 bui.textwidget( 77 parent=self._column, 78 size=(self._width - 80, 22), 79 text=bui.Lstr(resource=self._r + '.fetchingITunesText'), 80 color=(0.6, 0.9, 0.6, 1.0), 81 scale=0.8, 82 ) 83 assert bui.app.classic is not None 84 musicplayer = bui.app.classic.music.get_music_player() 85 assert isinstance(musicplayer, MacMusicAppMusicPlayer) 86 musicplayer.get_playlists(self._playlists_cb) 87 bui.containerwidget( 88 edit=self._root_widget, selected_child=self._scrollwidget 89 )
Inherited Members
- bauiv1._uitypes.Window
- get_root_widget