From 29b0632028eef0198e93e2ce83987b7e2d7d3646 Mon Sep 17 00:00:00 2001 From: Badr Date: Thu, 10 Oct 2024 14:17:30 +0200 Subject: [PATCH] update footer display --- oryx-tui/src/app.rs | 1 + oryx-tui/src/filter.rs | 73 +++---------- oryx-tui/src/section.rs | 173 ++++++++++++++++++++----------- oryx-tui/src/section/firewall.rs | 49 +-------- 4 files changed, 133 insertions(+), 163 deletions(-) diff --git a/oryx-tui/src/app.rs b/oryx-tui/src/app.rs index cd47f60..ac3818d 100644 --- a/oryx-tui/src/app.rs +++ b/oryx-tui/src/app.rs @@ -119,6 +119,7 @@ impl App { frame, section_block, &self.filter.interface.selected_interface.name, + self.active_popup.as_ref(), ); self.filter.render_on_sniffing(frame, settings_block); diff --git a/oryx-tui/src/filter.rs b/oryx-tui/src/filter.rs index 4c2e8c4..a3241db 100644 --- a/oryx-tui/src/filter.rs +++ b/oryx-tui/src/filter.rs @@ -652,27 +652,25 @@ impl Filter { let help = Text::from(vec![ Line::from(""), Line::from(vec![ - Span::from("k,⬆").bold(), - Span::from(": Scroll up").bold(), + Span::from("k,").bold(), + Span::from(" Up").bold(), Span::from(" | ").bold(), - Span::from("j,⬇").bold(), - Span::from(": Scroll down").bold(), + Span::from("j,").bold(), + Span::from(" Down").bold(), + Span::from(" | ").bold(), + Span::from("󱁐 ").bold(), + Span::from(" Toggle Select").bold(), Span::from(" | ").bold(), Span::from("󱞦 ").bold(), - Span::from(": Apply").bold(), + Span::from(" Apply").bold(), Span::from(" | ").bold(), Span::from(" ").bold(), - Span::from(": Naviguate").bold(), + Span::from(" Nav").bold(), ]), ]) + .blue() .centered(); - frame.render_widget( - Block::new() - .borders(Borders::ALL) - .blue() - .border_type(BorderType::Rounded), - help_block, - ); + frame.render_widget( help, help_block.inner(Margin { @@ -810,16 +808,6 @@ impl Filter { .flex(ratatui::layout::Flex::SpaceBetween) .split(layout[1])[1]; - let (filters_block, help_block) = { - let chunks = Layout::default() - .direction(Direction::Vertical) - .constraints([Constraint::Fill(1), Constraint::Length(3)]) - .flex(ratatui::layout::Flex::SpaceBetween) - .split(block); - - (chunks[0], chunks[1]) - }; - let ( transport_filter_block, network_filter_block, @@ -839,7 +827,7 @@ impl Filter { ]) .margin(1) .flex(Flex::SpaceBetween) - .split(filters_block); + .split(block); (chunks[1], chunks[2], chunks[3], chunks[4], chunks[5]) }; @@ -850,7 +838,7 @@ impl Filter { .borders(Borders::all()) .border_type(BorderType::Thick) .border_style(Style::default().green()), - filters_block, + block, ); self.network.render( @@ -888,40 +876,5 @@ impl Filter { .centered() .build(); frame.render_widget(apply, apply_block); - - let help = Text::from(vec![ - Line::from(""), - Line::from(vec![ - Span::from("k,⬆").bold(), - Span::from(": Move up").bold(), - Span::from(" | ").bold(), - Span::from("j,⬇").bold(), - Span::from(": Move down").bold(), - Span::from(" | ").bold(), - Span::from("󱊷 ").bold(), - Span::from(": Discard").bold(), - Span::from(" | ").bold(), - Span::from("󱞦 ").bold(), - Span::from(": Apply").bold(), - Span::from(" | ").bold(), - Span::from(" ").bold(), - Span::from(": Naviguate").bold(), - ]), - ]) - .centered(); - frame.render_widget( - Block::new() - .borders(Borders::ALL) - .blue() - .border_type(BorderType::Rounded), - help_block, - ); - frame.render_widget( - help, - help_block.inner(Margin { - horizontal: 1, - vertical: 0, - }), - ); } } diff --git a/oryx-tui/src/section.rs b/oryx-tui/src/section.rs index f394e2a..7be8994 100644 --- a/oryx-tui/src/section.rs +++ b/oryx-tui/src/section.rs @@ -19,7 +19,11 @@ use ratatui::{ }; use stats::Stats; -use crate::{app::AppResult, event::Event, packet::AppPacket}; +use crate::{ + app::{ActivePopup, AppResult}, + event::Event, + packet::AppPacket, +}; #[derive(Debug, PartialEq)] pub enum FocusedSection { @@ -89,63 +93,110 @@ impl Section { } } - fn render_footer_help(&self, frame: &mut Frame, block: Rect) { - let message = match self.focused_section { - FocusedSection::Inspection => Line::from(vec![ - Span::from("k,⬆").bold(), - Span::from(": Move up").bold(), - Span::from(" | ").bold(), - Span::from("j,⬇").bold(), - Span::from(": Move down").bold(), - Span::from(" | ").bold(), - Span::from("/").bold(), - Span::from(": Search").bold(), - Span::from(" | ").bold(), - Span::from("i").bold(), - Span::from(": Infos").bold(), - Span::from(" | ").bold(), - Span::from("f").bold(), - Span::from(": Filters").bold(), - Span::from(" | ").bold(), - Span::from(" ").bold(), - Span::from(": Naviguate").bold(), - ]), - FocusedSection::Firewall => Line::from(vec![ - Span::from("k,⬆").bold(), - Span::from(": Move up").bold(), - Span::from(" | ").bold(), - Span::from("j,⬇").bold(), - Span::from(": Move down").bold(), - Span::from(" | ").bold(), - Span::from("n").bold(), - Span::from(": New Rule").bold(), - Span::from(" | ").bold(), - Span::from("d").bold(), - Span::from(": Delete Rule").bold(), - Span::from(" | ").bold(), - Span::from("f").bold(), - Span::from(": Filters").bold(), - Span::from(" | ").bold(), - Span::from(" ").bold(), - Span::from(": Naviguate").bold(), - ]), - _ => Line::from(vec![ - Span::from("f").bold(), - Span::from(": Filters").bold(), - Span::from(" | ").bold(), - Span::from(" ").bold(), - Span::from(": Naviguate").bold(), - ]), + fn render_footer_help( + &self, + frame: &mut Frame, + block: Rect, + active_popup: Option<&ActivePopup>, + ) { + let message = { + match active_popup { + Some(ActivePopup::UpdateFilters) => Line::from(vec![ + Span::from("k,").bold(), + Span::from(" Up").bold(), + Span::from(" | ").bold(), + Span::from("j,").bold(), + Span::from(" Down").bold(), + Span::from(" | ").bold(), + Span::from("󱁐 ").bold(), + Span::from(" Toggle Select").bold(), + Span::from(" | ").bold(), + Span::from("󱊷 ").bold(), + Span::from(": Discard").bold(), + Span::from(" | ").bold(), + Span::from("󱞦 ").bold(), + Span::from(" Apply").bold(), + Span::from(" | ").bold(), + Span::from(" ").bold(), + Span::from(" Nav").bold(), + ]), + Some(ActivePopup::NewFirewallRule) => Line::from(vec![ + Span::from("j,k,,").bold(), + Span::from(": Toggle Direction").bold(), + Span::from(" | ").bold(), + Span::from("󱊷 ").bold(), + Span::from(": Discard").bold(), + Span::from(" | ").bold(), + Span::from("󱞦 ").bold(), + Span::from(": Save").bold(), + Span::from(" | ").bold(), + Span::from(" ").bold(), + Span::from(": Naviguate").bold(), + ]), + Some(ActivePopup::PacketInfos) | Some(ActivePopup::Help) => Line::from(vec![ + Span::from("󱊷 ").bold(), + Span::from(": Discard Popup").bold(), + ]), + _ => match self.focused_section { + FocusedSection::Inspection => Line::from(vec![ + Span::from("k,").bold(), + Span::from(" Up").bold(), + Span::from(" | ").bold(), + Span::from("j,").bold(), + Span::from(" Down").bold(), + Span::from(" | ").bold(), + Span::from("/").bold(), + Span::from(" Search").bold(), + Span::from(" | ").bold(), + Span::from("i").bold(), + Span::from(" Infos").bold(), + Span::from(" | ").bold(), + Span::from("f").bold(), + Span::from(" Filters").bold(), + Span::from(" | ").bold(), + Span::from("󱊷 ").bold(), + Span::from(": Discard").bold(), + Span::from(" | ").bold(), + Span::from(" ").bold(), + Span::from(" Nav").bold(), + ]), + FocusedSection::Firewall => Line::from(vec![ + Span::from("k,").bold(), + Span::from(" Up").bold(), + Span::from(" | ").bold(), + Span::from("j,").bold(), + Span::from(" Down").bold(), + Span::from(" | ").bold(), + Span::from("n").bold(), + Span::from(" New").bold(), + Span::from(" | ").bold(), + Span::from("d").bold(), + Span::from(" Delete").bold(), + Span::from(" | ").bold(), + Span::from("e").bold(), + Span::from(" Edit").bold(), + Span::from(" | ").bold(), + Span::from("󱁐 ").bold(), + Span::from(" Toggle").bold(), + Span::from(" | ").bold(), + Span::from("f").bold(), + Span::from(" Filters").bold(), + Span::from(" | ").bold(), + Span::from(" ").bold(), + Span::from(" Nav").bold(), + ]), + _ => Line::from(vec![ + Span::from("f").bold(), + Span::from(" Filters").bold(), + Span::from(" | ").bold(), + Span::from(" ").bold(), + Span::from(" Nav").bold(), + ]), + }, + } }; - let help = Text::from(vec![Line::from(""), message]).centered(); - frame.render_widget( - Block::new() - .borders(Borders::ALL) - .blue() - .border_type(BorderType::Rounded), - block, - ); + let help = Text::from(vec![Line::from(""), message]).blue().centered(); frame.render_widget( help, block.inner(Margin { @@ -175,7 +226,13 @@ impl Section { block, ); } - pub fn render(&mut self, frame: &mut Frame, block: Rect, network_interace: &str) { + pub fn render( + &mut self, + frame: &mut Frame, + block: Rect, + network_interace: &str, + active_popup: Option<&ActivePopup>, + ) { let (section_block, help_block) = { let chunks = Layout::default() .direction(Direction::Vertical) @@ -187,7 +244,7 @@ impl Section { }; self.render_header(frame, section_block); - self.render_footer_help(frame, help_block); + self.render_footer_help(frame, help_block, active_popup); match self.focused_section { FocusedSection::Inspection => self.inspection.render(frame, section_block), diff --git a/oryx-tui/src/section/firewall.rs b/oryx-tui/src/section/firewall.rs index a96a72d..02317ef 100644 --- a/oryx-tui/src/section/firewall.rs +++ b/oryx-tui/src/section/firewall.rs @@ -4,10 +4,8 @@ use oryx_common::MAX_FIREWALL_RULES; use ratatui::{ layout::{Constraint, Direction, Flex, Layout, Margin, Rect}, style::{Color, Style, Stylize}, - text::{Line, Span, Text}, - widgets::{ - Block, BorderType, Borders, Cell, Clear, HighlightSpacing, Padding, Row, Table, TableState, - }, + text::{Line, Text}, + widgets::{Block, Borders, Cell, Clear, HighlightSpacing, Padding, Row, Table, TableState}, Frame, }; use std::{net::IpAddr, num::ParseIntError, str::FromStr}; @@ -141,7 +139,7 @@ impl UserInput { .direction(Direction::Vertical) .constraints([ Constraint::Fill(1), - Constraint::Length(12), + Constraint::Length(9), Constraint::Fill(1), ]) .flex(ratatui::layout::Flex::SpaceBetween) @@ -157,16 +155,6 @@ impl UserInput { .flex(ratatui::layout::Flex::SpaceBetween) .split(layout[1])[1]; - let (user_input_block, help_block) = { - let chunks = Layout::default() - .direction(Direction::Vertical) - .constraints([Constraint::Fill(1), Constraint::Length(3)]) - .flex(ratatui::layout::Flex::SpaceBetween) - .split(block); - - (chunks[0], chunks[1]) - }; - let rows = [ Row::new(vec![ Cell::from(self.name.field.to_string()) @@ -274,36 +262,7 @@ impl UserInput { ); frame.render_widget(Clear, block); - frame.render_widget(table, user_input_block); - - let help = Text::from(vec![ - Line::from(""), - Line::from(vec![ - Span::from("󱊷 ").bold(), - Span::from(": Discard").bold(), - Span::from(" | ").bold(), - Span::from("󱞦 ").bold(), - Span::from(": Save").bold(), - Span::from(" | ").bold(), - Span::from(" ").bold(), - Span::from(": Naviguate").bold(), - ]), - ]) - .centered(); - frame.render_widget( - Block::new() - .borders(Borders::ALL) - .blue() - .border_type(BorderType::Rounded), - help_block, - ); - frame.render_widget( - help, - help_block.inner(Margin { - horizontal: 1, - vertical: 0, - }), - ); + frame.render_widget(table, block); } }