ratatui_toolkit/primitives/split_layout/methods/
split_pane.rs1use crate::primitives::split_layout::constants::DEFAULT_SPLIT_PERCENT;
2use crate::primitives::split_layout::enums::layout_node::LayoutNode;
3use crate::primitives::split_layout::PaneId;
4use crate::primitives::split_layout::SplitAxis;
5use crate::primitives::split_layout::SplitLayout;
6
7impl SplitLayout {
8 pub(super) fn split_pane(&mut self, pane_id: PaneId, axis: SplitAxis) -> Option<PaneId> {
9 let pane_index = self.find_pane_node_index(pane_id)?;
10 let new_pane_id = self.allocate_pane_id();
11 let first_index = self.nodes.len();
12 let second_index = self.nodes.len().saturating_add(1);
13
14 self.nodes.push(LayoutNode::Pane { id: pane_id });
15 self.nodes.push(LayoutNode::Pane { id: new_pane_id });
16 self.nodes[pane_index] = LayoutNode::Split {
17 axis,
18 ratio: DEFAULT_SPLIT_PERCENT,
19 first: first_index,
20 second: second_index,
21 };
22
23 Some(new_pane_id)
24 }
25}