more ReprTree refactoring
- <Vec Char> ~> <Vec ReprTree> packing/unpacking - remove Arc<RwLock<>> around EditTree - gentle ListEditor update - reactivate PosInt example
This commit is contained in:
parent
26186b3375
commit
47dd4ce747
20 changed files with 564 additions and 508 deletions
examples/tty-04-posint/src
|
@ -22,11 +22,12 @@ use {
|
|||
nested_tty::{
|
||||
DisplaySegment, TTYApplication,
|
||||
TerminalCompositor, TerminalStyle, TerminalView,
|
||||
TerminalAtom, TerminalEvent
|
||||
TerminalAtom, TerminalEvent,
|
||||
edit_tree::cursor_widget::TreeNavExt
|
||||
},
|
||||
r3vi::{
|
||||
buffer::{singleton::*, vec::*},
|
||||
view::{port::UpdateTask, singleton::*, list::*, sequence::*},
|
||||
view::{port::UpdateTask, ViewPort, singleton::*, list::*, sequence::*},
|
||||
projection::*
|
||||
},
|
||||
std::sync::{Arc, RwLock},
|
||||
|
@ -49,11 +50,9 @@ async fn main() {
|
|||
let int_builder = ReprTreeBuilder::new( ctx.clone() )
|
||||
.require(Context::parse(&ctx,
|
||||
"ℕ ~ <PosInt 16 BigEndian> ~ <Seq~List <Digit 16>~Char> ~ EditTree"))
|
||||
.require(Context::parse(&ctx,
|
||||
"ℕ ~ <PosInt 10 BigEndian> ~ <Seq~List <Digit 10>~Char> ~ EditTree"))
|
||||
/*
|
||||
.require(Context::parse(&ctx,
|
||||
"ℕ ~ <PosInt 16 LittleEndian> ~ <Seq~List <Digit 16>> ~ EditTree"))
|
||||
.require(Context::parse(&ctx,
|
||||
"ℕ ~ <PosInt 16 BigEndian> ~ EditTree"))
|
||||
.require(Context::parse(&ctx,
|
||||
"ℕ ~ <PosInt 8 BigEndian> ~ EditTree"))
|
||||
.require(Context::parse(&ctx,
|
||||
|
@ -61,7 +60,7 @@ async fn main() {
|
|||
*/
|
||||
;
|
||||
|
||||
let mut rt_int = nested::repr_tree::ReprTree::from_str("cff");
|
||||
let mut rt_int = nested::repr_tree::ReprTree::from_str("f");
|
||||
rt_int.write().unwrap().set_halo(
|
||||
/* HALO TYPE */
|
||||
Context::parse(&ctx, "
|
||||
|
@ -72,36 +71,42 @@ async fn main() {
|
|||
~ <List Char>
|
||||
")
|
||||
);
|
||||
rt_int = int_builder.build_from( rt_int )
|
||||
.expect("cant build initial repr tree");
|
||||
|
||||
eprintln!("rt_int = \n{}\n", rt_int.read().unwrap().fmt(&ctx, 0));
|
||||
|
||||
rt_int = int_builder.build_from( rt_int ).expect("cant build initial repr tree");
|
||||
|
||||
eprintln!("rt_int = \n{}\n", rt_int.read().unwrap().fmt(&ctx, 0));
|
||||
|
||||
return;
|
||||
|
||||
/* list of editors
|
||||
*/
|
||||
let mut list_editor = nested::editors::list::ListEditor::new(ctx.clone(), Context::parse(&ctx, "<Seq Char>"));
|
||||
|
||||
// add all desired editors to the list
|
||||
for edit_leaf in int_builder.required_leaves {
|
||||
for edit_leaf in int_builder.required_leaves.iter() {
|
||||
let leaf_rt = rt_int.descend(edit_leaf.clone()).unwrap();
|
||||
list_editor.data.push(leaf_rt);
|
||||
}
|
||||
|
||||
let mut edittree = list_editor.into_node(SingletonBuffer::new(0).get_port());
|
||||
nested_tty::editors::list::PTYListController::for_node(&mut edittree, None, None);
|
||||
|
||||
/* cursors are a bit screwed initially so fix them up
|
||||
* TODO: how to fix this generally?
|
||||
*/
|
||||
for edit_leaf in int_builder.required_leaves.iter() {
|
||||
let leaf_rt = rt_int.descend(edit_leaf.clone()).unwrap();
|
||||
leaf_rt.edittree(&ctx).get_mut().goto(TreeCursor::none());
|
||||
}
|
||||
|
||||
let first_idx : usize = 1;
|
||||
int_builder.update( &rt_int, int_builder.required_leaves[first_idx].clone() );
|
||||
|
||||
edittree.goto(TreeCursor{
|
||||
leaf_mode: nested::editors::list::ListCursorMode::Insert,
|
||||
tree_addr: vec![0,0]
|
||||
tree_addr: vec![first_idx as isize, 0]
|
||||
});
|
||||
let edittree = Arc::new(RwLock::new(edittree));
|
||||
|
||||
|
||||
/* setup terminal
|
||||
*/
|
||||
let app = TTYApplication::new({
|
||||
|
@ -109,25 +114,20 @@ async fn main() {
|
|||
*/
|
||||
let ctx = ctx.clone();
|
||||
let rt_int = rt_int.clone();
|
||||
let last_idx = RwLock::new(0);
|
||||
let last_idx = RwLock::new(first_idx);
|
||||
let int_builder = int_builder.clone();
|
||||
let edittree = edittree.clone();
|
||||
move |ev| {
|
||||
let cur = edittree.read().unwrap().get_cursor();
|
||||
if cur.tree_addr.len() > 0 {
|
||||
let mut li = last_idx.write().unwrap();
|
||||
let ci = cur.tree_addr[0];
|
||||
|
||||
if *li != ci {
|
||||
/*
|
||||
eprintln!("----------------------------------");
|
||||
set_master(
|
||||
&ctx,
|
||||
&rt_int,
|
||||
editor_types.clone(),
|
||||
ci as usize
|
||||
);
|
||||
*/
|
||||
if *li != ci as usize {
|
||||
eprintln!("--------\nCHANGE MASTER EDITOR\n--------------------");
|
||||
int_builder.update( &rt_int, int_builder.required_leaves[ci as usize].clone() );
|
||||
*li = ci;
|
||||
eprintln!("-----\nDone\n----");
|
||||
*li = ci as usize;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -146,24 +146,35 @@ async fn main() {
|
|||
{
|
||||
let mut comp = compositor.write().unwrap();
|
||||
|
||||
let et = edittree.read().unwrap();
|
||||
comp.push(et.get_cursor_widget());
|
||||
|
||||
fn show_edit_tree( ctx: &Arc<RwLock<Context>>, comp: &mut TerminalCompositor, rt: &Arc<RwLock<ReprTree>>, y: i16 )
|
||||
{
|
||||
let rt_edittree = rt.descend(Context::parse(&ctx, "EditTree")).expect("descend");
|
||||
let halo_type = rt_edittree.read().unwrap().get_halo_type().clone();
|
||||
let edittree = rt_edittree.edittree( &ctx );
|
||||
|
||||
|
||||
let box_port = ViewPort::new();
|
||||
let ascii_box = nested_tty::widgets::ascii_box::AsciiBox::new(
|
||||
Vector2::new(30, 1),
|
||||
edittree.get().display_view(),
|
||||
box_port.inner()
|
||||
);
|
||||
|
||||
comp.push(
|
||||
box_port.outer()
|
||||
.offset(Vector2::new(1,y)));
|
||||
comp.push( nested_tty::make_label( &ctx.read().unwrap().type_term_to_str(&halo_type) )
|
||||
.map_item(|_pt, atom| atom.add_style_front(TerminalStyle::fg_color((90,90,90))))
|
||||
.offset(Vector2::new(1,y)));
|
||||
|
||||
comp.push( edittree.get().read().unwrap().display_view()
|
||||
.offset(Vector2::new(1,y+1)));
|
||||
}
|
||||
|
||||
let mut y = 1;
|
||||
let mut y = 2;
|
||||
for t in int_builder.required_leaves.iter() {
|
||||
show_edit_tree(&ctx, &mut comp, &rt_int.descend(t.clone()).expect(""), y);
|
||||
y += 3;
|
||||
y += 4;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue