add second example with TTYApplication & Char-View
This commit is contained in:
parent
57cb1ee3ff
commit
f151f9c5d2
3 changed files with 109 additions and 1 deletions
|
@ -2,6 +2,7 @@
|
|||
members = [
|
||||
"lib-nested-core",
|
||||
"lib-nested-tty",
|
||||
"examples/tty-01-hello"
|
||||
"examples/tty-01-hello",
|
||||
"examples/tty-02-node"
|
||||
]
|
||||
|
||||
|
|
18
examples/tty-02-node/Cargo.toml
Normal file
18
examples/tty-02-node/Cargo.toml
Normal file
|
@ -0,0 +1,18 @@
|
|||
[package]
|
||||
name = "tty-02-node"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
r3vi = { path = "../../../lib-r3vi" }
|
||||
nested = { path = "../../lib-nested-core" }
|
||||
nested-tty = { path = "../../lib-nested-tty" }
|
||||
termion = "*"
|
||||
cgmath = "*"
|
||||
|
||||
[dependencies.async-std]
|
||||
version = "1.9.0"
|
||||
features = ["unstable", "attributes"]
|
||||
|
89
examples/tty-02-node/src/main.rs
Normal file
89
examples/tty-02-node/src/main.rs
Normal file
|
@ -0,0 +1,89 @@
|
|||
extern crate cgmath;
|
||||
extern crate nested;
|
||||
extern crate nested_tty;
|
||||
extern crate r3vi;
|
||||
extern crate termion;
|
||||
|
||||
use {
|
||||
cgmath::Vector2,
|
||||
nested::{
|
||||
editTree::NestedNode,
|
||||
reprTree::{Context, ReprTree},
|
||||
},
|
||||
nested_tty::{
|
||||
terminal::TermOutWriter, DisplaySegment, Terminal, TerminalAtom, TerminalCompositor,
|
||||
TerminalEvent, TerminalStyle, TerminalView,
|
||||
TTYApplication
|
||||
},
|
||||
r3vi::{
|
||||
buffer::singleton::*,
|
||||
view::{port::UpdateTask, singleton::*, ViewPort},
|
||||
},
|
||||
std::sync::{Arc, Mutex, RwLock},
|
||||
termion::event::{Event, Key},
|
||||
};
|
||||
|
||||
#[async_std::main]
|
||||
async fn main() {
|
||||
let app = TTYApplication::new( |ev| { /* event handler */ } );
|
||||
let compositor = TerminalCompositor::new(app.port.inner());
|
||||
|
||||
/* setup context & create Editor-Tree
|
||||
*/
|
||||
let ctx = Arc::new(RwLock::new(Context::default()));
|
||||
|
||||
// abstract data
|
||||
let rt = ReprTree::from_char(&ctx, 'λ');
|
||||
|
||||
let mut node = Context::make_node(
|
||||
&ctx,
|
||||
// node type
|
||||
Context::parse(&ctx, "Char"),
|
||||
// depth
|
||||
SingletonBuffer::new(0).get_port(),
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
/* add a display view to the node
|
||||
*/
|
||||
let char_view = rt
|
||||
.read()
|
||||
.unwrap()
|
||||
.get_port::<dyn SingletonView<Item = char>>()
|
||||
.expect("unable to get Char-view")
|
||||
.map(move |c| TerminalAtom::from(if c == '\0' { ' ' } else { c }))
|
||||
.to_grid();
|
||||
|
||||
let mut display_rt = ReprTree::new(Context::parse(&ctx, "Display"));
|
||||
|
||||
display_rt.insert_branch(ReprTree::new_leaf(
|
||||
Context::parse(&ctx, "TerminalView"),
|
||||
char_view.into(),
|
||||
));
|
||||
|
||||
node = node.set_view(Arc::new(RwLock::new(display_rt)));
|
||||
|
||||
compositor.write().unwrap().push(
|
||||
nested_tty::make_label("Hello World")
|
||||
.map_item(|p, a| {
|
||||
a.add_style_back(TerminalStyle::fg_color(((25 * p.x % 255) as u8, 200, 0)))
|
||||
})
|
||||
.offset(Vector2::new(5, 0)),
|
||||
);
|
||||
|
||||
compositor.write().unwrap()
|
||||
.push(nested_tty::make_label("Char").offset(Vector2::new(0, 2)));
|
||||
|
||||
compositor.write().unwrap()
|
||||
.push(node.display_view().offset(Vector2::new(15, 2)));
|
||||
|
||||
compositor.write().unwrap()
|
||||
.push(nested_tty::make_label("<List Char>").offset(Vector2::new(0, 3)));
|
||||
|
||||
compositor.write().unwrap()
|
||||
.push(nested_tty::make_label("---").offset(Vector2::new(15, 3)));
|
||||
|
||||
/* write the changes in the view of `term_port` to the terminal
|
||||
*/
|
||||
app.show().await.expect("output error!");
|
||||
}
|
Loading…
Reference in a new issue