bauiv1lib.gather.abouttab

Defines the about tab in the gather UI.

  1# Released under the MIT License. See LICENSE for details.
  2#
  3"""Defines the about tab in the gather UI."""
  4
  5from __future__ import annotations
  6
  7from typing import TYPE_CHECKING, override
  8
  9from bauiv1lib.gather import GatherTab
 10import bauiv1 as bui
 11
 12if TYPE_CHECKING:
 13    from bauiv1lib.gather import GatherWindow
 14
 15
 16class AboutGatherTab(GatherTab):
 17    """The about tab in the gather UI"""
 18
 19    @override
 20    def on_activate(
 21        self,
 22        parent_widget: bui.Widget,
 23        tab_button: bui.Widget,
 24        region_width: float,
 25        region_height: float,
 26        region_left: float,
 27        region_bottom: float,
 28    ) -> bui.Widget:
 29        # pylint: disable=too-many-locals
 30
 31        plus = bui.app.plus
 32        assert plus is not None
 33
 34        try_tickets = plus.get_v1_account_misc_read_val(
 35            'friendTryTickets', None
 36        )
 37
 38        show_message = True
 39        # Squish message as needed to get things to fit nicely at
 40        # various scales.
 41        uiscale = bui.app.ui_v1.uiscale
 42        message_height = (
 43            210
 44            if uiscale is bui.UIScale.SMALL
 45            else 305 if uiscale is bui.UIScale.MEDIUM else 370
 46        )
 47        # Let's not talk about sharing in vr-mode; its tricky to fit more
 48        # than one head in a VR-headset.
 49        show_message_extra = not bui.app.env.vr
 50        message_extra_height = 60
 51        show_invite = try_tickets is not None
 52        invite_height = 80
 53        show_discord = True
 54        discord_height = 80
 55
 56        c_height = 0
 57        if show_message:
 58            c_height += message_height
 59        if show_message_extra:
 60            c_height += message_extra_height
 61        if show_invite:
 62            c_height += invite_height
 63        if show_discord:
 64            c_height += discord_height
 65
 66        party_button_label = bui.charstr(bui.SpecialChar.TOP_BUTTON)
 67        message = bui.Lstr(
 68            resource='gatherWindow.aboutDescriptionText',
 69            subs=[
 70                ('${PARTY}', bui.charstr(bui.SpecialChar.PARTY_ICON)),
 71                ('${BUTTON}', party_button_label),
 72            ],
 73        )
 74
 75        if show_message_extra:
 76            message = bui.Lstr(
 77                value='${A}\n\n${B}',
 78                subs=[
 79                    ('${A}', message),
 80                    (
 81                        '${B}',
 82                        bui.Lstr(
 83                            resource='gatherWindow.'
 84                            'aboutDescriptionLocalMultiplayerExtraText'
 85                        ),
 86                    ),
 87                ],
 88            )
 89
 90        scroll_widget = bui.scrollwidget(
 91            parent=parent_widget,
 92            position=(region_left, region_bottom),
 93            size=(region_width, region_height),
 94            highlight=False,
 95            border_opacity=0,
 96        )
 97        msc_scale = 1.1
 98
 99        container = bui.containerwidget(
100            parent=scroll_widget,
101            position=(
102                region_left,
103                region_bottom + (region_height - c_height) * 0.5,
104            ),
105            size=(region_width, c_height),
106            background=False,
107            selectable=show_invite or show_discord,
108        )
109        # Allows escaping if we select the container somehow (though
110        # shouldn't be possible when buttons are present).
111        bui.widget(edit=container, up_widget=tab_button)
112
113        y = c_height - 30
114        if show_message:
115            bui.textwidget(
116                parent=container,
117                position=(region_width * 0.5, y),
118                color=(0.6, 1.0, 0.6),
119                scale=msc_scale,
120                size=(0, 0),
121                maxwidth=region_width * 0.9,
122                max_height=message_height,
123                h_align='center',
124                v_align='top',
125                text=message,
126            )
127            y -= message_height
128            if show_message_extra:
129                y -= message_extra_height
130
131        if show_invite:
132            bui.textwidget(
133                parent=container,
134                position=(region_width * 0.57, y),
135                color=(0, 1, 0),
136                scale=0.6,
137                size=(0, 0),
138                maxwidth=region_width * 0.5,
139                h_align='right',
140                v_align='center',
141                flatness=1.0,
142                text=bui.Lstr(
143                    resource='gatherWindow.inviteAFriendText',
144                    subs=[('${COUNT}', str(try_tickets))],
145                ),
146            )
147            invite_button = bui.buttonwidget(
148                parent=container,
149                position=(region_width * 0.59, y - 25),
150                size=(230, 50),
151                color=(0.54, 0.42, 0.56),
152                textcolor=(0, 1, 0),
153                label=bui.Lstr(
154                    resource='gatherWindow.inviteFriendsText',
155                    fallback_resource='gatherWindow.getFriendInviteCodeText',
156                ),
157                autoselect=True,
158                on_activate_call=bui.WeakCall(self._invite_to_try_press),
159                up_widget=tab_button,
160                show_buffer_top=500,
161            )
162            y -= invite_height
163        else:
164            invite_button = None
165
166        if show_discord:
167            bui.textwidget(
168                parent=container,
169                position=(region_width * 0.57, y),
170                color=(0.6, 0.6, 1),
171                scale=0.6,
172                size=(0, 0),
173                maxwidth=region_width * 0.5,
174                h_align='right',
175                v_align='center',
176                flatness=1.0,
177                text=bui.Lstr(resource='discordFriendsText'),
178            )
179            discord_button = bui.buttonwidget(
180                parent=container,
181                position=(region_width * 0.59, y - 25),
182                size=(230, 50),
183                color=(0.54, 0.42, 0.56),
184                textcolor=(0.6, 0.6, 1),
185                label=bui.Lstr(resource='discordJoinText'),
186                autoselect=True,
187                on_activate_call=bui.WeakCall(self._join_the_discord_press),
188                up_widget=(
189                    invite_button if invite_button is not None else tab_button
190                ),
191            )
192            y -= discord_height
193        else:
194            discord_button = None
195
196        if discord_button is not None:
197            pass
198
199        return scroll_widget
200
201    def _invite_to_try_press(self) -> None:
202        from bauiv1lib.account import show_sign_in_prompt
203        from bauiv1lib.appinvite import handle_app_invites_press
204
205        plus = bui.app.plus
206        assert plus is not None
207
208        if plus.get_v1_account_state() != 'signed_in':
209            show_sign_in_prompt()
210            return
211        handle_app_invites_press()
212
213    def _join_the_discord_press(self) -> None:
214        # pylint: disable=cyclic-import
215        from bauiv1lib.discord import DiscordWindow
216
217        assert bui.app.classic is not None
218        DiscordWindow().get_root_widget()
class AboutGatherTab(bauiv1lib.gather.GatherTab):
 17class AboutGatherTab(GatherTab):
 18    """The about tab in the gather UI"""
 19
 20    @override
 21    def on_activate(
 22        self,
 23        parent_widget: bui.Widget,
 24        tab_button: bui.Widget,
 25        region_width: float,
 26        region_height: float,
 27        region_left: float,
 28        region_bottom: float,
 29    ) -> bui.Widget:
 30        # pylint: disable=too-many-locals
 31
 32        plus = bui.app.plus
 33        assert plus is not None
 34
 35        try_tickets = plus.get_v1_account_misc_read_val(
 36            'friendTryTickets', None
 37        )
 38
 39        show_message = True
 40        # Squish message as needed to get things to fit nicely at
 41        # various scales.
 42        uiscale = bui.app.ui_v1.uiscale
 43        message_height = (
 44            210
 45            if uiscale is bui.UIScale.SMALL
 46            else 305 if uiscale is bui.UIScale.MEDIUM else 370
 47        )
 48        # Let's not talk about sharing in vr-mode; its tricky to fit more
 49        # than one head in a VR-headset.
 50        show_message_extra = not bui.app.env.vr
 51        message_extra_height = 60
 52        show_invite = try_tickets is not None
 53        invite_height = 80
 54        show_discord = True
 55        discord_height = 80
 56
 57        c_height = 0
 58        if show_message:
 59            c_height += message_height
 60        if show_message_extra:
 61            c_height += message_extra_height
 62        if show_invite:
 63            c_height += invite_height
 64        if show_discord:
 65            c_height += discord_height
 66
 67        party_button_label = bui.charstr(bui.SpecialChar.TOP_BUTTON)
 68        message = bui.Lstr(
 69            resource='gatherWindow.aboutDescriptionText',
 70            subs=[
 71                ('${PARTY}', bui.charstr(bui.SpecialChar.PARTY_ICON)),
 72                ('${BUTTON}', party_button_label),
 73            ],
 74        )
 75
 76        if show_message_extra:
 77            message = bui.Lstr(
 78                value='${A}\n\n${B}',
 79                subs=[
 80                    ('${A}', message),
 81                    (
 82                        '${B}',
 83                        bui.Lstr(
 84                            resource='gatherWindow.'
 85                            'aboutDescriptionLocalMultiplayerExtraText'
 86                        ),
 87                    ),
 88                ],
 89            )
 90
 91        scroll_widget = bui.scrollwidget(
 92            parent=parent_widget,
 93            position=(region_left, region_bottom),
 94            size=(region_width, region_height),
 95            highlight=False,
 96            border_opacity=0,
 97        )
 98        msc_scale = 1.1
 99
