bauiv1lib.discord

UI functionality for the Discord window.

  1# Released under the MIT License. See LICENSE for details.
  2#
  3"""UI functionality for the Discord window."""
  4
  5from __future__ import annotations
  6
  7import bauiv1 as bui
  8
  9
 10class DiscordWindow(bui.Window):
 11    """Window for joining the Discord."""
 12
 13    def __init__(
 14        self,
 15        transition: str = 'in_right',
 16        origin_widget: bui.Widget | None = None,
 17    ):
 18        if bui.app.classic is None:
 19            raise RuntimeError('This requires classic support.')
 20
 21        app = bui.app
 22        assert app.classic is not None
 23
 24        # If they provided an origin-widget, scale up from that.
 25        scale_origin: tuple[float, float] | None
 26        if origin_widget is not None:
 27            self._transition_out = 'out_scale'
 28            scale_origin = origin_widget.get_screen_space_center()
 29            transition = 'in_scale'
 30        else:
 31            self._transition_out = 'out_right'
 32            scale_origin = None
 33
 34        uiscale = bui.app.ui_v1.uiscale
 35        self._width = 800
 36        x_inset = 100 if uiscale is bui.UIScale.SMALL else 0
 37        self._height = 320
 38        top_extra = 10 if uiscale is bui.UIScale.SMALL else 0
 39        super().__init__(
 40            root_widget=bui.containerwidget(
 41                size=(self._width, self._height + top_extra),
 42                transition=transition,
 43                toolbar_visibility='menu_minimal',
 44                scale_origin_stack_offset=scale_origin,
 45                scale=(
 46                    1.6
 47                    if uiscale is bui.UIScale.SMALL
 48                    else 1.3 if uiscale is bui.UIScale.MEDIUM else 1.0
 49                ),
 50                stack_offset=(0, 5) if uiscale is bui.UIScale.SMALL else (0, 0),
 51            )
 52        )
 53
 54        if app.ui_v1.use_toolbars and uiscale is bui.UIScale.SMALL:
 55            bui.containerwidget(
 56                edit=self._root_widget, on_cancel_call=self._do_back
 57            )
 58            self._back_button = None
 59        else:
 60            self._back_button = bui.buttonwidget(
 61                parent=self._root_widget,
 62                position=(53 + x_inset, self._height - 60),
 63                size=(140, 60),
 64                scale=0.8,
 65                autoselect=True,
 66                label=bui.Lstr(resource='backText'),
 67                button_type='back',
 68                on_activate_call=self._do_back,
 69            )
 70            bui.containerwidget(
 71                edit=self._root_widget, cancel_button=self._back_button
 72            )
 73
 74        # Do we need to translate 'Discord'? Or is that always the name?
 75        self._title_text = bui.textwidget(
 76            parent=self._root_widget,
 77            position=(0, self._height - 52),
 78            size=(self._width, 25),
 79            text='Discord',
 80            color=app.ui_v1.title_color,
 81            h_align='center',
 82            v_align='top',
 83        )
 84
 85        min_size = min(self._width - 25, self._height - 25)
 86        bui.imagewidget(
 87            parent=self._root_widget,
 88            position=(40, -15),
 89            size=(min_size, min_size),
 90            texture=bui.gettexture('discordServer'),
 91        )
 92
 93        # Hmm should we translate this? The discord server is mostly
 94        # English so being able to read this might be a good screening
 95        # process?..
 96        bui.textwidget(
 97            parent=self._root_widget,
 98            position=(self._width / 2 - 60, self._height - 100),
 99            text='We have our own Discord server where you can:\n- Find new'
100            ' friends and people to play with\n- Participate in Office'
101            ' Hours/Coffee with Eric\n- Share mods, plugins, art, and'
102            ' memes\n- Report bugs and make feature suggestions\n'
103            '- Troubleshoot issues',
104            maxwidth=(self._width - 10) / 2,
105            color=(1, 1, 1, 1),
106            h_align='left',
107            v_align='top',
108        )
109
110        bui.buttonwidget(
111            parent=self._root_widget,
112            position=(self._width / 2 - 30, 20),
113            size=(self._width / 2 - 60, 60),
114            autoselect=True,
115            label=bui.Lstr(resource='discordJoinText'),
116            text_scale=1.0,
117            on_activate_call=bui.Call(
118                bui.open_url, 'https://ballistica.net/discord'
119            ),
120        )
121
122        if self._back_button is not None:
123            bui.buttonwidget(
124                edit=self._back_button,
125                button_type='backSmall',
126                size=(60, 60),
127                label=bui.charstr(bui.SpecialChar.BACK),
128            )
129
130    def _do_back(self) -> None:
131        bui.containerwidget(edit=self._root_widget, transition='out_scale')
class DiscordWindow(bauiv1._uitypes.Window):
 11class DiscordWindow(bui.Window):
 12    """Window for joining the Discord."""
 13
 14    def __init__(
 15        self,
 16        transition: str = 'in_right',
 17        origin_widget: bui.Widget | None = None,
 18    ):
 19        if bui.app.classic is None:
 20            raise RuntimeError('This requires classic support.')
 21
 22        app = bui.app
 23        assert app.classic is not None
 24
 25        # If they provided an origin-widget, scale up from that.
 26        scale_origin: tuple[float, float] | None
 27        if origin_widget is not None:
 28            self._transition_out = 'out_scale'
 29            scale_origin = origin_widget.get_screen_space_center()
 30            transition = 'in_scale'
 31        else:
 32            self._transition_out = 'out_right'
 33            scale_origin = None
 34
 35        uiscale = bui.app.ui_v1.uiscale
 36        self._width = 800
 37        x_inset = 100 if uiscale is bui.UIScale.SMALL else 0
 38        self._height = 320
 39        top_extra = 10 if uiscale is bui.UIScale.SMALL else 0
 40        super().__init__(
 41            root_widget=bui.containerwidget(
 42                size=(self._width, self._height + top_extra),
 43                transition=transition,
 44                toolbar_visibility='menu_minimal',
 45                scale_origin_stack_offset=scale_origin,
 46                scale=(
 47                    1.6
 48                    if uiscale is bui.UIScale.SMALL
 49                    else 1.3 if uiscale is bui.UIScale.MEDIUM else 1.0
 50                ),
 51                stack_offset=(0, 5) if uiscale is bui.UIScale.SMALL else (0, 0),
 52            )
 53        )
 54
 55        if app.ui_v1.use_toolbars and uiscale is bui.UIScale.SMALL:
 56            bui.containerwidget(
 57                edit=self._root_widget, on_cancel_call=self._do_back
 58            )
 59            self._back_button = None
 60        else:
 61            self._back_button = bui.buttonwidget(
 62                parent=self._root_widget,
 63                position=(53 + x_inset, self._height - 60),
 64                size=(140, 60),
 65                scale=0.8,
 66                autoselect=True,
 67                label=bui.Lstr(resource='backText'),
 68                button_type='back',
 69                on_activate_call=self._do_back,
 70            )
 71            bui.containerwidget(
 72                edit=self._root_widget, cancel_button=self._back_button
 73            )
 74
 75        # Do we need to translate 'Discord'? Or is that always the name?
 76        self._title_text = bui.textwidget(
 77            parent=self._root_widget,
 78            position=(0, self._height - 52),
 79            size=(self._width, 25),
 80            text='Discord',
 81            color=app.ui_v1.title_color,
 82            h_align='center',
 83            v_align='top',
 84        )
 85
 86        min_size = min(self._width - 25, self._height - 25)
 87        bui.imagewidget(
 88            parent=self._root_widget,
 89            position=(40, -15),
 90            size=(min_size, min_size),
 91            texture=bui.gettexture('discordServer'),
 92        )
 93
 94        # Hmm should we translate this? The discord server is mostly
 95        # English so being able to read this might be a good screening
 96        # process?..
 97        bui.textwidget(
 98            parent=self._root_widget,
 99            position=(self._width / 2 - 60, self._height - 100),
100            text='We have our own Discord server where you can:\n- Find new'
101            ' friends and people to play with\n- Participate in Office'
102            ' Hours/Coffee with Eric\n- Share mods, plugins, art, and'
103            ' memes\n- Report bugs and make feature suggestions\n'
104            '- Troubleshoot issues',
105            maxwidth=(self._width - 10) / 2,
106            color=(1, 1, 1, 1),
107            h_align='left',
108            v_align='top',
109        )
110
111        bui.buttonwidget(
112            parent=self._root_widget,
113            position=(self._width / 2 - 30, 20),
114            size=(self._width / 2 - 60, 60),
115            autoselect=True,
116            label=bui.Lstr(resource='discordJoinText'),
117            text_scale=1.0,
118            on_activate_call=bui.Call(
119                bui.open_url, 'https://ballistica.net/discord'
120            ),
121        )
122
123        if self._back_button is not None:
124            bui.buttonwidget(
125                edit=self._back_button,
126                button_type='backSmall',
127                size=(60, 60),
128                label=bui.charstr(bui.SpecialChar.BACK),
129            )
130
131    def _do_back(self) -> None:
132        bui.containerwidget(edit=self._root_widget, transition='out_scale')

