Skip to content

Commit

Permalink
sketch to see how mutable widget state would look like
Browse files Browse the repository at this point in the history
  • Loading branch information
Sebastian Thiel committed Jun 4, 2019
1 parent f6f6a7d commit 7ce062f
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 6 deletions.
6 changes: 5 additions & 1 deletion src/interactive/app.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use crate::{
interactive::widgets::MainWindow,
interactive::widgets::{MainWindow, WidgetState},
path_of, sorted_entries,
traverse::{Traversal, TreeIndex},
ByteFormat, WalkOptions, WalkResult,
Expand Down Expand Up @@ -80,10 +80,12 @@ impl TerminalApp {

terminal.draw(|mut f| {
let full_screen = f.size();
let mut state_mut = WidgetState;
MainWindow {
traversal,
display: *display,
state: &state,
state_mut: &mut state_mut,
}
.render(&mut f, full_screen)
})?;
Expand Down Expand Up @@ -197,10 +199,12 @@ impl TerminalApp {
selected: None,
entries_list_start: 0,
};
let mut state_mut = WidgetState;
MainWindow {
traversal,
display: display_options,
state: &state,
state_mut: &mut state_mut,
}
.render(&mut f, full_screen)
})?;
Expand Down
8 changes: 5 additions & 3 deletions src/interactive/widgets/entries.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use crate::{
interactive::{DisplayOptions, SortMode},
interactive::{widgets::WidgetState, DisplayOptions, SortMode},
sorted_entries,
traverse::{Tree, TreeIndex},
};
Expand All @@ -12,16 +12,17 @@ use tui::{
widgets::{Block, Borders, List, Text, Widget},
};

pub struct Entries<'a> {
pub struct Entries<'a, 'b> {
pub tree: &'a Tree,
pub root: TreeIndex,
pub display: DisplayOptions,
pub sorting: SortMode,
pub selected: Option<TreeIndex>,
pub list_start: usize,
pub state_mut: &'b mut WidgetState,
}

impl<'a> Widget for Entries<'a> {
impl<'a, 'b> Widget for Entries<'a, 'b> {
fn draw(&mut self, area: Rect, buf: &mut Buffer) {
let Self {
tree,
Expand All @@ -30,6 +31,7 @@ impl<'a> Widget for Entries<'a> {
sorting,
selected,
list_start: _,
state_mut,
} = self;
let is_top = |node_idx| {
tree.neighbors_directed(node_idx, petgraph::Incoming)
Expand Down
10 changes: 8 additions & 2 deletions src/interactive/widgets/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,17 @@ use tui::{
widgets::Widget,
};

pub struct MainWindow<'a, 'b> {
pub struct WidgetState;

pub struct MainWindow<'a, 'b, 'c> {
pub traversal: &'a Traversal,
pub display: DisplayOptions,
pub state: &'b AppState,
/// State that can change during drawing, for convenience
pub state_mut: &'c mut WidgetState,
}

impl<'a, 'b, 'c> Widget for MainWindow<'a, 'b> {
impl<'a, 'b, 'c> Widget for MainWindow<'a, 'b, 'c> {
fn draw(&mut self, area: Rect, buf: &mut Buffer) {
let Self {
traversal:
Expand All @@ -29,6 +33,7 @@ impl<'a, 'b, 'c> Widget for MainWindow<'a, 'b> {
},
display,
state,
state_mut,
} = self;
let regions = Layout::default()
.direction(Direction::Vertical)
Expand All @@ -42,6 +47,7 @@ impl<'a, 'b, 'c> Widget for MainWindow<'a, 'b> {
sorting: state.sorting,
selected: state.selected,
list_start: state.entries_list_start,
state_mut,
}
.draw(entries, buf);

Expand Down

0 comments on commit 7ce062f

Please sign in to comment.