from __future__ import annotations from typing import TYPE_CHECKING import customtkinter as ctk from gui.views.base import BaseView if TYPE_CHECKING: from gui.app import ArmaModManagerApp class SettingsView(BaseView): """Appearance switcher, wizard re-opener, and current config display.""" def build(self) -> None: self.grid_columnconfigure(0, weight=1) self.grid_rowconfigure(1, weight=1) ctk.CTkLabel(self, text="Settings", font=ctk.CTkFont(size=22, weight="bold")).grid( row=0, column=0, sticky="w", padx=24, pady=(20, 8)) self._scroll = ctk.CTkScrollableFrame(self, fg_color="transparent") self._scroll.grid(row=1, column=0, sticky="nsew", padx=24, pady=(0, 12)) self._build_cards() def refresh(self) -> None: # Config info may have changed (e.g. after wizard); rebuild cards. for w in self._scroll.winfo_children(): w.destroy() self._build_cards() def _build_cards(self) -> None: # ── Server & Paths ──────────────────────────────────────────────────── c1 = ctk.CTkFrame(self._scroll) c1.pack(fill="x", pady=6) ctk.CTkLabel(c1, text="Server & Path Configuration", font=ctk.CTkFont(size=14, weight="bold")).pack( anchor="w", padx=16, pady=(14, 3)) ctk.CTkLabel(c1, text="Re-run the setup wizard to change your server URL, " "credentials, or Arma folder.", text_color="gray", wraplength=600, justify="left").pack( anchor="w", padx=16, pady=(0, 8)) ctk.CTkButton(c1, text="Open Setup Wizard", width=160, command=self.app.open_wizard).pack( anchor="e", padx=16, pady=(0, 14)) # ── Appearance ──────────────────────────────────────────────────────── c2 = ctk.CTkFrame(self._scroll) c2.pack(fill="x", pady=6) ctk.CTkLabel(c2, text="Appearance", font=ctk.CTkFont(size=14, weight="bold")).pack( anchor="w", padx=16, pady=(14, 3)) mode_var = ctk.StringVar(value=ctk.get_appearance_mode()) ctk.CTkOptionMenu(c2, values=["Dark", "Light", "System"], variable=mode_var, command=ctk.set_appearance_mode, width=140).pack(anchor="w", padx=16, pady=(0, 14)) # ── Current config info ─────────────────────────────────────────────── cfg = self.app.cfg if cfg: c3 = ctk.CTkFrame(self._scroll) c3.pack(fill="x", pady=6) ctk.CTkLabel(c3, text="Current Configuration", font=ctk.CTkFont(size=14, weight="bold")).pack( anchor="w", padx=16, pady=(14, 3)) info = ( f"Server: {cfg.server_url}\n" f"Arma dir: {cfg.arma_dir}\n" f"Downloads: {cfg.downloads}\n" f"Presets: {cfg.modlist_html}\n" ) ctk.CTkLabel(c3, text=info, justify="left", font=ctk.CTkFont(family="Consolas", size=11), text_color="gray").pack(anchor="w", padx=16, pady=(0, 14))