Window for joining the Discord.

DiscordWindow( transition: str = 'in_right', origin_widget: _bauiv1.Widget | None = None)
 14    def __init__(
 15        self,
 16        transition: str = 'in_right',
 17        origin_widget: bui.Widget | None = None,
 18    ):
 19        if bui.app.classic is None:
 20            raise RuntimeError('This requires classic support.')
 21
 22        app = bui.app
 23        assert app.classic is not None
 24
 25        # If they provided an origin-widget, scale up from that.
 26        scale_origin: tuple[float, float] | None
 27        if origin_widget is not None:
 28            self._transition_out = 'out_scale'
 29            scale_origin = origin_widget.get_screen_space_center()
 30            transition = 'in_scale'
 31        else:
 32            self._transition_out = 'out_right'
 33            scale_origin = None
 34
 35        uiscale = bui.app.ui_v1.uiscale
 36        self._width = 800
 37        x_inset = 100 if uiscale is bui.UIScale.SMALL else 0
 38        self._height = 320
 39        top_extra = 10 if uiscale is bui.UIScale.SMALL else 0
 40        super().__init__(
 41            root_widget=bui.containerwidget(
 42                size=(self._width, self._height + top_extra),
 43                transition=transition,
 44                toolbar_visibility='menu_minimal',
 45                scale_origin_stack_offset=scale_origin,
 46                scale=(
 47                    1.6
 48                    if uiscale is bui.UIScale.SMALL
 49                    else 1.3 if uiscale is bui.UIScale.MEDIUM else 1.0
 50                ),
 51                stack_offset=(0, 5) if uiscale is bui.UIScale.SMALL else (0, 0),
 52            )
 53        )
 54
 55        if app.ui_v1.use_toolbars and uiscale is bui.UIScale.SMALL:
 56            bui.containerwidget(
 57                edit=self._root_widget, on_cancel_call=self._do_back
 58            )
 59            self._back_button = None
 60        else:
 61            self._back_button = bui.buttonwidget(
 62                parent=self._root_widget,
 63                position=(53 + x_inset, self._height - 60),
 64                size=(140, 60),
 65                scale=0.8,
 66                autoselect=True,
 67                label=bui.Lstr(resource='backText'),
 68                button_type='back',
 69                on_activate_call=self._do_back,
 70            )
 71            bui.containerwidget(
 72                edit=self._root_widget, cancel_button=self._back_button
 73            )
 74
 75        # Do we need to translate 'Discord'? Or is that always the name?
 76        self._title_text = bui.textwidget(
 77            parent=self._root_widget,
 78            position=(0, self._height - 52),
 79            size=(self._width, 25),
 80            text='Discord',
 81            color=app.ui_v1.title_color,
 82            h_align='center',
 83            v_align='top',
 84        )
 85
 86        min_size = min(self._width - 25, self._height - 25)
 87        bui.imagewidget(
 88            parent=self._root_widget,
 89            position=(40, -15),
 90            size=(min_size, min_size),
 91            texture=bui.gettexture('discordServer'),
 92        )
 93
 94        # Hmm should we translate this? The discord server is mostly
 95        # English so being able to read this might be a good screening
 96        # process?..
 97        bui.textwidget(
 98            parent=self._root_widget,
 99            position=(self._width / 2 - 60, self._height - 100),
100            text='We have our own Discord server where you can:\n- Find new'
101            ' friends and people to play with\n- Participate in Office'
102            ' Hours/Coffee with Eric\n- Share mods, plugins, art, and'
103            ' memes\n- Report bugs and make feature suggestions\n'
104            '- Troubleshoot issues',
105            maxwidth=(self._width - 10) / 2,
106            color=(1, 1, 1, 1),
107            h_align='left',
108            v_align='top',
109        )
110
111        bui.buttonwidget(
112            parent=self._root_widget,
113            position=(self._width / 2 - 30, 20),
114            size=(self._width / 2 - 60, 60),
115            autoselect=True,
116            label=bui.Lstr(resource='discordJoinText'),
117            text_scale=1.0,
118            on_activate_call=bui.Call(
119                bui.open_url, 'https://ballistica.net/discord'
120            ),
121        )
122
123        if self._back_button is not None:
124            bui.buttonwidget(
125                edit=self._back_button,
126                button_type='backSmall',
127                size=(60, 60),
128                label=bui.charstr(bui.SpecialChar.BACK),
129            )
Inherited Members
bauiv1._uitypes.Window
get_root_widget