diff options
| author | 2023-05-22 13:24:48 +0100 | |
|---|---|---|
| committer | 2023-07-06 07:55:50 +0200 | |
| commit | 995c7c1ca9793536ad9b9d1cac94ae7b5b9a8f0a (patch) | |
| tree | 8869fd83203101c5e0fc4812e54bdc77f2867dfb /widget/src/pane_grid | |
| parent | e5c9dd54b3f51e913f39b38e8907c321c8bfd040 (diff) | |
| download | iced-995c7c1ca9793536ad9b9d1cac94ae7b5b9a8f0a.tar.gz iced-995c7c1ca9793536ad9b9d1cac94ae7b5b9a8f0a.tar.bz2 iced-995c7c1ca9793536ad9b9d1cac94ae7b5b9a8f0a.zip | |
Reuse code
Diffstat (limited to '')
| -rw-r--r-- | widget/src/pane_grid/state.rs | 57 | 
1 files changed, 22 insertions, 35 deletions
| diff --git a/widget/src/pane_grid/state.rs b/widget/src/pane_grid/state.rs index 34781a90..332b6837 100644 --- a/widget/src/pane_grid/state.rs +++ b/widget/src/pane_grid/state.rs @@ -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 | 
