Dock: Photoshop-style vertical icon strip for docked groups

Each dock edge now has a vertical icon strip along the window edge in
place of the horizontal tab row and the auto-hide rail.

- Every shown group gets a grip bar with its pallets' icons below it;
  the shown pallet's icon has a grey background. Clicking an icon shows
  that pallet in its group; hovering the icons of an auto-hiding group
  opens it.
- Dragging an icon within the strip reorders it or moves it into
  another group; dropping it on a grip or below the last group makes it
  a new group there. On the pallet area, the top / bottom bands still
  start a new group above / below and the middle joins the group.
- Dragging a grip moves the whole group to another position or edge.
- A + button under the groups opens the pallet menu (icon, name, check
  mark). Opening a pallet from it docks it on that edge as a new group,
  or in its existing group there; a checked pallet is hidden.
- Groups keep their width when moved; the divider against the viewport
  sizes the whole edge column.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013RyGiMXcsf9HTKfqDxaQGt
This commit is contained in:
Claude committed 2026-10-09 16:01:31 +00:00
1 parent 1176789125
commit f038fcc9a1
4 files changed
+455 -319

No files matched your search

+7 -3
View File
@@ -870,8 +870,11 @@ pub(super) struct OpenCADStudio {
pub(crate) dock_float_resizing: Option<(crate::ui::dock::PanelId, bool)>,
/// Docked panel whose title bar the pointer is over (shows pin / close).
pub(crate) dock_title_hover: Option<crate::ui::dock::PanelId>,
/// Slot (side, index) whose pallet menu is open.
pub(crate) dock_tab_menu: Option<(crate::app::config::DockSide, usize)>,
/// Edge whose icon-strip pallet menu (+) is open.
pub(crate) dock_edge_menu: Option<crate::app::config::DockSide>,
/// Group being dragged by its strip grip (side, slot index). While set,
/// `dock_dragging` holds the group's shown panel for the preview.
pub(crate) dock_dragging_group: Option<(crate::app::config::DockSide, usize)>,
/// Reference-table column currently being width-resized (column index),
/// with the last pointer position. Mirrors the Layers Name-column drag.
pub(crate) xref_col_drag: Option<usize>,
@@ -4312,7 +4315,8 @@ impl OpenCADStudio {
dock_split_drag: None,
dock_float_resizing: None,
dock_title_hover: None,
dock_tab_menu: None,
dock_edge_menu: None,
dock_dragging_group: None,
xref_col_drag: None,
xref_col_last: None,
xref_split_drag: false,