mirror of
https://github.com/veeso/termscp.git
synced 2025-12-07 09:36:00 -08:00
Help page in auth activity
This commit is contained in:
@@ -154,12 +154,19 @@ impl AuthActivity {
|
|||||||
// Check if Ctrl is enabled
|
// Check if Ctrl is enabled
|
||||||
if key.modifiers.intersects(KeyModifiers::CONTROL) {
|
if key.modifiers.intersects(KeyModifiers::CONTROL) {
|
||||||
// If 'S', save bookmark as...
|
// If 'S', save bookmark as...
|
||||||
if matches!(ch, 'S' | 's') {
|
match ch {
|
||||||
// Save bookmark as...
|
'H' | 'h' => {
|
||||||
self.input_mode = InputMode::Popup(PopupType::Input(
|
// Show help
|
||||||
String::from("Save bookmark as..."),
|
self.input_mode = InputMode::Popup(PopupType::Help);
|
||||||
AuthActivity::callback_save_bookmark,
|
}
|
||||||
));
|
'S' | 's' => {
|
||||||
|
// Save bookmark as...
|
||||||
|
self.input_mode = InputMode::Popup(PopupType::Input(
|
||||||
|
String::from("Save bookmark as..."),
|
||||||
|
AuthActivity::callback_save_bookmark,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
_ => { /* Nothing to do */ }
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
match self.selected_field {
|
match self.selected_field {
|
||||||
@@ -270,6 +277,10 @@ impl AuthActivity {
|
|||||||
AuthActivity::callback_nothing_to_do,
|
AuthActivity::callback_nothing_to_do,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
'H' | 'h' => {
|
||||||
|
// Show help
|
||||||
|
self.input_mode = InputMode::Popup(PopupType::Help);
|
||||||
|
}
|
||||||
'S' | 's' => {
|
'S' | 's' => {
|
||||||
// Save bookmark as...
|
// Save bookmark as...
|
||||||
self.input_mode = InputMode::Popup(PopupType::Input(
|
self.input_mode = InputMode::Popup(PopupType::Input(
|
||||||
@@ -347,6 +358,10 @@ impl AuthActivity {
|
|||||||
AuthActivity::callback_nothing_to_do,
|
AuthActivity::callback_nothing_to_do,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
'H' | 'h' => {
|
||||||
|
// Show help
|
||||||
|
self.input_mode = InputMode::Popup(PopupType::Help);
|
||||||
|
}
|
||||||
'S' | 's' => {
|
'S' | 's' => {
|
||||||
// Save bookmark as...
|
// Save bookmark as...
|
||||||
self.input_mode = InputMode::Popup(PopupType::Input(
|
self.input_mode = InputMode::Popup(PopupType::Input(
|
||||||
@@ -367,6 +382,7 @@ impl AuthActivity {
|
|||||||
pub(super) fn handle_input_event_mode_popup(&mut self, ev: &InputEvent, ptype: PopupType) {
|
pub(super) fn handle_input_event_mode_popup(&mut self, ev: &InputEvent, ptype: PopupType) {
|
||||||
match ptype {
|
match ptype {
|
||||||
PopupType::Alert(_, _) => self.handle_input_event_mode_popup_alert(ev),
|
PopupType::Alert(_, _) => self.handle_input_event_mode_popup_alert(ev),
|
||||||
|
PopupType::Help => self.handle_input_event_mode_popup_help(ev),
|
||||||
PopupType::Input(_, cb) => self.handle_input_event_mode_popup_input(ev, cb),
|
PopupType::Input(_, cb) => self.handle_input_event_mode_popup_input(ev, cb),
|
||||||
PopupType::YesNo(_, yes_cb, no_cb) => {
|
PopupType::YesNo(_, yes_cb, no_cb) => {
|
||||||
self.handle_input_event_mode_popup_yesno(ev, yes_cb, no_cb)
|
self.handle_input_event_mode_popup_yesno(ev, yes_cb, no_cb)
|
||||||
@@ -386,6 +402,22 @@ impl AuthActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// ### handle_input_event_mode_popup_help
|
||||||
|
///
|
||||||
|
/// Input event handler for popup help
|
||||||
|
pub(super) fn handle_input_event_mode_popup_help(&mut self, ev: &InputEvent) {
|
||||||
|
// If enter, close popup
|
||||||
|
if let InputEvent::Key(key) = ev {
|
||||||
|
match key.code {
|
||||||
|
KeyCode::Enter | KeyCode::Esc => {
|
||||||
|
// Set input mode back to form
|
||||||
|
self.input_mode = InputMode::Form;
|
||||||
|
}
|
||||||
|
_ => { /* Nothing to do */ }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// ### handle_input_event_mode_popup_input
|
/// ### handle_input_event_mode_popup_input
|
||||||
///
|
///
|
||||||
/// Input event handler for input popup
|
/// Input event handler for input popup
|
||||||
|
|||||||
@@ -127,6 +127,7 @@ impl AuthActivity {
|
|||||||
// Calculate popup size
|
// Calculate popup size
|
||||||
let (width, height): (u16, u16) = match popup {
|
let (width, height): (u16, u16) = match popup {
|
||||||
PopupType::Alert(_, _) => (50, 10),
|
PopupType::Alert(_, _) => (50, 10),
|
||||||
|
PopupType::Help => (50, 70),
|
||||||
PopupType::Input(_, _) => (40, 10),
|
PopupType::Input(_, _) => (40, 10),
|
||||||
PopupType::YesNo(_, _, _) => (30, 10),
|
PopupType::YesNo(_, _, _) => (30, 10),
|
||||||
};
|
};
|
||||||
@@ -137,6 +138,7 @@ impl AuthActivity {
|
|||||||
self.draw_popup_alert(*color, txt.clone(), popup_area.width),
|
self.draw_popup_alert(*color, txt.clone(), popup_area.width),
|
||||||
popup_area,
|
popup_area,
|
||||||
),
|
),
|
||||||
|
PopupType::Help => f.render_widget(self.draw_popup_help(), popup_area),
|
||||||
PopupType::Input(txt, _) => {
|
PopupType::Input(txt, _) => {
|
||||||
f.render_widget(self.draw_popup_input(txt.clone()), popup_area);
|
f.render_widget(self.draw_popup_input(txt.clone()), popup_area);
|
||||||
// Set cursor
|
// Set cursor
|
||||||
@@ -257,14 +259,8 @@ impl AuthActivity {
|
|||||||
let (footer, h_style) = (
|
let (footer, h_style) = (
|
||||||
vec![
|
vec![
|
||||||
Span::raw("Press "),
|
Span::raw("Press "),
|
||||||
Span::styled("<ESC>", Style::default().add_modifier(Modifier::BOLD)),
|
Span::styled("<CTRL+H>", Style::default().add_modifier(Modifier::BOLD)),
|
||||||
Span::raw(" to exit, "),
|
Span::raw(" to show keybindings"),
|
||||||
Span::styled("<UP,DOWN>", Style::default().add_modifier(Modifier::BOLD)),
|
|
||||||
Span::raw(" to change input field, "),
|
|
||||||
Span::styled("<TAB>", Style::default().add_modifier(Modifier::BOLD)),
|
|
||||||
Span::raw(" to change input form, "),
|
|
||||||
Span::styled("<ENTER>", Style::default().add_modifier(Modifier::BOLD)),
|
|
||||||
Span::raw(" to submit form"),
|
|
||||||
],
|
],
|
||||||
Style::default().add_modifier(Modifier::BOLD),
|
Style::default().add_modifier(Modifier::BOLD),
|
||||||
);
|
);
|
||||||
@@ -439,4 +435,111 @@ impl AuthActivity {
|
|||||||
.fg(Color::Yellow),
|
.fg(Color::Yellow),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// ### draw_footer
|
||||||
|
///
|
||||||
|
/// Draw authentication page footer
|
||||||
|
pub(super) fn draw_popup_help(&self) -> List {
|
||||||
|
// Write header
|
||||||
|
let cmds: Vec<ListItem> = vec![
|
||||||
|
ListItem::new(Spans::from(vec![
|
||||||
|
Span::styled(
|
||||||
|
"<ESC>",
|
||||||
|
Style::default()
|
||||||
|
.fg(Color::Cyan)
|
||||||
|
.add_modifier(Modifier::BOLD),
|
||||||
|
),
|
||||||
|
Span::raw(" "),
|
||||||
|
Span::raw("Quit TermSCP"),
|
||||||
|
])),
|
||||||
|
ListItem::new(Spans::from(vec![
|
||||||
|
Span::styled(
|
||||||
|
"<TAB>",
|
||||||
|
Style::default()
|
||||||
|
.fg(Color::Cyan)
|
||||||
|
.add_modifier(Modifier::BOLD),
|
||||||
|
),
|
||||||
|
Span::raw(" "),
|
||||||
|
Span::raw("Switch input form and bookmarks"),
|
||||||
|
])),
|
||||||
|
ListItem::new(Spans::from(vec![
|
||||||
|
Span::styled(
|
||||||
|
"<RIGHT/LEFT>",
|
||||||
|
Style::default()
|
||||||
|
.fg(Color::Cyan)
|
||||||
|
.add_modifier(Modifier::BOLD),
|
||||||
|
),
|
||||||
|
Span::raw(" "),
|
||||||
|
Span::raw("Change bookmark tab"),
|
||||||
|
])),
|
||||||
|
ListItem::new(Spans::from(vec![
|
||||||
|
Span::styled(
|
||||||
|
"<UP/DOWN>",
|
||||||
|
Style::default()
|
||||||
|
.fg(Color::Cyan)
|
||||||
|
.add_modifier(Modifier::BOLD),
|
||||||
|
),
|
||||||
|
Span::raw(" "),
|
||||||
|
Span::raw("Move up/down in current tab"),
|
||||||
|
])),
|
||||||
|
ListItem::new(Spans::from(vec![
|
||||||
|
Span::styled(
|
||||||
|
"<ENTER>",
|
||||||
|
Style::default()
|
||||||
|
.fg(Color::Cyan)
|
||||||
|
.add_modifier(Modifier::BOLD),
|
||||||
|
),
|
||||||
|
Span::raw(" "),
|
||||||
|
Span::raw("Submit"),
|
||||||
|
])),
|
||||||
|
ListItem::new(Spans::from(vec![
|
||||||
|
Span::styled(
|
||||||
|
"<DEL>",
|
||||||
|
Style::default()
|
||||||
|
.fg(Color::Cyan)
|
||||||
|
.add_modifier(Modifier::BOLD),
|
||||||
|
),
|
||||||
|
Span::raw(" "),
|
||||||
|
Span::raw("Delete bookmark"),
|
||||||
|
])),
|
||||||
|
ListItem::new(Spans::from(vec![
|
||||||
|
Span::styled(
|
||||||
|
"<E>",
|
||||||
|
Style::default()
|
||||||
|
.fg(Color::Cyan)
|
||||||
|
.add_modifier(Modifier::BOLD),
|
||||||
|
),
|
||||||
|
Span::raw(" "),
|
||||||
|
Span::raw("Delete selected bookmark"),
|
||||||
|
])),
|
||||||
|
ListItem::new(Spans::from(vec![
|
||||||
|
Span::styled(
|
||||||
|
"<CTRL+H>",
|
||||||
|
Style::default()
|
||||||
|
.fg(Color::Cyan)
|
||||||
|
.add_modifier(Modifier::BOLD),
|
||||||
|
),
|
||||||
|
Span::raw(" "),
|
||||||
|
Span::raw("Show help"),
|
||||||
|
])),
|
||||||
|
ListItem::new(Spans::from(vec![
|
||||||
|
Span::styled(
|
||||||
|
"<CTRL+S>",
|
||||||
|
Style::default()
|
||||||
|
.fg(Color::Cyan)
|
||||||
|
.add_modifier(Modifier::BOLD),
|
||||||
|
),
|
||||||
|
Span::raw(" "),
|
||||||
|
Span::raw("Save bookmark"),
|
||||||
|
])),
|
||||||
|
];
|
||||||
|
List::new(cmds)
|
||||||
|
.block(
|
||||||
|
Block::default()
|
||||||
|
.borders(Borders::ALL)
|
||||||
|
.border_style(Style::default())
|
||||||
|
.title("Help"),
|
||||||
|
)
|
||||||
|
.start_corner(Corner::TopLeft)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -75,6 +75,7 @@ enum DialogYesNoOption {
|
|||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
enum PopupType {
|
enum PopupType {
|
||||||
Alert(Color, String), // Show a message displaying text with the provided color
|
Alert(Color, String), // Show a message displaying text with the provided color
|
||||||
|
Help, // Help page
|
||||||
Input(String, OnInputSubmitCallback), // Input description; Callback for submit
|
Input(String, OnInputSubmitCallback), // Input description; Callback for submit
|
||||||
YesNo(String, DialogCallback, DialogCallback), // Yes, no callback
|
YesNo(String, DialogCallback, DialogCallback), // Yes, no callback
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user