Add the Select Parent command (#2329)
* Select-Parent-Layer-Button * check fail fixed * check fail * Add hotkey, fix top-level layers getting deselected, code review --------- Co-authored-by: doxe-2611 <kolpe2611@gmail.com> Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
parent
b6cdcba9e8
commit
17215ea66f
|
|
@ -336,6 +336,7 @@ pub fn input_mappings() -> Mapping {
|
||||||
entry!(KeyDown(KeyG); modifiers=[Accel], action_dispatch=DocumentMessage::GroupSelectedLayers { group_folder_type: GroupFolderType::Layer }),
|
entry!(KeyDown(KeyG); modifiers=[Accel], action_dispatch=DocumentMessage::GroupSelectedLayers { group_folder_type: GroupFolderType::Layer }),
|
||||||
entry!(KeyDown(KeyG); modifiers=[Accel, Shift], action_dispatch=DocumentMessage::UngroupSelectedLayers),
|
entry!(KeyDown(KeyG); modifiers=[Accel, Shift], action_dispatch=DocumentMessage::UngroupSelectedLayers),
|
||||||
entry!(KeyDown(KeyN); modifiers=[Accel, Shift], action_dispatch=DocumentMessage::CreateEmptyFolder),
|
entry!(KeyDown(KeyN); modifiers=[Accel, Shift], action_dispatch=DocumentMessage::CreateEmptyFolder),
|
||||||
|
entry!(KeyDown(Backslash); modifiers=[Alt], action_dispatch=DocumentMessage::SelectParentLayer),
|
||||||
entry!(KeyDown(BracketLeft); modifiers=[Alt], action_dispatch=DocumentMessage::SelectionStepBack),
|
entry!(KeyDown(BracketLeft); modifiers=[Alt], action_dispatch=DocumentMessage::SelectionStepBack),
|
||||||
entry!(KeyDown(BracketRight); modifiers=[Alt], action_dispatch=DocumentMessage::SelectionStepForward),
|
entry!(KeyDown(BracketRight); modifiers=[Alt], action_dispatch=DocumentMessage::SelectionStepForward),
|
||||||
entry!(KeyDown(MouseBack); action_dispatch=DocumentMessage::SelectionStepBack),
|
entry!(KeyDown(MouseBack); action_dispatch=DocumentMessage::SelectionStepBack),
|
||||||
|
|
|
||||||
|
|
@ -109,6 +109,7 @@ pub enum DocumentMessage {
|
||||||
RenderRulers,
|
RenderRulers,
|
||||||
RenderScrollbars,
|
RenderScrollbars,
|
||||||
SaveDocument,
|
SaveDocument,
|
||||||
|
SelectParentLayer,
|
||||||
SelectAllLayers,
|
SelectAllLayers,
|
||||||
SelectedLayersLower,
|
SelectedLayersLower,
|
||||||
SelectedLayersLowerToBack,
|
SelectedLayersLowerToBack,
|
||||||
|
|
|
||||||
|
|
@ -931,6 +931,31 @@ impl MessageHandler<DocumentMessage, DocumentMessageData<'_>> for DocumentMessag
|
||||||
name,
|
name,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
DocumentMessage::SelectParentLayer => {
|
||||||
|
let selected_nodes = self.network_interface.selected_nodes(&[]).unwrap();
|
||||||
|
let selected_layers = selected_nodes.selected_layers(self.metadata());
|
||||||
|
|
||||||
|
let mut parent_layers = HashSet::new();
|
||||||
|
|
||||||
|
// Find the parent of each selected layer
|
||||||
|
for layer in selected_layers {
|
||||||
|
// Get this layer's parent
|
||||||
|
let Some(parent) = layer.parent(self.metadata()) else { continue };
|
||||||
|
|
||||||
|
// Either use the parent, or keep the same layer if it's already at the top level
|
||||||
|
let to_insert = if parent == LayerNodeIdentifier::ROOT_PARENT { layer } else { parent };
|
||||||
|
|
||||||
|
// Add the layer to the set of those which will become selected
|
||||||
|
parent_layers.insert(to_insert.to_node());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Select each parent layer
|
||||||
|
if !parent_layers.is_empty() {
|
||||||
|
let nodes = parent_layers.into_iter().collect();
|
||||||
|
responses.add(NodeGraphMessage::SelectedNodesSet { nodes });
|
||||||
|
responses.add(BroadcastEvent::SelectionChanged);
|
||||||
|
}
|
||||||
|
}
|
||||||
DocumentMessage::SelectAllLayers => {
|
DocumentMessage::SelectAllLayers => {
|
||||||
let metadata = self.metadata();
|
let metadata = self.metadata();
|
||||||
let all_layers_except_artboards_invisible_and_locked = metadata.all_layers().filter(|&layer| !self.network_interface.is_artboard(&layer.to_node(), &[])).filter(|&layer| {
|
let all_layers_except_artboards_invisible_and_locked = metadata.all_layers().filter(|&layer| !self.network_interface.is_artboard(&layer.to_node(), &[])).filter(|&layer| {
|
||||||
|
|
@ -1358,6 +1383,7 @@ impl MessageHandler<DocumentMessage, DocumentMessageData<'_>> for DocumentMessag
|
||||||
ToggleOverlaysVisibility,
|
ToggleOverlaysVisibility,
|
||||||
ToggleSnapping,
|
ToggleSnapping,
|
||||||
Undo,
|
Undo,
|
||||||
|
SelectParentLayer,
|
||||||
SelectionStepForward,
|
SelectionStepForward,
|
||||||
SelectionStepBack,
|
SelectionStepBack,
|
||||||
ZoomCanvasTo100Percent,
|
ZoomCanvasTo100Percent,
|
||||||
|
|
|
||||||
|
|
@ -260,6 +260,13 @@ impl LayoutHolder for MenuBarMessageHandler {
|
||||||
disabled: no_active_document || !has_selected_nodes,
|
disabled: no_active_document || !has_selected_nodes,
|
||||||
..MenuBarEntry::default()
|
..MenuBarEntry::default()
|
||||||
},
|
},
|
||||||
|
MenuBarEntry {
|
||||||
|
label: "Select Parent".into(),
|
||||||
|
shortcut: action_keys!(DocumentMessageDiscriminant::SelectParentLayer),
|
||||||
|
action: MenuBarEntry::create_action(|_| DocumentMessage::SelectParentLayer.into()),
|
||||||
|
disabled: no_active_document || !has_selected_nodes,
|
||||||
|
..MenuBarEntry::default()
|
||||||
|
},
|
||||||
MenuBarEntry {
|
MenuBarEntry {
|
||||||
label: "Previous Selection".into(),
|
label: "Previous Selection".into(),
|
||||||
icon: Some("HistoryUndo".into()),
|
icon: Some("HistoryUndo".into()),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue