Add GUI
This commit is contained in:
79
gui/views/settings.py
Normal file
79
gui/views/settings.py
Normal file
@@ -0,0 +1,79 @@
|
||||
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))
|
||||
Reference in New Issue
Block a user