theme!
This commit is contained in:
94
gui.py
94
gui.py
@@ -10,6 +10,7 @@ import ai_client
|
||||
from ai_client import ProviderError
|
||||
import shell_runner
|
||||
import session_logger
|
||||
import theme
|
||||
|
||||
CONFIG_PATH = Path("config.toml")
|
||||
PROVIDERS = ["gemini", "anthropic"]
|
||||
@@ -459,6 +460,7 @@ class App:
|
||||
"provider": self.current_provider,
|
||||
"model": self.current_model,
|
||||
}
|
||||
theme.save_to_config(self.config)
|
||||
|
||||
def _do_generate(self) -> tuple[str, Path, list]:
|
||||
self._flush_to_config()
|
||||
@@ -792,6 +794,93 @@ class App:
|
||||
self.disc_entries.append({"role": "AI", "content": resp})
|
||||
self._rebuild_disc_list()
|
||||
|
||||
|
||||
# ------------------------------------------------------------ theme
|
||||
|
||||
def cb_palette_changed(self, sender, app_data):
|
||||
theme.apply(app_data, self._read_colour_overrides())
|
||||
self._update_status(f"palette: {app_data}")
|
||||
|
||||
def cb_apply_font(self):
|
||||
path = dpg.get_value("theme_font_path").strip()
|
||||
size = dpg.get_value("theme_font_size")
|
||||
theme.apply_font(path, size)
|
||||
self._update_status(f"font applied: {path or '(default)'} @{size}px")
|
||||
|
||||
def cb_browse_font(self):
|
||||
root = hide_tk_root()
|
||||
p = filedialog.askopenfilename(
|
||||
title="Select Font",
|
||||
filetypes=[("TrueType / OpenType", "*.ttf *.otf"), ("All", "*.*")],
|
||||
)
|
||||
root.destroy()
|
||||
if p:
|
||||
dpg.set_value("theme_font_path", p)
|
||||
self.cb_apply_font()
|
||||
|
||||
def cb_scale_changed(self, sender, app_data):
|
||||
theme.set_scale(round(app_data, 2))
|
||||
|
||||
def _read_colour_overrides(self) -> dict:
|
||||
return {}
|
||||
|
||||
def _build_theme_window(self):
|
||||
t_cfg = self.config.get("theme", {})
|
||||
cur_palette = t_cfg.get("palette", "DPG Default")
|
||||
cur_font_path = t_cfg.get("font_path", "")
|
||||
cur_font_size = float(t_cfg.get("font_size", 14.0))
|
||||
cur_scale = float(t_cfg.get("scale", 1.0))
|
||||
|
||||
with dpg.window(
|
||||
label="Theme",
|
||||
tag="win_theme",
|
||||
pos=(416, 516),
|
||||
width=400,
|
||||
height=280,
|
||||
no_close=True,
|
||||
):
|
||||
dpg.add_text("Palette")
|
||||
dpg.add_combo(
|
||||
tag="theme_palette",
|
||||
items=theme.PALETTE_NAMES,
|
||||
default_value=cur_palette,
|
||||
width=-1,
|
||||
callback=self.cb_palette_changed,
|
||||
)
|
||||
dpg.add_separator()
|
||||
dpg.add_text("Font")
|
||||
with dpg.group(horizontal=True):
|
||||
dpg.add_input_text(
|
||||
tag="theme_font_path",
|
||||
default_value=cur_font_path,
|
||||
hint="Path to .ttf / .otf (blank = built-in)",
|
||||
width=-148,
|
||||
)
|
||||
dpg.add_button(label="Browse##font", callback=self.cb_browse_font)
|
||||
with dpg.group(horizontal=True):
|
||||
dpg.add_text("Size (px)")
|
||||
dpg.add_input_float(
|
||||
tag="theme_font_size",
|
||||
default_value=cur_font_size,
|
||||
min_value=8.0,
|
||||
max_value=64.0,
|
||||
step=1.0,
|
||||
width=90,
|
||||
format="%.0f",
|
||||
)
|
||||
dpg.add_button(label="Apply Font", callback=self.cb_apply_font)
|
||||
dpg.add_separator()
|
||||
dpg.add_text("UI Scale (DPI)")
|
||||
dpg.add_slider_float(
|
||||
tag="theme_scale",
|
||||
default_value=cur_scale,
|
||||
min_value=0.5,
|
||||
max_value=3.0,
|
||||
width=-1,
|
||||
callback=self.cb_scale_changed,
|
||||
format="%.2f",
|
||||
)
|
||||
|
||||
def _build_ui(self):
|
||||
|
||||
with dpg.window(
|
||||
@@ -999,6 +1088,8 @@ class App:
|
||||
with dpg.child_window(tag="comms_scroll", height=-1, border=False, horizontal_scrollbar=True):
|
||||
pass
|
||||
|
||||
self._build_theme_window()
|
||||
|
||||
def run(self):
|
||||
dpg.create_context()
|
||||
dpg.configure_app(docking=True, docking_space=True, init_file="dpg_layout.ini")
|
||||
@@ -1007,6 +1098,8 @@ class App:
|
||||
dpg.show_viewport()
|
||||
dpg.maximize_viewport()
|
||||
self._build_ui()
|
||||
theme.load_from_config(self.config)
|
||||
self._rebuild_disc_list()
|
||||
self._fetch_models(self.current_provider)
|
||||
|
||||
while dpg.is_dearpygui_running():
|
||||
@@ -1037,3 +1130,4 @@ if __name__ == "__main__":
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user