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