Reuse code

This commit is contained in:
Joao Freitas 2023-05-22 13:24:48 +01:00 committed by Héctor Ramón Jiménez
parent e5c9dd54b3
commit 995c7c1ca9
No known key found for this signature in database
GPG key ID: 140CC052C94F138E

View file

@ -145,7 +145,22 @@ impl<T> State<T> {
pane: &Pane,
state: T,
) -> Option<(Pane, Split)> {
let node = self.internal.layout.find(pane)?;
self.split_node(axis, Some(pane), state, false)
}
fn split_node(
&mut self,
axis: Axis,
pane: Option<&Pane>,
state: T,
inverse: bool,
) -> Option<(Pane, Split)> {
let node = if let Some(pane) = pane {
self.internal.layout.find(pane)?
} else {
// Major node
&mut self.internal.layout
};
let new_pane = {
self.internal.last_id = self.internal.last_id.checked_add(1)?;
@ -159,7 +174,11 @@ impl<T> State<T> {
Split(self.internal.last_id)
};
node.split(new_split, axis, new_pane);
if inverse {
node.split_inverse(new_split, axis, new_pane);
} else {
node.split(new_split, axis, new_pane);
}
let _ = self.panes.insert(new_pane, state);
let _ = self.maximized.take();
@ -231,42 +250,10 @@ impl<T> State<T> {
swap: bool,
) {
if let Some((state, _)) = self.close(pane) {
let _ = self.split_major_node(axis, state, swap);
let _ = self.split_node(axis, None, state, swap);
}
}
fn split_major_node(
&mut self,
axis: Axis,
state: T,
swap: bool,
) -> Option<(Pane, Split)> {
let major_node = &mut self.internal.layout;
let new_pane = {
self.internal.last_id = self.internal.last_id.checked_add(1)?;
Pane(self.internal.last_id)
};
let new_split = {
self.internal.last_id = self.internal.last_id.checked_add(1)?;
Split(self.internal.last_id)
};
if swap {
major_node.split_inverse(new_split, axis, new_pane)
} else {
major_node.split(new_split, axis, new_pane)
};
let _ = self.panes.insert(new_pane, state);
let _ = self.maximized.take();
Some((new_pane, new_split))
}
/// Swaps the position of the provided panes in the [`State`].
///
/// If you want to swap panes on drag and drop in your [`PaneGrid`], you