bauiv1lib.settings.pluginsettings

Plugin Settings UI.

  1# Released under the MIT License. See LICENSE for details.
  2#
  3"""Plugin Settings UI."""
  4
  5from __future__ import annotations
  6
  7import bauiv1 as bui
  8from bauiv1lib.confirm import ConfirmWindow
  9
 10
 11class PluginSettingsWindow(bui.Window):
 12    """Plugin Settings Window"""
 13
 14    def __init__(self, transition: str = 'in_right'):
 15        scale_origin: tuple[float, float] | None
 16        self._transition_out = 'out_right'
 17        scale_origin = None
 18
 19        assert bui.app.classic is not None
 20        uiscale = bui.app.ui_v1.uiscale
 21        width = 470.0 if uiscale is bui.UIScale.SMALL else 470.0
 22        height = (
 23            365.0
 24            if uiscale is bui.UIScale.SMALL
 25            else 300.0 if uiscale is bui.UIScale.MEDIUM else 370.0
 26        )
 27        top_extra = 10 if uiscale is bui.UIScale.SMALL else 0
 28
 29        super().__init__(
 30            root_widget=bui.containerwidget(
 31                size=(width, height + top_extra),
 32                transition=transition,
 33                toolbar_visibility='menu_minimal',
 34                scale_origin_stack_offset=scale_origin,
 35                scale=(
 36                    2.06
 37                    if uiscale is bui.UIScale.SMALL
 38                    else 1.4 if uiscale is bui.UIScale.MEDIUM else 1.0
 39                ),
 40                stack_offset=(
 41                    (0, -25) if uiscale is bui.UIScale.SMALL else (0, 0)
 42                ),
 43            )
 44        )
 45
 46        self._back_button = bui.buttonwidget(
 47            parent=self._root_widget,
 48            position=(53, height - 60),
 49            size=(60, 60),
 50            scale=0.8,
 51            autoselect=True,
 52            label=bui.charstr(bui.SpecialChar.BACK),
 53            button_type='backSmall',
 54            on_activate_call=self._do_back,
 55        )
 56        bui.containerwidget(
 57            edit=self._root_widget, cancel_button=self._back_button
 58        )
 59
 60        self._title_text = bui.textwidget(
 61            parent=self._root_widget,
 62            position=(0, height - 52),
 63            size=(width, 25),
 64            text=bui.Lstr(resource='pluginSettingsText'),
 65            color=bui.app.ui_v1.title_color,
 66            h_align='center',
 67            v_align='top',
 68        )
 69
 70        self._y_position = 170 if uiscale is bui.UIScale.MEDIUM else 205
 71        self._enable_plugins_button = bui.buttonwidget(
 72            parent=self._root_widget,
 73            position=(65, self._y_position),
 74            size=(350, 60),
 75            autoselect=True,
 76            label=bui.Lstr(resource='pluginsEnableAllText'),
 77            text_scale=1.0,
 78            on_activate_call=lambda: ConfirmWindow(
 79                action=self._enable_all_plugins,
 80            ),
 81        )
 82
 83        self._y_position -= 70
 84        self._disable_plugins_button = bui.buttonwidget(
 85            parent=self._root_widget,
 86            position=(65, self._y_position),
 87            size=(350, 60),
 88            autoselect=True,
 89            label=bui.Lstr(resource='pluginsDisableAllText'),
 90            text_scale=1.0,
 91            on_activate_call=lambda: ConfirmWindow(
 92                action=self._disable_all_plugins,
 93            ),
 94        )
 95
 96        self._y_position -= 70
 97        self._enable_new_plugins_check_box = bui.checkboxwidget(
 98            parent=self._root_widget,
 99            position=(65, self._y_position),
100            size=(350, 60),
101            value=bui.app.config.get(
102                bui.app.plugins.AUTO_ENABLE_NEW_PLUGINS_CONFIG_KEY,
103                bui.app.plugins.AUTO_ENABLE_NEW_PLUGINS_DEFAULT,
104            ),
105            text=bui.Lstr(resource='pluginsAutoEnableNewText'),
106            scale=1.0,
107            maxwidth=308,
108            on_value_change_call=self._update_value,
109        )
110
111        bui.widget(
112            edit=self._back_button, down_widget=self._enable_plugins_button
113        )
114
115        bui.widget(
116            edit=self._disable_plugins_button,
117            left_widget=self._disable_plugins_button,
118        )
119
120        bui.widget(
121            edit=self._enable_new_plugins_check_box,
122            left_widget=self._enable_new_plugins_check_box,
123            right_widget=self._enable_new_plugins_check_box,
124            down_widget=self._enable_new_plugins_check_box,
125        )
126
127    def _enable_all_plugins(self) -> None:
128        cfg = bui.app.config
129        plugs: dict[str, dict] = cfg.setdefault('Plugins', {})
130        for plug in plugs.values():
131            plug['enabled'] = True
132        cfg.apply_and_commit()
133
134        bui.screenmessage(
135            bui.Lstr(resource='settingsWindowAdvanced.mustRestartText'),
136            color=(1.0, 0.5, 0.0),
137        )
138
139    def _disable_all_plugins(self) -> None:
140        cfg = bui.app.config
141        plugs: dict[str, dict] = cfg.setdefault('Plugins', {})
142        for plug in plugs.values():
143            plug['enabled'] = False
144        cfg.apply_and_commit()
145
146        bui.screenmessage(
147            bui.Lstr(resource='settingsWindowAdvanced.mustRestartText'),
148            color=(1.0, 0.5, 0.0),
149        )
150
151    def _update_value(self, val: bool) -> None:
152        cfg = bui.app.config
153        cfg[bui.app.plugins.AUTO_ENABLE_NEW_PLUGINS_CONFIG_KEY] = val
154        cfg.apply_and_commit()
155
156    def _do_back(self) -> None:
157        # pylint: disable=cyclic-import
158        from bauiv1lib.settings.plugins import PluginWindow
159
160        # no-op if our underlying widget is dead or on its way out.
161        if not self._root_widget or self._root_widget.transitioning_out:
162            return
163
164        bui.containerwidget(
165            edit=self._root_widget, transition=self._transition_out
166        )
167        assert bui.app.classic is not None
168        bui.app.ui_v1.set_main_menu_window(
169            PluginWindow(transition='in_left').get_root_widget(),
170            from_window=self._root_widget,
171        )
class PluginSettingsWindow(bauiv1._uitypes.Window):
 12class PluginSettingsWindow(bui.Window):
 13    """Plugin Settings Window"""
 14
 15    def __init__(self, transition: str = 'in_right'):
 16        scale_origin: tuple[float, float] | None
 17        self._transition_out = 'out_right'
 18        scale_origin = None
 19
 20        assert bui.app.classic is not None
 21        uiscale = bui.app.ui_v1.uiscale
 22        width = 470.0 if uiscale is bui.UIScale.SMALL else 470.0
 23        height = (
 24            365.0
 25            if uiscale is bui.UIScale.SMALL
 26            else 300.0 if uiscale is bui.UIScale.MEDIUM else 370.0
 27        )
 28        top_extra = 10 if uiscale is bui.UIScale.SMALL else 0
 29
 30        super().__init__(
 31            root_widget=bui.containerwidget(
 32                size=(width, height + top_extra),
 33                transition=transition,
 34                toolbar_visibility='menu_minimal',
 35                scale_origin_stack_offset=scale_origin,
 36                scale=(
 37                    2.06
 38                    if uiscale is bui.UIScale.SMALL
 39                    else 1.4 if uiscale is bui.UIScale.MEDIUM else 1.0
 40                ),
 41                stack_offset=(
 42                    (0, -25) if uiscale is bui.UIScale.SMALL else (0, 0)
 43                ),
 44            )
 45        )
 46
 47        self._back_button = bui.buttonwidget(
 48            parent=self._root_widget,
 49            position=(53, height - 60),
 50            size=(60, 60),
 51            scale=0.8,
 52            autoselect=True,
 53            label=bui.charstr(bui.SpecialChar.BACK),
 54            button_type='backSmall',
 55            on_activate_call=self._do_back,
 56        )
 57        bui.containerwidget(
 58            edit=self._root_widget, cancel_button=self._back_button
 59        )
 60
 61        self._title_text = bui.textwidget(
 62            parent=self._root_widget,
 63            position=(0, height - 52),
 64            size=(width, 25),
 65            text=bui.Lstr(resource='pluginSettingsText'),
 66            color=bui.app.ui_v1.title_color,
 67            h_align='center',
 68            v_align='top',
 69        )
 70
 71        self._y_position = 170 if uiscale is bui.UIScale.MEDIUM else 205
 72        self._enable_plugins_button = bui.buttonwidget(
 73            parent=self._root_widget,
 74            position=(65, self._y_position),
 75            size=(350, 60),
 76            autoselect=True,
 77            label=bui.Lstr(resource='pluginsEnableAllText'),
 78            text_scale=1.0,
 79            on_activate_call=lambda: ConfirmWindow(
 80                action=self._enable_all_plugins,
 81            ),
 82        )
 83
 84        self._y_position -= 70
 85        self._disable_plugins_button = bui.buttonwidget(
 86            parent=self._root_widget,
 87            position=(65, self._y_position),
 88            size=(350, 60),
 89            autoselect=True,
 90            label=bui.Lstr(resource='pluginsDisableAllText'),
 91            text_scale=1.0,
 92            on_activate_call=lambda: ConfirmWindow(
 93                action=self._disable_all_plugins,
 94            ),
 95        )
 96
 97        self._y_position -= 70
 98        self._enable_new_plugins_check_box = bui.checkboxwidget(
 99            parent=self._root_widget,
100            position=(65, self._y_position),
101            size=(350, 60),
102            value=bui.app.config.get(
103                bui.app.plugins.AUTO_ENABLE_NEW_PLUGINS_CONFIG_KEY,
104                bui.app.plugins.AUTO_ENABLE_NEW_PLUGINS_DEFAULT,
105            ),
106            text=bui.Lstr(resource='pluginsAutoEnableNewText'),
107            scale=1.0,
108            maxwidth=308,
109            on_value_change_call=self._update_value,
110        )
111
112        bui.widget(
113            edit=self._back_button, down_widget=self._enable_plugins_button
114        )
115
116        bui.widget(
117            edit=self._disable_plugins_button,
118            left_widget=self._disable_plugins_button,
119        )
120
121        bui.widget(
122            edit=self._enable_new_plugins_check_box,
123            left_widget=self._enable_new_plugins_check_box,
124            right_widget=self._enable_new_plugins_check_box,
125            down_widget=self._enable_new_plugins_check_box,
126        )
127
128    def _enable_all_plugins(self) -> None:
129        cfg = bui.app.config
130        plugs: dict[str, dict] = cfg.setdefault('Plugins', {})
131        for plug in plugs.values():
132            plug['enabled'] = True
133        cfg.apply_and_commit()
134
135        bui.screenmessage(
136            bui.Lstr(resource='settingsWindowAdvanced.mustRestartText'),
137            color=(1.0, 0.5, 0.0),
138        )
139
140    def _disable_all_plugins(self) -> None:
141        cfg = bui.app.config
142        plugs: dict[str, dict] = cfg.setdefault('Plugins', {})
143        for plug in plugs.values():
144            plug['enabled'] = False
145        cfg.apply_and_commit()
146
147        bui.screenmessage(
148            bui.Lstr(resource='settingsWindowAdvanced.mustRestartText'),
149            color=(1.0, 0.5, 0.0),
150        )
151
152    def _update_value(self, val: bool) -> None:
153        cfg = bui.app.config
154        cfg[bui.app.plugins.AUTO_ENABLE_NEW_PLUGINS_CONFIG_KEY] = val
155        cfg.apply_and_commit()
156
157    def _do_back(self) -> None:
158        # pylint: disable=cyclic-import
159        from bauiv1lib.settings.plugins import PluginWindow
160
161        # no-op if our underlying widget is dead or on its way out.
162        if not self._root_widget or self._root_widget.transitioning_out:
163            return
164
165        bui.containerwidget(
166            edit=self._root_widget, transition=self._transition_out
167        )
168        assert bui.app.classic is not None
169        bui.app.ui_v1.set_main_menu_window(
170            PluginWindow(transition='in_left').get_root_widget(),
171            from_window=self._root_widget,
172        )

