Merge pull request #1702 from MarcelP102/Pallet-placement

[UX] Pallets you can dock, group and float (including LAYERS panel)
This commit is contained in:
Hakan Seven committed 2026-10-12 00:27:53 +03:00
commit 7ca457a6cc
54 files changed
+4245 -1098

No files matched your search

+17 -24
View File
@@ -2608,27 +2608,19 @@ impl OpenCADStudio {
Message::ScriptLine(line) => self.feed_script_line(&line),
Message::ToggleLayers => {
if self.active_modal == Some(super::ModalKind::Layers) {
self.ribbon.deactivate_tool_if("LAYERS");
self.active_modal = None;
self.reset_modal_geometry();
} else {
self.sync_ribbon_layers();
self.active_modal = Some(super::ModalKind::Layers);
if self.show_layers {
return self.on_dock(crate::ui::dock::DockMsg::Close(
crate::ui::dock::PanelId::Layers,
));
}
self.open_layers_pallet();
Task::none()
}
Message::ToggleXrefManager => {
self.show_external_references ^= true;
if self.show_external_references {
use crate::app::config::DockSide;
use crate::ui::dock::PanelId;
if self.dock.location(PanelId::ExternalReferences).is_none() {
self.dock
.dock(PanelId::ExternalReferences, DockSide::Right, usize::MAX);
}
self.dock_expanded = Some(PanelId::ExternalReferences);
self.dock_open_at_default(crate::ui::dock::PanelId::ExternalReferences);
self.refresh_xref_manager();
}
Task::none()
@@ -6362,8 +6354,11 @@ impl OpenCADStudio {
// Ctrl+A in the MText editor selects all of its text.
self.mtext_select_all();
Task::none()
} else if self.active_modal == Some(super::ModalKind::Layers) {
// Select every row in the Layer Manager (#236).
} else if self.dock_panel_visible(crate::ui::dock::PanelId::Layers)
&& self.tabs[i].layers.selected.is_some()
{
// Select every row in the Layer Manager (#236) while the
// user is working in it (a layer row is selected).
let n = self.tabs[i].layers.layers.len();
self.tabs[i].layers.selected_multi = (0..n).collect();
self.tabs[i].layers.selected = (n > 0).then_some(0);
@@ -9144,17 +9139,16 @@ impl OpenCADStudio {
Task::none()
}
Message::LayerNameColGrab => {
// Start a Name-column divider drag; rides ModalDragMove.
self.layer_col_dragging = true;
self.modal_drag_last = None;
// Start a Name-column divider drag; the dock's pointer capture
// feeds it (see `on_dock`).
self.dock_drag = Some(crate::ui::dock::DockDrag::LayerColumn);
self.dock_drag_last = None;
Task::none()
}
Message::ModalDragMove(p) => {
if let Some(last) = self.modal_drag_last {
let (dx, dy) = (p.x - last.x, p.y - last.y);
if self.layer_col_dragging {
self.layer_name_col_w = (self.layer_name_col_w + dx).clamp(60.0, 640.0);
} else if self.modal_resizing {
if self.modal_resizing {
// The grip sits bottom-right, so dragging out grows the
// box. The delta is added to each dialog's natural size,
// so clamp it at zero — dragging in past the natural size
@@ -9188,7 +9182,7 @@ impl OpenCADStudio {
}
}
}
if self.modal_dragging || self.modal_resizing || self.layer_col_dragging {
if self.modal_dragging || self.modal_resizing {
self.modal_drag_last = Some(p);
}
Task::none()
@@ -9196,7 +9190,6 @@ impl OpenCADStudio {
Message::ModalDragRelease => {
self.modal_dragging = false;
self.modal_resizing = false;
self.layer_col_dragging = false;
self.modal_drag_last = None;
Task::none()
}