Feature/perf ui logic #13

Merged
gitea-admin merged 15 commits from feature/perf-ui-logic into main 2026-09-20 12:26:04 +00:00
3 changed files with 33 additions and 5 deletions
Showing only changes of commit 10b8379824 - Show all commits
+3 -3
View File
@@ -10,9 +10,9 @@ from typing import Dict
STRINGS: Dict[str, Dict[str, str]] = {
"settings.sandbox_block_network": {
"en": "Block network (AI provider still allowed)",
"ja": "ネットワークをブロック(AIプロバイダーのみ許可)",
"vi": "Chặn mạng (vẫn cho gọi nhà cung cấp AI)"},
"en": "Block network for agent-run commands",
"ja": "エージェントが実行するコマンドのネットワークをブロック",
"vi": "Chặn mạng cho lệnh do agent chạy"},
"settings.allow_url_fetch": {
"en": "Allow the agent to fetch URLs (web pages, SharePoint / OneDrive links)",
"ja": "エージェントによるURL取得を許可(Webページ、SharePoint / OneDriveリンク)",
+27
View File
@@ -0,0 +1,27 @@
"""Width of a navigation list whose current row is drawn bold.
The theme draws the selected ``sectionIndex`` row with ``font-weight: 600``
and 10px padding each side (``theme/qss.py``). Sizing the list from the plain
font left the selected label too wide for its row, so "Sandbox Security
Layer" was cut off in Settings as soon as it was picked.
"""
from __future__ import annotations
from typing import Iterable
from PySide6.QtGui import QFont, QFontMetrics
#: Item padding (10px x 2) + item radius + list frame, with a little slack.
ROW_CHROME_PX = 48
def selected_label_width(widget, labels: Iterable[str]) -> int:
"""Pixels needed to show the widest of ``labels`` in the bold selected style."""
widget.ensurePolished()
bold = QFont(widget.font())
bold.setWeight(QFont.Weight.DemiBold)
metrics = QFontMetrics(bold)
return max((metrics.horizontalAdvance(label) for label in labels), default=0) + ROW_CHROME_PX
__all__ = ["ROW_CHROME_PX", "selected_label_width"]
+3 -2
View File
@@ -490,8 +490,9 @@ def section_panels(sections, width: int = 260):
index.currentRowChanged.connect(stack.setCurrentIndex)
index.setCurrentRow(0)
natural = max(index.fontMetrics().horizontalAdvance(lab) for lab, _w in sections) + 36
index.setFixedWidth(max(120, min(width, natural)))
# Sized for the SELECTED look (bold + padding), or the picked label is cut.
from ..presentation.shared.list_sizing import selected_label_width
index.setFixedWidth(max(120, min(width, selected_label_width(index, [lab for lab, _w in sections]))))
return index, stack