Skip to content

feat(ui): toolbar trim — collapse Configure/Clone/Rename into More ▾#16

Merged
DaxxSec merged 1 commit into
mainfrom
feat/toolbar-trim
May 13, 2026
Merged

feat(ui): toolbar trim — collapse Configure/Clone/Rename into More ▾#16
DaxxSec merged 1 commit into
mainfrom
feat/toolbar-trim

Conversation

@DaxxSec
Copy link
Copy Markdown
Owner

@DaxxSec DaxxSec commented May 13, 2026

Why

User feedback after the merged redesign: "too many buttons".

Counting the current toolbar by usage tier:

  • Primary daily: Start, New
  • Common: Import, Delete
  • Occasional: Configure, Clone, Rename

The Occasional tier was eating three persistent toolbar slots for actions taken… occasionally.

What changed

Configure / Clone / Rename collapse into a single More ▾ overflow button. Tap it → popup menu with the three items.

Before:
```
[▶ Start] [+ New | ↧ Import] [⚙ Configure | ⎘ Clone | ✎ Rename] [🗑 Delete]
7 visible buttons
```

After:
```
[▶ Start] [+ New | ↧ Import] [More ▾] [🗑 Delete]
5 visible buttons
```

How the action paths stay intact

The Configure / Clone / Rename buttons are still `@IBOutlet` bound — only their toolbar placement changed. Each menu item fires the same `@IBAction` selector the original button did, so:

  • Keyboard shortcuts still work
  • Menu-bar entries still work
  • Any other selector-based dispatch path (scriptability, future automation) still works
  • The wrapped buttons' `isEnabled` state propagates to the menu items, so a disabled Configure stays disabled inside the menu (same rules `updateButtonStates` already maintains)

Test plan

  • `xcodebuild build` succeeds
  • Launch app — toolbar shows 4 pills (Start / New+Import / More ▾ / Delete)
  • Click More ▾ — menu pops with Configure… / Clone… / Rename…
  • With no VM selected, all three menu items are disabled
  • Select a VM, open menu — items enable; Clone… still opens the rename-target dialog
  • Keyboard shortcut for Delete (⌘⌫) still works

🤖 Generated with Claude Code

User feedback after merging the redesign: "too many buttons" in the
top toolbar. Counting per-pill: Start | New + Import | Configure +
Clone + Rename | Delete — seven persistent toolbar buttons for what
in practice fall into three usage tiers:

- Primary daily: Start, New
- Common: Import, Delete
- Occasional: Configure, Clone, Rename

This PR consolidates the third tier into a single "More ▾" overflow
button that pops a popup menu with the three items. Visible button
count drops 7 → 5; the three actions are still one click + one tap
away, and their @IBAction selectors / keyboard shortcuts / menu-bar
entries all keep working unchanged because the menu items target the
exact same selectors the buttons did.

New toolbar:
    [▶ Start]   [+ New | ↧ Import]   [More ▾]   [🗑 Delete]

Implementation:
- `makeMoreActionsButton()` builds the overflow trigger.
- `showMoreActionsMenu(_:)` pops the menu and propagates each
  wrapped button's `isEnabled` state to its menu item, so a
  disabled Configure stays disabled in the menu (same enabled
  rules `updateButtonStates` already maintains).
- The Configure / Clone / Rename buttons are still `@IBOutlet`
  bound — only their pill placement changed. Removing them from
  any prior pill container before the new layout pass prevents
  ghost duplicates if the layout function fires twice.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@DaxxSec DaxxSec merged commit dc214c7 into main May 13, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant