pub struct DiffFileTree {
pub nodes: Vec<TreeNode<DiffFileEntry>>,
pub state: TreeViewState,
pub selected_index: usize,
pub focused: bool,
pub theme: AppTheme,
}Expand description
A tree widget for displaying changed files in a diff.
Renders a hierarchical view of files with their modification status, similar to gitui’s file tree in the changes panel.
This is a wrapper around TreeView that
provides a specialized API for diff file trees.
Fields§
§nodes: Vec<TreeNode<DiffFileEntry>>The tree nodes containing diff file entries.
state: TreeViewStateState for selection and expansion (managed by TreeView).
selected_index: usizeCurrently selected visible row index.
focused: boolWhether this widget currently has focus.
theme: AppThemeApplication theme for styling.
Implementations§
Source§impl DiffFileTree
impl DiffFileTree
Sourcepub fn from_paths<S: AsRef<str>>(paths: &[(S, FileStatus)]) -> Self
pub fn from_paths<S: AsRef<str>>(paths: &[(S, FileStatus)]) -> Self
Creates a DiffFileTree from a list of (path, status) pairs.
Paths are parsed to build a hierarchical directory structure. Intermediate directories are created automatically.
§Arguments
paths- A slice of (path, status) pairs
§Returns
A new DiffFileTree with the file hierarchy.
§Example
use ratatui_toolkit::widgets::code_diff::diff_file_tree::{DiffFileTree, FileStatus};
let files = vec![
("src/lib.rs", FileStatus::Modified),
("src/utils/helper.rs", FileStatus::Added),
];
let tree = DiffFileTree::from_paths(&files);Source§impl DiffFileTree
impl DiffFileTree
Source§impl DiffFileTree
impl DiffFileTree
Sourcepub fn with_focus(self, focused: bool) -> Self
pub fn with_focus(self, focused: bool) -> Self
Sets the focus state and returns self for chaining.
This is a builder method that can be chained after constructors.
§Arguments
focused- Whether the tree should have focus
§Example
use ratatui_toolkit::widgets::code_diff::diff_file_tree::{DiffFileTree, FileStatus};
let tree = DiffFileTree::from_paths(&[("src/lib.rs", FileStatus::Modified)])
.with_focus(true);Source§impl DiffFileTree
impl DiffFileTree
Sourcepub fn with_theme(self, theme: &AppTheme) -> Self
pub fn with_theme(self, theme: &AppTheme) -> Self
Sets the application theme for styling.
This method applies the theme colors to the file tree widget, including selection colors, borders, and text colors.
§Arguments
theme- The application theme to use
§Returns
Self for method chaining
§Example
use ratatui_toolkit::widgets::code_diff::diff_file_tree::DiffFileTree;
use ratatui_toolkit::services::theme::AppTheme;
let theme = AppTheme::default();
let tree = DiffFileTree::new().with_theme(&theme);Sourcepub fn apply_theme(&mut self, theme: &AppTheme)
pub fn apply_theme(&mut self, theme: &AppTheme)
Applies a theme to the existing widget (non-consuming).
§Arguments
theme- The application theme to apply
Source§impl DiffFileTree
impl DiffFileTree
Sourcepub fn add_file(&mut self, path: &str, status: FileStatus)
pub fn add_file(&mut self, path: &str, status: FileStatus)
Adds a file to the tree, creating intermediate directories as needed.
§Arguments
path- The file path (e.g., “src/utils/helper.rs”)status- The modification status
Source§impl DiffFileTree
impl DiffFileTree
Sourcepub fn enter_filter_mode(&mut self)
pub fn enter_filter_mode(&mut self)
Enters filter mode, initializing an empty filter.
When in filter mode, key presses are handled by handle_filter_key
instead of normal navigation.
§Example
use ratatui_toolkit::widgets::code_diff::diff_file_tree::DiffFileTree;
let mut tree = DiffFileTree::new();
tree.enter_filter_mode();
assert!(tree.is_filter_mode());Sourcepub fn is_filter_mode(&self) -> bool
pub fn is_filter_mode(&self) -> bool
Returns whether filter input mode is currently active.
When true, key presses should be delegated to handle_filter_key.
§Returns
true if filter mode is active, false otherwise.
Sourcepub fn filter_text(&self) -> Option<&str>
pub fn filter_text(&self) -> Option<&str>
Sourcepub fn clear_filter(&mut self)
pub fn clear_filter(&mut self)
Clears the filter and exits filter mode.
This removes any active filter, showing all items again.
Source§impl DiffFileTree
impl DiffFileTree
Source§impl DiffFileTree
impl DiffFileTree
Sourcepub fn handle_filter_key(&mut self, key: KeyCode) -> bool
pub fn handle_filter_key(&mut self, key: KeyCode) -> bool
Handles a key press while in filter mode.
Delegates to TreeNavigator::handle_filter_key for consistent
filter handling across all tree components.
§Key Bindings
Esc- Clear filter and exit filter modeEnter- Exit filter mode (keep filter active)Backspace- Delete last character from filter- Any character - Append to filter
§Arguments
key- The key code that was pressed
§Returns
true if the key was handled, false otherwise.
§Example
use crossterm::event::KeyCode;
use ratatui_toolkit::widgets::code_diff::diff_file_tree::DiffFileTree;
let mut tree = DiffFileTree::new();
tree.enter_filter_mode();
// Type a character
tree.handle_filter_key(KeyCode::Char('r'));
// Exit filter mode
tree.handle_filter_key(KeyCode::Esc);Source§impl DiffFileTree
impl DiffFileTree
Sourcepub fn select_next(&mut self)
pub fn select_next(&mut self)
Selects the next visible item in the tree.
Respects the current filter (if any).
Sourcepub fn select_prev(&mut self)
pub fn select_prev(&mut self)
Selects the previous visible item in the tree.
Respects the current filter (if any).
Sourcepub fn toggle_expand(&mut self)
pub fn toggle_expand(&mut self)
Toggles the expansion state of the currently selected node.
Only has an effect if the selected node is a directory.
Sourcepub fn expand_selected(&mut self)
pub fn expand_selected(&mut self)
Expands the currently selected directory.
Only has an effect if the selected node is a directory.
Sourcepub fn collapse_selected(&mut self) -> bool
pub fn collapse_selected(&mut self) -> bool
Collapses the currently selected directory if it’s expanded.
§Returns
true if a directory was collapsed, false otherwise (not expanded
or not a directory).
Sourcepub fn go_to_parent(&mut self)
pub fn go_to_parent(&mut self)
Moves selection to the parent directory of the currently selected node.
If the selected node is already at the root level, this does nothing.
Sourcepub fn goto_top(&mut self)
pub fn goto_top(&mut self)
Goes to the first visible item in the tree.
Respects the current filter (if any).
Sourcepub fn goto_bottom(&mut self)
pub fn goto_bottom(&mut self)
Goes to the last visible item in the tree.
Respects the current filter (if any).
Sourcepub fn selected_is_dir(&self) -> Option<bool>
pub fn selected_is_dir(&self) -> Option<bool>
Returns whether the selected item is a directory.
§Returns
Some(true) if selected item is a directory, Some(false) if it’s a file,
None if no item is selected.
Sourcepub fn visible_count(&self) -> usize
pub fn visible_count(&self) -> usize
Returns the total number of visible items.
Respects the current filter (if any).
Sourcepub fn set_selected_index(&mut self, index: usize)
pub fn set_selected_index(&mut self, index: usize)
Sets the selection by visible index.
Respects the current filter (if any).
§Arguments
index- The 0-based index in the visible items list
Source§impl DiffFileTree
impl DiffFileTree
Sourcepub fn selected_path(&self) -> Option<String>
pub fn selected_path(&self) -> Option<String>
Returns the full path of the currently selected item.
§Returns
Some(path) if an item is selected, None if the tree is empty.
Trait Implementations§
Source§impl Clone for DiffFileTree
impl Clone for DiffFileTree
Source§fn clone(&self) -> DiffFileTree
fn clone(&self) -> DiffFileTree
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for DiffFileTree
impl Debug for DiffFileTree
Source§impl Default for DiffFileTree
impl Default for DiffFileTree
Source§impl Widget for &DiffFileTree
impl Widget for &DiffFileTree
Auto Trait Implementations§
impl Freeze for DiffFileTree
impl RefUnwindSafe for DiffFileTree
impl Send for DiffFileTree
impl Sync for DiffFileTree
impl Unpin for DiffFileTree
impl UnwindSafe for DiffFileTree
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
Source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
ReadEndian::read_from_little_endian().