Reworked UI for easier workflow.

This commit is contained in:
2026-09-03 19:07:09 +02:00
parent c61254e4a9
commit ea323e3ab0
21 changed files with 3300 additions and 2547 deletions

View File

@@ -0,0 +1,119 @@
"""Primary game and launcher action controls."""
from __future__ import annotations
from dataclasses import dataclass
from typing import Any
@dataclass(frozen=True)
class ActionPanel:
container: Any
game_actions: Any
system_actions: Any
update_button: Any
repair_button: Any
import_button: Any
doctor_button: Any
settings_button: Any
launcher_update_button: Any
launcher_update_badge: Any
@property
def operation_buttons(self) -> tuple[Any, ...]:
return (
self.update_button,
self.repair_button,
self.doctor_button,
self.settings_button,
self.import_button,
self.launcher_update_button,
)
@property
def mutation_buttons(self) -> tuple[Any, ...]:
return (
self.update_button,
self.repair_button,
self.import_button,
self.launcher_update_button,
)
def build_action_panel(parent: Any, *, ttk: Any, launcher_version: str) -> ActionPanel:
controls = ttk.Frame(parent, style="Root.TFrame")
controls.pack(fill="x", pady=(8, 8))
controls.columnconfigure(0, weight=1, uniform="actions")
controls.columnconfigure(1, weight=1, uniform="actions")
game_actions = ttk.Frame(controls, style="Surface.TFrame", padding=12)
game_actions.grid(row=0, column=0, sticky="nsew", padx=(0, 4))
ttk.Label(game_actions, text="GAME FILES", style="Section.TLabel").pack(anchor="w")
game_button_row = ttk.Frame(game_actions, style="Surface.TFrame")
game_button_row.pack(anchor="w", fill="x", pady=(6, 0))
update_button = ttk.Button(
game_button_row,
text="UPDATE",
style="Secondary.TButton",
underline=0,
)
update_button.pack(side="left")
repair_button = ttk.Button(
game_button_row,
text="REPAIR",
style="Secondary.TButton",
underline=0,
)
repair_button.pack(side="left", padx=(8, 0))
import_button = ttk.Button(
game_button_row,
text="IMPORT GAME",
style="Secondary.TButton",
underline=0,
)
import_button.pack(side="left", padx=(8, 0))
system_actions = ttk.Frame(controls, style="Surface.TFrame", padding=12)
system_actions.grid(row=0, column=1, sticky="nsew", padx=(4, 0))
system_heading = ttk.Frame(system_actions, style="Surface.TFrame")
system_heading.pack(fill="x")
ttk.Label(system_heading, text="LAUNCHER", style="Section.TLabel").pack(side="left")
launcher_update_badge = ttk.Label(
system_heading,
text="",
style="UpdateBadge.TLabel",
)
system_button_row = ttk.Frame(system_actions, style="Surface.TFrame")
system_button_row.pack(anchor="w", fill="x", pady=(6, 0))
doctor_button = ttk.Button(
system_button_row,
text="SYSTEM CHECK",
style="Secondary.TButton",
underline=7,
)
doctor_button.pack(side="left")
settings_button = ttk.Button(
system_button_row,
text="OPEN SETTINGS",
style="Secondary.TButton",
underline=5,
)
settings_button.pack(side="left", padx=(8, 0))
launcher_update_button = ttk.Button(
system_button_row,
text=f"LAUNCHER {launcher_version}",
style="Secondary.TButton",
underline=0,
)
launcher_update_button.pack(side="left", padx=(8, 0))
return ActionPanel(
container=controls,
game_actions=game_actions,
system_actions=system_actions,
update_button=update_button,
repair_button=repair_button,
import_button=import_button,
doctor_button=doctor_button,
settings_button=settings_button,
launcher_update_button=launcher_update_button,
launcher_update_badge=launcher_update_badge,
)