DiffFileTree

Struct DiffFileTree 

Source
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: TreeViewState

State for selection and expansion (managed by TreeView).

§selected_index: usize

Currently selected visible row index.

§focused: bool

Whether this widget currently has focus.

§theme: AppTheme

Application theme for styling.

Implementations§

Source§

impl DiffFileTree

Source

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

Source

pub fn new() -> Self

Creates a new empty DiffFileTree.

§Returns

An empty tree with no files.

§Example
use ratatui_toolkit::widgets::code_diff::diff_file_tree::DiffFileTree;

let tree = DiffFileTree::new();
assert!(tree.nodes.is_empty());
Source§

impl DiffFileTree

Source

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

Source

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);
Source

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

Source

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

Source

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());
Source

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.

Source

pub fn filter_text(&self) -> Option<&str>

Returns the current filter text.

§Returns

The current filter text, or None if no filter is active.

Source

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

Source

pub fn focus(&mut self)

Sets focus on this widget.

Source

pub fn blur(&mut self)

Removes focus from this widget.

Source§

impl DiffFileTree

Source

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 mode
  • Enter - 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

Source

pub fn select_next(&mut self)

Selects the next visible item in the tree.

Respects the current filter (if any).

Source

pub fn select_prev(&mut self)

Selects the previous visible item in the tree.

Respects the current filter (if any).

Source

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.

Source

pub fn expand_selected(&mut self)

Expands the currently selected directory.

Only has an effect if the selected node is a directory.

Source

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).

Source

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.

Source

pub fn goto_top(&mut self)

Goes to the first visible item in the tree.

Respects the current filter (if any).

Source

pub fn goto_bottom(&mut self)

Goes to the last visible item in the tree.

Respects the current filter (if any).

Source

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.

Source

pub fn visible_count(&self) -> usize

Returns the total number of visible items.

Respects the current filter (if any).

Source

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

Source

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

Source§

fn clone(&self) -> DiffFileTree

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DiffFileTree

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for DiffFileTree

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Widget for &DiffFileTree

Source§

fn render(self, area: Rect, buf: &mut Buffer)

Renders the diff file tree widget from a reference.

Note: This creates a clone of the state for rendering. When filter mode is active, shows a filter input at the bottom.

Source§

impl Widget for DiffFileTree

Source§

fn render(self, area: Rect, buf: &mut Buffer)

Renders the diff file tree widget to the given buffer.

Uses TreeViewRef internally to render the tree with custom styling. When filter mode is active, shows a filter input at the bottom.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert 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>

Convert 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)

Convert &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)

Convert &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
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<R, P> ReadPrimitive<R> for P
where R: Read + ReadEndian<P>, P: Default,

Source§

fn read_from_little_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_little_endian().
Source§

fn read_from_big_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_big_endian().
Source§

fn read_from_native_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_native_endian().
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more