75 lines
1.9 KiB
Python
75 lines
1.9 KiB
Python
"""Dashboard header construction."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from typing import Any
|
|
|
|
from ..viewmodels.dashboard import preloader_logo_subsample_factor
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class DashboardHeader:
|
|
frame: Any
|
|
version: Any
|
|
logo: Any
|
|
|
|
|
|
def build_dashboard_header(
|
|
parent: Any,
|
|
*,
|
|
widgets: Any,
|
|
tk_module: Any,
|
|
launcher_version: str,
|
|
window_icon: Any | None,
|
|
) -> DashboardHeader:
|
|
"""Build the shared content frame and branded dashboard heading."""
|
|
|
|
frame = widgets.Frame(parent, style="Root.TFrame", padding=12)
|
|
frame.pack(fill="both", expand=True)
|
|
header = widgets.Frame(frame, style="Root.TFrame")
|
|
header.pack(fill="x", pady=(0, 8))
|
|
logo = tk_module.Canvas(
|
|
header,
|
|
width=42,
|
|
height=42,
|
|
background="#0c0908",
|
|
highlightthickness=0,
|
|
borderwidth=0,
|
|
)
|
|
dashboard_header_icon = None
|
|
icon: Any = window_icon
|
|
if icon is not None:
|
|
try:
|
|
header_icon_factor = preloader_logo_subsample_factor(
|
|
icon.width(),
|
|
icon.height(),
|
|
max_dimension=40,
|
|
)
|
|
dashboard_header_icon = icon.subsample(
|
|
header_icon_factor,
|
|
header_icon_factor,
|
|
)
|
|
except tk_module.TclError:
|
|
dashboard_header_icon = None
|
|
if dashboard_header_icon is not None:
|
|
logo.create_image(21, 21, image=dashboard_header_icon)
|
|
logo.image = dashboard_header_icon
|
|
logo.pack(side="left", padx=(0, 9))
|
|
brand = widgets.Frame(header, style="Root.TFrame")
|
|
brand.pack(side="left", fill="x", expand=True)
|
|
widgets.Label(brand, text="PRISTONTALE EU", style="Brand.TLabel").pack(anchor="w")
|
|
widgets.Label(
|
|
brand,
|
|
text="PRISTONTALE EU · NATIVE LINUX LAUNCHER",
|
|
style="Tagline.TLabel",
|
|
).pack(anchor="w", pady=(1, 0))
|
|
version = tk_module.StringVar(
|
|
value=f"Launcher {launcher_version} · checking official game build…"
|
|
)
|
|
widgets.Label(header, textvariable=version, style="Tagline.TLabel").pack(
|
|
side="right",
|
|
anchor="e",
|
|
)
|
|
return DashboardHeader(frame=frame, version=version, logo=logo)
|