100        container = bui.containerwidget(
101            parent=scroll_widget,
102            position=(
103                region_left,
104                region_bottom + (region_height - c_height) * 0.5,
105            ),
106            size=(region_width, c_height),
107            background=False,
108            selectable=show_invite or show_discord,
109        )
110        # Allows escaping if we select the container somehow (though
111        # shouldn't be possible when buttons are present).
112        bui.widget(edit=container, up_widget=tab_button)
113
114        y = c_height - 30
115        if show_message:
116            bui.textwidget(
117                parent=container,
118                position=(region_width * 0.5, y),
119                color=(0.6, 1.0, 0.6),
120                scale=msc_scale,
121                size=(0, 0),
122                maxwidth=region_width * 0.9,
123                max_height=message_height,
124                h_align='center',
125                v_align='top',
126                text=message,
127            )
128            y -= message_height
129            if show_message_extra:
130                y -= message_extra_height
131
132        if show_invite:
133            bui.textwidget(
134                parent=container,
135                position=(region_width * 0.57, y),
136                color=(0, 1, 0),
137                scale=0.6,
138                size=(0, 0),
139                maxwidth=region_width * 0.5,
140                h_align='right',
141                v_align='center',
142                flatness=1.0,
143                text=bui.Lstr(
144                    resource='gatherWindow.inviteAFriendText',
145                    subs=[('${COUNT}', str(try_tickets))],
146                ),
147            )
148            invite_button = bui.buttonwidget(
149                parent=container,
150                position=(region_width * 0.59, y - 25),
151                size=(230, 50),
152                color=(0.54, 0.42, 0.56),
153                textcolor=(0, 1, 0),
154                label=bui.Lstr(
155                    resource='gatherWindow.inviteFriendsText',
156                    fallback_resource='gatherWindow.getFriendInviteCodeText',
157                ),
158                autoselect=True,
159                on_activate_call=bui.WeakCall(self._invite_to_try_press),
160                up_widget=tab_button,
161                show_buffer_top=500,
162            )
163            y -= invite_height
164        else:
165            invite_button = None
166
167        if show_discord:
168            bui.textwidget(
169                parent=container,
170                position=(region_width * 0.57, y),
171                color=(0.6, 0.6, 1),
172                scale=0.6,
173                size=(0, 0),
174                maxwidth=region_width * 0.5,
175                h_align='right',
176                v_align='center',
177                flatness=1.0,
178                text=bui.Lstr(resource='discordFriendsText'),
179            )
180            discord_button = bui.buttonwidget(
181                parent=container,
182                position=(region_width * 0.59, y - 25),
183                size=(230, 50),
184                color=(0.54, 0.42, 0.56),
185                textcolor=(0.6, 0.6, 1),
186                label=bui.Lstr(resource='discordJoinText'),
187                autoselect=True,
188                on_activate_call=bui.WeakCall(self._join_the_discord_press),
189                up_widget=(
190                    invite_button if invite_button is not None else tab_button
191                ),
192            )
193            y -= discord_height
194        else:
195            discord_button = None
196
197        if discord_button is not None:
198            pass
199
200        return scroll_widget
201
202    def _invite_to_try_press(self) -> None:
203        from bauiv1lib.account import show_sign_in_prompt
204        from bauiv1lib.appinvite import handle_app_invites_press
205
206        plus = bui.app.plus
207        assert plus is not None
208
209        if plus.get_v1_account_state() != 'signed_in':
210            show_sign_in_prompt()
211            return
212        handle_app_invites_press()
213
214    def _join_the_discord_press(self) -> None:
215        # pylint: disable=cyclic-import
216        from bauiv1lib.discord import DiscordWindow
217
218        assert bui.app.classic is not None
219        DiscordWindow().get_root_widget()

