pub struct SplitLayout { /* private fields */ }Expand description
A layout tree for arranging multiple resizable panes.
Split layouts start with a single pane and can be subdivided into horizontal or vertical splits. Each split stores a percentage for the first pane, enabling resizing of the divider.
§Example
use ratatui_toolkit::primitives::split_layout::SplitLayout;
let mut layout = SplitLayout::new(1);
let _ = layout.split_pane_horizontally(1);Implementations§
Source§impl SplitLayout
impl SplitLayout
Sourcepub fn new(pane_id: PaneId) -> Self
pub fn new(pane_id: PaneId) -> Self
Creates a layout with a single pane as the root.
§Arguments
pane_id: Identifier for the initial pane.
§Returns
A new SplitLayout containing the provided pane ID.
§Errors
- None.
§Panics
- Does not panic.
§Safety
- No safety requirements.
§Performance
- O(1).
§Example
use ratatui_toolkit::primitives::split_layout::SplitLayout;
let layout = SplitLayout::new(0);Source§impl SplitLayout
impl SplitLayout
Sourcepub fn layout_dividers(&self, area: Rect) -> Vec<SplitDividerLayout>
pub fn layout_dividers(&self, area: Rect) -> Vec<SplitDividerLayout>
Calculates divider metadata for the current split tree.
Source§impl SplitLayout
impl SplitLayout
Sourcepub fn layout_panes(&self, area: Rect) -> Vec<PaneLayout>
pub fn layout_panes(&self, area: Rect) -> Vec<PaneLayout>
Calculates pane rectangles for the current split tree.
§Arguments
area: The available rectangle to divide among panes.
§Returns
A vector of PaneLayout values for each leaf pane.
§Errors
- None.
§Panics
- Does not panic.
§Safety
- No safety requirements.
§Performance
- O(n) where n is the number of nodes.
§Example
use ratatui::layout::Rect;
use ratatui_toolkit::primitives::split_layout::SplitLayout;
let layout = SplitLayout::new(0);
let panes = layout.layout_panes(Rect::new(0, 0, 120, 40));Source§impl SplitLayout
impl SplitLayout
Sourcepub fn move_pane(&mut self, pane_id: PaneId, target_pane_id: PaneId) -> bool
pub fn move_pane(&mut self, pane_id: PaneId, target_pane_id: PaneId) -> bool
Moves a pane by swapping it with another pane.
§Arguments
pane_id: The pane to move.target_pane_id: The pane that receives the original pane’s position.
§Returns
true when both panes exist and the swap completed.
§Errors
- None.
§Panics
- Does not panic.
§Safety
- No safety requirements.
§Performance
- O(n) to locate both panes.
§Example
use ratatui_toolkit::primitives::split_layout::SplitLayout;
let mut layout = SplitLayout::new(1);
let pane_id = layout.split_pane_vertically(1).unwrap();
let _ = layout.move_pane(1, pane_id);Source§impl SplitLayout
impl SplitLayout
Sourcepub fn remove_pane(&mut self, pane_id: PaneId) -> bool
pub fn remove_pane(&mut self, pane_id: PaneId) -> bool
Removes a pane and collapses its parent split.
§Arguments
pane_id: The pane to remove.
§Returns
true when a pane is removed and the split collapses.
§Errors
- None.
§Panics
- Does not panic.
§Safety
- No safety requirements.
§Performance
- O(n) to locate the pane.
§Example
use ratatui_toolkit::primitives::split_layout::SplitLayout;
let mut layout = SplitLayout::new(0);
let pane_id = layout.split_pane_vertically(0).unwrap();
let _ = layout.remove_pane(pane_id);Source§impl SplitLayout
impl SplitLayout
Sourcepub fn resize_divider(&mut self, pane_id: PaneId, percent: u16) -> bool
pub fn resize_divider(&mut self, pane_id: PaneId, percent: u16) -> bool
Resizes the split containing a pane.
§Arguments
pane_id: The pane whose split divider should be resized.percent: The percentage to allocate to the pane within its split.
§Returns
true when the pane is part of a split and the divider was updated.
§Errors
- None.
§Panics
- Does not panic.
§Safety
- No safety requirements.
§Performance
- O(n) to locate the pane.
§Example
use ratatui_toolkit::primitives::split_layout::SplitLayout;
let mut layout = SplitLayout::new(0);
let pane_id = layout.split_pane_vertically(0).unwrap();
let _ = layout.resize_divider(pane_id, 30);Source§impl SplitLayout
impl SplitLayout
Sourcepub fn resize_split(&mut self, split_index: usize, percent: u16) -> bool
pub fn resize_split(&mut self, split_index: usize, percent: u16) -> bool
Resizes a split node by index.
Source§impl SplitLayout
impl SplitLayout
Sourcepub fn split_pane_horizontally(&mut self, pane_id: PaneId) -> Option<PaneId>
pub fn split_pane_horizontally(&mut self, pane_id: PaneId) -> Option<PaneId>
Splits a pane into a top and bottom pair.
§Arguments
pane_id: The pane to split.
§Returns
The newly created pane ID when the split succeeds, or None when the
pane cannot be found.
§Errors
- None.
§Panics
- Does not panic.
§Safety
- No safety requirements.
§Performance
- O(n) to locate the pane.
§Example
use ratatui_toolkit::primitives::split_layout::SplitLayout;
let mut layout = SplitLayout::new(0);
let _ = layout.split_pane_horizontally(0);Source§impl SplitLayout
impl SplitLayout
Sourcepub fn split_pane_vertically(&mut self, pane_id: PaneId) -> Option<PaneId>
pub fn split_pane_vertically(&mut self, pane_id: PaneId) -> Option<PaneId>
Splits a pane into a left and right pair.
§Arguments
pane_id: The pane to split.
§Returns
The newly created pane ID when the split succeeds, or None when the
pane cannot be found.
§Errors
- None.
§Panics
- Does not panic.
§Safety
- No safety requirements.
§Performance
- O(n) to locate the pane.
§Example
use ratatui_toolkit::primitives::split_layout::SplitLayout;
let mut layout = SplitLayout::new(0);
let _ = layout.split_pane_vertically(0);Trait Implementations§
Source§impl Clone for SplitLayout
impl Clone for SplitLayout
Source§fn clone(&self) -> SplitLayout
fn clone(&self) -> SplitLayout
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for SplitLayout
impl RefUnwindSafe for SplitLayout
impl Send for SplitLayout
impl Sync for SplitLayout
impl Unpin for SplitLayout
impl UnwindSafe for SplitLayout
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more