Build the settings UI with collapsible categories.
(self)
| 376 | self._bind_scroll_events() |
| 377 | |
| 378 | def _build_settings_ui(self) -> None: |
| 379 | """Build the settings UI with collapsible categories.""" |
| 380 | from .i18n import get_text |
| 381 | |
| 382 | # Get category order |
| 383 | category_order = [ |
| 384 | "server", |
| 385 | "logging", |
| 386 | "auth", |
| 387 | "cookie", |
| 388 | "browser", |
| 389 | "api", |
| 390 | "function_calling", |
| 391 | "timeouts", |
| 392 | "misc", |
| 393 | ] |
| 394 | |
| 395 | for cat_key in category_order: |
| 396 | keys = self._env_manager.get_category_keys(cat_key) |
| 397 | if not keys: |
| 398 | continue |
| 399 | |
| 400 | # Create collapsible frame for category |
| 401 | cat_title = get_text(f"cat_{cat_key}") |
| 402 | frame = CTkCollapsibleFrame( |
| 403 | self, |
| 404 | title=cat_title, |
| 405 | expanded=False, |
| 406 | ) |
| 407 | frame.pack(fill="x", pady=(0, 10)) |
| 408 | self._category_frames[cat_key] = frame |
| 409 | |
| 410 | # Get content frame and add settings |
| 411 | content = frame.get_content_frame() |
| 412 | content.grid_columnconfigure(0, weight=1) |
| 413 | |
| 414 | for idx, key in enumerate(sorted(keys)): |
| 415 | schema = self._env_manager.get_schema_info(key) |
| 416 | if not schema: |
| 417 | continue |
| 418 | |
| 419 | default_val, type_hint, description, _ = schema |
| 420 | current_val = self._env_manager.get(key) |
| 421 | |
| 422 | row = CTkSettingRow( |
| 423 | content, |
| 424 | key=key, |
| 425 | label=description, |
| 426 | value=current_val, |
| 427 | type_hint=type_hint, |
| 428 | on_change=self._on_setting_change, |
| 429 | ) |
| 430 | row.grid(row=idx, column=0, sticky="ew", padx=5, pady=2) |
| 431 | self._setting_rows[key] = row |
| 432 | |
| 433 | def _on_setting_change(self, key: str, value: Any) -> None: |
| 434 | """Handle individual setting change.""" |
no test coverage detected