Major release — 20 items addressed
Rotation + collision
- Desk.getRotatedBounds() added; all collision checks now rotation-aware
- Post-rotation collision revert prevents overlapping items
- Rotation clamp prevents desks/landmarks clipping off grid edges
Zone UX
- Drag-to-move zones on canvas (click-drag the zone body)
- Overlapping zones: right-click shows disambiguation submenu
- Resize Zone dialog: better labels, tooltips, strict bounds clamping
Disco physics
- Landmarks now collide with other landmarks AND desks (elastic)
Undo expansion
- Room resize undoable (full snapshot + restore)
- Multi-rotate grouped into single undo click (CompoundCommand)
- Reset to Initial Layout button (in Clear dropdown)
- Generate Seating is now undoable (Ctrl+Z reverts)
UX polish
- Ghost rotation via scroll wheel before placement
- Placeholder text wraps on narrow rooms
- Multi-duplicate ghost: copies follow cursor as group, one click commits
- Ctrl+click adds/removes items from multi-selection
- Balance rule "Required" checkbox removed (always soft)
- Clear/template immediately wipes Results tab
- Default Screen/Board = 8×2 (matches palette)
Editable rules
- Edit button + double-click opens edit dialog for any rule type
- Pre-fills from existing Proximity/Zone/Balance constraint values
Downloads
- Windows: `SeatSolver-Windows.zip` — extract, double-click `SeatSolver.exe`
- JAR: `SeatSolver-1.5.0.jar` — requires Java 11+
Full Changelog: v1.4.0...v1.5.0