The about tab in the gather UI

@override
def on_activate( self, parent_widget: _bauiv1.Widget, tab_button: _bauiv1.Widget, region_width: float, region_height: float, region_left: float, region_bottom: float) -> _bauiv1.Widget:
 20    @override
 21    def on_activate(
 22        self,
 23        parent_widget: bui.Widget,
 24        tab_button: bui.Widget,
 25        region_width: float,
 26        region_height: float,
 27        region_left: float,
 28        region_bottom: float,
 29    ) -> bui.Widget:
 30        # pylint: disable=too-many-locals
 31
 32        plus = bui.app.plus
 33        assert plus is not None
 34
 35        try_tickets = plus.get_v1_account_misc_read_val(
 36            'friendTryTickets', None
 37        )
 38
 39        show_message = True
 40        # Squish message as needed to get things to fit nicely at
 41        # various scales.
 42        uiscale = bui.app.ui_v1.uiscale
 43        message_height = (
 44            210
 45            if uiscale is bui.UIScale.SMALL
 46            else 305 if uiscale is bui.UIScale.MEDIUM else 370
 47        )
 48        # Let's not talk about sharing in vr-mode; its tricky to fit more
 49        # than one head in a VR-headset.
 50        show_message_extra = not bui.app.env.vr
 51        message_extra_height = 60
 52        show_invite = try_tickets is not None
 53        invite_height = 80
 54        show_discord = True
 55        discord_height = 80
 56
 57        c_height = 0
 58        if show_message:
 59            c_height += message_height
 60        if show_message_extra:
 61            c_height += message_extra_height
 62        if show_invite:
 63            c_height += invite_height
 64        if show_discord:
 65            c_height += discord_height
 66
 67        party_button_label = bui.charstr(bui.SpecialChar.TOP_BUTTON)
 68        message = bui.Lstr(
 69            resource='gatherWindow.aboutDescriptionText',
 70            subs=[
 71                ('${PARTY}', bui.charstr(bui.SpecialChar.PARTY_ICON)),
 72                ('${BUTTON}', party_button_label),
 73            ],
 74        )
 75
 76        if show_message_extra:
 77            message = bui.Lstr(
 78                value='${A}\n\n${B}',
 79                subs=[
 80                    ('${A}', message),
 81                    (
 82                        '${B}',
 83                        bui.Lstr(
 84                            resource='gatherWindow.'
 85                            'aboutDescriptionLocalMultiplayerExtraText'
 86                        ),
 87                    ),
 88                ],
 89            )
 90
 91        scroll_widget = bui.scrollwidget(
 92            parent=parent_widget,
 93            position=(region_left, region_bottom),
 94            size=(region_width, region_height),
 95            highlight=False,
 96            border_opacity=0,
 97        )
 98        msc_scale = 1.1
 99
100        container = bui.containerwidget(
101            parent=scroll_widget,
102            position=(
103                region_left,
104                region_bottom + (region_height - c_height) * 0.5,
105            ),
106            size=(region_width, c_height),
107            background=False,
108            selectable=show_invite or show_discord,
109        )
110        # Allows escaping if we select the container somehow (though
111        # shouldn't be possible when buttons are present).
112        bui.widget(edit=container, up_widget=tab_button)
113
114        y = c_height - 30
115        if show_message:
116            bui.textwidget(
117                parent=container,
118                position=(region_width * 0.5, y),
119                color=(0.6, 1.0, 0.6),
120                scale=msc_scale,
121                size=(0, 0),
122                maxwidth=region_width * 0.9,
123                max_height=message_height,
124                h_align='center',
125                v_align='top',
126                text=message,
127            )
128            y -= message_height
129            if show_message_extra:
130                y -= message_extra_height
131
132        if show_invite:
133            bui.textwidget(
134                parent=container,
135                position=(region_width * 0.57, y),
136                color=(0, 1, 0),
137                scale=0.6,
138                size=(0, 0),
139                maxwidth=region_width * 0.5,
140                h_align='right',
141                v_align='center',
142                flatness=1.0,
143                text=bui.Lstr(
144                    resource='gatherWindow.inviteAFriendText',
145                    subs=[('${COUNT}', str(try_tickets))],
146                ),
147            )
148            invite_button = bui.buttonwidget(
149                parent=container,
150                position=(region_width * 0.59, y - 25),
151                size=(230, 50),
152                color=(0.54, 0.42, 0.56),
153                textcolor=(0, 1, 0),
154                label=bui.Lstr(
155                    resource='gatherWindow.inviteFriendsText',
156                    fallback_resource='gatherWindow.getFriendInviteCodeText',
157                ),
158                autoselect=True,
159                on_activate_call=bui.WeakCall(self._invite_to_try_press),
160                up_widget=tab_button,
161                show_buffer_top=500,
162            )
163            y -= invite_height
164        else:
165            invite_button = None
166
167        if show_discord:
168            bui.textwidget(
169                parent=container,
170                position=(region_width * 0.57, y),
171                color=(0.6, 0.6, 1),
172                scale=0.6,
173                size=(0, 0),
174                maxwidth=region_width * 0.5,
175                h_align='right',
176                v_align='center',
177                flatness=1.0,
178                text=bui.Lstr(resource='discordFriendsText'),
179            )
180            discord_button = bui.buttonwidget(
181                parent=container,
182                position=(region_width * 0.59, y - 25),
183                size=(230, 50),
184                color=(0.54, 0.42, 0.56),
185                textcolor=(0.6, 0.6, 1),
186                label=bui.Lstr(resource='discordJoinText'),
187                autoselect=True,
188                on_activate_call=bui.WeakCall(self._join_the_discord_press),
189                up_widget=(
190                    invite_button if invite_button is not None else tab_button
191                ),
192            )
193            y -= discord_height
194        else:
195            discord_button = None
196
197        if discord_button is not None:
198            pass
199
200        return scroll_widget

Called when the tab becomes the active one.

The tab should create and return a container widget covering the specified region.