ratatui_toolkit/primitives/split_layout/methods/
split_pane.rs

1use 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}