Co4E step config as collapsible sections; tighter Kanban lanes; Output panel fills its column
CI / test (pull_request) Canceled after 0s

- co4e_config_panel: StepConfigPanel reorganized into four collapsible,
  borderless sections (Co ban / Model & Quyen / Skills & Tep / Agent song
  song) instead of one long form. Agent song song is its own section,
  shown only for parallel-variant steps. Fixes a QVBoxLayout without a
  trailing stretch that was handing every section an equal share of the
  scroll area's leftover height instead of sizing to content.
- schedule_task_tab / theme: Kanban board lane gutters and per-lane
  margins trimmed so the seven lanes read their card content more
  clearly on a laptop-width window.
- chat_panel / widgets: the Output Files list in Cowork/Code no longer
  stops at a fixed height with empty panel below it - it now fills the
  column down to the composer.
- composer: Attach/Send/Stop buttons match the input box's height and
  align to its top/bottom edge instead of floating centered beside it.
- app.py: the sidebar's "All projects" link reads as a link (italic,
  accent color) instead of a plain row.
- i18n: labels for the three renamed Co4E section headers (VI/EN/JA).
This commit is contained in:
Hiep Ha Van
2026-08-20 01:09:01 +09:00
parent 2ea20a8548
commit d68d91ae05
8 changed files with 202 additions and 32 deletions
+10 -3
View File
@@ -739,7 +739,11 @@ class CollapsibleSection(QWidget):
activated = Signal(str) # emits the path of a clicked item
def __init__(self, title: str, max_height: int = 130):
def __init__(self, title: str, max_height: int | None = 130):
"""``max_height`` caps the list so it scrolls instead of growing
(the default, e.g. for a section sharing space with siblings).
``None`` instead lets it expand to fill whatever room its parent
layout hands it — for a section that owns the whole panel."""
super().__init__()
self._title = title
self._paths: list[str] = []
@@ -756,11 +760,14 @@ class CollapsibleSection(QWidget):
lay.addWidget(self.header)
self.list = QListWidget()
self.list.setMaximumHeight(max_height) # scrolls when longer
if max_height is not None:
self.list.setMaximumHeight(max_height) # scrolls when longer
else:
self.list.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)
self.list.setVisible(False)
self.list.itemActivated.connect(self._emit)
self.list.itemClicked.connect(self._emit)
lay.addWidget(self.list)
lay.addWidget(self.list, 1 if max_height is None else 0)
self.setVisible(False)
self._update_header()