cursive/examples/key_codes.rs

52 lines
1.1 KiB
Rust
Raw Normal View History

extern crate cursive;
use cursive::Cursive;
2016-06-26 00:10:18 +00:00
use cursive::view::{View, BoxView};
use cursive::printer::Printer;
2016-06-26 00:10:18 +00:00
use cursive::event::{EventResult, Event};
fn main() {
let mut siv = Cursive::new();
2016-06-26 00:10:18 +00:00
siv.add_layer(BoxView::new((30, 10), KeyCodeView::new(10)));
siv.run();
}
struct KeyCodeView {
history: Vec<String>,
size: usize,
}
impl KeyCodeView {
fn new(size: usize) -> Self {
KeyCodeView {
history: Vec::new(),
size: size,
}
}
}
impl View for KeyCodeView {
2015-06-01 16:20:06 +00:00
fn draw(&mut self, printer: &Printer) {
2016-06-26 00:10:18 +00:00
for (y, line) in self.history.iter().enumerate() {
printer.print((0, y), &line);
}
}
fn on_event(&mut self, event: Event) -> EventResult {
let line = match event {
Event::CharEvent(c) => format!("Char: {}", c),
Event::KeyEvent(key) => format!("Key: {}", key),
};
self.history.push(line);
while self.history.len() > self.size {
self.history.remove(0);
}
EventResult::Consumed(None)
}
}