bauiv1lib.inventory

Provides help related ui.

  1# Released under the MIT License. See LICENSE for details.
  2#
  3"""Provides help related ui."""
  4
  5from __future__ import annotations
  6
  7from typing import override
  8
  9import bauiv1 as bui
 10
 11
 12class InventoryWindow(bui.MainWindow):
 13    """Shows what you got."""
 14
 15    def __init__(
 16        self,
 17        transition: str | None = 'in_right',
 18        origin_widget: bui.Widget | None = None,
 19    ):
 20
 21        bui.set_analytics_screen('Help Window')
 22
 23        assert bui.app.classic is not None
 24        uiscale = bui.app.ui_v1.uiscale
 25        width = 1050 if uiscale is bui.UIScale.SMALL else 750
 26        height = (
 27            500
 28            if uiscale is bui.UIScale.SMALL
 29            else 530 if uiscale is bui.UIScale.MEDIUM else 600
 30        )
 31        x_offs = 70 if uiscale is bui.UIScale.SMALL else 0
 32        yoffs = -45 if uiscale is bui.UIScale.SMALL else 0
 33
 34        super().__init__(
 35            root_widget=bui.containerwidget(
 36                size=(width, height),
 37                toolbar_visibility=(
 38                    'menu_minimal'
 39                    if uiscale is bui.UIScale.SMALL
 40                    else 'menu_full'
 41                ),
 42                scale=(
 43                    1.55
 44                    if uiscale is bui.UIScale.SMALL
 45                    else 1.15 if uiscale is bui.UIScale.MEDIUM else 1.0
 46                ),
 47                stack_offset=(
 48                    (0, 0)
 49                    if uiscale is bui.UIScale.SMALL
 50                    else (0, 15) if uiscale is bui.UIScale.MEDIUM else (0, 0)
 51                ),
 52            ),
 53            transition=transition,
 54            origin_widget=origin_widget,
 55        )
 56
 57        bui.textwidget(
 58            parent=self._root_widget,
 59            position=(0, height - 45 + yoffs),
 60            size=(width, 25),
 61            text='INVENTORY',
 62            color=bui.app.ui_v1.title_color,
 63            h_align='center',
 64            v_align='center',
 65        )
 66
 67        if uiscale is bui.UIScale.SMALL:
 68            bui.containerwidget(
 69                edit=self._root_widget, on_cancel_call=self.main_window_back
 70            )
 71        else:
 72            btn = bui.buttonwidget(
 73                parent=self._root_widget,
 74                position=(x_offs + 50, height - 55 + yoffs),
 75                size=(60, 55),
 76                scale=0.8,
 77                label=bui.charstr(bui.SpecialChar.BACK),
 78                button_type='backSmall',
 79                extra_touch_border_scale=2.0,
 80                autoselect=True,
 81                on_activate_call=self.main_window_back,
 82            )
 83            bui.containerwidget(edit=self._root_widget, cancel_button=btn)
 84
 85        bui.textwidget(
 86            parent=self._root_widget,
 87            position=(0, height - 120 + yoffs),
 88            size=(width, 25),
 89            text='(under construction)',
 90            scale=0.7,
 91            h_align='center',
 92            v_align='center',
 93        )
 94
 95        button_width = 300
 96        self._player_profiles_button = btn = bui.buttonwidget(
 97            parent=self._root_widget,
 98            position=((width - button_width) * 0.5, height - 200 + yoffs),
 99            autoselect=True,
100            size=(button_width, 60),
101            label=bui.Lstr(resource='playerProfilesWindow.titleText'),
102            color=(0.55, 0.5, 0.6),
103            icon=bui.gettexture('cuteSpaz'),
104            textcolor=(0.75, 0.7, 0.8),
105            on_activate_call=self._player_profiles_press,
106        )
107
108    def _player_profiles_press(self) -> None:
109        # pylint: disable=cyclic-import
110        from bauiv1lib.profile.browser import ProfileBrowserWindow
111
112        # no-op if our underlying widget is dead or on its way out.
113        if not self._root_widget or self._root_widget.transitioning_out:
114            return
115
116        self.main_window_replace(
117            ProfileBrowserWindow(origin_widget=self._player_profiles_button)
118        )
119
120    @override
121    def get_main_window_state(self) -> bui.MainWindowState:
122        # Support recreating our window for back/refresh purposes.
123        cls = type(self)
124        return bui.BasicMainWindowState(
125            create_call=lambda transition, origin_widget: cls(
126                transition=transition, origin_widget=origin_widget
127            )
128        )
class InventoryWindow(bauiv1._uitypes.MainWindow):
 13class InventoryWindow(bui.MainWindow):
 14    """Shows what you got."""
 15
 16    def __init__(
 17        self,
 18        transition: str | None = 'in_right',
 19        origin_widget: bui.Widget | None = None,
 20    ):
 21
 22        bui.set_analytics_screen('Help Window')
 23
 24        assert bui.app.classic is not None
 25        uiscale = bui.app.ui_v1.uiscale
 26        width = 1050 if uiscale is bui.UIScale.SMALL else 750
 27        height = (
 28            500
 29            if uiscale is bui.UIScale.SMALL
 30            else 530 if uiscale is bui.UIScale.MEDIUM else 600
 31        )
 32        x_offs = 70 if uiscale is bui.UIScale.SMALL else 0
 33        yoffs = -45 if uiscale is bui.UIScale.SMALL else 0
 34
 35        super().__init__(
 36            root_widget=bui.containerwidget(
 37                size=(width, height),
 38                toolbar_visibility=(
 39                    'menu_minimal'
 40                    if uiscale is bui.UIScale.SMALL
 41                    else 'menu_full'
 42                ),
 43                scale=(
 44                    1.55
 45                    if uiscale is bui.UIScale.SMALL
 46                    else 1.15 if uiscale is bui.UIScale.MEDIUM else 1.0
 47                ),
 48                stack_offset=(
 49                    (0, 0)
 50                    if uiscale is bui.UIScale.SMALL
 51                    else (0, 15) if uiscale is bui.UIScale.MEDIUM else (0, 0)
 52                ),
 53            ),
 54            transition=transition,
 55            origin_widget=origin_widget,
 56        )
 57
 58        bui.textwidget(
 59            parent=self._root_widget,
 60            position=(0, height - 45 + yoffs),
 61            size=(width, 25),
 62            text='INVENTORY',
 63            color=bui.app.ui_v1.title_color,
 64            h_align='center',
 65            v_align='center',
 66        )
 67
 68        if uiscale is bui.UIScale.SMALL:
 69            bui.containerwidget(
 70                edit=self._root_widget, on_cancel_call=self.main_window_back
 71            )
 72        else:
 73            btn = bui.buttonwidget(
 74                parent=self._root_widget,
 75                position=(x_offs + 50, height - 55 + yoffs),
 76                size=(60, 55),
 77                scale=0.8,
 78                label=bui.charstr(bui.SpecialChar.BACK),
 79                button_type='backSmall',
 80                extra_touch_border_scale=2.0,
 81                autoselect=True,
 82                on_activate_call=self.main_window_back,
 83            )
 84            bui.containerwidget(edit=self._root_widget, cancel_button=btn)
 85
 86        bui.textwidget(
 87            parent=self._root_widget,
 88            position=(0, height - 120 + yoffs),
 89            size=(width, 25),
 90            text='(under construction)',
 91            scale=0.7,
 92            h_align='center',
 93            v_align='center',
 94        )
 95
 96        button_width = 300
 97        self._player_profiles_button = btn = bui.buttonwidget(
 98            parent=self._root_widget,
 99            position=((width - button_width) * 0.5, height - 200 + yoffs),
100            autoselect=True,
101            size=(button_width, 60),
102            label=bui.Lstr(resource='playerProfilesWindow.titleText'),
103            color=(0.55, 0.5, 0.6),
104            icon=bui.gettexture('cuteSpaz'),
105            textcolor=(0.75, 0.7, 0.8),
106            on_activate_call=self._player_profiles_press,
107        )
108
109    def _player_profiles_press(self) -> None:
110        # pylint: disable=cyclic-import
111        from bauiv1lib.profile.browser import ProfileBrowserWindow
112
113        # no-op if our underlying widget is dead or on its way out.
114        if not self._root_widget or self._root_widget.transitioning_out:
115            return
116
117        self.main_window_replace(
118            ProfileBrowserWindow(origin_widget=self._player_profiles_button)
119        )
120
121    @override
122    def get_main_window_state(self) -> bui.MainWindowState:
123        # Support recreating our window for back/refresh purposes.
124        cls = type(self)
125        return bui.BasicMainWindowState(
126            create_call=lambda transition, origin_widget: cls(
127                transition=transition, origin_widget=origin_widget
128            )
129        )

