Skip to content

Commit

Permalink
first simple focus tracking
Browse files Browse the repository at this point in the history
  • Loading branch information
Sebastian Thiel committed Jun 4, 2019
1 parent 13dd5b2 commit c19df21
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 16 deletions.
5 changes: 1 addition & 4 deletions src/interactive/app.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use crate::{
interactive::widgets::{DrawState, MainWindow},
interactive::widgets::{DrawState, HelpPaneState, MainWindow},
path_of, sorted_entries,
traverse::{Traversal, TreeIndex},
ByteFormat, WalkOptions, WalkResult,
Expand Down Expand Up @@ -56,9 +56,6 @@ impl Default for FocussedPane {
}
}

#[derive(Copy, Clone)]
pub struct HelpPaneState;

#[derive(Default)]
pub struct AppState {
pub root: TreeIndex,
Expand Down
4 changes: 3 additions & 1 deletion src/interactive/widgets/entries.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ pub struct Entries<'a, 'b> {
pub sorting: SortMode,
pub selected: Option<TreeIndex>,
pub list: &'b mut ListState,
pub borders: Borders,
}

impl<'a, 'b> Widget for Entries<'a, 'b> {
Expand All @@ -32,6 +33,7 @@ impl<'a, 'b> Widget for Entries<'a, 'b> {
display,
sorting,
selected,
borders,
list,
} = self;
let is_top = |node_idx| {
Expand All @@ -51,7 +53,7 @@ impl<'a, 'b> Widget for Entries<'a, 'b> {
p => p,
};
let title = format!(" {} ", title);
let block = Block::default().borders(Borders::ALL).title(&title);
let block = Block::default().borders(*borders).title(&title);
let offset = list
.update(
selected.map(|selected| {
Expand Down
18 changes: 18 additions & 0 deletions src/interactive/widgets/help.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
use tui::{buffer::Buffer, layout::Rect, widgets::Block, widgets::Borders, widgets::Widget};

#[derive(Copy, Clone)]
pub struct HelpPaneState;

pub struct HelpPane {
pub state: HelpPaneState,
pub borders: Borders,
}

impl Widget for HelpPane {
fn draw(&mut self, area: Rect, buf: &mut Buffer) {
Block::default()
.title("Help")
.borders(self.borders)
.draw(area, buf);
}
}
32 changes: 21 additions & 11 deletions src/interactive/widgets/main.rs
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
use crate::{
interactive::{
widgets::{Entries, Footer, ListState},
AppState, DisplayOptions,
widgets::{Entries, Footer, HelpPane, ListState},
AppState, DisplayOptions, FocussedPane,
},
traverse::Traversal,
};
use tui::widgets::Block;
use tui::{
buffer::Buffer,
layout::{Constraint, Direction, Layout, Rect},
widgets::Widget,
widgets::{Borders, Widget},
};

/// The state that can be mutated while drawing
Expand Down Expand Up @@ -46,25 +45,36 @@ impl<'a, 'b, 'c> Widget for MainWindow<'a, 'b, 'c> {
.split(area);
let (entries_area, footer_area) = (regions[0], regions[1]);
let (entries_area, help_area_state) = match state.help_pane {
Some(state) => (entries_area, Some((entries_area, state))),
Some(state) => {
let regions = Layout::default()
.direction(Direction::Horizontal)
.constraints([Constraint::Percentage(50), Constraint::Percentage(50)].as_ref())
.split(entries_area);
(regions[0], Some((regions[1], state)))
}
None => (entries_area, None),
};
let (entries_borders, help_borders) = match state.focussed {
FocussedPane::Main => (Borders::ALL, Borders::NONE),
FocussedPane::Help => (Borders::NONE, Borders::ALL),
};
Entries {
tree: &tree,
root: state.root,
display: *display,
sorting: state.sorting,
selected: state.selected,
borders: entries_borders,
list: &mut draw_state.entries_list,
}
.draw(entries_area, buf);

if let Some((help_area, _)) = help_area_state {
use tui::widgets::Borders;
Block::default()
.title("Help")
.borders(Borders::ALL)
.draw(help_area, buf);
if let Some((help_area, state)) = help_area_state {
HelpPane {
state,
borders: help_borders,
}
.draw(help_area, buf);
}

Footer {
Expand Down
2 changes: 2 additions & 0 deletions src/interactive/widgets/mod.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
mod entries;
mod footer;
mod help;
mod list;
mod main;

pub use entries::*;
pub use footer::*;
pub use help::*;
pub use list::*;
pub use main::*;

0 comments on commit c19df21

Please sign in to comment.