git.lucas.co / cce-designer
graphic design tool
git clone https://git.lucas.co/cce-designer.git

commit7c1a5f176c0514beed3b1cbaa0ff902609011a91
parenta08bda0446
authorLucas Galante <[email protected]>
date2026-09-01 10:26
feat: the plate menu's tab section is a radio group

Every tab in the dock is listed — the front one marked with a filled
dot, the rest hollow — so the section reads as state, not just as
actions. Clicking the marked row is a no-op (show_dock_tab declines
the already-active slot); clicking a hollow one fronts it. A single-
tab plate shows its one marked row: the plate's identity at a glance.

Co-Authored-By: Claude Fable 5 <[email protected]>

 src/plate_corner.rs | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/src/plate_corner.rs b/src/plate_corner.rs
index 88c8355..1987248 100644
--- a/src/plate_corner.rs
+++ b/src/plate_corner.rs
@@ -178,14 +178,15 @@ impl State {
         // can be pulled in as tabs; a pane sharing its dock can move back
         // out to the empty dock its arrival left behind.
         if let Some(d) = self.dock_of_pane(idx) {
-            let switch_rows: Vec<usize> =
-                self.dock_tabs[d as usize].iter().copied().filter(|&t| t != idx).collect();
-            if !switch_rows.is_empty() {
-                separate(&mut options, &mut actions);
-                for t in switch_rows {
-                    options.push(format!("Tab: {}", plate_title(t)));
-                    actions.push(PlateMenuAction::ShowTab(t));
-                }
+            // The dock's tabs as a RADIO group: every tab listed, the front
+            // one marked. Clicking the marked row is a no-op (show_dock_tab
+            // declines the already-active slot), so the list reads as state,
+            // not just as actions.
+            separate(&mut options, &mut actions);
+            for &t in &self.dock_tabs[d as usize] {
+                let mark = if t == idx { "●" } else { "○" };
+                options.push(format!("{mark} {}", plate_title(t)));
+                actions.push(PlateMenuAction::ShowTab(t));
             }
             let mut managed = false;
             for other in TAB_CANDIDATES {