Shows what you got.

InventoryWindow( transition: str | None = 'in_right', origin_widget: _bauiv1.Widget | None = None)
 16    def __init__(
 17        self,
 18        transition: str | None = 'in_right',
 19        origin_widget: bui.Widget | None = None,
 20    ):
 21
 22        bui.set_analytics_screen('Help Window')
 23
 24        assert bui.app.classic is not None
 25        uiscale = bui.app.ui_v1.uiscale
 26        width = 1050 if uiscale is bui.UIScale.SMALL else 750
 27        height = (
 28            500
 29            if uiscale is bui.UIScale.SMALL
 30            else 530 if uiscale is bui.UIScale.MEDIUM else 600
 31        )
 32        x_offs = 70 if uiscale is bui.UIScale.SMALL else 0
 33        yoffs = -45 if uiscale is bui.UIScale.SMALL else 0
 34
 35        super().__init__(
 36            root_widget=bui.containerwidget(
 37                size=(width, height),
 38                toolbar_visibility=(
 39                    'menu_minimal'
 40                    if uiscale is bui.UIScale.SMALL
 41                    else 'menu_full'
 42                ),
 43                scale=(
 44                    1.55
 45                    if uiscale is bui.UIScale.SMALL
 46                    else 1.15 if uiscale is bui.UIScale.MEDIUM else 1.0
 47                ),
 48                stack_offset=(
 49                    (0, 0)
 50                    if uiscale is bui.UIScale.SMALL
 51                    else (0, 15) if uiscale is bui.UIScale.MEDIUM else (0, 0)
 52                ),
 53            ),
 54            transition=transition,
 55            origin_widget=origin_widget,
 56        )
 57
 58        bui.textwidget(
 59            parent=self._root_widget,
 60            position=(0, height - 45 + yoffs),
 61            size=(width, 25),
 62            text='INVENTORY',
 63            color=bui.app.ui_v1.title_color,
 64            h_align='center',
 65            v_align='center',
 66        )
 67
 68        if uiscale is bui.UIScale.SMALL:
 69            bui.containerwidget(
 70                edit=self._root_widget, on_cancel_call=self.main_window_back
 71            )
 72        else:
 73            btn = bui.buttonwidget(
 74                parent=self._root_widget,
 75                position=(x_offs + 50, height - 55 + yoffs),
 76                size=(60, 55),
 77                scale=0.8,
 78                label=bui.charstr(bui.SpecialChar.BACK),
 79                button_type='backSmall',
 80                extra_touch_border_scale=2.0,
 81                autoselect=True,
 82                on_activate_call=self.main_window_back,
 83            )
 84            bui.containerwidget(edit=self._root_widget, cancel_button=btn)
 85
 86        bui.textwidget(
 87            parent=self._root_widget,
 88            position=(0, height - 120 + yoffs),
 89            size=(width, 25),
 90            text='(under construction)',
 91            scale=0.7,
 92            h_align='center',
 93            v_align='center',
 94        )
 95
 96        button_width = 300
 97        self._player_profiles_button = btn = bui.buttonwidget(
 98            parent=self._root_widget,
 99            position=((width - button_width) * 0.5, height - 200 + yoffs),
100            autoselect=True,
101            size=(button_width, 60),
102            label=bui.Lstr(resource='playerProfilesWindow.titleText'),
103            color=(0.55, 0.5, 0.6),
104            icon=bui.gettexture('cuteSpaz'),
105            textcolor=(0.75, 0.7, 0.8),
106            on_activate_call=self._player_profiles_press,
107        )

Create a MainWindow given a root widget and transition info.

Automatically handles in and out transitions on the provided widget, so there is no need to set transitions when creating it.

@override
def get_main_window_state(self) -> bauiv1.MainWindowState:
121    @override
122    def get_main_window_state(self) -> bui.MainWindowState:
123        # Support recreating our window for back/refresh purposes.
124        cls = type(self)
125        return bui.BasicMainWindowState(
126            create_call=lambda transition, origin_widget: cls(
127                transition=transition, origin_widget=origin_widget
128            )
129        )

Return a WindowState to recreate this window, if supported.