add morphism to extract value-list from ListEditor

This commit is contained in:
Michael Sippel 2024-03-21 10:37:24 +01:00
parent 658f5c1000
commit ecaa74ccfd
Signed by: senvas
GPG key ID: F96CF119C34B64A6
4 changed files with 66 additions and 24 deletions

View file

@ -9,7 +9,7 @@ use {
}, },
laddertypes::{TypeTerm}, laddertypes::{TypeTerm},
crate::{ crate::{
repr_tree::{Context, ReprTree, ReprTreeExt}, repr_tree::{Context, ReprTree, ReprLeaf, ReprTreeExt},
edit_tree::{EditTree, TreeNavResult}, edit_tree::{EditTree, TreeNavResult},
editors::ObjCommander, editors::ObjCommander,
}, },
@ -31,24 +31,27 @@ pub fn init_ctx( ctx: Arc<RwLock<Context>> ) {
{ {
let ctx = ctx.clone(); let ctx = ctx.clone();
move |rt, σ| { move |rt, σ| {
if let Some(v) = rt.read().unwrap().get_view::<dyn SingletonView<Item = char>>() { {
eprintln!("prev value: {}", v.get()); let mut rt = rt.write().unwrap();
if let Some(buf) = rt.singleton_buffer::<char>() {
// buffer already exists
} else {
rt.insert_leaf(
vec![].into_iter(),
ReprLeaf::from_singleton_buffer(
SingletonBuffer::new('\0')
));
}
} }
/* Create EditTree object let char_buf = rt.singleton_buffer::<char>();
*/
rt.view_char().0.update();
let char_buf = rt.write().unwrap().singleton_buffer::<char>().unwrap();
eprintln!("make edittree: char val = {}", char_buf.get());
let mut edittree = CharEditor::new_edit_tree( let mut edittree = CharEditor::new_edit_tree(
ctx.clone(), ctx.clone(),
char_buf, char_buf,
r3vi::buffer::singleton::SingletonBuffer::<usize>::new(0).get_port() SingletonBuffer::<usize>::new(0).get_port()
); );
eprintln!("insert Char~EditTree");
rt.write().unwrap() rt.write().unwrap()
.insert_branch( .insert_branch(
ReprTree::from_singleton_buffer( ReprTree::from_singleton_buffer(

View file

@ -1,9 +1,19 @@
use { use {
r3vi::{view::{OuterViewPort, singleton::*}, buffer::singleton::*}, r3vi::{
view::{
ViewPort,
OuterViewPort, Observer, singleton::*
},
buffer::{singleton::*, vec::*}
},
laddertypes::{TypeTerm}, laddertypes::{TypeTerm},
crate::{ crate::{
repr_tree::{Context, ReprTree}, repr_tree::{Context, ReprTree, ReprLeaf, ReprTreeExt},
editors::list::{ListEditor}//, PTYListController, PTYListStyle} edit_tree::{EditTree},
editors::{
char::{CharEditor},
list::{ListEditor}//, PTYListController, PTYListStyle}
}
}, },
std::sync::{Arc, RwLock} std::sync::{Arc, RwLock}
}; };
@ -30,7 +40,7 @@ pub fn init_ctx(ctx: Arc<RwLock<Context>>) {
ctx.clone(), ctx.clone(),
item_type.clone() item_type.clone()
).into_node( ).into_node(
r3vi::buffer::singleton::SingletonBuffer::<usize>::new(0).get_port() SingletonBuffer::<usize>::new(0).get_port()
); );
src_rt.write().unwrap().insert_branch( src_rt.write().unwrap().insert_branch(
@ -45,5 +55,39 @@ pub fn init_ctx(ctx: Arc<RwLock<Context>>) {
} }
} }
); );
let mt = crate::repr_tree::MorphismType {
src_type: Context::parse(&ctx, "<List Char>~EditTree"),
dst_type: Context::parse(&ctx, "<List Char>")
};
ctx.write().unwrap().morphisms.add_morphism(
mt,
{
let ctx = ctx.clone();
move |src_rt, σ| {
let edittree =
src_rt
.descend(Context::parse(&ctx, "EditTree")).unwrap()
.singleton_buffer::<EditTree>();
let list_edit = edittree.get().get_edit::< ListEditor >().unwrap();
let edittree_items = list_edit.read().unwrap().data.get_port().to_list();
src_rt.write().unwrap().insert_leaf(
vec![].into_iter(),
ReprLeaf::from_view(
edittree_items
.map(
|edittree_char|
edittree_char
.read().unwrap()
.get_edit::<CharEditor>().unwrap()
.read().unwrap()
.get()
)
)
);
}
}
);
} }

View file

@ -153,12 +153,12 @@ impl Context {
pub fn type_term_to_str(&self, t: &TypeTerm) -> String { pub fn type_term_to_str(&self, t: &TypeTerm) -> String {
self.type_dict.read().unwrap().unparse(&t) self.type_dict.read().unwrap().unparse(&t)
} }
/// adds an object without any representations /// adds an object without any representations
pub fn add_obj(ctx: Arc<RwLock<Context>>, name: String, typename: &str) { pub fn add_obj(ctx: Arc<RwLock<Context>>, name: String, typename: &str) {
let type_tag = ctx.read().unwrap() let type_tag = ctx.read().unwrap()
.type_dict.write().unwrap() .type_dict.write().unwrap()
.parse(typename).unwrap(); .parse(typename).unwrap();
/* /*
if let Some(node) = Context::make_node(&ctx, type_tag, SingletonBuffer::new(0).get_port()) { if let Some(node) = Context::make_node(&ctx, type_tag, SingletonBuffer::new(0).get_port()) {
ctx.write().unwrap().nodes.insert(name, node); ctx.write().unwrap().nodes.insert(name, node);
@ -186,14 +186,12 @@ impl Context {
self.type_term_from_str("EditTree").expect("") self.type_term_from_str("EditTree").expect("")
]); ]);
eprintln!("setp_edittree: apply morphism T -> T~EditTree");
self.morphisms.apply_morphism( self.morphisms.apply_morphism(
rt.clone(), rt.clone(),
&rt.get_type(), &rt.get_type(),
&ladder &ladder
); );
eprintln!("get repr-node of editTree");
if let Some(new_edittree) = if let Some(new_edittree) =
rt.descend(self.type_term_from_str("EditTree").unwrap()) rt.descend(self.type_term_from_str("EditTree").unwrap())
{ {

View file

@ -225,21 +225,18 @@ impl PTYListController {
rt, rt,
self.depth.map(|d| d+1) self.depth.map(|d| d+1)
); );
/*
let mut ne = new_edittree.write().unwrap(); let mut ne = new_edittree.get();
match ne.send_cmd_obj(cmd_obj.clone()) { match ne.send_cmd_obj(cmd_obj.clone()) {
TreeNavResult::Continue => { TreeNavResult::Continue => {
drop(ne); drop(ne);
e.insert(new_edittree.clone()); e.insert(new_edittree.value.clone());
TreeNavResult::Continue TreeNavResult::Continue
} }
TreeNavResult::Exit => { TreeNavResult::Exit => {
*/
TreeNavResult::Exit TreeNavResult::Exit
/*
} }
} }
*/
}, },
ListCursorMode::Select => { ListCursorMode::Select => {
if let Some(item) = e.get_item_mut() { if let Some(item) = e.get_item_mut() {