From 3891394831c04ec84fec9b87feaf49da0f9123d3 Mon Sep 17 00:00:00 2001
From: Eric Froemling
Date: Mon, 13 Jul 2020 19:33:11 -0700
Subject: [PATCH] Added ba.app.ui subsystem to contain ui globals/functionality
---
.efrocachemap | 24 ++--
.idea/dictionaries/ericf.xml | 4 +
assets/.asset_manifest_public.json | 2 +
assets/Makefile | 2 +
assets/src/ba_data/python/_ba.py | 2 +-
assets/src/ba_data/python/ba/_app.py | 37 ++---
assets/src/ba_data/python/ba/_gameactivity.py | 3 +-
assets/src/ba_data/python/ba/_hooks.py | 18 +--
assets/src/ba_data/python/ba/_ui.py | 133 ++++++++++++++++++
assets/src/ba_data/python/ba/ui/__init__.py | 8 +-
.../src/ba_data/python/bastd/appdelegate.py | 12 +-
assets/src/ba_data/python/bastd/mainmenu.py | 49 ++++---
.../ba_data/python/bastd/ui/account/link.py | 2 +-
.../python/bastd/ui/account/settings.py | 42 +++---
.../ba_data/python/bastd/ui/account/unlink.py | 2 +-
.../ba_data/python/bastd/ui/account/viewer.py | 8 +-
.../src/ba_data/python/bastd/ui/appinvite.py | 4 +-
assets/src/ba_data/python/bastd/ui/confirm.py | 9 +-
.../src/ba_data/python/bastd/ui/continues.py | 2 +-
.../ba_data/python/bastd/ui/coop/browser.py | 70 ++++-----
.../src/ba_data/python/bastd/ui/coop/level.py | 2 +-
.../ba_data/python/bastd/ui/creditslist.py | 12 +-
assets/src/ba_data/python/bastd/ui/debug.py | 12 +-
.../src/ba_data/python/bastd/ui/feedback.py | 2 +-
.../ba_data/python/bastd/ui/fileselector.py | 4 +-
assets/src/ba_data/python/bastd/ui/gather.py | 26 ++--
.../ba_data/python/bastd/ui/getcurrency.py | 4 +-
assets/src/ba_data/python/bastd/ui/helpui.py | 12 +-
assets/src/ba_data/python/bastd/ui/kiosk.py | 6 +-
.../python/bastd/ui/league/rankbutton.py | 2 +-
.../python/bastd/ui/league/rankwindow.py | 8 +-
.../src/ba_data/python/bastd/ui/mainmenu.py | 69 ++++-----
.../python/bastd/ui/onscreenkeyboard.py | 2 +-
.../src/ba_data/python/bastd/ui/partyqueue.py | 4 +-
assets/src/ba_data/python/bastd/ui/play.py | 40 +++---
.../python/bastd/ui/playlist/addgame.py | 4 +-
.../python/bastd/ui/playlist/browser.py | 37 ++---
.../bastd/ui/playlist/customizebrowser.py | 11 +-
.../ba_data/python/bastd/ui/playlist/edit.py | 30 ++--
.../bastd/ui/playlist/editcontroller.py | 60 ++++----
.../python/bastd/ui/playlist/editgame.py | 13 +-
.../python/bastd/ui/playlist/mapselect.py | 42 +++---
.../ba_data/python/bastd/ui/playlist/share.py | 4 +-
.../python/bastd/ui/profile/browser.py | 43 +++---
.../ba_data/python/bastd/ui/profile/edit.py | 43 +++---
.../python/bastd/ui/profile/upgrade.py | 6 +-
.../src/ba_data/python/bastd/ui/promocode.py | 12 +-
.../python/bastd/ui/settings/advanced.py | 49 +++----
.../python/bastd/ui/settings/allsettings.py | 38 ++---
.../ba_data/python/bastd/ui/settings/audio.py | 18 +--
.../python/bastd/ui/settings/controls.py | 82 +++++------
.../python/bastd/ui/settings/gamepad.py | 18 +--
.../bastd/ui/settings/gamepadadvanced.py | 2 +-
.../python/bastd/ui/settings/gamepadselect.py | 21 +--
.../python/bastd/ui/settings/graphics.py | 19 +--
.../python/bastd/ui/settings/keyboard.py | 12 +-
.../python/bastd/ui/settings/ps3controller.py | 7 +-
.../python/bastd/ui/settings/remoteapp.py | 7 +-
.../python/bastd/ui/settings/testing.py | 6 +-
.../python/bastd/ui/settings/touchscreen.py | 7 +-
.../python/bastd/ui/settings/wiimote.py | 13 +-
.../bastd/ui/settings/xbox360controller.py | 7 +-
.../python/bastd/ui/soundtrack/browser.py | 20 +--
.../python/bastd/ui/soundtrack/edit.py | 18 +--
.../bastd/ui/soundtrack/entrytypeselect.py | 39 ++---
.../python/bastd/ui/soundtrack/macmusicapp.py | 2 +-
.../ba_data/python/bastd/ui/store/browser.py | 28 ++--
.../python/bastd/ui/tournamententry.py | 4 +-
assets/src/ba_data/python/bastd/ui/url.py | 4 +-
assets/src/ba_data/python/bastd/ui/watch.py | 22 +--
config/toolconfigsrc/pylintrc | 10 +-
docs/ba_module.md | 4 +-
72 files changed, 788 insertions(+), 612 deletions(-)
create mode 100644 assets/src/ba_data/python/ba/_ui.py
diff --git a/.efrocachemap b/.efrocachemap
index 6ab1c512..6187936e 100644
--- a/.efrocachemap
+++ b/.efrocachemap
@@ -4135,16 +4135,16 @@
"assets/build/windows/x64/vc_redist.x64.exe": "https://files.ballistica.net/cache/ba1/ea/19/8b8787d81abcdce158ba608cd24f",
"assets/build/windows/x64/vcruntime140_1d.dll": "https://files.ballistica.net/cache/ba1/11/d8/ff6344b429b00c24d9a1930d4338",
"assets/build/windows/x64/vcruntime140d.dll": "https://files.ballistica.net/cache/ba1/20/33/0825e11e6518f87ece3009309933",
- "build/prefab/linux-server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/4d/52/c1c1011ac6286950129ecfe641c2",
- "build/prefab/linux-server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/4f/46/90e28db5c4a563bda000e2df2807",
- "build/prefab/linux/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/dd/b5/c197989dd4e61498dda75f51759c",
- "build/prefab/linux/release/ballisticacore": "https://files.ballistica.net/cache/ba1/b8/24/1da2eb6ecdbac963dc31fc258a1d",
- "build/prefab/mac-server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/f7/63/a9c21960f84b2d7f40418e66d4c8",
- "build/prefab/mac-server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/a2/8e/e489beaf13382d65c6c4a39e77e3",
- "build/prefab/mac/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/80/c4/4b4f75b4ae6d887f19ef2ec0f4b5",
- "build/prefab/mac/release/ballisticacore": "https://files.ballistica.net/cache/ba1/22/ba/e61af862b2d2c138a848583f74a6",
- "build/prefab/windows-server/debug/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/d5/1a/7061d9ff66993841317369cce4dd",
- "build/prefab/windows-server/release/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/a4/9f/5f3308d5dda1d6f8fb3b51389e05",
- "build/prefab/windows/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/bc/0f/7fd42fceaa297e0e67ed18566d3e",
- "build/prefab/windows/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/9b/c7/9756a8f6ef5237f1418cabfb6154"
+ "build/prefab/linux-server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/6b/65/84b0f5e6f03ae3e281b3e7c84c33",
+ "build/prefab/linux-server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/59/4c/48a8d74829812edbe484a3a00647",
+ "build/prefab/linux/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/d1/e4/0a2390a2af7b50738e276214f7aa",
+ "build/prefab/linux/release/ballisticacore": "https://files.ballistica.net/cache/ba1/5e/33/7ce61884d65810d479d8a8f18845",
+ "build/prefab/mac-server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/e5/de/aa7c8e010f8cba5559d7c2df953b",
+ "build/prefab/mac-server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/ed/a1/75bbe8e63775056fb82fe4a3c5b9",
+ "build/prefab/mac/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/65/64/f754cc64bdb97aae0ecfde4b14a9",
+ "build/prefab/mac/release/ballisticacore": "https://files.ballistica.net/cache/ba1/b6/ff/57211cac20b87dc6aec10fbb5e6d",
+ "build/prefab/windows-server/debug/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/e0/9c/e781f97fe6b81e373e7524784d3b",
+ "build/prefab/windows-server/release/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/01/dd/4747a402c2f635a31a70a305c48e",
+ "build/prefab/windows/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/80/26/de8bc04e6d4097583ea98df9eb35",
+ "build/prefab/windows/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/6f/b3/72fc80d493249f1a0085f29f5db4"
}
\ No newline at end of file
diff --git a/.idea/dictionaries/ericf.xml b/.idea/dictionaries/ericf.xml
index a376cbb2..075831cb 100644
--- a/.idea/dictionaries/ericf.xml
+++ b/.idea/dictionaries/ericf.xml
@@ -316,6 +316,7 @@
classnames
cleancheck
cleanlist
+ cleanupchecks
clientid
clientlist
clionbin
@@ -715,6 +716,8 @@
fprint
fproject
fpsc
+ frameinfo
+ frameline
framerate
freefly
freeforallendscreen
@@ -2110,6 +2113,7 @@
updatethencheck
updatethencheckfast
updatethencheckfull
+ upkeeptimer
uploadargs
uploadcmd
uptime
diff --git a/assets/.asset_manifest_public.json b/assets/.asset_manifest_public.json
index 87802e0c..d633bb80 100644
--- a/assets/.asset_manifest_public.json
+++ b/assets/.asset_manifest_public.json
@@ -53,6 +53,7 @@
"ba_data/python/ba/__pycache__/_teamgame.cpython-37.opt-1.pyc",
"ba_data/python/ba/__pycache__/_tips.cpython-37.opt-1.pyc",
"ba_data/python/ba/__pycache__/_tournament.cpython-37.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_ui.cpython-37.opt-1.pyc",
"ba_data/python/ba/__pycache__/deprecated.cpython-37.opt-1.pyc",
"ba_data/python/ba/__pycache__/internal.cpython-37.opt-1.pyc",
"ba_data/python/ba/__pycache__/macmusicapp.cpython-37.opt-1.pyc",
@@ -110,6 +111,7 @@
"ba_data/python/ba/_teamgame.py",
"ba_data/python/ba/_tips.py",
"ba_data/python/ba/_tournament.py",
+ "ba_data/python/ba/_ui.py",
"ba_data/python/ba/deprecated.py",
"ba_data/python/ba/internal.py",
"ba_data/python/ba/macmusicapp.py",
diff --git a/assets/Makefile b/assets/Makefile
index a9906ad4..86bcef7b 100644
--- a/assets/Makefile
+++ b/assets/Makefile
@@ -202,6 +202,7 @@ SCRIPT_TARGETS_PY_PUBLIC = \
build/ba_data/python/ba/_teamgame.py \
build/ba_data/python/ba/_tips.py \
build/ba_data/python/ba/_tournament.py \
+ build/ba_data/python/ba/_ui.py \
build/ba_data/python/ba/deprecated.py \
build/ba_data/python/ba/internal.py \
build/ba_data/python/ba/macmusicapp.py \
@@ -433,6 +434,7 @@ SCRIPT_TARGETS_PYC_PUBLIC = \
build/ba_data/python/ba/__pycache__/_teamgame.cpython-37.opt-1.pyc \
build/ba_data/python/ba/__pycache__/_tips.cpython-37.opt-1.pyc \
build/ba_data/python/ba/__pycache__/_tournament.cpython-37.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_ui.cpython-37.opt-1.pyc \
build/ba_data/python/ba/__pycache__/deprecated.cpython-37.opt-1.pyc \
build/ba_data/python/ba/__pycache__/internal.cpython-37.opt-1.pyc \
build/ba_data/python/ba/__pycache__/macmusicapp.cpython-37.opt-1.pyc \
diff --git a/assets/src/ba_data/python/_ba.py b/assets/src/ba_data/python/_ba.py
index 1a03a0e9..295c4763 100644
--- a/assets/src/ba_data/python/_ba.py
+++ b/assets/src/ba_data/python/_ba.py
@@ -2965,7 +2965,7 @@ def newactivity(activity_type: Type[ba.Activity],
Category: General Utility Functions
Activities require special setup and thus cannot be directly
- instantiated; You must go through this function.
+ instantiated; you must go through this function.
"""
import ba # pylint: disable=cyclic-import
return ba.Activity(settings={})
diff --git a/assets/src/ba_data/python/ba/_app.py b/assets/src/ba_data/python/ba/_app.py
index 4bd5e0ad..023f3957 100644
--- a/assets/src/ba_data/python/ba/_app.py
+++ b/assets/src/ba_data/python/ba/_app.py
@@ -262,6 +262,7 @@ class App:
# pylint: disable=too-many-statements
from ba._music import MusicController
from ba._enums import UIScale
+ from ba._ui import UI
# Config.
self.config_file_healthy = False
@@ -397,20 +398,12 @@ class App:
self.coop_session_args: Dict = {}
# UI.
- self.uicontroller: Optional[ba.UIController] = None
- self.main_menu_window: Optional[_ba.Widget] = None # FIXME: Kill this.
- self.window_states: Dict = {} # FIXME: Kill this.
- self.windows: Dict = {} # FIXME: Kill this.
- self.main_window: Optional[str] = None # FIXME: Kill this.
- self.main_menu_selection: Optional[str] = None # FIXME: Kill this.
- self.have_party_queue_window = False
- self.quit_window: Any = None
- self.dismiss_wii_remotes_window_call: (Optional[Callable[[],
- Any]]) = None
+ self.ui = UI()
+
self.value_test_defaults: dict = {}
- self.main_menu_window_refresh_check_count = 0
self.first_main_menu = True # FIXME: Move to mainmenu class.
self.did_menu_intro = False # FIXME: Move to mainmenu class.
+ self.main_menu_window_refresh_check_count = 0 # FIXME: Mv to mainmenu.
self.main_menu_resume_callbacks: list = [] # Can probably go away.
self.special_offer: Optional[Dict] = None
self.league_rank_cache: Dict = {}
@@ -422,13 +415,6 @@ class App:
self.store_items: Optional[Dict[str, Dict]] = None
self.pro_sale_start_time: Optional[int] = None
self.pro_sale_start_val: Optional[int] = None
- self.party_window: Any = None # FIXME: Don't use Any.
- self.title_color = (0.72, 0.7, 0.75)
- self.heading_color = (0.72, 0.7, 0.75)
- self.infotextcolor = (0.7, 0.9, 0.7)
- self.uicleanupchecks: List[UICleanupCheck] = []
- self.uiupkeeptimer: Optional[ba.Timer] = None
- self.toolbars = env.get('toolbar_test', True)
self.delegate: Optional[ba.AppDelegate] = None
@@ -442,7 +428,6 @@ class App:
# pylint: disable=cyclic-import
from ba import _apputils
from ba import _appconfig
- from ba.ui import UIController, ui_upkeep
from ba import _achievement
from ba import _map
from ba import _meta
@@ -456,7 +441,8 @@ class App:
self.delegate = appdelegate.AppDelegate()
- self.uicontroller = UIController()
+ self.ui.on_app_launch()
+
_achievement.init_achievements()
spazappearance.register_appearances()
_campaign.init_campaigns()
@@ -478,13 +464,6 @@ class App:
and not _ba.is_blessed()):
_ba.screenmessage('WARNING: NON-BLESSED BUILD', color=(1, 0, 0))
- # Kick off our periodic UI upkeep.
- # FIXME: Can probably kill this if we do immediate UI death checks.
- self.uiupkeeptimer = _ba.Timer(2.6543,
- ui_upkeep,
- timetype=TimeType.REAL,
- repeat=True)
-
# IMPORTANT: If tweaking UI stuff, make sure it behaves for small,
# medium, and large UI modes. (doesn't run off screen, etc).
# The overrides below can be used to test with different sizes.
@@ -648,7 +627,7 @@ class App:
from ba._general import Call
from bastd.mainmenu import MainMenuSession
if reset_ui:
- _ba.app.main_window = None
+ _ba.app.ui.clear_main_menu_window()
if isinstance(_ba.get_foreground_host_session(), MainMenuSession):
# It may be possible we're on the main menu but the screen is faded
@@ -681,7 +660,7 @@ class App:
"""(internal)"""
# If there's no main menu up, just call immediately.
- if not self.main_menu_window:
+ if not self.ui.has_main_menu_window():
with _ba.Context('ui'):
call()
else:
diff --git a/assets/src/ba_data/python/ba/_gameactivity.py b/assets/src/ba_data/python/ba/_gameactivity.py
index b7e7cb77..ee954fbf 100644
--- a/assets/src/ba_data/python/ba/_gameactivity.py
+++ b/assets/src/ba_data/python/ba/_gameactivity.py
@@ -423,8 +423,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
# Only attempt this if we're not currently paused
# and there appears to be no UI.
if (not gnode.paused
- and _ba.app.main_menu_window is None
- or not _ba.app.main_menu_window):
+ and not _ba.app.ui.has_main_menu_window()):
self._is_waiting_for_continue = True
with _ba.Context('ui'):
_ba.timer(
diff --git a/assets/src/ba_data/python/ba/_hooks.py b/assets/src/ba_data/python/ba/_hooks.py
index a8718b6f..0c5e95c0 100644
--- a/assets/src/ba_data/python/ba/_hooks.py
+++ b/assets/src/ba_data/python/ba/_hooks.py
@@ -180,7 +180,7 @@ def purchases_restored_message() -> None:
def dismiss_wii_remotes_window() -> None:
- call = _ba.app.dismiss_wii_remotes_window_call
+ call = _ba.app.ui.dismiss_wii_remotes_window_call
if call is not None:
call()
@@ -256,10 +256,10 @@ def party_icon_activate(origin: Sequence[float]) -> None:
_ba.playsound(_ba.getsound('swish'))
# If it exists, dismiss it; otherwise make a new one.
- if app.party_window is not None and app.party_window() is not None:
- app.party_window().close()
+ if app.ui.party_window is not None and app.ui.party_window() is not None:
+ app.ui.party_window().close()
else:
- app.party_window = weakref.ref(PartyWindow(origin=origin))
+ app.ui.party_window = weakref.ref(PartyWindow(origin=origin))
def read_config() -> None:
@@ -303,11 +303,11 @@ def gc_disable() -> None:
def device_menu_press(device: ba.InputDevice) -> None:
from bastd.ui.mainmenu import MainMenuWindow
- in_main_menu = bool(_ba.app.main_menu_window)
+ in_main_menu = _ba.app.ui.has_main_menu_window()
if not in_main_menu:
_ba.set_ui_input_device(device)
_ba.playsound(_ba.getsound('swish'))
- _ba.app.main_menu_window = (MainMenuWindow().get_root_widget())
+ _ba.app.ui.set_main_menu_window(MainMenuWindow().get_root_widget())
def show_url_window(address: str) -> None:
@@ -338,9 +338,9 @@ def filter_chat_message(msg: str, client_id: int) -> Optional[str]:
def local_chat_message(msg: str) -> None:
- if (_ba.app.party_window is not None
- and _ba.app.party_window() is not None):
- _ba.app.party_window().on_chat_message(msg)
+ if (_ba.app.ui.party_window is not None
+ and _ba.app.ui.party_window() is not None):
+ _ba.app.ui.party_window().on_chat_message(msg)
def handle_remote_achievement_list(completed_achievements: List[str]) -> None:
diff --git a/assets/src/ba_data/python/ba/_ui.py b/assets/src/ba_data/python/ba/_ui.py
new file mode 100644
index 00000000..ce4c5a99
--- /dev/null
+++ b/assets/src/ba_data/python/ba/_ui.py
@@ -0,0 +1,133 @@
+# Copyright (c) 2011-2020 Eric Froemling
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+# -----------------------------------------------------------------------------
+"""User interface functionality."""
+
+from __future__ import annotations
+
+from typing import TYPE_CHECKING
+
+import _ba
+
+if TYPE_CHECKING:
+ from typing import Optional, Dict, Any, Callable, List
+ from ba.ui import UICleanupCheck
+ import ba
+
+
+class UI:
+ """UI subsystem for the app."""
+
+ def __init__(self) -> None:
+ env = _ba.env()
+
+ self.controller: Optional[ba.UIController] = None
+
+ self._main_menu_window: Optional[ba.Widget] = None
+ self._main_menu_location: Optional[str] = None
+
+ self.window_states: Dict = {} # FIXME: Kill this.
+ # self.windows: Dict = {} # FIXME: Kill this.
+ self.main_menu_selection: Optional[str] = None # FIXME: Kill this.
+ self.have_party_queue_window = False
+ self.quit_window: Any = None
+ self.dismiss_wii_remotes_window_call: (Optional[Callable[[],
+ Any]]) = None
+ self.cleanupchecks: List[UICleanupCheck] = []
+ self.upkeeptimer: Optional[ba.Timer] = None
+ self.use_toolbars = env.get('toolbar_test', True)
+ self.party_window: Any = None # FIXME: Don't use Any.
+ self.title_color = (0.72, 0.7, 0.75)
+ self.heading_color = (0.72, 0.7, 0.75)
+ self.infotextcolor = (0.7, 0.9, 0.7)
+
+ def on_app_launch(self) -> None:
+ """Should be run on app launch."""
+ from ba.ui import UIController, ui_upkeep
+ from ba._enums import TimeType
+
+ self.controller = UIController()
+
+ # Kick off our periodic UI upkeep.
+ # FIXME: Can probably kill this if we do immediate UI death checks.
+ self.upkeeptimer = _ba.Timer(2.6543,
+ ui_upkeep,
+ timetype=TimeType.REAL,
+ repeat=True)
+
+ def set_main_menu_window(self, window: ba.Widget) -> None:
+ """Set the current 'main' window, replacing any existing."""
+ existing = self._main_menu_window
+ from ba._enums import TimeType
+ from inspect import currentframe, getframeinfo
+
+ # Let's grab the location where we were called from to report
+ # if we have to force-kill the existing window (which normally
+ # should not happen).
+ frameline = None
+ try:
+ frame = currentframe()
+ if frame is not None:
+ frame = frame.f_back
+ if frame is not None:
+ frameinfo = getframeinfo(frame)
+ frameline = f'{frameinfo.filename} {frameinfo.lineno}'
+ except Exception:
+ from ba._error import print_exception
+ print_exception('Error calcing line for set_main_menu_window')
+
+ # With our legacy main-menu system, the caller is responsible for
+ # clearing out the old main menu window when assigning the new.
+ # However there are corner cases where that doesn't happen and we get
+ # old windows stuck under the new main one. So let's guard against that
+ # However, we can't simply delete the existing main window when
+ # a new one is assigned because the user may transition the old out
+ # *after* the assignment. Sigh. So as a happy medium let's check in
+ # on the old after a short bit of time and kill it if its still alive.
+ # That will be a bit ugly on screen but at least will un-break things.
+ def _delay_kill() -> None:
+ if existing:
+ print(f'Killing old main_menu_window'
+ f' when called at: {frameline}')
+ existing.delete()
+
+ _ba.timer(1.0, _delay_kill, timetype=TimeType.REAL)
+ self._main_menu_window = window
+
+ def clear_main_menu_window(self, transition: str = None) -> None:
+ """Clear any existing 'main' window with the provided transition."""
+ if self._main_menu_window:
+ if transition is not None:
+ _ba.containerwidget(edit=self._main_menu_window,
+ transition=transition)
+ else:
+ self._main_menu_window.delete()
+
+ def has_main_menu_window(self) -> bool:
+ """Return whether a main menu window is present."""
+ return bool(self._main_menu_window)
+
+ def set_main_menu_location(self, location: str) -> None:
+ """Set the location represented by the current main menu window."""
+ self._main_menu_location = location
+
+ def get_main_menu_location(self) -> Optional[str]:
+ """Return the current named main menu location, if any."""
+ return self._main_menu_location
diff --git a/assets/src/ba_data/python/ba/ui/__init__.py b/assets/src/ba_data/python/ba/ui/__init__.py
index 02835ab6..4a1a4cb0 100644
--- a/assets/src/ba_data/python/ba/ui/__init__.py
+++ b/assets/src/ba_data/python/ba/ui/__init__.py
@@ -203,7 +203,7 @@ def uicleanupcheck(obj: Any, widget: ba.Widget) -> None:
widget.add_delete_callback(foobar)
- _ba.app.uicleanupchecks.append(
+ _ba.app.ui.cleanupchecks.append(
UICleanupCheck(obj=weakref.ref(obj),
widget=widget,
widget_death_time=None))
@@ -211,10 +211,10 @@ def uicleanupcheck(obj: Any, widget: ba.Widget) -> None:
def ui_upkeep() -> None:
"""Run UI cleanup checks, etc. should be called periodically."""
- app = _ba.app
+ ui = _ba.app.ui
remainingchecks = []
now = _ba.time(TimeType.REAL)
- for check in app.uicleanupchecks:
+ for check in ui.cleanupchecks:
obj = check.obj()
# If the object has died, ignore and don't re-add.
@@ -237,4 +237,4 @@ def ui_upkeep() -> None:
' you probably have a memory leak.')
else:
remainingchecks.append(check)
- app.uicleanupchecks = remainingchecks
+ ui.cleanupchecks = remainingchecks
diff --git a/assets/src/ba_data/python/bastd/appdelegate.py b/assets/src/ba_data/python/bastd/appdelegate.py
index 351a1984..e650a2e0 100644
--- a/assets/src/ba_data/python/bastd/appdelegate.py
+++ b/assets/src/ba_data/python/bastd/appdelegate.py
@@ -40,8 +40,10 @@ class AppDelegate(ba.AppDelegate):
# Replace the main window once we come up successfully.
from bastd.ui.playlist.editgame import PlaylistEditGameWindow
- prev_window = ba.app.main_menu_window
- ba.app.main_menu_window = (PlaylistEditGameWindow(
- gameclass, sessiontype, settings,
- completion_call=completion_call).get_root_widget())
- ba.containerwidget(edit=prev_window, transition='out_left')
+ ba.app.ui.clear_main_menu_window(transition='out_left')
+ ba.app.ui.set_main_menu_window(
+ PlaylistEditGameWindow(
+ gameclass,
+ sessiontype,
+ settings,
+ completion_call=completion_call).get_root_widget())
diff --git a/assets/src/ba_data/python/bastd/mainmenu.py b/assets/src/ba_data/python/bastd/mainmenu.py
index cbdb3003..6b275cd9 100644
--- a/assets/src/ba_data/python/bastd/mainmenu.py
+++ b/assets/src/ba_data/python/bastd/mainmenu.py
@@ -403,55 +403,58 @@ class MainMenuActivity(ba.Activity[ba.Player, ba.Team]):
with ba.Context('ui'):
from bastd.ui import specialoffer
if bool(False):
- uicontroller = ba.app.uicontroller
+ uicontroller = ba.app.ui.controller
assert uicontroller is not None
uicontroller.show_main_menu()
else:
- main_window = ba.app.main_window
+ main_menu_location = ba.app.ui.get_main_menu_location()
# When coming back from a kiosk-mode game, jump to
# the kiosk start screen.
if ba.app.kiosk_mode:
# pylint: disable=cyclic-import
from bastd.ui.kiosk import KioskWindow
- ba.app.main_menu_window = KioskWindow().get_root_widget()
+ ba.app.ui.set_main_menu_window(
+ KioskWindow().get_root_widget())
# ..or in normal cases go back to the main menu
else:
- main_window = ba.app.main_window
- if main_window == 'Gather':
+ if main_menu_location == 'Gather':
# pylint: disable=cyclic-import
from bastd.ui.gather import GatherWindow
- ba.app.main_menu_window = (GatherWindow(
- transition=None).get_root_widget())
- elif main_window == 'Watch':
+ ba.app.ui.set_main_menu_window(
+ GatherWindow(transition=None).get_root_widget())
+ elif main_menu_location == 'Watch':
# pylint: disable=cyclic-import
from bastd.ui.watch import WatchWindow
- ba.app.main_menu_window = WatchWindow(
- transition=None).get_root_widget()
- elif main_window == 'Team Game Select':
+ ba.app.ui.set_main_menu_window(
+ WatchWindow(transition=None).get_root_widget())
+ elif main_menu_location == 'Team Game Select':
# pylint: disable=cyclic-import
from bastd.ui.playlist.browser import (
PlaylistBrowserWindow)
- ba.app.main_menu_window = PlaylistBrowserWindow(
- sessiontype=ba.DualTeamSession,
- transition=None).get_root_widget()
- elif main_window == 'Free-for-All Game Select':
+ ba.app.ui.set_main_menu_window(
+ PlaylistBrowserWindow(
+ sessiontype=ba.DualTeamSession,
+ transition=None).get_root_widget())
+ elif main_menu_location == 'Free-for-All Game Select':
# pylint: disable=cyclic-import
from bastd.ui.playlist.browser import (
PlaylistBrowserWindow)
- ba.app.main_menu_window = PlaylistBrowserWindow(
- sessiontype=ba.FreeForAllSession,
- transition=None).get_root_widget()
- elif main_window == 'Coop Select':
+ ba.app.ui.set_main_menu_window(
+ PlaylistBrowserWindow(
+ sessiontype=ba.FreeForAllSession,
+ transition=None).get_root_widget())
+ elif main_menu_location == 'Coop Select':
# pylint: disable=cyclic-import
from bastd.ui.coop.browser import CoopBrowserWindow
- ba.app.main_menu_window = CoopBrowserWindow(
- transition=None).get_root_widget()
+ ba.app.ui.set_main_menu_window(
+ CoopBrowserWindow(
+ transition=None).get_root_widget())
else:
# pylint: disable=cyclic-import
from bastd.ui.mainmenu import MainMenuWindow
- ba.app.main_menu_window = MainMenuWindow(
- transition=None).get_root_widget()
+ ba.app.ui.set_main_menu_window(
+ MainMenuWindow(transition=None).get_root_widget())
# attempt to show any pending offers immediately.
# If that doesn't work, try again in a few seconds
diff --git a/assets/src/ba_data/python/bastd/ui/account/link.py b/assets/src/ba_data/python/bastd/ui/account/link.py
index 506ec979..8f0c238d 100644
--- a/assets/src/ba_data/python/bastd/ui/account/link.py
+++ b/assets/src/ba_data/python/bastd/ui/account/link.py
@@ -77,7 +77,7 @@ class AccountLinkWindow(ba.Window):
'accountSettingsWindow.linkAccountsInstructionsNewText'),
subs=[('${COUNT}', str(maxlinks))]),
maxwidth=self._width * 0.9,
- color=ba.app.infotextcolor,
+ color=ba.app.ui.infotextcolor,
max_height=self._height * 0.6,
h_align='center',
v_align='center')
diff --git a/assets/src/ba_data/python/bastd/ui/account/settings.py b/assets/src/ba_data/python/bastd/ui/account/settings.py
index 56583eb7..6f178d7c 100644
--- a/assets/src/ba_data/python/bastd/ui/account/settings.py
+++ b/assets/src/ba_data/python/bastd/ui/account/settings.py
@@ -113,7 +113,7 @@ class AccountSettingsWindow(ba.Window):
scale=(2.09 if uiscale is ba.UIScale.SMALL else
1.4 if uiscale is ba.UIScale.MEDIUM else 1.0),
stack_offset=(0, -19) if uiscale is ba.UIScale.SMALL else (0, 0)))
- if uiscale is ba.UIScale.SMALL and ba.app.toolbars:
+ if uiscale is ba.UIScale.SMALL and ba.app.ui.use_toolbars:
self._back_button = None
ba.containerwidget(edit=self._root_widget,
on_cancel_call=self._back)
@@ -140,7 +140,7 @@ class AccountSettingsWindow(ba.Window):
position=(self._width * 0.5, self._height - 41),
size=(0, 0),
text=ba.Lstr(resource=self._r + '.titleText'),
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
maxwidth=self._width - 340,
h_align='center',
v_align='center')
@@ -363,7 +363,7 @@ class AccountSettingsWindow(ba.Window):
size=(0, 0),
text=txt,
scale=0.9,
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
maxwidth=self._sub_width * 0.9,
h_align='center',
v_align='center')
@@ -450,7 +450,7 @@ class AccountSettingsWindow(ba.Window):
on_activate_call=lambda: self._sign_in_press('Google Play'))
if first_selectable is None:
first_selectable = btn
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=btn,
right_widget=_ba.get_special_widget('party_button'))
ba.widget(edit=btn, left_widget=bbtn)
@@ -475,7 +475,7 @@ class AccountSettingsWindow(ba.Window):
on_activate_call=lambda: self._sign_in_press('Game Circle'))
if first_selectable is None:
first_selectable = btn
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=btn,
right_widget=_ba.get_special_widget('party_button'))
ba.widget(edit=btn, left_widget=bbtn)
@@ -499,7 +499,7 @@ class AccountSettingsWindow(ba.Window):
on_activate_call=lambda: self._sign_in_press('Ali'))
if first_selectable is None:
first_selectable = btn
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=btn,
right_widget=_ba.get_special_widget('party_button'))
ba.widget(edit=btn, left_widget=bbtn)
@@ -545,7 +545,7 @@ class AccountSettingsWindow(ba.Window):
color=(0.55, 0.8, 0.5))
if first_selectable is None:
first_selectable = btn
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=btn,
right_widget=_ba.get_special_widget('party_button'))
ba.widget(edit=btn, left_widget=bbtn)
@@ -592,7 +592,7 @@ class AccountSettingsWindow(ba.Window):
color=(0.55, 0.8, 0.5))
if first_selectable is None:
first_selectable = btn
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=btn,
right_widget=_ba.get_special_widget('party_button'))
ba.widget(edit=btn, left_widget=bbtn)
@@ -614,7 +614,7 @@ class AccountSettingsWindow(ba.Window):
on_activate_call=self._player_profiles_press)
if first_selectable is None:
first_selectable = btn
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=btn,
right_widget=_ba.get_special_widget('party_button'))
ba.widget(edit=btn, left_widget=bbtn, show_buffer_bottom=0)
@@ -642,7 +642,7 @@ class AccountSettingsWindow(ba.Window):
label=account_type_name)
if first_selectable is None:
first_selectable = btn
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=btn,
right_widget=_ba.get_special_widget('party_button'))
ba.widget(edit=btn, left_widget=bbtn)
@@ -684,7 +684,7 @@ class AccountSettingsWindow(ba.Window):
label='')
if first_selectable is None:
first_selectable = btn
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=btn,
right_widget=_ba.get_special_widget('party_button'))
ba.widget(edit=btn, left_widget=bbtn)
@@ -712,7 +712,7 @@ class AccountSettingsWindow(ba.Window):
label=ba.Lstr(resource='leaderboardsText'))
if first_selectable is None:
first_selectable = btn
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=btn,
right_widget=_ba.get_special_widget('party_button'))
ba.widget(edit=btn, left_widget=bbtn)
@@ -782,7 +782,7 @@ class AccountSettingsWindow(ba.Window):
action=self._reset_progress))
if first_selectable is None:
first_selectable = btn
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=btn,
right_widget=_ba.get_special_widget('party_button'))
ba.widget(edit=btn, left_widget=bbtn)
@@ -837,7 +837,7 @@ class AccountSettingsWindow(ba.Window):
color=(0.75, 0.7, 0.8))
if first_selectable is None:
first_selectable = btn
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=btn,
right_widget=_ba.get_special_widget('party_button'))
ba.widget(edit=btn, left_widget=bbtn, show_buffer_bottom=50)
@@ -865,7 +865,7 @@ class AccountSettingsWindow(ba.Window):
color=(0.75, 0.7, 0.8))
if first_selectable is None:
first_selectable = btn
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=btn,
right_widget=_ba.get_special_widget('party_button'))
ba.widget(edit=btn, left_widget=bbtn, show_buffer_bottom=50)
@@ -886,7 +886,7 @@ class AccountSettingsWindow(ba.Window):
on_activate_call=self._sign_out_press)
if first_selectable is None:
first_selectable = btn
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=btn,
right_widget=_ba.get_special_widget('party_button'))
ba.widget(edit=btn, left_widget=bbtn, show_buffer_bottom=15)
@@ -1090,14 +1090,14 @@ class AccountSettingsWindow(ba.Window):
def _back(self) -> None:
# pylint: disable=cyclic-import
- from bastd.ui import mainmenu
+ from bastd.ui.mainmenu import MainMenuWindow
self._save_state()
ba.containerwidget(edit=self._root_widget,
transition=self._transition_out)
if not self._modal:
- ba.app.main_menu_window = (mainmenu.MainMenuWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ MainMenuWindow(transition='in_left').get_root_widget())
def _save_state(self) -> None:
try:
@@ -1108,13 +1108,13 @@ class AccountSettingsWindow(ba.Window):
sel_name = 'Scroll'
else:
raise ValueError('unrecognized selection')
- ba.app.window_states[self.__class__.__name__] = sel_name
+ ba.app.ui.window_states[self.__class__.__name__] = sel_name
except Exception:
ba.print_exception(f'Error saving state for {self}.')
def _restore_state(self) -> None:
try:
- sel_name = ba.app.window_states.get(self.__class__.__name__)
+ sel_name = ba.app.ui.window_states.get(self.__class__.__name__)
if sel_name == 'Back':
sel = self._back_button
elif sel_name == 'Scroll':
diff --git a/assets/src/ba_data/python/bastd/ui/account/unlink.py b/assets/src/ba_data/python/bastd/ui/account/unlink.py
index c4b7ec78..53d52189 100644
--- a/assets/src/ba_data/python/bastd/ui/account/unlink.py
+++ b/assets/src/ba_data/python/bastd/ui/account/unlink.py
@@ -77,7 +77,7 @@ class AccountUnlinkWindow(ba.Window):
resource='accountSettingsWindow.unlinkAccountsInstructionsText'
),
maxwidth=self._width * 0.7,
- color=ba.app.infotextcolor,
+ color=ba.app.ui.infotextcolor,
h_align='center',
v_align='center')
ba.containerwidget(edit=self._root_widget,
diff --git a/assets/src/ba_data/python/bastd/ui/account/viewer.py b/assets/src/ba_data/python/bastd/ui/account/viewer.py
index 3c9022f5..044196c7 100644
--- a/assets/src/ba_data/python/bastd/ui/account/viewer.py
+++ b/assets/src/ba_data/python/bastd/ui/account/viewer.py
@@ -292,7 +292,7 @@ class AccountViewerWindow(popup.PopupWindow):
h_align='center',
v_align='center',
scale=title_scale,
- color=ba.app.infotextcolor,
+ color=ba.app.ui.infotextcolor,
text=account_title,
maxwidth=sub_width * maxwidth_scale)
draw_small = (showing_character
@@ -319,7 +319,7 @@ class AccountViewerWindow(popup.PopupWindow):
h_align='center',
v_align='center',
scale=title_scale,
- color=ba.app.infotextcolor,
+ color=ba.app.ui.infotextcolor,
text=ba.Lstr(resource='rankText'),
maxwidth=sub_width * maxwidth_scale)
v -= 14
@@ -433,7 +433,7 @@ class AccountViewerWindow(popup.PopupWindow):
h_align='center',
v_align='center',
scale=title_scale,
- color=ba.app.infotextcolor,
+ color=ba.app.ui.infotextcolor,
text=ba.Lstr(resource='achievementsText'),
maxwidth=sub_width * maxwidth_scale)
v -= 14
@@ -462,7 +462,7 @@ class AccountViewerWindow(popup.PopupWindow):
h_align='center',
v_align='center',
scale=title_scale,
- color=ba.app.infotextcolor,
+ color=ba.app.ui.infotextcolor,
flatness=1.0,
text=ba.Lstr(resource='trophiesThisSeasonText',
fallback_resource='trophiesText'),
diff --git a/assets/src/ba_data/python/bastd/ui/appinvite.py b/assets/src/ba_data/python/bastd/ui/appinvite.py
index 00eabdd8..db1615c4 100644
--- a/assets/src/ba_data/python/bastd/ui/appinvite.py
+++ b/assets/src/ba_data/python/bastd/ui/appinvite.py
@@ -202,7 +202,7 @@ class ShowFriendCodeWindow(ba.Window):
parent=self._root_widget,
position=(self._width * 0.5, self._height * 0.8),
size=(0, 0),
- color=ba.app.infotextcolor,
+ color=ba.app.ui.infotextcolor,
scale=1.0,
flatness=1.0,
h_align='center',
@@ -231,7 +231,7 @@ class ShowFriendCodeWindow(ba.Window):
parent=self._root_widget,
position=(self._width * 0.5, self._height * 0.37),
size=(0, 0),
- color=ba.app.infotextcolor,
+ color=ba.app.ui.infotextcolor,
scale=1.0,
flatness=1.0,
h_align='center',
diff --git a/assets/src/ba_data/python/bastd/ui/confirm.py b/assets/src/ba_data/python/bastd/ui/confirm.py
index b15b1a6d..5874d299 100644
--- a/assets/src/ba_data/python/bastd/ui/confirm.py
+++ b/assets/src/ba_data/python/bastd/ui/confirm.py
@@ -147,18 +147,19 @@ class QuitWindow:
swish: bool = False,
back: bool = False,
origin_widget: ba.Widget = None):
+ ui = ba.app.ui
app = ba.app
self._back = back
# If there's already one of us up somewhere, kill it.
- if app.quit_window is not None:
- app.quit_window.delete()
- app.quit_window = None
+ if ui.quit_window is not None:
+ ui.quit_window.delete()
+ ui.quit_window = None
if swish:
ba.playsound(ba.getsound('swish'))
quit_resource = ('quitGameText'
if app.platform == 'mac' else 'exitGameText')
- self._root_widget = app.quit_window = (ConfirmWindow(
+ self._root_widget = ui.quit_window = (ConfirmWindow(
ba.Lstr(resource=quit_resource,
subs=[('${APP_NAME}', ba.Lstr(resource='titleText'))]),
self._fade_and_quit,
diff --git a/assets/src/ba_data/python/bastd/ui/continues.py b/assets/src/ba_data/python/bastd/ui/continues.py
index 926d19a6..68d78047 100644
--- a/assets/src/ba_data/python/bastd/ui/continues.py
+++ b/assets/src/ba_data/python/bastd/ui/continues.py
@@ -94,7 +94,7 @@ class ContinuesWindow(ba.Window):
self._tickets_text_base: Optional[str]
self._tickets_text: Optional[ba.Widget]
- if not ba.app.toolbars:
+ if not ba.app.ui.use_toolbars:
self._tickets_text_base = ba.Lstr(
resource='getTicketsWindow.youHaveShortText',
fallback_resource='getTicketsWindow.youHaveText').evaluate()
diff --git a/assets/src/ba_data/python/bastd/ui/coop/browser.py b/assets/src/ba_data/python/bastd/ui/coop/browser.py
index 629b782a..c61884b2 100644
--- a/assets/src/ba_data/python/bastd/ui/coop/browser.py
+++ b/assets/src/ba_data/python/bastd/ui/coop/browser.py
@@ -103,7 +103,7 @@ class CoopBrowserWindow(ba.Window):
self._x_inset = x_inset = 100 if uiscale is ba.UIScale.SMALL else 0
self._height = (657 if uiscale is ba.UIScale.SMALL else
730 if uiscale is ba.UIScale.MEDIUM else 800)
- app.main_window = 'Coop Select'
+ app.ui.set_main_menu_location('Coop Select')
self._r = 'coopSelectWindow'
top_extra = 20 if uiscale is ba.UIScale.SMALL else 0
@@ -122,7 +122,7 @@ class CoopBrowserWindow(ba.Window):
scale=(1.2 if uiscale is ba.UIScale.SMALL else
0.8 if uiscale is ba.UIScale.MEDIUM else 0.75)))
- if app.toolbars and uiscale is ba.UIScale.SMALL:
+ if app.ui.use_toolbars and uiscale is ba.UIScale.SMALL:
self._back_button = None
else:
self._back_button = ba.buttonwidget(
@@ -140,7 +140,7 @@ class CoopBrowserWindow(ba.Window):
self._store_button_widget: Optional[ba.Widget]
self._league_rank_button_widget: Optional[ba.Widget]
- if not app.toolbars:
+ if not app.ui.use_toolbars:
prb = self._league_rank_button = LeagueRankButton(
parent=self._root_widget,
position=(self._width - (282 + x_inset), self._height - 85 -
@@ -206,12 +206,12 @@ class CoopBrowserWindow(ba.Window):
text=ba.Lstr(resource='playModes.singlePlayerCoopText',
fallback_resource='playModes.coopText'),
h_align='center',
- color=app.title_color,
+ color=app.ui.title_color,
scale=1.5,
maxwidth=500,
v_align='center')
- if app.toolbars and uiscale is ba.UIScale.SMALL:
+ if app.ui.use_toolbars and uiscale is ba.UIScale.SMALL:
ba.textwidget(edit=txt, text='')
if self._back_button is not None:
@@ -232,9 +232,9 @@ class CoopBrowserWindow(ba.Window):
self.a_outline_model = ba.getmodel('achievementOutline')
self._scroll_width = self._width - (130 + 2 * x_inset)
- self._scroll_height = (
- self._height -
- (190 if uiscale is ba.UIScale.SMALL and app.toolbars else 160))
+ self._scroll_height = (self._height -
+ (190 if uiscale is ba.UIScale.SMALL
+ and app.ui.use_toolbars else 160))
self._subcontainerwidth = 800.0
self._subcontainerheight = 1400.0
@@ -242,9 +242,8 @@ class CoopBrowserWindow(ba.Window):
self._scrollwidget = ba.scrollwidget(
parent=self._root_widget,
highlight=False,
- position=(65 + x_inset,
- 120) if uiscale is ba.UIScale.SMALL and app.toolbars else
- (65 + x_inset, 70),
+ position=(65 + x_inset, 120) if uiscale is ba.UIScale.SMALL
+ and app.ui.use_toolbars else (65 + x_inset, 70),
size=(self._scroll_width, self._scroll_height),
simple_culling_v=10.0)
self._subcontainer: Optional[ba.Widget] = None
@@ -815,15 +814,15 @@ class CoopBrowserWindow(ba.Window):
v = self._subcontainerheight - 73
- self._campaign_percent_text = ba.textwidget(parent=w_parent,
- position=(h_base + 27,
- v + 30),
- size=(0, 0),
- text='',
- h_align='left',
- v_align='center',
- color=ba.app.title_color,
- scale=1.1)
+ self._campaign_percent_text = ba.textwidget(
+ parent=w_parent,
+ position=(h_base + 27, v + 30),
+ size=(0, 0),
+ text='',
+ h_align='left',
+ v_align='center',
+ color=ba.app.ui.title_color,
+ scale=1.1)
row_v_show_buffer = 100
v -= 198
@@ -867,7 +866,7 @@ class CoopBrowserWindow(ba.Window):
text=txt,
h_align='left',
v_align='center',
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
scale=1.1)
self._tournament_info_button = ba.buttonwidget(
parent=w_parent,
@@ -901,7 +900,7 @@ class CoopBrowserWindow(ba.Window):
text=unavailable_text,
h_align='left',
v_align='center',
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
scale=0.9)
v -= 40
v -= 198
@@ -947,7 +946,7 @@ class CoopBrowserWindow(ba.Window):
fallback_resource='coopSelectWindow.customText'),
h_align='left',
v_align='center',
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
scale=1.1)
items = [
@@ -1371,9 +1370,9 @@ class CoopBrowserWindow(ba.Window):
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
assert self._league_rank_button is not None
- ba.app.main_menu_window = (LeagueRankWindow(
- origin_widget=self._league_rank_button.get_button()).
- get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ LeagueRankWindow(origin_widget=self._league_rank_button.get_button(
+ )).get_root_widget())
def _switch_to_score(self, show_tab: Optional[str] = 'extras') -> None:
# pylint: disable=cyclic-import
@@ -1385,10 +1384,11 @@ class CoopBrowserWindow(ba.Window):
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
assert self._store_button is not None
- ba.app.main_menu_window = (StoreBrowserWindow(
- origin_widget=self._store_button.get_button(),
- show_tab=show_tab,
- back_location='CoopBrowserWindow').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ StoreBrowserWindow(
+ origin_widget=self._store_button.get_button(),
+ show_tab=show_tab,
+ back_location='CoopBrowserWindow').get_root_widget())
def _show_leader(self, tournament_button: Dict[str, Any]) -> None:
# pylint: disable=cyclic-import
@@ -1551,13 +1551,13 @@ class CoopBrowserWindow(ba.Window):
self._save_state()
ba.containerwidget(edit=self._root_widget,
transition=self._transition_out)
- ba.app.main_menu_window = (PlayWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ PlayWindow(transition='in_left').get_root_widget())
def _restore_state(self) -> None:
try:
- sel_name = ba.app.window_states.get(self.__class__.__name__,
- {}).get('sel_name')
+ sel_name = ba.app.ui.window_states.get(self.__class__.__name__,
+ {}).get('sel_name')
if sel_name == 'Back':
sel = self._back_button
elif sel_name == 'Scroll':
@@ -1586,7 +1586,7 @@ class CoopBrowserWindow(ba.Window):
sel_name = 'Scroll'
else:
raise ValueError('unrecognized selection')
- ba.app.window_states[self.__class__.__name__] = {
+ ba.app.ui.window_states[self.__class__.__name__] = {
'sel_name': sel_name
}
except Exception:
diff --git a/assets/src/ba_data/python/bastd/ui/coop/level.py b/assets/src/ba_data/python/bastd/ui/coop/level.py
index 113ca6fc..85271139 100644
--- a/assets/src/ba_data/python/bastd/ui/coop/level.py
+++ b/assets/src/ba_data/python/bastd/ui/coop/level.py
@@ -56,7 +56,7 @@ class CoopLevelLockedWindow(ba.Window):
text=ba.Lstr(resource='levelMustBeCompletedFirstText',
subs=[('${LEVEL}', dep_name)]),
maxwidth=400,
- color=ba.app.infotextcolor,
+ color=ba.app.ui.infotextcolor,
scale=0.8)
ba.imagewidget(parent=self._root_widget,
position=(56 - 20, height * 0.39),
diff --git a/assets/src/ba_data/python/bastd/ui/creditslist.py b/assets/src/ba_data/python/bastd/ui/creditslist.py
index 154337c1..f2241f8a 100644
--- a/assets/src/ba_data/python/bastd/ui/creditslist.py
+++ b/assets/src/ba_data/python/bastd/ui/creditslist.py
@@ -66,7 +66,7 @@ class CreditsListWindow(ba.Window):
1.3 if uiscale is ba.UIScale.MEDIUM else 1.0),
stack_offset=(0, -8) if uiscale is ba.UIScale.SMALL else (0, 0)))
- if ba.app.toolbars and uiscale is ba.UIScale.SMALL:
+ if ba.app.ui.use_toolbars and uiscale is ba.UIScale.SMALL:
ba.containerwidget(edit=self._root_widget,
on_cancel_call=self._back)
else:
@@ -98,7 +98,7 @@ class CreditsListWindow(ba.Window):
subs=[('${APP_NAME}',
ba.Lstr(resource='titleText'))]),
h_align='center',
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
maxwidth=330,
v_align='center')
@@ -108,7 +108,7 @@ class CreditsListWindow(ba.Window):
height - 100),
capture_arrows=True)
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=scroll,
right_widget=_ba.get_special_widget('party_button'))
if uiscale is ba.UIScale.SMALL:
@@ -280,8 +280,8 @@ class CreditsListWindow(ba.Window):
voffs -= line_height
def _back(self) -> None:
- from bastd.ui import mainmenu
+ from bastd.ui.mainmenu import MainMenuWindow
ba.containerwidget(edit=self._root_widget,
transition=self._transition_out)
- ba.app.main_menu_window = mainmenu.MainMenuWindow(
- transition='in_left').get_root_widget()
+ ba.app.ui.set_main_menu_window(
+ MainMenuWindow(transition='in_left').get_root_widget())
diff --git a/assets/src/ba_data/python/bastd/ui/debug.py b/assets/src/ba_data/python/bastd/ui/debug.py
index 41c864e6..8470d1df 100644
--- a/assets/src/ba_data/python/bastd/ui/debug.py
+++ b/assets/src/ba_data/python/bastd/ui/debug.py
@@ -77,7 +77,7 @@ class DebugWindow(ba.Window):
size=(width, 30),
text=ba.Lstr(resource=self._r + '.titleText'),
h_align='center',
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
v_align='center',
maxwidth=260)
@@ -130,7 +130,7 @@ class DebugWindow(ba.Window):
size=(0, 0),
text=ba.Lstr(resource=self._r + '.stressTestTitleText'),
maxwidth=200,
- color=ba.app.heading_color,
+ color=ba.app.ui.heading_color,
scale=0.85,
h_align='center',
v_align='center')
@@ -143,7 +143,7 @@ class DebugWindow(ba.Window):
text=ba.Lstr(resource=self._r +
'.stressTestPlaylistTypeText'),
maxwidth=130,
- color=ba.app.heading_color,
+ color=ba.app.ui.heading_color,
scale=0.65,
h_align='right',
v_align='center')
@@ -169,7 +169,7 @@ class DebugWindow(ba.Window):
text=ba.Lstr(resource=self._r +
'.stressTestPlaylistNameText'),
maxwidth=130,
- color=ba.app.heading_color,
+ color=ba.app.ui.heading_color,
scale=0.65,
h_align='right',
v_align='center')
@@ -333,5 +333,5 @@ class DebugWindow(ba.Window):
# pylint: disable=cyclic-import
from bastd.ui.settings.advanced import AdvancedSettingsWindow
ba.containerwidget(edit=self._root_widget, transition='out_right')
- ba.app.main_menu_window = (AdvancedSettingsWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ AdvancedSettingsWindow(transition='in_left').get_root_widget())
diff --git a/assets/src/ba_data/python/bastd/ui/feedback.py b/assets/src/ba_data/python/bastd/ui/feedback.py
index d10d9f57..5f5fb37b 100644
--- a/assets/src/ba_data/python/bastd/ui/feedback.py
+++ b/assets/src/ba_data/python/bastd/ui/feedback.py
@@ -57,7 +57,7 @@ def ask_for_rating() -> Optional[ba.Widget]:
ba.textwidget(parent=dlg,
position=(15, v - 55),
size=(width - 30, 30),
- color=ba.app.infotextcolor,
+ color=ba.app.ui.infotextcolor,
text=ba.Lstr(resource='pleaseRateText',
subs=[('${APP_NAME}',
ba.Lstr(resource='titleText'))]),
diff --git a/assets/src/ba_data/python/bastd/ui/fileselector.py b/assets/src/ba_data/python/bastd/ui/fileselector.py
index a65905a0..cc5badc3 100644
--- a/assets/src/ba_data/python/bastd/ui/fileselector.py
+++ b/assets/src/ba_data/python/bastd/ui/fileselector.py
@@ -73,7 +73,7 @@ class FileSelectorWindow(ba.Window):
parent=self._root_widget,
position=(self._width * 0.5, self._height - 42),
size=(0, 0),
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
h_align='center',
v_align='center',
text=ba.Lstr(resource=self._r + '.titleFolderText') if
@@ -121,7 +121,7 @@ class FileSelectorWindow(ba.Window):
position=(self._folder_center,
self._height - 98),
size=(0, 0),
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
h_align='center',
v_align='center',
text=self._path,
diff --git a/assets/src/ba_data/python/bastd/ui/gather.py b/assets/src/ba_data/python/bastd/ui/gather.py
index e4d3185f..9f0bf8dd 100644
--- a/assets/src/ba_data/python/bastd/ui/gather.py
+++ b/assets/src/ba_data/python/bastd/ui/gather.py
@@ -55,7 +55,7 @@ class GatherWindow(ba.Window):
else:
self._transition_out = 'out_right'
scale_origin = None
- ba.app.main_window = 'Gather'
+ ba.app.ui.set_main_menu_location('Gather')
_ba.set_party_icon_always_visible(True)
self._public_parties: Dict[str, Dict[str, Any]] = {}
uiscale = ba.app.uiscale
@@ -114,7 +114,7 @@ class GatherWindow(ba.Window):
stack_offset=(0, -11) if uiscale is ba.UIScale.SMALL else (
0, 0) if uiscale is ba.UIScale.MEDIUM else (0, 0)))
- if uiscale is ba.UIScale.SMALL and ba.app.toolbars:
+ if uiscale is ba.UIScale.SMALL and ba.app.ui.use_toolbars:
ba.containerwidget(edit=self._root_widget,
on_cancel_call=self._back)
self._back_button = None
@@ -138,7 +138,7 @@ class GatherWindow(ba.Window):
ba.textwidget(parent=self._root_widget,
position=(self._width * 0.5, self._height - 42),
size=(0, 0),
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
scale=1.5,
h_align='center',
v_align='center',
@@ -172,7 +172,7 @@ class GatherWindow(ba.Window):
size=(self._width - tab_buffer_h, 50),
on_select_call=self._set_tab)
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=self._tab_buttons[tabs_def[-1][0]],
right_widget=_ba.get_special_widget('party_button'))
if uiscale is ba.UIScale.SMALL:
@@ -1147,7 +1147,7 @@ class GatherWindow(ba.Window):
v_align='center',
maxwidth=200,
scale=0.8,
- color=ba.app.infotextcolor,
+ color=ba.app.ui.infotextcolor,
position=(210, v - 9),
text=party_name_text)
self._internet_host_name_text = ba.textwidget(
@@ -1172,7 +1172,7 @@ class GatherWindow(ba.Window):
v_align='center',
maxwidth=200,
scale=0.8,
- color=ba.app.infotextcolor,
+ color=ba.app.ui.infotextcolor,
position=(210, v - 9),
text=ba.Lstr(resource='maxPartySizeText',
fallback_resource='maxConnectionsText'))
@@ -1251,7 +1251,7 @@ class GatherWindow(ba.Window):
h_align='center',
v_align='center',
maxwidth=c_width * 0.9,
- color=ba.app.infotextcolor,
+ color=ba.app.ui.infotextcolor,
position=(c_width * 0.5, v))
# If public sharing is already on,
@@ -1561,7 +1561,7 @@ class GatherWindow(ba.Window):
# Special case: if a party-queue window is up, don't do any of this
# (keeps things smoother).
- if ba.app.have_party_queue_window:
+ if ba.app.ui.have_party_queue_window:
return
# If we've got a party-name text widget, keep its value plugged
@@ -1922,7 +1922,7 @@ class GatherWindow(ba.Window):
sel_name = 'TabContainer'
else:
raise ValueError(f'unrecognized selection: \'{sel}\'')
- ba.app.window_states[self.__class__.__name__] = {
+ ba.app.ui.window_states[self.__class__.__name__] = {
'sel_name': sel_name,
'tab': self._current_tab,
'internet_tab': self._internet_tab
@@ -1932,7 +1932,7 @@ class GatherWindow(ba.Window):
def _restore_state(self) -> None:
try:
- winstate = ba.app.window_states.get(self.__class__.__name__, {})
+ winstate = ba.app.ui.window_states.get(self.__class__.__name__, {})
sel_name = winstate.get('sel_name', None)
self._internet_tab = winstate.get('internet_tab', 'join')
current_tab = ba.app.config.get('Gather Tab', None)
@@ -1952,9 +1952,9 @@ class GatherWindow(ba.Window):
ba.print_exception(f'Error restoring state for {self}.')
def _back(self) -> None:
- from bastd.ui import mainmenu
+ from bastd.ui.mainmenu import MainMenuWindow
self._save_state()
ba.containerwidget(edit=self._root_widget,
transition=self._transition_out)
- ba.app.main_menu_window = (mainmenu.MainMenuWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ MainMenuWindow(transition='in_left').get_root_widget())
diff --git a/assets/src/ba_data/python/bastd/ui/getcurrency.py b/assets/src/ba_data/python/bastd/ui/getcurrency.py
index bfa0a96e..b3524168 100644
--- a/assets/src/ba_data/python/bastd/ui/getcurrency.py
+++ b/assets/src/ba_data/python/bastd/ui/getcurrency.py
@@ -100,7 +100,7 @@ class GetCurrencyWindow(ba.Window):
ba.textwidget(parent=self._root_widget,
position=(self._width * 0.5, self._height - 55),
size=(0, 0),
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
scale=1.2,
h_align='center',
v_align='center',
@@ -602,7 +602,7 @@ class GetCurrencyWindow(ba.Window):
modal=self._from_modal_store,
back_location=self._store_back_location).get_root_widget()
if not self._from_modal_store:
- ba.app.main_menu_window = window
+ ba.app.ui.set_main_menu_window(window)
self._transitioning_out = True
diff --git a/assets/src/ba_data/python/bastd/ui/helpui.py b/assets/src/ba_data/python/bastd/ui/helpui.py
index 0d36502c..e0a49083 100644
--- a/assets/src/ba_data/python/bastd/ui/helpui.py
+++ b/assets/src/ba_data/python/bastd/ui/helpui.py
@@ -80,7 +80,7 @@ class HelpWindow(ba.Window):
text=ba.Lstr(resource=self._r + '.titleText',
subs=[('${APP_NAME}',
ba.Lstr(resource='titleText'))]),
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
h_align='center',
v_align='top')
@@ -92,7 +92,7 @@ class HelpWindow(ba.Window):
height - 120 + (5 if uiscale is ba.UIScale.SMALL else 0)),
capture_arrows=True)
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=self._scrollwidget,
right_widget=_ba.get_special_widget('party_button'))
ba.containerwidget(edit=self._root_widget,
@@ -100,7 +100,7 @@ class HelpWindow(ba.Window):
# ugly: create this last so it gets first dibs at touch events (since
# we have it close to the scroll widget)
- if uiscale is ba.UIScale.SMALL and ba.app.toolbars:
+ if uiscale is ba.UIScale.SMALL and ba.app.ui.use_toolbars:
ba.containerwidget(edit=self._root_widget,
on_cancel_call=self._close)
ba.widget(edit=self._scrollwidget,
@@ -600,9 +600,9 @@ class HelpWindow(ba.Window):
def _close(self) -> None:
# pylint: disable=cyclic-import
- from bastd.ui import mainmenu
+ from bastd.ui.mainmenu import MainMenuWindow
ba.containerwidget(edit=self._root_widget,
transition=self._transition_out)
if self._main_menu:
- ba.app.main_menu_window = (mainmenu.MainMenuWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ MainMenuWindow(transition='in_left').get_root_widget())
diff --git a/assets/src/ba_data/python/bastd/ui/kiosk.py b/assets/src/ba_data/python/bastd/ui/kiosk.py
index 353867f5..a0a95ddb 100644
--- a/assets/src/ba_data/python/bastd/ui/kiosk.py
+++ b/assets/src/ba_data/python/bastd/ui/kiosk.py
@@ -337,7 +337,7 @@ class KioskWindow(ba.Window):
repeat=True)
def _restore_state(self) -> None:
- sel_name = ba.app.window_states.get(self.__class__.__name__)
+ sel_name = ba.app.ui.window_states.get(self.__class__.__name__)
sel: Optional[ba.Widget]
if sel_name == 'b1':
sel = self._b1
@@ -376,7 +376,7 @@ class KioskWindow(ba.Window):
sel_name = 'b7'
else:
sel_name = 'b1'
- ba.app.window_states[self.__class__.__name__] = sel_name
+ ba.app.ui.window_states[self.__class__.__name__] = sel_name
def _update(self) -> None:
# Kiosk-mode is designed to be used signed-out... try for force
@@ -466,4 +466,4 @@ class KioskWindow(ba.Window):
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
ba.app.did_menu_intro = True # prevent delayed transition-in
- ba.app.main_menu_window = (MainMenuWindow().get_root_widget())
+ ba.app.ui.set_main_menu_window(MainMenuWindow().get_root_widget())
diff --git a/assets/src/ba_data/python/bastd/ui/league/rankbutton.py b/assets/src/ba_data/python/bastd/ui/league/rankbutton.py
index 54868a5d..9d48c8eb 100644
--- a/assets/src/ba_data/python/bastd/ui/league/rankbutton.py
+++ b/assets/src/ba_data/python/bastd/ui/league/rankbutton.py
@@ -340,7 +340,7 @@ class LeagueRankButton:
txt = ba.Lstr(
resource='league.leagueRankText',
fallback_resource='coopSelectWindow.powerRankingText')
- t_color = ba.app.title_color
+ t_color = ba.app.ui.title_color
ba.textwidget(edit=self._title_text, text=txt, color=t_color)
ba.textwidget(edit=self._value_text, text=status_text)
diff --git a/assets/src/ba_data/python/bastd/ui/league/rankwindow.py b/assets/src/ba_data/python/bastd/ui/league/rankwindow.py
index e4844ee2..6bfc30b0 100644
--- a/assets/src/ba_data/python/bastd/ui/league/rankwindow.py
+++ b/assets/src/ba_data/python/bastd/ui/league/rankwindow.py
@@ -100,7 +100,7 @@ class LeagueRankWindow(ba.Window):
resource='league.leagueRankText',
fallback_resource='coopSelectWindow.powerRankingText'),
h_align='center',
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
scale=1.4,
maxwidth=600,
v_align='center')
@@ -931,10 +931,10 @@ class LeagueRankWindow(ba.Window):
pass
def _back(self) -> None:
- from bastd.ui.coop import browser
+ from bastd.ui.coop.browser import CoopBrowserWindow
self._save_state()
ba.containerwidget(edit=self._root_widget,
transition=self._transition_out)
if not self._modal:
- ba.app.main_menu_window = (browser.CoopBrowserWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ CoopBrowserWindow(transition='in_left').get_root_widget())
diff --git a/assets/src/ba_data/python/bastd/ui/mainmenu.py b/assets/src/ba_data/python/bastd/ui/mainmenu.py
index 3354bf3d..f46c4b1f 100644
--- a/assets/src/ba_data/python/bastd/ui/mainmenu.py
+++ b/assets/src/ba_data/python/bastd/ui/mainmenu.py
@@ -840,16 +840,17 @@ class MainMenuWindow(ba.Window):
from bastd.ui.kiosk import KioskWindow
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_right')
- ba.app.main_menu_window = (KioskWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ KioskWindow(transition='in_left').get_root_widget())
def _show_account_window(self) -> None:
# pylint: disable=cyclic-import
from bastd.ui.account.settings import AccountSettingsWindow
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (AccountSettingsWindow(
- origin_widget=self._gc_button).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ AccountSettingsWindow(
+ origin_widget=self._gc_button).get_root_widget())
def _on_store_pressed(self) -> None:
# pylint: disable=cyclic-import
@@ -860,8 +861,9 @@ class MainMenuWindow(ba.Window):
return
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (StoreBrowserWindow(
- origin_widget=self._store_button).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ StoreBrowserWindow(
+ origin_widget=self._store_button).get_root_widget())
def _confirm_end_game(self) -> None:
# pylint: disable=cyclic-import
@@ -916,25 +918,28 @@ class MainMenuWindow(ba.Window):
from bastd.ui.creditslist import CreditsListWindow
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (CreditsListWindow(
- origin_widget=self._credits_button).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ CreditsListWindow(
+ origin_widget=self._credits_button).get_root_widget())
def _howtoplay(self) -> None:
# pylint: disable=cyclic-import
from bastd.ui.helpui import HelpWindow
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (HelpWindow(
- main_menu=True,
- origin_widget=self._how_to_play_button).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ HelpWindow(
+ main_menu=True,
+ origin_widget=self._how_to_play_button).get_root_widget())
def _settings(self) -> None:
# pylint: disable=cyclic-import
from bastd.ui.settings.allsettings import AllSettingsWindow
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (AllSettingsWindow(
- origin_widget=self._settings_button).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ AllSettingsWindow(
+ origin_widget=self._settings_button).get_root_widget())
def _resume_and_call(self, call: Callable[[], Any]) -> None:
self._resume()
@@ -951,28 +956,28 @@ class MainMenuWindow(ba.Window):
return
sel = self._root_widget.get_selected_child()
if sel == self._start_button:
- ba.app.main_menu_selection = 'Start'
+ ba.app.ui.main_menu_selection = 'Start'
elif sel == self._gather_button:
- ba.app.main_menu_selection = 'Gather'
+ ba.app.ui.main_menu_selection = 'Gather'
elif sel == self._watch_button:
- ba.app.main_menu_selection = 'Watch'
+ ba.app.ui.main_menu_selection = 'Watch'
elif sel == self._how_to_play_button:
- ba.app.main_menu_selection = 'HowToPlay'
+ ba.app.ui.main_menu_selection = 'HowToPlay'
elif sel == self._credits_button:
- ba.app.main_menu_selection = 'Credits'
+ ba.app.ui.main_menu_selection = 'Credits'
elif sel == self._settings_button:
- ba.app.main_menu_selection = 'Settings'
+ ba.app.ui.main_menu_selection = 'Settings'
elif sel == self._gc_button:
- ba.app.main_menu_selection = 'GameService'
+ ba.app.ui.main_menu_selection = 'GameService'
elif sel == self._store_button:
- ba.app.main_menu_selection = 'Store'
+ ba.app.ui.main_menu_selection = 'Store'
elif sel == self._quit_button:
- ba.app.main_menu_selection = 'Quit'
+ ba.app.ui.main_menu_selection = 'Quit'
elif sel == self._demo_menu_button:
- ba.app.main_menu_selection = 'DemoMenu'
+ ba.app.ui.main_menu_selection = 'DemoMenu'
else:
print('unknown widget in main menu store selection:', sel)
- ba.app.main_menu_selection = 'Start'
+ ba.app.ui.main_menu_selection = 'Start'
def _restore_state(self) -> None:
# pylint: disable=too-many-branches
@@ -980,7 +985,7 @@ class MainMenuWindow(ba.Window):
# Don't do this for the in-game menu.
if self._in_game:
return
- sel_name = ba.app.main_menu_selection
+ sel_name = ba.app.ui.main_menu_selection
sel: Optional[ba.Widget]
if sel_name is None:
sel_name = 'Start'
@@ -1012,30 +1017,30 @@ class MainMenuWindow(ba.Window):
from bastd.ui.gather import GatherWindow
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (GatherWindow(
- origin_widget=self._gather_button).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ GatherWindow(origin_widget=self._gather_button).get_root_widget())
def _watch_press(self) -> None:
# pylint: disable=cyclic-import
from bastd.ui.watch import WatchWindow
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (WatchWindow(
- origin_widget=self._watch_button).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ WatchWindow(origin_widget=self._watch_button).get_root_widget())
def _play_press(self) -> None:
# pylint: disable=cyclic-import
from bastd.ui.play import PlayWindow
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (PlayWindow(
- origin_widget=self._start_button).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ PlayWindow(origin_widget=self._start_button).get_root_widget())
def _resume(self) -> None:
ba.app.resume()
if self._root_widget:
ba.containerwidget(edit=self._root_widget, transition='out_right')
- ba.app.main_menu_window = None
+ ba.app.ui.clear_main_menu_window()
# If there's callbacks waiting for this window to go away, call them.
for call in ba.app.main_menu_resume_callbacks:
diff --git a/assets/src/ba_data/python/bastd/ui/onscreenkeyboard.py b/assets/src/ba_data/python/bastd/ui/onscreenkeyboard.py
index 4e7cee12..d32a9ae5 100644
--- a/assets/src/ba_data/python/bastd/ui/onscreenkeyboard.py
+++ b/assets/src/ba_data/python/bastd/ui/onscreenkeyboard.py
@@ -67,7 +67,7 @@ class OnScreenKeyboardWindow(ba.Window):
scale=0.95,
text=label,
maxwidth=self._width - 140,
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
h_align='center',
v_align='center')
diff --git a/assets/src/ba_data/python/bastd/ui/partyqueue.py b/assets/src/ba_data/python/bastd/ui/partyqueue.py
index a6d05cc5..0a1e8dc6 100644
--- a/assets/src/ba_data/python/bastd/ui/partyqueue.py
+++ b/assets/src/ba_data/python/bastd/ui/partyqueue.py
@@ -187,7 +187,7 @@ class PartyQueueWindow(ba.Window):
self._boost_brightness += 0.6
def __init__(self, queue_id: str, address: str, port: int):
- ba.app.have_party_queue_window = True
+ ba.app.ui.have_party_queue_window = True
self._address = address
self._port = port
self._queue_id = queue_id
@@ -274,7 +274,7 @@ class PartyQueueWindow(ba.Window):
def __del__(self) -> None:
try:
- ba.app.have_party_queue_window = False
+ ba.app.ui.have_party_queue_window = False
_ba.add_transaction({
'type': 'PARTY_QUEUE_REMOVE',
'q': self._queue_id
diff --git a/assets/src/ba_data/python/bastd/ui/play.py b/assets/src/ba_data/python/bastd/ui/play.py
index e1c84b25..356e67a4 100644
--- a/assets/src/ba_data/python/bastd/ui/play.py
+++ b/assets/src/ba_data/python/bastd/ui/play.py
@@ -92,7 +92,7 @@ class PlayWindow(ba.Window):
scale=1.7,
res_scale=2.0,
maxwidth=400,
- color=ba.app.heading_color,
+ color=ba.app.ui.heading_color,
h_align='center',
v_align='center')
@@ -100,14 +100,15 @@ class PlayWindow(ba.Window):
button_type='backSmall',
size=(60, 60),
label=ba.charstr(ba.SpecialChar.BACK))
- if ba.app.toolbars and uiscale is ba.UIScale.SMALL:
+ if ba.app.ui.use_toolbars and uiscale is ba.UIScale.SMALL:
ba.textwidget(edit=txt, text='')
v = height - (110 if new_style else 60)
v -= 100
clr = (0.6, 0.7, 0.6, 1.0)
v -= 280 if new_style else 180
- v += 30 if ba.app.toolbars and uiscale is ba.UIScale.SMALL else 0
+ v += (30
+ if ba.app.ui.use_toolbars and uiscale is ba.UIScale.SMALL else 0)
hoffs = x_offs + 80 if new_style else 0
scl = 1.13 if new_style else 0.68
@@ -135,7 +136,7 @@ class PlayWindow(ba.Window):
text_scale=1.13,
on_activate_call=self._coop)
- if ba.app.toolbars and uiscale is ba.UIScale.SMALL:
+ if ba.app.ui.use_toolbars and uiscale is ba.UIScale.SMALL:
ba.widget(edit=btn,
left_widget=_ba.get_special_widget('back_button'))
ba.widget(edit=btn,
@@ -218,7 +219,7 @@ class PlayWindow(ba.Window):
text_scale=1.13,
on_activate_call=self._team_tourney)
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=btn,
up_widget=_ba.get_special_widget('tickets_plus_button'),
right_widget=_ba.get_special_widget('party_button'))
@@ -404,7 +405,7 @@ class PlayWindow(ba.Window):
maxwidth=scl * button_width * 0.7,
color=clr)
- if ba.app.toolbars and uiscale is ba.UIScale.SMALL:
+ if ba.app.ui.use_toolbars and uiscale is ba.UIScale.SMALL:
back_button.delete()
ba.containerwidget(edit=self._root_widget,
on_cancel_call=self._back,
@@ -429,8 +430,8 @@ class PlayWindow(ba.Window):
# pylint: disable=cyclic-import
from bastd.ui.mainmenu import MainMenuWindow
self._save_state()
- ba.app.main_menu_window = (MainMenuWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ MainMenuWindow(transition='in_left').get_root_widget())
ba.containerwidget(edit=self._root_widget,
transition=self._transition_out)
@@ -443,26 +444,29 @@ class PlayWindow(ba.Window):
return
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (CoopBrowserWindow(
- origin_widget=self._coop_button).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ CoopBrowserWindow(
+ origin_widget=self._coop_button).get_root_widget())
def _team_tourney(self) -> None:
# pylint: disable=cyclic-import
from bastd.ui.playlist.browser import PlaylistBrowserWindow
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (PlaylistBrowserWindow(
- origin_widget=self._teams_button,
- sessiontype=ba.DualTeamSession).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ PlaylistBrowserWindow(
+ origin_widget=self._teams_button,
+ sessiontype=ba.DualTeamSession).get_root_widget())
def _free_for_all(self) -> None:
# pylint: disable=cyclic-import
from bastd.ui.playlist.browser import PlaylistBrowserWindow
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (PlaylistBrowserWindow(
- origin_widget=self._free_for_all_button,
- sessiontype=ba.FreeForAllSession).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ PlaylistBrowserWindow(
+ origin_widget=self._free_for_all_button,
+ sessiontype=ba.FreeForAllSession).get_root_widget())
def _draw_dude(self, i: int, btn: ba.Widget, hoffs: float, v: float,
scl: float, position: Tuple[float, float],
@@ -554,13 +558,13 @@ class PlayWindow(ba.Window):
sel_name = 'Back'
else:
raise ValueError(f'unrecognized selection {sel}')
- ba.app.window_states[self.__class__.__name__] = sel_name
+ ba.app.ui.window_states[self.__class__.__name__] = sel_name
except Exception:
ba.print_exception(f'Error saving state for {self}.')
def _restore_state(self) -> None:
try:
- sel_name = ba.app.window_states.get(self.__class__.__name__)
+ sel_name = ba.app.ui.window_states.get(self.__class__.__name__)
if sel_name == 'Team Games':
sel = self._teams_button
elif sel_name == 'Co-op Games':
diff --git a/assets/src/ba_data/python/bastd/ui/playlist/addgame.py b/assets/src/ba_data/python/bastd/ui/playlist/addgame.py
index 12e12cc0..b1bc9990 100644
--- a/assets/src/ba_data/python/bastd/ui/playlist/addgame.py
+++ b/assets/src/ba_data/python/bastd/ui/playlist/addgame.py
@@ -75,7 +75,7 @@ class PlaylistAddGameWindow(ba.Window):
label=ba.Lstr(resource='selectText'),
on_activate_call=self._add)
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=select_button,
right_widget=_ba.get_special_widget('party_button'))
@@ -85,7 +85,7 @@ class PlaylistAddGameWindow(ba.Window):
scale=1.0,
text=ba.Lstr(resource=self._r + '.titleText'),
h_align='center',
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
maxwidth=250,
v_align='center')
v = self._height - 64
diff --git a/assets/src/ba_data/python/bastd/ui/playlist/browser.py b/assets/src/ba_data/python/bastd/ui/playlist/browser.py
index 01961c70..abaf4ed1 100644
--- a/assets/src/ba_data/python/bastd/ui/playlist/browser.py
+++ b/assets/src/ba_data/python/bastd/ui/playlist/browser.py
@@ -56,10 +56,10 @@ class PlaylistBrowserWindow(ba.Window):
# Store state for when we exit the next game.
if issubclass(sessiontype, ba.DualTeamSession):
- ba.app.main_window = 'Team Game Select'
+ ba.app.ui.set_main_menu_location('Team Game Select')
ba.set_analytics_screen('Teams Window')
elif issubclass(sessiontype, ba.FreeForAllSession):
- ba.app.main_window = 'Free-for-All Game Select'
+ ba.app.ui.set_main_menu_location('Free-for-All Game Select')
ba.set_analytics_screen('FreeForAll Window')
else:
raise TypeError(f'Invalid sessiontype: {sessiontype}.')
@@ -253,10 +253,10 @@ class PlaylistBrowserWindow(ba.Window):
text=self._pvars.window_title_name,
scale=1.3,
res_scale=1.5,
- color=ba.app.heading_color,
+ color=ba.app.ui.heading_color,
h_align='center',
v_align='center')
- if uiscale is ba.UIScale.SMALL and ba.app.toolbars:
+ if uiscale is ba.UIScale.SMALL and ba.app.ui.use_toolbars:
ba.textwidget(edit=txt, text='')
ba.buttonwidget(edit=self._back_button,
@@ -265,7 +265,7 @@ class PlaylistBrowserWindow(ba.Window):
position=(59 + x_inset, self._height - 67),
label=ba.charstr(ba.SpecialChar.BACK))
- if uiscale is ba.UIScale.SMALL and ba.app.toolbars:
+ if uiscale is ba.UIScale.SMALL and ba.app.ui.use_toolbars:
self._back_button.delete()
self._back_button = None
ba.containerwidget(edit=self._root_widget,
@@ -274,8 +274,9 @@ class PlaylistBrowserWindow(ba.Window):
else:
scroll_offs = 0
self._scroll_width = self._width - (100 + 2 * x_inset)
- self._scroll_height = self._height - (
- 146 if uiscale is ba.UIScale.SMALL and ba.app.toolbars else 136)
+ self._scroll_height = (self._height -
+ (146 if uiscale is ba.UIScale.SMALL
+ and ba.app.ui.use_toolbars else 136))
self._scrollwidget = ba.scrollwidget(
parent=self._root_widget,
highlight=False,
@@ -351,7 +352,7 @@ class PlaylistBrowserWindow(ba.Window):
size=(0, 0),
scale=1.0,
maxwidth=400,
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
h_align='left',
v_align='center')
@@ -380,11 +381,12 @@ class PlaylistBrowserWindow(ba.Window):
label='',
position=pos)
- if x == 0 and ba.app.toolbars and uiscale is ba.UIScale.SMALL:
+ if (x == 0 and ba.app.ui.use_toolbars
+ and uiscale is ba.UIScale.SMALL):
ba.widget(
edit=btn,
left_widget=_ba.get_special_widget('back_button'))
- if (x == columns - 1 and ba.app.toolbars
+ if (x == columns - 1 and ba.app.ui.use_toolbars
and uiscale is ba.UIScale.SMALL):
ba.widget(
edit=btn,
@@ -604,9 +606,10 @@ class PlaylistBrowserWindow(ba.Window):
PlaylistCustomizeBrowserWindow)
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (PlaylistCustomizeBrowserWindow(
- origin_widget=self._customize_button,
- sessiontype=self._sessiontype).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ PlaylistCustomizeBrowserWindow(
+ origin_widget=self._customize_button,
+ sessiontype=self._sessiontype).get_root_widget())
def _on_back_press(self) -> None:
# pylint: disable=cyclic-import
@@ -625,8 +628,8 @@ class PlaylistBrowserWindow(ba.Window):
self._save_state()
ba.containerwidget(edit=self._root_widget,
transition=self._transition_out)
- ba.app.main_menu_window = (PlayWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ PlayWindow(transition='in_left').get_root_widget())
def _save_state(self) -> None:
try:
@@ -642,13 +645,13 @@ class PlaylistBrowserWindow(ba.Window):
sel_name = 'Scroll'
else:
raise Exception('unrecognized selected widget')
- ba.app.window_states[self.__class__.__name__] = sel_name
+ ba.app.ui.window_states[self.__class__.__name__] = sel_name
except Exception:
ba.print_exception(f'Error saving state for {self}.')
def _restore_state(self) -> None:
try:
- sel_name = ba.app.window_states.get(self.__class__.__name__)
+ sel_name = ba.app.ui.window_states.get(self.__class__.__name__)
if sel_name == 'Back':
sel = self._back_button
elif sel_name == 'Scroll':
diff --git a/assets/src/ba_data/python/bastd/ui/playlist/customizebrowser.py b/assets/src/ba_data/python/bastd/ui/playlist/customizebrowser.py
index e72482f5..e0bbb9a7 100644
--- a/assets/src/ba_data/python/bastd/ui/playlist/customizebrowser.py
+++ b/assets/src/ba_data/python/bastd/ui/playlist/customizebrowser.py
@@ -90,7 +90,7 @@ class PlaylistCustomizeBrowserWindow(ba.Window):
text=ba.Lstr(resource=self._r + '.titleText',
subs=[('${TYPE}',
self._pvars.window_title_name)]),
- color=ba.app.heading_color,
+ color=ba.app.ui.heading_color,
maxwidth=290,
h_align='center',
v_align='center')
@@ -242,7 +242,7 @@ class PlaylistCustomizeBrowserWindow(ba.Window):
ba.widget(edit=scrollwidget,
left_widget=new_button,
right_widget=_ba.get_special_widget('party_button')
- if ba.app.toolbars else None)
+ if ba.app.ui.use_toolbars else None)
# make sure config exists
self._config_name_full = self._pvars.config_name + ' Playlists'
@@ -285,9 +285,10 @@ class PlaylistCustomizeBrowserWindow(ba.Window):
ba.containerwidget(edit=self._root_widget,
transition=self._transition_out)
- ba.app.main_menu_window = (browser.PlaylistBrowserWindow(
- transition='in_left',
- sessiontype=self._sessiontype).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ browser.PlaylistBrowserWindow(
+ transition='in_left',
+ sessiontype=self._sessiontype).get_root_widget())
def _select(self, name: str, index: int) -> None:
self._selected_playlist_name = name
diff --git a/assets/src/ba_data/python/bastd/ui/playlist/edit.py b/assets/src/ba_data/python/bastd/ui/playlist/edit.py
index 610e8bc7..f4569fd2 100644
--- a/assets/src/ba_data/python/bastd/ui/playlist/edit.py
+++ b/assets/src/ba_data/python/bastd/ui/playlist/edit.py
@@ -76,7 +76,7 @@ class PlaylistEditWindow(ba.Window):
label=ba.Lstr(resource='saveText'),
text_scale=1.2)
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=btn,
right_widget=_ba.get_special_widget('party_button'))
@@ -88,7 +88,7 @@ class PlaylistEditWindow(ba.Window):
position=(-10, self._height - 50),
size=(self._width, 25),
text=ba.Lstr(resource=self._r + '.titleText'),
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
scale=1.05,
h_align='center',
v_align='center',
@@ -246,14 +246,16 @@ class PlaylistEditWindow(ba.Window):
self._editcontroller.set_edit_ui_selection(selection)
def _cancel(self) -> None:
- from bastd.ui.playlist import customizebrowser as cb
+ from bastd.ui.playlist.customizebrowser import (
+ PlaylistCustomizeBrowserWindow)
ba.playsound(ba.getsound('powerdown01'))
ba.containerwidget(edit=self._root_widget, transition='out_right')
- ba.app.main_menu_window = (cb.PlaylistCustomizeBrowserWindow(
- transition='in_left',
- sessiontype=self._editcontroller.get_session_type(),
- select_playlist=self._editcontroller.get_existing_playlist_name()).
- get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ PlaylistCustomizeBrowserWindow(
+ transition='in_left',
+ sessiontype=self._editcontroller.get_session_type(),
+ select_playlist=self._editcontroller.
+ get_existing_playlist_name()).get_root_widget())
def _add(self) -> None:
# Store list name then tell the session to perform an add.
@@ -268,7 +270,8 @@ class PlaylistEditWindow(ba.Window):
self._editcontroller.edit_game_pressed()
def _save_press(self) -> None:
- from bastd.ui.playlist import customizebrowser as cb
+ from bastd.ui.playlist.customizebrowser import (
+ PlaylistCustomizeBrowserWindow)
new_name = cast(str, ba.textwidget(query=self._text_field))
if (new_name != self._editcontroller.get_existing_playlist_name()
and new_name
@@ -316,10 +319,11 @@ class PlaylistEditWindow(ba.Window):
ba.containerwidget(edit=self._root_widget, transition='out_right')
ba.playsound(ba.getsound('gunCocking'))
- ba.app.main_menu_window = (cb.PlaylistCustomizeBrowserWindow(
- transition='in_left',
- sessiontype=self._editcontroller.get_session_type(),
- select_playlist=new_name).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ PlaylistCustomizeBrowserWindow(
+ transition='in_left',
+ sessiontype=self._editcontroller.get_session_type(),
+ select_playlist=new_name).get_root_widget())
def _save_press_with_sound(self) -> None:
ba.playsound(ba.getsound('swish'))
diff --git a/assets/src/ba_data/python/bastd/ui/playlist/editcontroller.py b/assets/src/ba_data/python/bastd/ui/playlist/editcontroller.py
index 5828f643..ec5ddeec 100644
--- a/assets/src/ba_data/python/bastd/ui/playlist/editcontroller.py
+++ b/assets/src/ba_data/python/bastd/ui/playlist/editcontroller.py
@@ -41,8 +41,8 @@ class PlaylistEditController:
playlist: List[Dict[str, Any]] = None,
playlist_name: str = None):
from ba.internal import preload_map_preview_media, filter_playlist
- from bastd.ui import playlist as playlistui
- from bastd.ui.playlist import edit as peditui
+ from bastd.ui.playlist import PlaylistTypeVars
+ from bastd.ui.playlist.edit import PlaylistEditWindow
appconfig = ba.app.config
@@ -53,7 +53,7 @@ class PlaylistEditController:
self._editing_game = False
self._editing_game_type: Optional[Type[ba.GameActivity]] = None
- self._pvars = playlistui.PlaylistTypeVars(sessiontype)
+ self._pvars = PlaylistTypeVars(sessiontype)
self._existing_playlist_name = existing_playlist_name
self._config_name_full = self._pvars.config_name + ' Playlists'
@@ -96,8 +96,9 @@ class PlaylistEditController:
# and that's all they can do.
self._edit_ui_selection = 'add_button'
- ba.app.main_menu_window = (peditui.PlaylistEditWindow(
- editcontroller=self, transition=transition).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ PlaylistEditWindow(editcontroller=self,
+ transition=transition).get_root_widget())
def get_config_name(self) -> str:
"""(internal)"""
@@ -149,10 +150,10 @@ class PlaylistEditController:
def add_game_pressed(self) -> None:
"""(internal)"""
- from bastd.ui.playlist import addgame
- ba.containerwidget(edit=ba.app.main_menu_window, transition='out_left')
- ba.app.main_menu_window = (addgame.PlaylistAddGameWindow(
- editcontroller=self).get_root_widget())
+ from bastd.ui.playlist.addgame import PlaylistAddGameWindow
+ ba.app.ui.clear_main_menu_window(transition='out_left')
+ ba.app.ui.set_main_menu_window(
+ PlaylistAddGameWindow(editcontroller=self).get_root_widget())
def edit_game_pressed(self) -> None:
"""Should be called by supplemental UIs when a game is to be edited."""
@@ -166,11 +167,11 @@ class PlaylistEditController:
def add_game_cancelled(self) -> None:
"""(internal)"""
- from bastd.ui.playlist import edit as pedit
- ba.containerwidget(edit=ba.app.main_menu_window,
- transition='out_right')
- ba.app.main_menu_window = (pedit.PlaylistEditWindow(
- editcontroller=self, transition='in_left').get_root_widget())
+ from bastd.ui.playlist.edit import PlaylistEditWindow
+ ba.app.ui.clear_main_menu_window(transition='out_right')
+ ba.app.ui.set_main_menu_window(
+ PlaylistEditWindow(editcontroller=self,
+ transition='in_left').get_root_widget())
def _show_edit_ui(self, gametype: Type[ba.GameActivity],
settings: Optional[Dict[str, Any]]) -> None:
@@ -185,26 +186,25 @@ class PlaylistEditController:
self._show_edit_ui(gametype=gametype, settings=None)
def _edit_game_done(self, config: Optional[Dict[str, Any]]) -> None:
- from bastd.ui.playlist import edit as pedit
- from bastd.ui.playlist import addgame
+ from bastd.ui.playlist.edit import PlaylistEditWindow
+ from bastd.ui.playlist.addgame import PlaylistAddGameWindow
from ba.internal import get_type_name
if config is None:
# If we were editing, go back to our list.
if self._editing_game:
ba.playsound(ba.getsound('powerdown01'))
- ba.containerwidget(edit=ba.app.main_menu_window,
- transition='out_right')
- ba.app.main_menu_window = (pedit.PlaylistEditWindow(
- editcontroller=self,
- transition='in_left').get_root_widget())
+ ba.app.ui.clear_main_menu_window(transition='out_right')
+ ba.app.ui.set_main_menu_window(
+ PlaylistEditWindow(editcontroller=self,
+ transition='in_left').get_root_widget())
# Otherwise we were adding; go back to the add type choice list.
else:
- ba.containerwidget(edit=ba.app.main_menu_window,
- transition='out_right')
- ba.app.main_menu_window = (addgame.PlaylistAddGameWindow(
- editcontroller=self,
- transition='in_left').get_root_widget())
+ ba.app.ui.clear_main_menu_window(transition='out_right')
+ ba.app.ui.set_main_menu_window(
+ PlaylistAddGameWindow(
+ editcontroller=self,
+ transition='in_left').get_root_widget())
else:
# Make sure type is in there.
assert self._editing_game_type is not None
@@ -220,7 +220,7 @@ class PlaylistEditController:
self._selected_index = insert_index
ba.playsound(ba.getsound('gunCocking'))
- ba.containerwidget(edit=ba.app.main_menu_window,
- transition='out_right')
- ba.app.main_menu_window = (pedit.PlaylistEditWindow(
- editcontroller=self, transition='in_left').get_root_widget())
+ ba.app.ui.clear_main_menu_window(transition='out_right')
+ ba.app.ui.set_main_menu_window(
+ PlaylistEditWindow(editcontroller=self,
+ transition='in_left').get_root_widget())
diff --git a/assets/src/ba_data/python/bastd/ui/playlist/editgame.py b/assets/src/ba_data/python/bastd/ui/playlist/editgame.py
index bb029ff8..750cc8f1 100644
--- a/assets/src/ba_data/python/bastd/ui/playlist/editgame.py
+++ b/assets/src/ba_data/python/bastd/ui/playlist/editgame.py
@@ -151,7 +151,7 @@ class PlaylistEditGameWindow(ba.Window):
'.addGameText') if is_add else ba.Lstr(
resource='doneText'))
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
pbtn = _ba.get_special_widget('party_button')
ba.widget(edit=add_button, right_widget=pbtn, up_widget=pbtn)
@@ -159,7 +159,7 @@ class PlaylistEditGameWindow(ba.Window):
position=(-8, height - 70 + y_extra2),
size=(width, 25),
text=gameclass.get_display_string(),
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
maxwidth=235,
scale=1.1,
h_align='center',
@@ -451,10 +451,11 @@ class PlaylistEditGameWindow(ba.Window):
# Replace ourself with the map-select UI.
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = PlaylistMapSelectWindow(
- self._gameclass, self._sessiontype,
- copy.deepcopy(self._getconfig()), self._edit_info,
- self._completion_call).get_root_widget()
+ ba.app.ui.set_main_menu_window(
+ PlaylistMapSelectWindow(self._gameclass, self._sessiontype,
+ copy.deepcopy(self._getconfig()),
+ self._edit_info,
+ self._completion_call).get_root_widget())
def _choice_inc(self, setting_name: str, widget: ba.Widget,
setting: ba.ChoiceSetting, increment: int) -> None:
diff --git a/assets/src/ba_data/python/bastd/ui/playlist/mapselect.py b/assets/src/ba_data/python/bastd/ui/playlist/mapselect.py
index 5b3917a1..50adc5c9 100644
--- a/assets/src/ba_data/python/bastd/ui/playlist/mapselect.py
+++ b/assets/src/ba_data/python/bastd/ui/playlist/mapselect.py
@@ -89,7 +89,7 @@ class PlaylistMapSelectWindow(ba.Window):
subs=[('${GAME}',
self._gameclass.get_display_string())
]),
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
h_align='center',
v_align='center')
v = height - 70
@@ -182,7 +182,7 @@ class PlaylistMapSelectWindow(ba.Window):
ba.widget(edit=btn, left_widget=self._cancel_button)
if y == 0:
ba.widget(edit=btn, up_widget=self._cancel_button)
- if x == columns - 1 and ba.app.toolbars:
+ if x == columns - 1 and ba.app.ui.use_toolbars:
ba.widget(
edit=btn,
right_widget=_ba.get_special_widget('party_button'))
@@ -240,17 +240,18 @@ class PlaylistMapSelectWindow(ba.Window):
self._refresh(select_get_more_maps_button=True)
def _select(self, map_name: str) -> None:
- from bastd.ui.playlist import editgame
+ from bastd.ui.playlist.editgame import PlaylistEditGameWindow
self._config['settings']['map'] = map_name
ba.containerwidget(edit=self._root_widget, transition='out_right')
- ba.app.main_menu_window = (editgame.PlaylistEditGameWindow(
- self._gameclass,
- self._sessiontype,
- self._config,
- self._completion_call,
- default_selection='map',
- transition='in_left',
- edit_info=self._edit_info).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ PlaylistEditGameWindow(
+ self._gameclass,
+ self._sessiontype,
+ self._config,
+ self._completion_call,
+ default_selection='map',
+ transition='in_left',
+ edit_info=self._edit_info).get_root_widget())
def _select_with_delay(self, map_name: str) -> None:
_ba.lock_all_input()
@@ -260,13 +261,14 @@ class PlaylistMapSelectWindow(ba.Window):
timetype=ba.TimeType.REAL)
def _cancel(self) -> None:
- from bastd.ui.playlist import editgame
+ from bastd.ui.playlist.editgame import PlaylistEditGameWindow
ba.containerwidget(edit=self._root_widget, transition='out_right')
- ba.app.main_menu_window = (editgame.PlaylistEditGameWindow(
- self._gameclass,
- self._sessiontype,
- self._config,
- self._completion_call,
- default_selection='map',
- transition='in_left',
- edit_info=self._edit_info).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ PlaylistEditGameWindow(
+ self._gameclass,
+ self._sessiontype,
+ self._config,
+ self._completion_call,
+ default_selection='map',
+ transition='in_left',
+ edit_info=self._edit_info).get_root_widget())
diff --git a/assets/src/ba_data/python/bastd/ui/playlist/share.py b/assets/src/ba_data/python/bastd/ui/playlist/share.py
index e5fcc4d0..26b47daf 100644
--- a/assets/src/ba_data/python/bastd/ui/playlist/share.py
+++ b/assets/src/ba_data/python/bastd/ui/playlist/share.py
@@ -115,7 +115,7 @@ class SharePlaylistResultsWindow(ba.Window):
ba.textwidget(parent=self._root_widget,
position=(self._width * 0.5, self._height * 0.745),
size=(0, 0),
- color=ba.app.infotextcolor,
+ color=ba.app.ui.infotextcolor,
scale=1.0,
flatness=1.0,
h_align='center',
@@ -128,7 +128,7 @@ class SharePlaylistResultsWindow(ba.Window):
parent=self._root_widget,
position=(self._width * 0.5, self._height * 0.645),
size=(0, 0),
- color=ba.app.infotextcolor,
+ color=ba.app.ui.infotextcolor,
scale=0.6,
flatness=1.0,
h_align='center',
diff --git a/assets/src/ba_data/python/bastd/ui/profile/browser.py b/assets/src/ba_data/python/bastd/ui/profile/browser.py
index 6190f05e..dd434ae0 100644
--- a/assets/src/ba_data/python/bastd/ui/profile/browser.py
+++ b/assets/src/ba_data/python/bastd/ui/profile/browser.py
@@ -98,7 +98,7 @@ class ProfileBrowserWindow(ba.Window):
size=(0, 0),
text=ba.Lstr(resource=self._r + '.titleText'),
maxwidth=300,
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
scale=0.9,
h_align='center',
v_align='center')
@@ -160,7 +160,7 @@ class ProfileBrowserWindow(ba.Window):
position=(self._width * 0.5, self._height - 71),
size=(0, 0),
text=ba.Lstr(resource=self._r + '.explanationText'),
- color=ba.app.infotextcolor,
+ color=ba.app.ui.infotextcolor,
maxwidth=self._width * 0.83,
scale=0.6,
h_align='center',
@@ -188,19 +188,18 @@ class ProfileBrowserWindow(ba.Window):
def _new_profile(self) -> None:
# pylint: disable=cyclic-import
from ba.internal import have_pro_options
- from bastd.ui.profile import edit as pedit
- from bastd.ui import purchase
+ from bastd.ui.profile.edit import EditProfileWindow
+ from bastd.ui.purchase import PurchaseWindow
# Limit to a handful profiles if they don't have pro-options.
max_non_pro_profiles = _ba.get_account_misc_read_val('mnpp', 5)
assert self._profiles is not None
if (not have_pro_options()
and len(self._profiles) >= max_non_pro_profiles):
- purchase.PurchaseWindow(items=['pro'],
- header_text=ba.Lstr(
- resource='unlockThisProfilesText',
- subs=[('${NUM}',
- str(max_non_pro_profiles))]))
+ PurchaseWindow(items=['pro'],
+ header_text=ba.Lstr(
+ resource='unlockThisProfilesText',
+ subs=[('${NUM}', str(max_non_pro_profiles))]))
return
# Clamp at 100 profiles (otherwise the server will and that's less
@@ -215,9 +214,10 @@ class ProfileBrowserWindow(ba.Window):
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (pedit.EditProfileWindow(
- existing_profile=None,
- in_main_menu=self._in_main_menu).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ EditProfileWindow(
+ existing_profile=None,
+ in_main_menu=self._in_main_menu).get_root_widget())
def _delete_profile(self) -> None:
# pylint: disable=cyclic-import
@@ -253,7 +253,7 @@ class ProfileBrowserWindow(ba.Window):
def _edit_profile(self) -> None:
# pylint: disable=cyclic-import
- from bastd.ui.profile import edit as pedit
+ from bastd.ui.profile.edit import EditProfileWindow
if self._selected_profile is None:
ba.playsound(ba.getsound('error'))
ba.screenmessage(ba.Lstr(resource='nothingIsSelectedErrorText'),
@@ -261,9 +261,10 @@ class ProfileBrowserWindow(ba.Window):
return
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (pedit.EditProfileWindow(
- self._selected_profile,
- in_main_menu=self._in_main_menu).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ EditProfileWindow(
+ self._selected_profile,
+ in_main_menu=self._in_main_menu).get_root_widget())
def _select(self, name: str, index: int) -> None:
del index # Unused.
@@ -271,13 +272,13 @@ class ProfileBrowserWindow(ba.Window):
def _back(self) -> None:
# pylint: disable=cyclic-import
- from bastd.ui.account import settings
+ from bastd.ui.account.settings import AccountSettingsWindow
self._save_state()
ba.containerwidget(edit=self._root_widget,
transition=self._transition_out)
if self._in_main_menu:
- ba.app.main_menu_window = (settings.AccountSettingsWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ AccountSettingsWindow(transition='in_left').get_root_widget())
# If we're being called up standalone, handle pause/resume ourself.
else:
@@ -363,13 +364,13 @@ class ProfileBrowserWindow(ba.Window):
sel_name = 'Scroll'
else:
sel_name = 'Back'
- ba.app.window_states[self.__class__.__name__] = sel_name
+ ba.app.ui.window_states[self.__class__.__name__] = sel_name
except Exception:
ba.print_exception(f'Error saving state for {self}.')
def _restore_state(self) -> None:
try:
- sel_name = ba.app.window_states.get(self.__class__.__name__)
+ sel_name = ba.app.ui.window_states.get(self.__class__.__name__)
if sel_name == 'Scroll':
sel = self._scrollwidget
elif sel_name == 'New':
diff --git a/assets/src/ba_data/python/bastd/ui/profile/edit.py b/assets/src/ba_data/python/bastd/ui/profile/edit.py
index 748219dd..0577a769 100644
--- a/assets/src/ba_data/python/bastd/ui/profile/edit.py
+++ b/assets/src/ba_data/python/bastd/ui/profile/edit.py
@@ -40,8 +40,9 @@ class EditProfileWindow(ba.Window):
def reload_window(self) -> None:
"""Transitions out and recreates ourself."""
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = EditProfileWindow(
- self.getname(), self._in_main_menu).get_root_widget()
+ ba.app.ui.set_main_menu_window(
+ EditProfileWindow(self.getname(),
+ self._in_main_menu).get_root_widget())
def __init__(self,
existing_profile: Optional[str],
@@ -102,7 +103,7 @@ class EditProfileWindow(ba.Window):
text=(ba.Lstr(resource=self._r + '.titleNewText')
if existing_profile is None else ba.Lstr(
resource=self._r + '.titleEditText')),
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
maxwidth=290,
scale=1.0,
h_align='center',
@@ -211,7 +212,7 @@ class EditProfileWindow(ba.Window):
position=(self._width * 0.5, v - 39),
size=(0, 0),
scale=0.6,
- color=ba.app.infotextcolor,
+ color=ba.app.ui.infotextcolor,
text=txtl,
maxwidth=270,
h_align='center',
@@ -258,7 +259,7 @@ class EditProfileWindow(ba.Window):
draw_controller=btn,
text=ba.Lstr(resource=self._r + '.iconText'),
scale=0.7,
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
maxwidth=120)
self._update_icon()
@@ -281,7 +282,7 @@ class EditProfileWindow(ba.Window):
position=(self._width * 0.5, v - 39),
size=(0, 0),
scale=0.6,
- color=ba.app.infotextcolor,
+ color=ba.app.ui.infotextcolor,
text=txtl,
maxwidth=240,
h_align='center',
@@ -322,7 +323,7 @@ class EditProfileWindow(ba.Window):
position=(self._width * 0.5, v - 43),
size=(0, 0),
scale=0.6,
- color=ba.app.infotextcolor,
+ color=ba.app.ui.infotextcolor,
text=txtl,
maxwidth=270,
h_align='center',
@@ -379,7 +380,7 @@ class EditProfileWindow(ba.Window):
draw_controller=btn,
text=ba.Lstr(resource=self._r + '.colorText'),
scale=0.7,
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
maxwidth=120)
self._character_button = btn = ba.buttonwidget(
@@ -403,7 +404,7 @@ class EditProfileWindow(ba.Window):
draw_controller=btn,
text=ba.Lstr(resource=self._r + '.characterText'),
scale=0.7,
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
maxwidth=130)
self._highlight_button = btn = ba.buttonwidget(
@@ -436,7 +437,7 @@ class EditProfileWindow(ba.Window):
draw_controller=btn,
text=ba.Lstr(resource=self._r + '.highlightText'),
scale=0.7,
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
maxwidth=120)
self._update_character()
@@ -559,12 +560,13 @@ class EditProfileWindow(ba.Window):
tag=picker_type)
def _cancel(self) -> None:
- from bastd.ui.profile import browser as pbrowser
+ from bastd.ui.profile.browser import ProfileBrowserWindow
ba.containerwidget(edit=self._root_widget, transition='out_right')
- ba.app.main_menu_window = pbrowser.ProfileBrowserWindow(
- 'in_left',
- selected_profile=self._existing_profile,
- in_main_menu=self._in_main_menu).get_root_widget()
+ ba.app.ui.set_main_menu_window(
+ ProfileBrowserWindow(
+ 'in_left',
+ selected_profile=self._existing_profile,
+ in_main_menu=self._in_main_menu).get_root_widget())
def _set_color(self, color: Tuple[float, float, float]) -> None:
self._color = color
@@ -644,7 +646,7 @@ class EditProfileWindow(ba.Window):
def save(self, transition_out: bool = True) -> bool:
"""Save has been selected."""
- from bastd.ui.profile import browser as pbrowser
+ from bastd.ui.profile.browser import ProfileBrowserWindow
new_name = self.getname().strip()
if not new_name:
@@ -681,8 +683,9 @@ class EditProfileWindow(ba.Window):
if transition_out:
_ba.run_transactions()
ba.containerwidget(edit=self._root_widget, transition='out_right')
- ba.app.main_menu_window = (pbrowser.ProfileBrowserWindow(
- 'in_left',
- selected_profile=new_name,
- in_main_menu=self._in_main_menu).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ ProfileBrowserWindow(
+ 'in_left',
+ selected_profile=new_name,
+ in_main_menu=self._in_main_menu).get_root_widget())
return True
diff --git a/assets/src/ba_data/python/bastd/ui/profile/upgrade.py b/assets/src/ba_data/python/bastd/ui/profile/upgrade.py
index 83876011..a08de529 100644
--- a/assets/src/ba_data/python/bastd/ui/profile/upgrade.py
+++ b/assets/src/ba_data/python/bastd/ui/profile/upgrade.py
@@ -84,7 +84,7 @@ class ProfileUpgradeWindow(ba.Window):
size=(0, 0),
text=ba.Lstr(resource=self._r +
'.upgradeToGlobalProfileText'),
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
maxwidth=self._width * 0.45,
scale=1.0,
h_align='center',
@@ -95,7 +95,7 @@ class ProfileUpgradeWindow(ba.Window):
size=(0, 0),
text=ba.Lstr(resource=self._r +
'.upgradeProfileInfoText'),
- color=ba.app.infotextcolor,
+ color=ba.app.ui.infotextcolor,
maxwidth=self._width * 0.8,
scale=0.7,
h_align='center',
@@ -125,7 +125,7 @@ class ProfileUpgradeWindow(ba.Window):
v_align='center')
self._tickets_text: Optional[ba.Widget]
- if not ba.app.toolbars:
+ if not ba.app.ui.use_toolbars:
self._tickets_text = ba.textwidget(
parent=self._root_widget,
position=(self._width * 0.9 - 5, self._height - 30),
diff --git a/assets/src/ba_data/python/bastd/ui/promocode.py b/assets/src/ba_data/python/bastd/ui/promocode.py
index 5469dd5a..5959a411 100644
--- a/assets/src/ba_data/python/bastd/ui/promocode.py
+++ b/assets/src/ba_data/python/bastd/ui/promocode.py
@@ -110,24 +110,24 @@ class PromoCodeWindow(ba.Window):
def _do_back(self) -> None:
# pylint: disable=cyclic-import
- from bastd.ui.settings import advanced
+ from bastd.ui.settings.advanced import AdvancedSettingsWindow
ba.containerwidget(edit=self._root_widget,
transition=self._transition_out)
if not self._modal:
- ba.app.main_menu_window = (advanced.AdvancedSettingsWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ AdvancedSettingsWindow(transition='in_left').get_root_widget())
def _activate_enter_button(self) -> None:
self._enter_button.activate()
def _do_enter(self) -> None:
# pylint: disable=cyclic-import
- from bastd.ui.settings import advanced
+ from bastd.ui.settings.advanced import AdvancedSettingsWindow
ba.containerwidget(edit=self._root_widget,
transition=self._transition_out)
if not self._modal:
- ba.app.main_menu_window = (advanced.AdvancedSettingsWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ AdvancedSettingsWindow(transition='in_left').get_root_widget())
_ba.add_transaction({
'type': 'PROMO_CODE',
'expire_time': time.time() + 5,
diff --git a/assets/src/ba_data/python/bastd/ui/settings/advanced.py b/assets/src/ba_data/python/bastd/ui/settings/advanced.py
index dffa1274..50c5d8f6 100644
--- a/assets/src/ba_data/python/bastd/ui/settings/advanced.py
+++ b/assets/src/ba_data/python/bastd/ui/settings/advanced.py
@@ -98,7 +98,7 @@ class AdvancedSettingsWindow(ba.Window):
self._r = 'settingsWindowAdvanced'
- if app.toolbars and uiscale is ba.UIScale.SMALL:
+ if app.ui.use_toolbars and uiscale is ba.UIScale.SMALL:
ba.containerwidget(edit=self._root_widget,
on_cancel_call=self._do_back)
self._back_button = None
@@ -120,7 +120,7 @@ class AdvancedSettingsWindow(ba.Window):
size=(self._width, 25),
text=ba.Lstr(resource=self._r +
'.titleText'),
- color=app.title_color,
+ color=app.ui.title_color,
h_align='center',
v_align='top')
@@ -238,7 +238,7 @@ class AdvancedSettingsWindow(ba.Window):
text=ba.Lstr(resource=self._r + '.languageText'),
maxwidth=150,
scale=0.95,
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
h_align='right',
v_align='center')
@@ -500,7 +500,7 @@ class AdvancedSettingsWindow(ba.Window):
for child in self._subcontainer.get_children():
ba.widget(edit=child, show_buffer_bottom=30, show_buffer_top=20)
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
pbtn = _ba.get_special_widget('party_button')
ba.widget(edit=self._scrollwidget, right_widget=pbtn)
if self._back_button is None:
@@ -523,18 +523,18 @@ class AdvancedSettingsWindow(ba.Window):
_ba.run_transactions()
def _on_vr_test_press(self) -> None:
- from bastd.ui.settings import vrtesting
+ from bastd.ui.settings.vrtesting import VRTestingWindow
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (vrtesting.VRTestingWindow(
- transition='in_right').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ VRTestingWindow(transition='in_right').get_root_widget())
def _on_net_test_press(self) -> None:
- from bastd.ui.settings import nettesting
+ from bastd.ui.settings.nettesting import NetTestingWindow
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (nettesting.NetTestingWindow(
- transition='in_right').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ NetTestingWindow(transition='in_right').get_root_widget())
def _on_friend_promo_code_press(self) -> None:
from bastd.ui import appinvite
@@ -545,24 +545,25 @@ class AdvancedSettingsWindow(ba.Window):
appinvite.handle_app_invites_press()
def _on_promo_code_press(self) -> None:
- from bastd.ui import promocode
- from bastd.ui import account
+ from bastd.ui.promocode import PromoCodeWindow
+ from bastd.ui.account import show_sign_in_prompt
# We have to be logged in for promo-codes to work.
if _ba.get_account_state() != 'signed_in':
- account.show_sign_in_prompt()
+ show_sign_in_prompt()
return
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (promocode.PromoCodeWindow(
- origin_widget=self._promo_code_button).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ PromoCodeWindow(
+ origin_widget=self._promo_code_button).get_root_widget())
def _on_benchmark_press(self) -> None:
- from bastd.ui import debug
+ from bastd.ui.debug import DebugWindow
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (debug.DebugWindow(
- transition='in_right').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ DebugWindow(transition='in_right').get_root_widget())
def _save_state(self) -> None:
# pylint: disable=too-many-branches
@@ -603,7 +604,7 @@ class AdvancedSettingsWindow(ba.Window):
sel_name = 'Back'
else:
raise ValueError(f'unrecognized selection \'{sel}\'')
- ba.app.window_states[self.__class__.__name__] = {
+ ba.app.ui.window_states[self.__class__.__name__] = {
'sel_name': sel_name
}
except Exception:
@@ -612,8 +613,8 @@ class AdvancedSettingsWindow(ba.Window):
def _restore_state(self) -> None:
# pylint: disable=too-many-branches
try:
- sel_name = ba.app.window_states.get(self.__class__.__name__,
- {}).get('sel_name')
+ sel_name = ba.app.ui.window_states.get(self.__class__.__name__,
+ {}).get('sel_name')
if sel_name == 'Back':
sel = self._back_button
else:
@@ -678,9 +679,9 @@ class AdvancedSettingsWindow(ba.Window):
timetype=ba.TimeType.REAL)
def _do_back(self) -> None:
- from bastd.ui.settings import allsettings
+ from bastd.ui.settings.allsettings import AllSettingsWindow
self._save_state()
ba.containerwidget(edit=self._root_widget,
transition=self._transition_out)
- ba.app.main_menu_window = (allsettings.AllSettingsWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ AllSettingsWindow(transition='in_left').get_root_widget())
diff --git a/assets/src/ba_data/python/bastd/ui/settings/allsettings.py b/assets/src/ba_data/python/bastd/ui/settings/allsettings.py
index 702e3e0a..64f918c2 100644
--- a/assets/src/ba_data/python/bastd/ui/settings/allsettings.py
+++ b/assets/src/ba_data/python/bastd/ui/settings/allsettings.py
@@ -72,7 +72,7 @@ class AllSettingsWindow(ba.Window):
1.35 if uiscale is ba.UIScale.MEDIUM else 1.0),
stack_offset=(0, -8) if uiscale is ba.UIScale.SMALL else (0, 0)))
- if ba.app.toolbars and uiscale is ba.UIScale.SMALL:
+ if ba.app.ui.use_toolbars and uiscale is ba.UIScale.SMALL:
self._back_button = None
ba.containerwidget(edit=self._root_widget,
on_cancel_call=self._do_back)
@@ -93,7 +93,7 @@ class AllSettingsWindow(ba.Window):
position=(0, height - 44),
size=(width, 25),
text=ba.Lstr(resource=self._r + '.titleText'),
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
h_align='center',
v_align='center',
maxwidth=130)
@@ -136,7 +136,7 @@ class AllSettingsWindow(ba.Window):
button_type='square',
label='',
on_activate_call=self._do_controllers)
- if ba.app.toolbars and self._back_button is None:
+ if ba.app.ui.use_toolbars and self._back_button is None:
bbtn = _ba.get_special_widget('back_button')
ba.widget(edit=ctb, left_widget=bbtn)
_b_title(x_offs2, v, ctb,
@@ -156,7 +156,7 @@ class AllSettingsWindow(ba.Window):
button_type='square',
label='',
on_activate_call=self._do_graphics)
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
pbtn = _ba.get_special_widget('party_button')
ba.widget(edit=gfxb, up_widget=pbtn, right_widget=pbtn)
_b_title(x_offs3, v, gfxb, ba.Lstr(resource=self._r + '.graphicsText'))
@@ -220,40 +220,44 @@ class AllSettingsWindow(ba.Window):
self._save_state()
ba.containerwidget(edit=self._root_widget,
transition=self._transition_out)
- ba.app.main_menu_window = (MainMenuWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ MainMenuWindow(transition='in_left').get_root_widget())
def _do_controllers(self) -> None:
# pylint: disable=cyclic-import
from bastd.ui.settings.controls import ControlsSettingsWindow
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (ControlsSettingsWindow(
- origin_widget=self._controllers_button).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ ControlsSettingsWindow(
+ origin_widget=self._controllers_button).get_root_widget())
def _do_graphics(self) -> None:
# pylint: disable=cyclic-import
from bastd.ui.settings.graphics import GraphicsSettingsWindow
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (GraphicsSettingsWindow(
- origin_widget=self._graphics_button).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ GraphicsSettingsWindow(
+ origin_widget=self._graphics_button).get_root_widget())
def _do_audio(self) -> None:
# pylint: disable=cyclic-import
from bastd.ui.settings.audio import AudioSettingsWindow
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (AudioSettingsWindow(
- origin_widget=self._audio_button).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ AudioSettingsWindow(
+ origin_widget=self._audio_button).get_root_widget())
def _do_advanced(self) -> None:
# pylint: disable=cyclic-import
from bastd.ui.settings.advanced import AdvancedSettingsWindow
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (AdvancedSettingsWindow(
- origin_widget=self._advanced_button).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ AdvancedSettingsWindow(
+ origin_widget=self._advanced_button).get_root_widget())
def _save_state(self) -> None:
try:
@@ -270,7 +274,7 @@ class AllSettingsWindow(ba.Window):
sel_name = 'Back'
else:
raise ValueError(f'unrecognized selection \'{sel}\'')
- ba.app.window_states[self.__class__.__name__] = {
+ ba.app.ui.window_states[self.__class__.__name__] = {
'sel_name': sel_name
}
except Exception:
@@ -278,8 +282,8 @@ class AllSettingsWindow(ba.Window):
def _restore_state(self) -> None:
try:
- sel_name = ba.app.window_states.get(self.__class__.__name__,
- {}).get('sel_name')
+ sel_name = ba.app.ui.window_states.get(self.__class__.__name__,
+ {}).get('sel_name')
sel: Optional[ba.Widget]
if sel_name == 'Controllers':
sel = self._controllers_button
diff --git a/assets/src/ba_data/python/bastd/ui/settings/audio.py b/assets/src/ba_data/python/bastd/ui/settings/audio.py
index c7e8d970..185339c9 100644
--- a/assets/src/ba_data/python/bastd/ui/settings/audio.py
+++ b/assets/src/ba_data/python/bastd/ui/settings/audio.py
@@ -103,7 +103,7 @@ class AudioSettingsWindow(ba.Window):
position=(width * 0.5, height - 32),
size=(0, 0),
text=ba.Lstr(resource=self._r + '.titleText'),
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
maxwidth=180,
h_align='center',
v_align='center')
@@ -122,7 +122,7 @@ class AudioSettingsWindow(ba.Window):
minval=0.0,
maxval=1.0,
increment=0.1)
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=svne.plusbutton,
right_widget=_ba.get_special_widget('party_button'))
v -= spacing
@@ -237,8 +237,9 @@ class AudioSettingsWindow(ba.Window):
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (stb.SoundtrackBrowserWindow(
- origin_widget=self._soundtrack_button).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ stb.SoundtrackBrowserWindow(
+ origin_widget=self._soundtrack_button).get_root_widget())
def _back(self) -> None:
# pylint: disable=cyclic-import
@@ -246,8 +247,9 @@ class AudioSettingsWindow(ba.Window):
self._save_state()
ba.containerwidget(edit=self._root_widget,
transition=self._transition_out)
- ba.app.main_menu_window = (allsettings.AllSettingsWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ allsettings.AllSettingsWindow(
+ transition='in_left').get_root_widget())
def _save_state(self) -> None:
try:
@@ -268,13 +270,13 @@ class AudioSettingsWindow(ba.Window):
sel_name = 'VRHeadRelative'
else:
raise ValueError(f'unrecognized selection \'{sel}\'')
- ba.app.window_states[self.__class__.__name__] = sel_name
+ ba.app.ui.window_states[self.__class__.__name__] = sel_name
except Exception:
ba.print_exception(f'Error saving state for {self.__class__}.')
def _restore_state(self) -> None:
try:
- sel_name = ba.app.window_states.get(self.__class__.__name__)
+ sel_name = ba.app.ui.window_states.get(self.__class__.__name__)
sel: Optional[ba.Widget]
if sel_name == 'SoundMinus':
sel = self._sound_volume_numedit.minusbutton
diff --git a/assets/src/ba_data/python/bastd/ui/settings/controls.py b/assets/src/ba_data/python/bastd/ui/settings/controls.py
index a59e39ba..c20e448a 100644
--- a/assets/src/ba_data/python/bastd/ui/settings/controls.py
+++ b/assets/src/ba_data/python/bastd/ui/settings/controls.py
@@ -178,7 +178,7 @@ class ControlsSettingsWindow(ba.Window):
position=(0, height - 49),
size=(width, 25),
text=ba.Lstr(resource=self._r + '.titleText'),
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
h_align='center',
v_align='top')
ba.buttonwidget(edit=btn,
@@ -197,7 +197,7 @@ class ControlsSettingsWindow(ba.Window):
autoselect=True,
label=ba.Lstr(resource=self._r + '.configureTouchText'),
on_activate_call=self._do_touchscreen)
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=btn,
right_widget=_ba.get_special_widget('party_button'))
if not self._have_selected_child:
@@ -216,7 +216,7 @@ class ControlsSettingsWindow(ba.Window):
autoselect=True,
label=ba.Lstr(resource=self._r + '.configureControllersText'),
on_activate_call=self._do_gamepads)
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=btn,
right_widget=_ba.get_special_widget('party_button'))
if not self._have_selected_child:
@@ -240,7 +240,7 @@ class ControlsSettingsWindow(ba.Window):
autoselect=True,
label=ba.Lstr(resource=self._r + '.configureKeyboardText'),
on_activate_call=self._config_keyboard)
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=btn,
right_widget=_ba.get_special_widget('party_button'))
if not self._have_selected_child:
@@ -269,7 +269,7 @@ class ControlsSettingsWindow(ba.Window):
autoselect=True,
label=ba.Lstr(resource=self._r + '.configureMobileText'),
on_activate_call=self._do_mobile_devices)
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=btn,
right_widget=_ba.get_special_widget('party_button'))
if not self._have_selected_child:
@@ -287,7 +287,7 @@ class ControlsSettingsWindow(ba.Window):
autoselect=True,
label=ba.Lstr(resource=self._r + '.ps3Text'),
on_activate_call=self._do_ps3_controllers)
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=btn,
right_widget=_ba.get_special_widget('party_button'))
v -= spacing
@@ -299,7 +299,7 @@ class ControlsSettingsWindow(ba.Window):
autoselect=True,
label=ba.Lstr(resource=self._r + '.xbox360Text'),
on_activate_call=self._do_360_controllers)
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=btn,
right_widget=_ba.get_special_widget('party_button'))
v -= spacing
@@ -311,7 +311,7 @@ class ControlsSettingsWindow(ba.Window):
autoselect=True,
label=ba.Lstr(resource=self._r + '.wiimotesText'),
on_activate_call=self._do_wiimotes)
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=btn,
right_widget=_ba.get_special_widget('party_button'))
v -= spacing
@@ -342,7 +342,7 @@ class ControlsSettingsWindow(ba.Window):
scale=0.5,
h_align='center',
v_align='center',
- color=ba.app.infotextcolor,
+ color=ba.app.ui.infotextcolor,
maxwidth=width * 0.8)
v -= spacing
if show_mac_controller_subsystem:
@@ -369,7 +369,7 @@ class ControlsSettingsWindow(ba.Window):
scale=1.0,
h_align='right',
v_align='center',
- color=ba.app.infotextcolor,
+ color=ba.app.ui.infotextcolor,
maxwidth=180)
ba.textwidget(
parent=self._root_widget,
@@ -379,7 +379,7 @@ class ControlsSettingsWindow(ba.Window):
scale=0.5,
h_align='center',
v_align='center',
- color=ba.app.infotextcolor,
+ color=ba.app.ui.infotextcolor,
maxwidth=width * 0.8)
v -= spacing
self._restore_state()
@@ -391,67 +391,69 @@ class ControlsSettingsWindow(ba.Window):
def _config_keyboard(self) -> None:
# pylint: disable=cyclic-import
- from bastd.ui.settings import keyboard
+ from bastd.ui.settings.keyboard import ConfigKeyboardWindow
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (keyboard.ConfigKeyboardWindow(
- _ba.getinputdevice('Keyboard', '#1')).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ ConfigKeyboardWindow(_ba.getinputdevice('Keyboard',
+ '#1')).get_root_widget())
def _config_keyboard2(self) -> None:
# pylint: disable=cyclic-import
- from bastd.ui.settings import keyboard
+ from bastd.ui.settings.keyboard import ConfigKeyboardWindow
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (keyboard.ConfigKeyboardWindow(
- _ba.getinputdevice('Keyboard', '#2')).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ ConfigKeyboardWindow(_ba.getinputdevice('Keyboard',
+ '#2')).get_root_widget())
def _do_mobile_devices(self) -> None:
# pylint: disable=cyclic-import
- from bastd.ui.settings import remoteapp
+ from bastd.ui.settings.remoteapp import RemoteAppSettingsWindow
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (
- remoteapp.RemoteAppSettingsWindow().get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ RemoteAppSettingsWindow().get_root_widget())
def _do_ps3_controllers(self) -> None:
# pylint: disable=cyclic-import
- from bastd.ui.settings import ps3controller
+ from bastd.ui.settings.ps3controller import PS3ControllerSettingsWindow
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (
- ps3controller.PS3ControllerSettingsWindow().get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ PS3ControllerSettingsWindow().get_root_widget())
def _do_360_controllers(self) -> None:
# pylint: disable=cyclic-import
- from bastd.ui.settings import xbox360controller as xbox
+ from bastd.ui.settings.xbox360controller import (
+ XBox360ControllerSettingsWindow)
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (
- xbox.XBox360ControllerSettingsWindow().get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ XBox360ControllerSettingsWindow().get_root_widget())
def _do_wiimotes(self) -> None:
# pylint: disable=cyclic-import
- from bastd.ui.settings import wiimote
+ from bastd.ui.settings.wiimote import WiimoteSettingsWindow
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (
- wiimote.WiimoteSettingsWindow().get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ WiimoteSettingsWindow().get_root_widget())
def _do_gamepads(self) -> None:
# pylint: disable=cyclic-import
- from bastd.ui.settings import gamepadselect
+ from bastd.ui.settings.gamepadselect import GamepadSelectWindow
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (
- gamepadselect.GamepadSelectWindow().get_root_widget())
+ ba.app.ui.set_main_menu_window(GamepadSelectWindow().get_root_widget())
def _do_touchscreen(self) -> None:
# pylint: disable=cyclic-import
- from bastd.ui.settings import touchscreen
+ from bastd.ui.settings.touchscreen import TouchscreenSettingsWindow
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (
- touchscreen.TouchscreenSettingsWindow().get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ TouchscreenSettingsWindow().get_root_widget())
def _save_state(self) -> None:
sel = self._root_widget.get_selected_child()
@@ -473,10 +475,10 @@ class ControlsSettingsWindow(ba.Window):
sel_name = 'Wiimotes'
else:
sel_name = 'Back'
- ba.app.window_states[self.__class__.__name__] = sel_name
+ ba.app.ui.window_states[self.__class__.__name__] = sel_name
def _restore_state(self) -> None:
- sel_name = ba.app.window_states.get(self.__class__.__name__)
+ sel_name = ba.app.ui.window_states.get(self.__class__.__name__)
if sel_name == 'GamePads':
sel = self._gamepads_button
elif sel_name == 'Touch':
@@ -502,9 +504,9 @@ class ControlsSettingsWindow(ba.Window):
def _back(self) -> None:
# pylint: disable=cyclic-import
- from bastd.ui.settings import allsettings
+ from bastd.ui.settings.allsettings import AllSettingsWindow
self._save_state()
ba.containerwidget(edit=self._root_widget,
transition=self._transition_out)
- ba.app.main_menu_window = allsettings.AllSettingsWindow(
- transition='in_left').get_root_widget()
+ ba.app.ui.set_main_menu_window(
+ AllSettingsWindow(transition='in_left').get_root_widget())
diff --git a/assets/src/ba_data/python/bastd/ui/settings/gamepad.py b/assets/src/ba_data/python/bastd/ui/settings/gamepad.py
index e27ba546..7305ccd1 100644
--- a/assets/src/ba_data/python/bastd/ui/settings/gamepad.py
+++ b/assets/src/ba_data/python/bastd/ui/settings/gamepad.py
@@ -202,7 +202,7 @@ class GamepadSettingsWindow(ba.Window):
position=(0, v + 5),
size=(self._width, 25),
text=ba.Lstr(resource=self._r + '.titleText'),
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
maxwidth=310,
h_align='center',
v_align='center')
@@ -212,7 +212,7 @@ class GamepadSettingsWindow(ba.Window):
position=(0, v + 3),
size=(self._width, 25),
text=self._name,
- color=ba.app.infotextcolor,
+ color=ba.app.ui.infotextcolor,
maxwidth=self._width * 0.9,
h_align='center',
v_align='center')
@@ -235,7 +235,7 @@ class GamepadSettingsWindow(ba.Window):
position=(0, v + 5),
size=(self._width, 25),
text=ba.Lstr(resource=self._r + '.secondaryText'),
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
maxwidth=300,
h_align='center',
v_align='center')
@@ -710,12 +710,12 @@ class GamepadSettingsWindow(ba.Window):
return btn
def _cancel(self) -> None:
- from bastd.ui.settings import controls
+ from bastd.ui.settings.controls import ControlsSettingsWindow
ba.containerwidget(edit=self._root_widget,
transition=self._transition_out)
if self._is_main_menu:
- ba.app.main_menu_window = (controls.ControlsSettingsWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ ControlsSettingsWindow(transition='in_left').get_root_widget())
def _save(self) -> None:
from ba.internal import (master_server_post, get_input_device_config,
@@ -758,9 +758,9 @@ class GamepadSettingsWindow(ba.Window):
ba.playsound(ba.getsound('error'))
if self._is_main_menu:
- from bastd.ui.settings import controls
- ba.app.main_menu_window = (controls.ControlsSettingsWindow(
- transition='in_left').get_root_widget())
+ from bastd.ui.settings.controls import ControlsSettingsWindow
+ ba.app.ui.set_main_menu_window(
+ ControlsSettingsWindow(transition='in_left').get_root_widget())
class AwaitGamepadInputWindow(ba.Window):
diff --git a/assets/src/ba_data/python/bastd/ui/settings/gamepadadvanced.py b/assets/src/ba_data/python/bastd/ui/settings/gamepadadvanced.py
index d4631aed..ad5ba704 100644
--- a/assets/src/ba_data/python/bastd/ui/settings/gamepadadvanced.py
+++ b/assets/src/ba_data/python/bastd/ui/settings/gamepadadvanced.py
@@ -61,7 +61,7 @@ class GamepadAdvancedSettingsWindow(ba.Window):
size=(0, 0),
text=ba.Lstr(resource=self._r + '.advancedTitleText'),
maxwidth=320,
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
h_align='center',
v_align='center')
diff --git a/assets/src/ba_data/python/bastd/ui/settings/gamepadselect.py b/assets/src/ba_data/python/bastd/ui/settings/gamepadselect.py
index 9b063425..e2b14c5e 100644
--- a/assets/src/ba_data/python/bastd/ui/settings/gamepadselect.py
+++ b/assets/src/ba_data/python/bastd/ui/settings/gamepadselect.py
@@ -41,7 +41,7 @@ def gamepad_configure_callback(event: Dict[str, Any]) -> None:
return
_ba.release_gamepad_input()
try:
- ba.containerwidget(edit=ba.app.main_menu_window, transition='out_left')
+ ba.app.ui.clear_main_menu_window(transition='out_left')
except Exception:
ba.print_exception('Error transitioning out main_menu_window.')
ba.playsound(ba.getsound('activateBeep'))
@@ -49,18 +49,19 @@ def gamepad_configure_callback(event: Dict[str, Any]) -> None:
inputdevice = event['input_device']
assert isinstance(inputdevice, ba.InputDevice)
if inputdevice.allows_configuring:
- ba.app.main_menu_window = (
+ ba.app.ui.set_main_menu_window(
gamepad.GamepadSettingsWindow(inputdevice).get_root_widget())
else:
width = 700
height = 200
button_width = 100
uiscale = ba.app.uiscale
- ba.app.main_menu_window = dlg = (ba.containerwidget(
+ dlg = (ba.containerwidget(
scale=(1.7 if uiscale is ba.UIScale.SMALL else
1.4 if uiscale is ba.UIScale.MEDIUM else 1.0),
size=(width, height),
transition='in_right'))
+ ba.app.ui.set_main_menu_window(dlg)
device_name = inputdevice.name
if device_name == 'iDevice':
msg = ba.Lstr(resource='bsRemoteConfigureInAppText',
@@ -79,8 +80,9 @@ def gamepad_configure_callback(event: Dict[str, Any]) -> None:
def _ok() -> None:
from bastd.ui.settings import controls
ba.containerwidget(edit=dlg, transition='out_right')
- ba.app.main_menu_window = (controls.ControlsSettingsWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ controls.ControlsSettingsWindow(
+ transition='in_left').get_root_widget())
ba.buttonwidget(parent=dlg,
position=((width - button_width) / 2, 20),
@@ -124,7 +126,7 @@ class GamepadSelectWindow(ba.Window):
size=(width, 25),
text=ba.Lstr(resource=self._r + '.titleText'),
maxwidth=250,
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
h_align='center',
v_align='center')
@@ -141,7 +143,7 @@ class GamepadSelectWindow(ba.Window):
scale=0.8,
text=ba.Lstr(resource=self._r + '.pressAnyButtonText'),
maxwidth=width * 0.95,
- color=ba.app.infotextcolor,
+ color=ba.app.ui.infotextcolor,
h_align='center',
v_align='top')
v -= spacing * 1.24
@@ -162,5 +164,6 @@ class GamepadSelectWindow(ba.Window):
from bastd.ui.settings import controls
_ba.release_gamepad_input()
ba.containerwidget(edit=self._root_widget, transition='out_right')
- ba.app.main_menu_window = (controls.ControlsSettingsWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ controls.ControlsSettingsWindow(
+ transition='in_left').get_root_widget())
diff --git a/assets/src/ba_data/python/bastd/ui/settings/graphics.py b/assets/src/ba_data/python/bastd/ui/settings/graphics.py
index 411b21a6..3bda574b 100644
--- a/assets/src/ba_data/python/bastd/ui/settings/graphics.py
+++ b/assets/src/ba_data/python/bastd/ui/settings/graphics.py
@@ -112,7 +112,7 @@ class GraphicsSettingsWindow(ba.Window):
position=(0, height - 44),
size=(width, 25),
text=ba.Lstr(resource=self._r + '.titleText'),
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
h_align='center',
v_align='top')
@@ -153,7 +153,7 @@ class GraphicsSettingsWindow(ba.Window):
increment=0.1,
xoffset=-70,
textscale=0.85)
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=gmc.plusbutton,
right_widget=_ba.get_special_widget('party_button'))
if not self._have_selected_child:
@@ -172,7 +172,7 @@ class GraphicsSettingsWindow(ba.Window):
position=(60, v),
size=(160, 25),
text=ba.Lstr(resource=self._r + '.visualsText'),
- color=ba.app.heading_color,
+ color=ba.app.ui.heading_color,
scale=0.65,
maxwidth=150,
h_align='center',
@@ -200,7 +200,7 @@ class GraphicsSettingsWindow(ba.Window):
position=(230, v),
size=(160, 25),
text=ba.Lstr(resource=self._r + '.texturesText'),
- color=ba.app.heading_color,
+ color=ba.app.ui.heading_color,
scale=0.65,
maxwidth=150,
h_align='center',
@@ -219,7 +219,7 @@ class GraphicsSettingsWindow(ba.Window):
],
current_choice=ba.app.config.resolve('Texture Quality'),
on_value_change_call=self._set_textures)
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=textures_popup.get_button(),
right_widget=_ba.get_special_widget('party_button'))
v -= 80
@@ -232,7 +232,7 @@ class GraphicsSettingsWindow(ba.Window):
position=(h_offs + 60, v),
size=(160, 25),
text=ba.Lstr(resource=self._r + '.resolutionText'),
- color=ba.app.heading_color,
+ color=ba.app.ui.heading_color,
scale=0.65,
maxwidth=150,
h_align='center',
@@ -306,7 +306,7 @@ class GraphicsSettingsWindow(ba.Window):
position=(230, v),
size=(160, 25),
text=ba.Lstr(resource=self._r + '.verticalSyncText'),
- color=ba.app.heading_color,
+ color=ba.app.ui.heading_color,
scale=0.65,
maxwidth=150,
h_align='center',
@@ -367,8 +367,9 @@ class GraphicsSettingsWindow(ba.Window):
from bastd.ui.settings import allsettings
ba.containerwidget(edit=self._root_widget,
transition=self._transition_out)
- ba.app.main_menu_window = (allsettings.AllSettingsWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ allsettings.AllSettingsWindow(
+ transition='in_left').get_root_widget())
def _set_quality(self, quality: str) -> None:
cfg = ba.app.config
diff --git a/assets/src/ba_data/python/bastd/ui/settings/keyboard.py b/assets/src/ba_data/python/bastd/ui/settings/keyboard.py
index 8796bc4c..f030eba1 100644
--- a/assets/src/ba_data/python/bastd/ui/settings/keyboard.py
+++ b/assets/src/ba_data/python/bastd/ui/settings/keyboard.py
@@ -102,7 +102,7 @@ class ConfigKeyboardWindow(ba.Window):
size=(0, 0),
text=ba.Lstr(resource=self._r + '.configuringText',
subs=[('${DEVICE}', self._displayname)]),
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
h_align='center',
v_align='center',
maxwidth=270,
@@ -120,7 +120,7 @@ class ConfigKeyboardWindow(ba.Window):
scale=0.7,
maxwidth=self._width * 0.75,
max_height=110,
- color=ba.app.infotextcolor,
+ color=ba.app.ui.infotextcolor,
h_align='center',
v_align='top')
v -= 40
@@ -226,8 +226,8 @@ class ConfigKeyboardWindow(ba.Window):
def _cancel(self) -> None:
from bastd.ui.settings.controls import ControlsSettingsWindow
ba.containerwidget(edit=self._root_widget, transition='out_right')
- ba.app.main_menu_window = (ControlsSettingsWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ ControlsSettingsWindow(transition='in_left').get_root_widget())
def _save(self) -> None:
from bastd.ui.settings.controls import ControlsSettingsWindow
@@ -257,8 +257,8 @@ class ConfigKeyboardWindow(ba.Window):
'v': 2
})
ba.app.config.apply_and_commit()
- ba.app.main_menu_window = (ControlsSettingsWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ ControlsSettingsWindow(transition='in_left').get_root_widget())
class AwaitKeyboardInputWindow(ba.Window):
diff --git a/assets/src/ba_data/python/bastd/ui/settings/ps3controller.py b/assets/src/ba_data/python/bastd/ui/settings/ps3controller.py
index 3598a39a..25b6eada 100644
--- a/assets/src/ba_data/python/bastd/ui/settings/ps3controller.py
+++ b/assets/src/ba_data/python/bastd/ui/settings/ps3controller.py
@@ -58,7 +58,7 @@ class PS3ControllerSettingsWindow(ba.Window):
text=ba.Lstr(resource=self._r + '.titleText',
subs=[('${APP_NAME}',
ba.Lstr(resource='titleText'))]),
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
h_align='center',
v_align='center')
@@ -120,5 +120,6 @@ class PS3ControllerSettingsWindow(ba.Window):
def _back(self) -> None:
from bastd.ui.settings import controls
ba.containerwidget(edit=self._root_widget, transition='out_right')
- ba.app.main_menu_window = (controls.ControlsSettingsWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ controls.ControlsSettingsWindow(
+ transition='in_left').get_root_widget())
diff --git a/assets/src/ba_data/python/bastd/ui/settings/remoteapp.py b/assets/src/ba_data/python/bastd/ui/settings/remoteapp.py
index d47f54fb..8c4bf58f 100644
--- a/assets/src/ba_data/python/bastd/ui/settings/remoteapp.py
+++ b/assets/src/ba_data/python/bastd/ui/settings/remoteapp.py
@@ -57,7 +57,7 @@ class RemoteAppSettingsWindow(ba.Window):
size=(0, 0),
text=ba.Lstr(resource=self._r + '.titleText'),
maxwidth=370,
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
scale=0.8,
h_align='center',
v_align='center')
@@ -131,5 +131,6 @@ class RemoteAppSettingsWindow(ba.Window):
def _back(self) -> None:
from bastd.ui.settings import controls
ba.containerwidget(edit=self._root_widget, transition='out_right')
- ba.app.main_menu_window = (controls.ControlsSettingsWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ controls.ControlsSettingsWindow(
+ transition='in_left').get_root_widget())
diff --git a/assets/src/ba_data/python/bastd/ui/settings/testing.py b/assets/src/ba_data/python/bastd/ui/settings/testing.py
index 63ca41d8..9619c000 100644
--- a/assets/src/ba_data/python/bastd/ui/settings/testing.py
+++ b/assets/src/ba_data/python/bastd/ui/settings/testing.py
@@ -62,7 +62,7 @@ class TestingWindow(ba.Window):
ba.textwidget(parent=self._root_widget,
position=(self._width * 0.5, self._height - 35),
size=(0, 0),
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
h_align='center',
v_align='center',
maxwidth=245,
@@ -77,7 +77,7 @@ class TestingWindow(ba.Window):
parent=self._root_widget,
position=(self._width * 0.5, self._height - 75),
size=(0, 0),
- color=ba.app.infotextcolor,
+ color=ba.app.ui.infotextcolor,
h_align='center',
v_align='center',
maxwidth=self._width * 0.75,
@@ -194,6 +194,6 @@ class TestingWindow(ba.Window):
# pylint: disable=cyclic-import
import bastd.ui.settings.advanced
ba.containerwidget(edit=self._root_widget, transition='out_right')
- ba.app.main_menu_window = (
+ ba.app.ui.set_main_menu_window(
bastd.ui.settings.advanced.AdvancedSettingsWindow(
transition='in_left').get_root_widget())
diff --git a/assets/src/ba_data/python/bastd/ui/settings/touchscreen.py b/assets/src/ba_data/python/bastd/ui/settings/touchscreen.py
index 59faf44b..be30d230 100644
--- a/assets/src/ba_data/python/bastd/ui/settings/touchscreen.py
+++ b/assets/src/ba_data/python/bastd/ui/settings/touchscreen.py
@@ -65,7 +65,7 @@ class TouchscreenSettingsWindow(ba.Window):
position=(25, self._height - 50),
size=(self._width, 25),
text=ba.Lstr(resource=self._r + '.titleText'),
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
maxwidth=280,
h_align='center',
v_align='center')
@@ -251,6 +251,7 @@ class TouchscreenSettingsWindow(ba.Window):
def _back(self) -> None:
from bastd.ui.settings import controls
ba.containerwidget(edit=self._root_widget, transition='out_right')
- ba.app.main_menu_window = (controls.ControlsSettingsWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ controls.ControlsSettingsWindow(
+ transition='in_left').get_root_widget())
_ba.set_touchscreen_editing(False)
diff --git a/assets/src/ba_data/python/bastd/ui/settings/wiimote.py b/assets/src/ba_data/python/bastd/ui/settings/wiimote.py
index dfca0b33..4daf8440 100644
--- a/assets/src/ba_data/python/bastd/ui/settings/wiimote.py
+++ b/assets/src/ba_data/python/bastd/ui/settings/wiimote.py
@@ -52,7 +52,7 @@ class WiimoteSettingsWindow(ba.Window):
size=(0, 0),
text=ba.Lstr(resource=self._r + '.titleText'),
maxwidth=270,
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
h_align='center',
v_align='center')
@@ -108,8 +108,9 @@ class WiimoteSettingsWindow(ba.Window):
def _back(self) -> None:
from bastd.ui.settings import controls
ba.containerwidget(edit=self._root_widget, transition='out_right')
- ba.app.main_menu_window = (controls.ControlsSettingsWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ controls.ControlsSettingsWindow(
+ transition='in_left').get_root_widget())
class WiimoteListenWindow(ba.Window):
@@ -131,12 +132,12 @@ class WiimoteListenWindow(ba.Window):
ba.containerwidget(edit=self._root_widget, cancel_button=btn)
_ba.start_listening_for_wii_remotes()
self._wiimote_connect_counter = 15
- ba.app.dismiss_wii_remotes_window_call = ba.WeakCall(self._dismiss)
+ ba.app.ui.dismiss_wii_remotes_window_call = ba.WeakCall(self._dismiss)
ba.textwidget(parent=self._root_widget,
position=(15, height - 55),
size=(width - 30, 30),
text=ba.Lstr(resource=self._r + '.listeningText'),
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
maxwidth=320,
h_align='center',
v_align='center')
@@ -204,7 +205,7 @@ class WiimoteLicenseWindow(ba.Window):
size=(width, 30),
text=ba.Lstr(resource=self._r + '.titleText'),
h_align='center',
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
v_align='center')
license_text = (
'Copyright (c) 2007, DarwiinRemote Team\n'
diff --git a/assets/src/ba_data/python/bastd/ui/settings/xbox360controller.py b/assets/src/ba_data/python/bastd/ui/settings/xbox360controller.py
index b65b48ec..334431a9 100644
--- a/assets/src/ba_data/python/bastd/ui/settings/xbox360controller.py
+++ b/assets/src/ba_data/python/bastd/ui/settings/xbox360controller.py
@@ -63,7 +63,7 @@ class XBox360ControllerSettingsWindow(ba.Window):
text=ba.Lstr(resource=self._r + '.titleText',
subs=[('${APP_NAME}',
ba.Lstr(resource='titleText'))]),
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
maxwidth=400,
h_align='center',
v_align='center')
@@ -128,5 +128,6 @@ class XBox360ControllerSettingsWindow(ba.Window):
def _back(self) -> None:
from bastd.ui.settings import controls
ba.containerwidget(edit=self._root_widget, transition='out_right')
- ba.app.main_menu_window = (controls.ControlsSettingsWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ controls.ControlsSettingsWindow(
+ transition='in_left').get_root_widget())
diff --git a/assets/src/ba_data/python/bastd/ui/soundtrack/browser.py b/assets/src/ba_data/python/bastd/ui/soundtrack/browser.py
index a796229b..38fe0817 100644
--- a/assets/src/ba_data/python/bastd/ui/soundtrack/browser.py
+++ b/assets/src/ba_data/python/bastd/ui/soundtrack/browser.py
@@ -70,7 +70,7 @@ class SoundtrackBrowserWindow(ba.Window):
1.6 if uiscale is ba.UIScale.MEDIUM else 1.0),
stack_offset=(0, -18) if uiscale is ba.UIScale.SMALL else (0, 0)))
- if ba.app.toolbars and uiscale is ba.UIScale.SMALL:
+ if ba.app.ui.use_toolbars and uiscale is ba.UIScale.SMALL:
self._back_button = None
else:
self._back_button = ba.buttonwidget(
@@ -90,7 +90,7 @@ class SoundtrackBrowserWindow(ba.Window):
size=(0, 0),
maxwidth=300,
text=ba.Lstr(resource=self._r + '.titleText'),
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
h_align='center',
v_align='center')
@@ -210,7 +210,7 @@ class SoundtrackBrowserWindow(ba.Window):
ba.widget(edit=self._scrollwidget,
left_widget=self._new_button,
right_widget=_ba.get_special_widget('party_button')
- if ba.app.toolbars else self._scrollwidget)
+ if ba.app.ui.use_toolbars else self._scrollwidget)
self._col = ba.columnwidget(parent=scrollwidget)
self._soundtracks: Optional[Dict[str, Any]] = None
@@ -337,8 +337,8 @@ class SoundtrackBrowserWindow(ba.Window):
self._save_state()
ba.containerwidget(edit=self._root_widget,
transition=self._transition_out)
- ba.app.main_menu_window = (audio.AudioSettingsWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ audio.AudioSettingsWindow(transition='in_left').get_root_widget())
def _edit_soundtrack_with_sound(self) -> None:
# pylint: disable=cyclic-import
@@ -369,8 +369,10 @@ class SoundtrackBrowserWindow(ba.Window):
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (stedit.SoundtrackEditWindow(
- existing_soundtrack=self._selected_soundtrack).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ stedit.SoundtrackEditWindow(
+ existing_soundtrack=self._selected_soundtrack).get_root_widget(
+ ))
def _get_soundtrack_display_name(self, soundtrack: str) -> ba.Lstr:
if soundtrack == '__default__':
@@ -485,13 +487,13 @@ class SoundtrackBrowserWindow(ba.Window):
sel_name = 'Back'
else:
raise ValueError(f'unrecognized selection \'{sel}\'')
- ba.app.window_states[self.__class__.__name__] = sel_name
+ ba.app.ui.window_states[self.__class__.__name__] = sel_name
except Exception:
ba.print_exception(f'Error saving state for {self}.')
def _restore_state(self) -> None:
try:
- sel_name = ba.app.window_states.get(self.__class__.__name__)
+ sel_name = ba.app.ui.window_states.get(self.__class__.__name__)
if sel_name == 'Scroll':
sel = self._scrollwidget
elif sel_name == 'New':
diff --git a/assets/src/ba_data/python/bastd/ui/soundtrack/edit.py b/assets/src/ba_data/python/bastd/ui/soundtrack/edit.py
index 484757ff..be5d754a 100644
--- a/assets/src/ba_data/python/bastd/ui/soundtrack/edit.py
+++ b/assets/src/ba_data/python/bastd/ui/soundtrack/edit.py
@@ -78,7 +78,7 @@ class SoundtrackEditWindow(ba.Window):
text=ba.Lstr(resource=self._r +
('.editSoundtrackText' if existing_soundtrack
is not None else '.newSoundtrackText')),
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
h_align='center',
v_align='center',
maxwidth=280)
@@ -310,8 +310,8 @@ class SoundtrackEditWindow(ba.Window):
else:
soundtrack[musictype] = entry
- ba.app.main_menu_window = (cls(state,
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ cls(state, transition='in_left').get_root_widget())
def _get_entry(self, song_type: str, entry: Any,
selection_target_name: str) -> None:
@@ -325,7 +325,7 @@ class SoundtrackEditWindow(ba.Window):
'last_edited_song_type': song_type
}
ba.containerwidget(edit=self._root_widget, transition='out_left')
- ba.app.main_menu_window = (music.get_music_player().select_entry(
+ ba.app.ui.set_main_menu_window(music.get_music_player().select_entry(
ba.Call(self._restore_editor, state, song_type), entry,
selection_target_name).get_root_widget())
@@ -372,8 +372,9 @@ class SoundtrackEditWindow(ba.Window):
# Resets music back to normal.
music.set_music_play_mode(ba.MusicPlayMode.REGULAR)
ba.containerwidget(edit=self._root_widget, transition='out_right')
- ba.app.main_menu_window = (stb.SoundtrackBrowserWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ stb.SoundtrackBrowserWindow(
+ transition='in_left').get_root_widget())
def _do_it(self) -> None:
from bastd.ui.soundtrack import browser as stb
@@ -414,8 +415,9 @@ class SoundtrackEditWindow(ba.Window):
# Resets music back to normal.
music.set_music_play_mode(ba.MusicPlayMode.REGULAR, force_restart=True)
- ba.app.main_menu_window = (stb.SoundtrackBrowserWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ stb.SoundtrackBrowserWindow(
+ transition='in_left').get_root_widget())
def _do_it_with_sound(self) -> None:
ba.playsound(ba.getsound('swish'))
diff --git a/assets/src/ba_data/python/bastd/ui/soundtrack/entrytypeselect.py b/assets/src/ba_data/python/bastd/ui/soundtrack/entrytypeselect.py
index b1652672..6c105975 100644
--- a/assets/src/ba_data/python/bastd/ui/soundtrack/entrytypeselect.py
+++ b/assets/src/ba_data/python/bastd/ui/soundtrack/entrytypeselect.py
@@ -82,7 +82,7 @@ class SoundtrackEntryTypeSelectWindow(ba.Window):
position=(self._width * 0.5, self._height - 32),
size=(0, 0),
text=ba.Lstr(resource=self._r + '.selectASourceText'),
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
maxwidth=230,
h_align='center',
v_align='center')
@@ -91,7 +91,7 @@ class SoundtrackEntryTypeSelectWindow(ba.Window):
position=(self._width * 0.5, self._height - 56),
size=(0, 0),
text=selection_target_name,
- color=ba.app.infotextcolor,
+ color=ba.app.ui.infotextcolor,
scale=0.7,
maxwidth=230,
h_align='center',
@@ -161,33 +161,36 @@ class SoundtrackEntryTypeSelectWindow(ba.Window):
self._current_entry)
else:
current_playlist_entry = None
- ba.app.main_menu_window = (macmusicapp.MacMusicAppPlaylistSelectWindow(
- self._callback, current_playlist_entry,
- self._current_entry).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ macmusicapp.MacMusicAppPlaylistSelectWindow(
+ self._callback, current_playlist_entry,
+ self._current_entry).get_root_widget())
def _on_music_file_press(self) -> None:
from ba.osmusic import OSMusicPlayer
from bastd.ui import fileselector
ba.containerwidget(edit=self._root_widget, transition='out_left')
base_path = _ba.android_get_external_storage_path()
- ba.app.main_menu_window = (fileselector.FileSelectorWindow(
- base_path,
- callback=self._music_file_selector_cb,
- show_base_path=False,
- valid_file_extensions=(
- OSMusicPlayer.get_valid_music_file_extensions()),
- allow_folders=False).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ fileselector.FileSelectorWindow(
+ base_path,
+ callback=self._music_file_selector_cb,
+ show_base_path=False,
+ valid_file_extensions=(
+ OSMusicPlayer.get_valid_music_file_extensions()),
+ allow_folders=False).get_root_widget())
def _on_music_folder_press(self) -> None:
from bastd.ui import fileselector
ba.containerwidget(edit=self._root_widget, transition='out_left')
base_path = _ba.android_get_external_storage_path()
- ba.app.main_menu_window = (fileselector.FileSelectorWindow(
- base_path,
- callback=self._music_folder_selector_cb,
- show_base_path=False,
- valid_file_extensions=[],
- allow_folders=True).get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ fileselector.FileSelectorWindow(
+ base_path,
+ callback=self._music_folder_selector_cb,
+ show_base_path=False,
+ valid_file_extensions=[],
+ allow_folders=True).get_root_widget())
def _music_file_selector_cb(self, result: Optional[str]) -> None:
if result is None:
diff --git a/assets/src/ba_data/python/bastd/ui/soundtrack/macmusicapp.py b/assets/src/ba_data/python/bastd/ui/soundtrack/macmusicapp.py
index 64bef0ae..8457e197 100644
--- a/assets/src/ba_data/python/bastd/ui/soundtrack/macmusicapp.py
+++ b/assets/src/ba_data/python/bastd/ui/soundtrack/macmusicapp.py
@@ -58,7 +58,7 @@ class MacMusicAppPlaylistSelectWindow(ba.Window):
position=(20, self._height - 54),
size=(self._width, 25),
text=ba.Lstr(resource=self._r + '.selectAPlaylistText'),
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
h_align='center',
v_align='center',
maxwidth=200)
diff --git a/assets/src/ba_data/python/bastd/ui/store/browser.py b/assets/src/ba_data/python/bastd/ui/store/browser.py
index 1bf05030..97090b07 100644
--- a/assets/src/ba_data/python/bastd/ui/store/browser.py
+++ b/assets/src/ba_data/python/bastd/ui/store/browser.py
@@ -160,7 +160,7 @@ class StoreBrowserWindow(ba.Window):
ba.textwidget(parent=self._root_widget,
position=(self._width * 0.5, self._height - 44),
size=(0, 0),
- color=app.title_color,
+ color=app.ui.title_color,
scale=1.5,
h_align='center',
v_align='center',
@@ -1008,7 +1008,7 @@ class StoreBrowserWindow(ba.Window):
self._tab_buttons.values()).index(sel)]
else:
raise ValueError(f'unrecognized selection \'{sel}\'')
- ba.app.window_states[self.__class__.__name__] = {
+ ba.app.ui.window_states[self.__class__.__name__] = {
'sel_name': sel_name,
'tab': self._current_tab
}
@@ -1018,8 +1018,8 @@ class StoreBrowserWindow(ba.Window):
def _restore_state(self) -> None:
try:
sel: Optional[ba.Widget]
- sel_name = ba.app.window_states.get(self.__class__.__name__,
- {}).get('sel_name')
+ sel_name = ba.app.ui.window_states.get(self.__class__.__name__,
+ {}).get('sel_name')
current_tab = ba.app.config.get('Store Tab')
if self._show_tab is not None:
current_tab = self._show_tab
@@ -1047,18 +1047,18 @@ class StoreBrowserWindow(ba.Window):
def _on_get_more_tickets_press(self) -> None:
# pylint: disable=cyclic-import
- from bastd.ui import account
- from bastd.ui import getcurrency
+ from bastd.ui.account import show_sign_in_prompt
+ from bastd.ui.getcurrency import GetCurrencyWindow
if _ba.get_account_state() != 'signed_in':
- account.show_sign_in_prompt()
+ show_sign_in_prompt()
return
self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left')
- window = getcurrency.GetCurrencyWindow(
+ window = GetCurrencyWindow(
from_modal_store=self._modal,
store_back_location=self._back_location).get_root_widget()
if not self._modal:
- ba.app.main_menu_window = window
+ ba.app.ui.set_main_menu_window(window)
def _back(self) -> None:
# pylint: disable=cyclic-import
@@ -1069,10 +1069,12 @@ class StoreBrowserWindow(ba.Window):
transition=self._transition_out)
if not self._modal:
if self._back_location == 'CoopBrowserWindow':
- ba.app.main_menu_window = (browser.CoopBrowserWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ browser.CoopBrowserWindow(
+ transition='in_left').get_root_widget())
else:
- ba.app.main_menu_window = (mainmenu.MainMenuWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ mainmenu.MainMenuWindow(
+ transition='in_left').get_root_widget())
if self._on_close_call is not None:
self._on_close_call()
diff --git a/assets/src/ba_data/python/bastd/ui/tournamententry.py b/assets/src/ba_data/python/bastd/ui/tournamententry.py
index 49ba780e..6e255229 100644
--- a/assets/src/ba_data/python/bastd/ui/tournamententry.py
+++ b/assets/src/ba_data/python/bastd/ui/tournamententry.py
@@ -233,7 +233,7 @@ class TournamentEntryWindow(popup.PopupWindow):
self._pay_with_ad_btn = None
self._get_tickets_button: Optional[ba.Widget]
- if not ba.app.toolbars:
+ if not ba.app.ui.use_toolbars:
self._get_tickets_button = ba.buttonwidget(
parent=self.root_widget,
position=(self._width - 190 + 110, 15),
@@ -255,7 +255,7 @@ class TournamentEntryWindow(popup.PopupWindow):
# Let's also ask the server for info about this tournament
# (time remaining, etc) so we can show the user time remaining,
# disallow entry if time has run out, etc.
- xoffs = 104 if ba.app.toolbars else 0
+ xoffs = 104 if ba.app.ui.use_toolbars else 0
self._time_remaining_text = ba.textwidget(parent=self.root_widget,
position=(70 + xoffs, 23),
size=(0, 0),
diff --git a/assets/src/ba_data/python/bastd/ui/url.py b/assets/src/ba_data/python/bastd/ui/url.py
index 510513fc..cb47c26c 100644
--- a/assets/src/ba_data/python/bastd/ui/url.py
+++ b/assets/src/ba_data/python/bastd/ui/url.py
@@ -74,7 +74,7 @@ class ShowURLWindow(ba.Window):
ba.textwidget(parent=self._root_widget,
position=(self._width * 0.5, self._height - 10),
size=(0, 0),
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
h_align='center',
v_align='center',
text=ba.Lstr(resource='directBrowserToURLText'),
@@ -84,7 +84,7 @@ class ShowURLWindow(ba.Window):
self._height * 0.5 + 29),
size=(0, 0),
scale=1.3,
- color=ba.app.infotextcolor,
+ color=ba.app.ui.infotextcolor,
h_align='center',
v_align='center',
text=address,
diff --git a/assets/src/ba_data/python/bastd/ui/watch.py b/assets/src/ba_data/python/bastd/ui/watch.py
index 4cb1c0e6..3924ef7e 100644
--- a/assets/src/ba_data/python/bastd/ui/watch.py
+++ b/assets/src/ba_data/python/bastd/ui/watch.py
@@ -50,7 +50,7 @@ class WatchWindow(ba.Window):
else:
self._transition_out = 'out_right'
scale_origin = None
- ba.app.main_window = 'Watch'
+ ba.app.ui.set_main_menu_location('Watch')
self._tab_data: Dict[str, Any] = {}
self._my_replays_scroll_width: Optional[float] = None
self._my_replays_watch_replay_button: Optional[ba.Widget] = None
@@ -78,7 +78,7 @@ class WatchWindow(ba.Window):
stack_offset=(0, -10) if uiscale is ba.UIScale.SMALL else (
0, 15) if uiscale is ba.UIScale.MEDIUM else (0, 0)))
- if uiscale is ba.UIScale.SMALL and ba.app.toolbars:
+ if uiscale is ba.UIScale.SMALL and ba.app.ui.use_toolbars:
ba.containerwidget(edit=self._root_widget,
on_cancel_call=self._back)
self._back_button = None
@@ -101,7 +101,7 @@ class WatchWindow(ba.Window):
ba.textwidget(parent=self._root_widget,
position=(self._width * 0.5, self._height - 38),
size=(0, 0),
- color=ba.app.title_color,
+ color=ba.app.ui.title_color,
scale=1.5,
h_align='center',
v_align='center',
@@ -121,7 +121,7 @@ class WatchWindow(ba.Window):
size=(self._width - tab_buffer_h, 50),
on_select_call=self._set_tab)
- if ba.app.toolbars:
+ if ba.app.ui.use_toolbars:
ba.widget(edit=self._tab_buttons[tabs_def[-1][0]],
right_widget=_ba.get_special_widget('party_button'))
if uiscale is ba.UIScale.SMALL:
@@ -231,7 +231,7 @@ class WatchWindow(ba.Window):
label=ba.Lstr(resource=self._r + '.watchReplayButtonText'),
autoselect=True)
ba.widget(edit=btn1, up_widget=self._tab_buttons[tab])
- if uiscale is ba.UIScale.SMALL and ba.app.toolbars:
+ if uiscale is ba.UIScale.SMALL and ba.app.ui.use_toolbars:
ba.widget(edit=btn1,
left_widget=_ba.get_special_widget('back_button'))
btnv -= b_height + b_space_extra
@@ -492,7 +492,7 @@ class WatchWindow(ba.Window):
sel_name = 'TabContainer'
else:
raise ValueError(f'unrecognized selection {sel}')
- ba.app.window_states[self.__class__.__name__] = {
+ ba.app.ui.window_states[self.__class__.__name__] = {
'sel_name': sel_name,
'tab': self._current_tab
}
@@ -501,8 +501,8 @@ class WatchWindow(ba.Window):
def _restore_state(self) -> None:
try:
- sel_name = ba.app.window_states.get(self.__class__.__name__,
- {}).get('sel_name')
+ sel_name = ba.app.ui.window_states.get(self.__class__.__name__,
+ {}).get('sel_name')
current_tab = ba.app.config.get('Watch Tab')
if current_tab is None or current_tab not in self._tab_buttons:
current_tab = 'my_replays'
@@ -523,9 +523,9 @@ class WatchWindow(ba.Window):
ba.print_exception(f'Error restoring state for {self}.')
def _back(self) -> None:
- from bastd.ui import mainmenu
+ from bastd.ui.mainmenu import MainMenuWindow
self._save_state()
ba.containerwidget(edit=self._root_widget,
transition=self._transition_out)
- ba.app.main_menu_window = (mainmenu.MainMenuWindow(
- transition='in_left').get_root_widget())
+ ba.app.ui.set_main_menu_window(
+ MainMenuWindow(transition='in_left').get_root_widget())
diff --git a/config/toolconfigsrc/pylintrc b/config/toolconfigsrc/pylintrc
index 89e19ab4..154eac9f 100644
--- a/config/toolconfigsrc/pylintrc
+++ b/config/toolconfigsrc/pylintrc
@@ -62,26 +62,26 @@ disable=broad-except,
enable=useless-suppression
[BASIC]
-# I use x, y, h, and v for graphical purposes often, where I feel like they are
-# meaningful, so adding them to the allowed list.
-# Also t, r, s for translate/rotate/scale
-# (i found myself just changing them to xval and yval which doesnt help)
+# Allowing a handfull of short names commonly understood to be iterators,
+# math concepts, or temporary variables.
good-names=i,
j,
k,
x,
y,
+ z,
h,
v,
s,
+ ui,
h2,
v2,
ex,
Run,
id,
- T,
S,
+ T,
U,
_
diff --git a/docs/ba_module.md b/docs/ba_module.md
index 5a99e382..534d3504 100644
--- a/docs/ba_module.md
+++ b/docs/ba_module.md
@@ -1,5 +1,5 @@
-last updated on 2020-07-13 for Ballistica version 1.5.20 build 20135
+last updated on 2020-07-13 for Ballistica version 1.5.20 build 20136
This page documents the Python classes and functions in the 'ba' module,
which are the ones most relevant to modding in Ballistica. If you come across something you feel should be included here or could be better explained, please let me know. Happy modding!
@@ -6401,7 +6401,7 @@ so in most cases you can just use that.
Category: General Utility Functions
Activities require special setup and thus cannot be directly
-instantiated; You must go through this function.
+instantiated; you must go through this function.