Plugin Settings Window

PluginSettingsWindow(transition: str = 'in_right')
 15    def __init__(self, transition: str = 'in_right'):
 16        scale_origin: tuple[float, float] | None
 17        self._transition_out = 'out_right'
 18        scale_origin = None
 19
 20        assert bui.app.classic is not None
 21        uiscale = bui.app.ui_v1.uiscale
 22        width = 470.0 if uiscale is bui.UIScale.SMALL else 470.0
 23        height = (
 24            365.0
 25            if uiscale is bui.UIScale.SMALL
 26            else 300.0 if uiscale is bui.UIScale.MEDIUM else 370.0
 27        )
 28        top_extra = 10 if uiscale is bui.UIScale.SMALL else 0
 29
 30        super().__init__(
 31            root_widget=bui.containerwidget(
 32                size=(width, height + top_extra),
 33                transition=transition,
 34                toolbar_visibility='menu_minimal',
 35                scale_origin_stack_offset=scale_origin,
 36                scale=(
 37                    2.06
 38                    if uiscale is bui.UIScale.SMALL
 39                    else 1.4 if uiscale is bui.UIScale.MEDIUM else 1.0
 40                ),
 41                stack_offset=(
 42                    (0, -25) if uiscale is bui.UIScale.SMALL else (0, 0)
 43                ),
 44            )
 45        )
 46
 47        self._back_button = bui.buttonwidget(
 48            parent=self._root_widget,
 49            position=(53, height - 60),
 50            size=(60, 60),
 51            scale=0.8,
 52            autoselect=True,
 53            label=bui.charstr(bui.SpecialChar.BACK),
 54            button_type='backSmall',
 55            on_activate_call=self._do_back,
 56        )
 57        bui.containerwidget(
 58            edit=self._root_widget, cancel_button=self._back_button
 59        )
 60
 61        self._title_text = bui.textwidget(
 62            parent=self._root_widget,
 63            position=(0, height - 52),
 64            size=(width, 25),
 65            text=bui.Lstr(resource='pluginSettingsText'),
 66            color=bui.app.ui_v1.title_color,
 67            h_align='center',
 68            v_align='top',
 69        )
 70
 71        self._y_position = 170 if uiscale is bui.UIScale.MEDIUM else 205
 72        self._enable_plugins_button = bui.buttonwidget(
 73            parent=self._root_widget,
 74            position=(65, self._y_position),
 75            size=(350, 60),
 76            autoselect=True,
 77            label=bui.Lstr(resource='pluginsEnableAllText'),
 78            text_scale=1.0,
 79            on_activate_call=lambda: ConfirmWindow(
 80                action=self._enable_all_plugins,
 81            ),
 82        )
 83
 84        self._y_position -= 70
 85        self._disable_plugins_button = bui.buttonwidget(
 86            parent=self._root_widget,
 87            position=(65, self._y_position),
 88            size=(350, 60),
 89            autoselect=True,
 90            label=bui.Lstr(resource='pluginsDisableAllText'),
 91            text_scale=1.0,
 92            on_activate_call=lambda: ConfirmWindow(
 93                action=self._disable_all_plugins,
 94            ),
 95        )
 96
 97        self._y_position -= 70
 98        self._enable_new_plugins_check_box = bui.checkboxwidget(
 99            parent=self._root_widget,
100            position=(65, self._y_position),
101            size=(350, 60),
102            value=bui.app.config.get(
103                bui.app.plugins.AUTO_ENABLE_NEW_PLUGINS_CONFIG_KEY,
104                bui.app.plugins.AUTO_ENABLE_NEW_PLUGINS_DEFAULT,
105            ),
106            text=bui.Lstr(resource='pluginsAutoEnableNewText'),
107            scale=1.0,
108            maxwidth=308,
109            on_value_change_call=self._update_value,
110        )
111
112        bui.widget(
113            edit=self._back_button, down_widget=self._enable_plugins_button
114        )
115
116        bui.widget(
117            edit=self._disable_plugins_button,
118            left_widget=self._disable_plugins_button,
119        )
120
121        bui.widget(
122            edit=self._enable_new_plugins_check_box,
123            left_widget=self._enable_new_plugins_check_box,
124            right_widget=self._enable_new_plugins_check_box,
125            down_widget=self._enable_new_plugins_check_box,
126        )
Inherited Members
bauiv1._uitypes.Window
get_root_widget