fix(co4e): section actions are text again, and "+ Mới" says it did something
* "+ Mới" / "Quản lý skill…" were full buttons, ~40px tall each — the
loudest thing in a 230px sidebar, and three rows of height spent on
them. The wireframe writes these as small accent text beside the
heading; they are now 17px.
* "+ Mới" looked broken. It was not: it replaces the canvas with a fresh
empty flow, verified by loading a saved 3-node flow and pressing it
(3 nodes → 0). But pressing it while the canvas ALREADY held an empty
untitled flow produced an identical empty untitled flow — right, and
invisible. It now focuses and selects the name field, and says
"Flow mới — đặt tên rồi kéo agent vào canvas" in the status bar, so the
press always has a visible result.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2666,6 +2666,10 @@ STRINGS: Dict[str, Dict[str, str]] = {
|
|||||||
"en": "Show every flow run", "ja": "すべてのフロー実行を表示",
|
"en": "Show every flow run", "ja": "すべてのフロー実行を表示",
|
||||||
"vi": "Xem toàn bộ lần chạy flow"},
|
"vi": "Xem toàn bộ lần chạy flow"},
|
||||||
"co4e.back_to_flow": {"en": "Back to flow", "ja": "フローに戻る", "vi": "Về flow"},
|
"co4e.back_to_flow": {"en": "Back to flow", "ja": "フローに戻る", "vi": "Về flow"},
|
||||||
|
"co4e.new_flow_ready": {
|
||||||
|
"en": "New flow — type a name, then drag agents onto the canvas",
|
||||||
|
"ja": "新しいフロー — 名前を入力し、エージェントをキャンバスへ",
|
||||||
|
"vi": "Flow mới — đặt tên rồi kéo agent vào canvas"},
|
||||||
"co4e.tt_back_to_flow": {
|
"co4e.tt_back_to_flow": {
|
||||||
"en": "Back to the flow editor", "ja": "フローエディタに戻る",
|
"en": "Back to the flow editor", "ja": "フローエディタに戻る",
|
||||||
"vi": "Quay lại màn dựng flow"},
|
"vi": "Quay lại màn dựng flow"},
|
||||||
|
|||||||
@@ -430,6 +430,16 @@ QTabBar#viewTabs::tab:hover { background: $hover; color: $text; }
|
|||||||
QTabBar#viewTabs::tab:selected { background: $active; color: $text; font-weight: 600; }
|
QTabBar#viewTabs::tab:selected { background: $active; color: $text; font-weight: 600; }
|
||||||
/* Co4E sidebar section headings — same quiet caps as the rail's RECENTS, so
|
/* Co4E sidebar section headings — same quiet caps as the rail's RECENTS, so
|
||||||
"which list am I looking at" is answered on screen, not in a tooltip. */
|
"which list am I looking at" is answered on screen, not in a tooltip. */
|
||||||
|
/* The action beside a Co4E section heading ("+ Mới", "Quản lý skill…"). The
|
||||||
|
wireframe writes these as small accent text; as full buttons they were the
|
||||||
|
loudest thing in the sidebar and each cost a row of height. */
|
||||||
|
QPushButton#co4eSectionAction {
|
||||||
|
background: transparent; border: none; color: $accent;
|
||||||
|
font-size: 11px; font-weight: 600; padding: 1px 4px;
|
||||||
|
border-radius: ${radius_sm}px; qproperty-iconSize: 11px 11px;
|
||||||
|
}
|
||||||
|
QPushButton#co4eSectionAction:hover { background: $hover; color: $accent; }
|
||||||
|
QPushButton#co4eSectionAction:pressed { background: $active; }
|
||||||
QPushButton#co4eSectionHdr {
|
QPushButton#co4eSectionHdr {
|
||||||
color: $text_faint; font-size: 11px; font-weight: 700; letter-spacing: 0.5px;
|
color: $text_faint; font-size: 11px; font-weight: 700; letter-spacing: 0.5px;
|
||||||
background: transparent; border: none; text-align: left; padding: 2px 0;
|
background: transparent; border: none; text-align: left; padding: 2px 0;
|
||||||
|
|||||||
+17
-1
@@ -515,6 +515,9 @@ class Co4ETab(QWidget):
|
|||||||
self.wf_new_btn = QPushButton(tr("co4e.new"))
|
self.wf_new_btn = QPushButton(tr("co4e.new"))
|
||||||
self.wf_new_btn.setIcon(icon("plus"))
|
self.wf_new_btn.setIcon(icon("plus"))
|
||||||
self.wf_new_btn.setToolTip(tr("co4e.tt_new_wf"))
|
self.wf_new_btn.setToolTip(tr("co4e.tt_new_wf"))
|
||||||
|
self.wf_new_btn.setObjectName("co4eSectionAction")
|
||||||
|
self.wf_new_btn.setFlat(True)
|
||||||
|
self.wf_new_btn.setCursor(Qt.PointingHandCursor)
|
||||||
self.wf_new_btn.clicked.connect(self._new_workflow)
|
self.wf_new_btn.clicked.connect(self._new_workflow)
|
||||||
wf_body = QWidget(); wl = QVBoxLayout(wf_body)
|
wf_body = QWidget(); wl = QVBoxLayout(wf_body)
|
||||||
wl.setContentsMargins(0, 0, 0, 0); wl.setSpacing(4)
|
wl.setContentsMargins(0, 0, 0, 0); wl.setSpacing(4)
|
||||||
@@ -545,6 +548,9 @@ class Co4ETab(QWidget):
|
|||||||
# --- AGENTS ------------------------------------------------------
|
# --- AGENTS ------------------------------------------------------
|
||||||
self.ag_new_btn = QPushButton(tr("co4e.new")); self.ag_new_btn.setIcon(icon("plus"))
|
self.ag_new_btn = QPushButton(tr("co4e.new")); self.ag_new_btn.setIcon(icon("plus"))
|
||||||
self.ag_new_btn.setToolTip(tr("co4e.tt_new_agent"))
|
self.ag_new_btn.setToolTip(tr("co4e.tt_new_agent"))
|
||||||
|
self.ag_new_btn.setObjectName("co4eSectionAction")
|
||||||
|
self.ag_new_btn.setFlat(True)
|
||||||
|
self.ag_new_btn.setCursor(Qt.PointingHandCursor)
|
||||||
self.ag_new_btn.clicked.connect(self._new_agent)
|
self.ag_new_btn.clicked.connect(self._new_agent)
|
||||||
ag_body = QWidget(); al = QVBoxLayout(ag_body)
|
ag_body = QWidget(); al = QVBoxLayout(ag_body)
|
||||||
al.setContentsMargins(0, 0, 0, 0); al.setSpacing(4)
|
al.setContentsMargins(0, 0, 0, 0); al.setSpacing(4)
|
||||||
@@ -563,6 +569,9 @@ class Co4ETab(QWidget):
|
|||||||
# --- SKILLS ------------------------------------------------------
|
# --- SKILLS ------------------------------------------------------
|
||||||
self.sk_manage_btn = QPushButton(tr("co4e.manage_skills"))
|
self.sk_manage_btn = QPushButton(tr("co4e.manage_skills"))
|
||||||
self.sk_manage_btn.setToolTip(tr("co4e.tt_manage_skills"))
|
self.sk_manage_btn.setToolTip(tr("co4e.tt_manage_skills"))
|
||||||
|
self.sk_manage_btn.setObjectName("co4eSectionAction")
|
||||||
|
self.sk_manage_btn.setFlat(True)
|
||||||
|
self.sk_manage_btn.setCursor(Qt.PointingHandCursor)
|
||||||
self.sk_manage_btn.clicked.connect(self._manage_skills)
|
self.sk_manage_btn.clicked.connect(self._manage_skills)
|
||||||
sk_body = QWidget(); sl = QVBoxLayout(sk_body)
|
sk_body = QWidget(); sl = QVBoxLayout(sk_body)
|
||||||
sl.setContentsMargins(0, 0, 0, 0); sl.setSpacing(4)
|
sl.setContentsMargins(0, 0, 0, 0); sl.setSpacing(4)
|
||||||
@@ -1199,7 +1208,14 @@ class Co4ETab(QWidget):
|
|||||||
self._refresh_usage_total() # show THIS flow's token/cost total
|
self._refresh_usage_total() # show THIS flow's token/cost total
|
||||||
|
|
||||||
def _new_workflow(self) -> None:
|
def _new_workflow(self) -> None:
|
||||||
self._open_flow(co4e.new_workflow(tr("co4e.untitled"))) # opens a new tab
|
self._open_flow(co4e.new_workflow(tr("co4e.untitled")))
|
||||||
|
# Pressing this while the canvas already holds an empty untitled flow
|
||||||
|
# produced an identical empty untitled flow — correct, and completely
|
||||||
|
# invisible, so the button read as broken. Say what happened and put the
|
||||||
|
# cursor where the next thing to do is: naming it.
|
||||||
|
self.name_edit.setFocus()
|
||||||
|
self.name_edit.selectAll()
|
||||||
|
self.status_message.emit(tr("co4e.new_flow_ready"))
|
||||||
|
|
||||||
def _selected_wf(self) -> Optional[co4e.Workflow]:
|
def _selected_wf(self) -> Optional[co4e.Workflow]:
|
||||||
"""Materialise the selected saved-flow row into a Workflow."""
|
"""Materialise the selected saved-flow row into a Workflow."""
|
||||||
|
|||||||
Reference in New Issue
Block a user