Added help footers

This commit is contained in:
veeso
2022-01-06 10:44:34 +01:00
committed by Christian Visintin
parent 2a3d4f2670
commit a93dbde0c8
11 changed files with 130 additions and 53 deletions
+9 -2
View File
@@ -44,7 +44,7 @@ pub use popup::{
ErrorPopup, InfoPopup, InstallUpdatePopup, Keybindings, QuitPopup, ReleaseNotes, WaitPopup,
WindowSizeError,
};
pub use text::{HelpText, NewVersionDisclaimer, Subtitle, Title};
pub use text::{HelpFooter, NewVersionDisclaimer, Subtitle, Title};
use tui_realm_stdlib::Phantom;
use tuirealm::event::{Event, Key, KeyEvent, KeyModifiers, NoUserEvent};
@@ -60,7 +60,10 @@ pub struct GlobalListener {
impl Component<Msg, NoUserEvent> for GlobalListener {
fn on(&mut self, ev: Event<NoUserEvent>) -> Option<Msg> {
match ev {
Event::Keyboard(KeyEvent { code: Key::Esc, .. }) => Some(Msg::ShowQuitPopup),
Event::Keyboard(KeyEvent {
code: Key::Esc | Key::Function(10),
..
}) => Some(Msg::ShowQuitPopup),
Event::Keyboard(KeyEvent {
code: Key::Char('c'),
modifiers: KeyModifiers::CONTROL,
@@ -69,6 +72,10 @@ impl Component<Msg, NoUserEvent> for GlobalListener {
code: Key::Char('h'),
modifiers: KeyModifiers::CONTROL,
}) => Some(Msg::ShowKeybindingsPopup),
Event::Keyboard(KeyEvent {
code: Key::Function(1),
..
}) => Some(Msg::ShowKeybindingsPopup),
Event::Keyboard(KeyEvent {
code: Key::Char('r'),
modifiers: KeyModifiers::CONTROL,
+16 -9
View File
@@ -104,28 +104,35 @@ impl Component<Msg, NoUserEvent> for NewVersionDisclaimer {
}
}
// -- HelpText
// -- HelpFooter
#[derive(MockComponent)]
pub struct HelpText {
pub struct HelpFooter {
component: Span,
}
impl HelpText {
impl HelpFooter {
pub fn new(key_color: Color) -> Self {
Self {
component: Span::default().spans(&[
TextSpan::new("Press ").bold(),
TextSpan::new("<CTRL+H>").bold().fg(key_color),
TextSpan::new(" to show keybindings; ").bold(),
TextSpan::new("<CTRL+C>").bold().fg(key_color),
TextSpan::new(" to enter setup").bold(),
TextSpan::from("<F1|CTRL+H>").bold().fg(key_color),
TextSpan::from(" Help "),
TextSpan::from("<CTRL+C>").bold().fg(key_color),
TextSpan::from(" Enter setup "),
TextSpan::from("<UP/DOWN>").bold().fg(key_color),
TextSpan::from(" Change field "),
TextSpan::from("<TAB>").bold().fg(key_color),
TextSpan::from(" Switch tab "),
TextSpan::from("<ENTER>").bold().fg(key_color),
TextSpan::from(" Submit form "),
TextSpan::from("<F10|ESC>").bold().fg(key_color),
TextSpan::from(" Quit "),
]),
}
}
}
impl Component<Msg, NoUserEvent> for HelpText {
impl Component<Msg, NoUserEvent> for HelpFooter {
fn on(&mut self, _ev: Event<NoUserEvent>) -> Option<Msg> {
None
}
+1 -1
View File
@@ -55,7 +55,7 @@ pub enum Id {
DeleteRecentPopup,
ErrorPopup,
GlobalListener,
HelpText,
HelpFooter,
InfoPopup,
InstallUpdatePopup,
Keybindings,
+36 -10
View File
@@ -58,8 +58,8 @@ impl AuthActivity {
assert!(self
.app
.mount(
Id::HelpText,
Box::new(components::HelpText::new(key_color)),
Id::HelpFooter,
Box::new(components::HelpFooter::new(key_color)),
vec![]
)
.is_ok());
@@ -111,17 +111,30 @@ impl AuthActivity {
let height: u16 = f.size().height;
self.check_minimum_window_size(height);
// Prepare chunks
let chunks = Layout::default()
let body = Layout::default()
.direction(Direction::Vertical)
.margin(1)
.constraints(
[
Constraint::Length(21), // Auth Form
Constraint::Min(3), // Bookmarks
Constraint::Min(24), // Body
Constraint::Length(1), // Footer
]
.as_ref(),
)
.split(f.size());
// Footer
self.app.view(&Id::HelpFooter, f, body[1]);
let auth_form_len = 7 + self.input_mask_size();
let main_chunks = Layout::default()
.direction(Direction::Vertical)
.margin(1)
.constraints(
[
Constraint::Length(auth_form_len), // Auth Form
Constraint::Min(3), // Bookmarks
]
.as_ref(),
)
.split(body[0]);
// Create explorer chunks
let auth_chunks = Layout::default()
.constraints(
@@ -131,12 +144,12 @@ impl AuthActivity {
Constraint::Length(1), // Version
Constraint::Length(3), // protocol
Constraint::Length(self.input_mask_size()), // Input mask
Constraint::Length(3), // footer
Constraint::Length(1), // Prevents last field to overflow
]
.as_ref(),
)
.direction(Direction::Vertical)
.split(chunks[0]);
.split(main_chunks[0]);
// Input mask chunks
let input_mask = match self.input_mask() {
InputMask::AwsS3 => Layout::default()
@@ -167,7 +180,7 @@ impl AuthActivity {
let bookmark_chunks = Layout::default()
.constraints([Constraint::Percentage(50), Constraint::Percentage(50)].as_ref())
.direction(Direction::Horizontal)
.split(chunks[1]);
.split(main_chunks[1]);
// Render
// Auth chunks
self.app.view(&Id::Title, f, auth_chunks[0]);
@@ -188,7 +201,6 @@ impl AuthActivity {
self.app.view(&Id::Password, f, input_mask[3]);
}
}
self.app.view(&Id::HelpText, f, auth_chunks[5]);
// Bookmark chunks
self.app.view(&Id::BookmarksList, f, bookmark_chunks[0]);
self.app.view(&Id::RecentsList, f, bookmark_chunks[1]);
@@ -788,6 +800,13 @@ impl AuthActivity {
}),
Self::no_popup_mounted_clause(),
),
Sub::new(
SubEventClause::Keyboard(KeyEvent {
code: Key::Function(10),
modifiers: KeyModifiers::NONE,
}),
Self::no_popup_mounted_clause(),
),
Sub::new(
SubEventClause::Keyboard(KeyEvent {
code: Key::Char('c'),
@@ -802,6 +821,13 @@ impl AuthActivity {
}),
Self::no_popup_mounted_clause(),
),
Sub::new(
SubEventClause::Keyboard(KeyEvent {
code: Key::Function(1),
modifiers: KeyModifiers::NONE,
}),
Self::no_popup_mounted_clause(),
),
Sub::new(
SubEventClause::Keyboard(KeyEvent {
code: Key::Char('r'),