Dock: one group per edge at a time, pallets stacked within a group

A group is now a set of pallets shown together, stacked top to bottom,
and an edge shows one group at a time. The icon strip lists every group
(grip bar over its pallets' icons, the shown group on a grey
background); clicking any icon of a group shows that whole group.

- Dropping a pallet on the top / bottom half of a pallet in the shown
  group stacks it above / below; dropping on the strip's icons places it
  in that group at that spot, and on a grip or below the last group
  starts a new group (which is then shown).
- Splitters set the heights of the pallets within a group; double-click
  makes them equal again.
- Each group keeps its own width; the divider sizes only the group it
  belongs to, and switching groups switches width.
- A group whose pallets all auto-hide shows only while hovered.
- Layouts saved by older builds load with their stacked pallets as one
  group.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013RyGiMXcsf9HTKfqDxaQGt
This commit is contained in:
Claude committed 2026-10-09 17:30:00 +00:00
1 parent f038fcc9a1
commit 47c2e2f2fe
4 files changed
+821 -915

No files matched your search

+3 -2
View File
@@ -863,8 +863,9 @@ pub(super) struct OpenCADStudio {
/// Pointer offset from a dragged panel's top-left corner, so a floated
/// panel lands where it is held rather than jumping to the pointer.
pub(crate) dock_grab_offset: iced::Vector,
/// Splitter being dragged between two slots on a side (upper, lower).
pub(crate) dock_split_drag: Option<(crate::app::config::DockSide, usize, usize)>,
/// Splitter being dragged between two pallets of a group (side, group,
/// upper, lower).
pub(crate) dock_split_drag: Option<(crate::app::config::DockSide, usize, usize, usize)>,
/// Floating panel being resized from its corner grip, and whether from
/// the bottom-left corner.
pub(crate) dock_float_resizing: Option<(crate::ui::dock::PanelId, bool)>,