1
0
forked from brl/citadel-tools
citadel-tools/citadel-realms/src/help.rs
Bruce Leidl 61d5e10034 RealmFS refactored. Much Simpler.
The concept of an 'unsealed' RealmFS no longer exists so support for this has been
removed. The result is much less complex and easier to understand and maintain.
2020-08-03 19:18:49 -04:00

102 lines
3.8 KiB
Rust

use cursive::views::{DummyView, LinearLayout, TextView, PaddedView, OnEventView, Panel};
use cursive::traits::{View,Boxable};
use cursive::utils::markup::StyledString;
use cursive::theme::ColorStyle;
use cursive::align::HAlign;
const REALM_SCREEN: usize = 1;
pub fn help_panel(screen: usize) -> impl View {
let content = if screen == REALM_SCREEN {
LinearLayout::vertical()
.child(help_header("Realms Commands"))
.child(DummyView)
.child(TextView::new(autostart_text()))
.child(DummyView)
.child(help_item_autostart("Enter", "Set selected realm as Current."))
.child(help_item_autostart("$ #", "Open user/root shell in selected realm."))
.child(help_item_autostart("t", "Open terminal for selected realm."))
.child(help_item_autostart("s", "Start/Stop selected realm."))
.child(help_item("c", "Configure selected realm."))
.child(help_item("d", "Delete selected realm."))
.child(help_item("n", "Create a new realm."))
.child(help_item("r", "Restart currently selected realm."))
.child(help_item("u", "Open shell to update RealmFS image of selected realm."))
.child(help_item(".", "Toggle display of system realms."))
.child(DummyView)
} else {
LinearLayout::vertical()
.child(help_header("RealmsFS Image Commands"))
.child(DummyView)
.child(help_item("n", "Create new RealmFS as fork of selected image."))
.child(help_item("u", "Open shell to update selected RealmFS image."))
.child(help_item(".", "Toggle display of system RealmFS images."))
.child(DummyView)
}
.child(help_header("Global Commands"))
.child(DummyView)
.child(help_item("Space", "Toggle between Realms and RealmFS views."))
.child(help_item("q", "Exit application."))
.child(help_item("l", "Toggle visibility of log panel."))
.child(help_item("L", "Display full sized log view."))
.child(help_item("T", "Select a UI color theme."))
.child(DummyView)
.child(TextView::new(footer_text()));
let content = PaddedView::new((2,2,1,1), content);
let panel = Panel::new(content)
.title("Help");
OnEventView::new(panel)
.on_pre_event('?', |s| { s.pop_layer(); })
.on_pre_event('h', |s| { s.pop_layer(); })
}
fn autostart_text() -> StyledString {
let mut text = StyledString::styled("[", ColorStyle::tertiary());
text.append(autostart_icon());
text.append_styled("] Start Realm if not currently running", ColorStyle::tertiary());
text
}
fn footer_text() -> StyledString {
StyledString::styled("'q' or ESC to close help panel", ColorStyle::tertiary())
}
fn autostart_icon() -> StyledString {
StyledString::styled("*", ColorStyle::title_primary())
}
fn help_item_autostart(keys: &str, help: &str) -> impl View {
_help_item(keys, help, true)
}
fn help_item(keys: &str, help: &str) -> impl View {
_help_item(keys, help, false)
}
fn _help_item(keys: &str, help: &str, start: bool) -> impl View {
let keys = StyledString::styled(keys, ColorStyle::secondary());
let mut text = if start {
autostart_icon()
} else {
StyledString::plain(" ")
};
text.append_plain(" ");
text.append_plain(help);
LinearLayout::horizontal()
.child(TextView::new(keys).h_align(HAlign::Right).fixed_width(8))
.child(DummyView.fixed_width(4))
.child(TextView::new(text))
}
fn help_header(text: &str) -> impl View {
let text = StyledString::styled(text, ColorStyle::title_primary());
TextView::new(text).h_align(HAlign::Left)
}