Compare commits

..

2 commits

2 changed files with 43 additions and 11 deletions

View file

@ -1,8 +1,11 @@
use { use {
laddertypes::{TypeTerm, TypeID, morphism::Morphism}, laddertypes::{TypeTerm, TypeID, morphism::Morphism},
r3vi::view::{AnyOuterViewPort, port::UpdateTask}, r3vi::view::{AnyOuterViewPort, port::*, list::*},
crate::{ crate::{
repr_tree::{ReprTree, ReprTreeExt, ReprLeaf}, repr_tree::{
ReprTree, ReprTreeExt, ReprLeaf,
context::{*}
},
}, },
std::{ std::{
sync::{Arc, RwLock}, sync::{Arc, RwLock},

View file

@ -248,16 +248,45 @@ impl ReprTree {
} }
pub fn detach(&mut self, ctx: &Arc<RwLock<Context>>) { pub fn detach(&mut self, ctx: &Arc<RwLock<Context>>) {
// eprintln!("DETACH {:?}", self.get_type());
if let Some(leaf) = self.leaf.as_mut() { if let Some(leaf) = self.leaf.as_mut() {
if self.type_tag == Context::parse(&ctx, "Char") { if self.type_tag ==
TypeTerm::TypeID(TYPEID_edittree)
{
leaf.detach::< dyn SingletonView<
Item = Arc<RwLock< crate::edit_tree::EditTree >>
> >();
}
else if self.type_tag ==
TypeTerm::TypeID(TYPEID_char)
{
leaf.detach::< dyn SingletonView<Item = char> >(); leaf.detach::< dyn SingletonView<Item = char> >();
} }
if self.type_tag == Context::parse(&ctx, "<Vec Char>") { else if self.type_tag == TypeTerm::TypeID(TYPEID_u64)
{
leaf.detach::< dyn SingletonView<Item = u64> >();
}
else if self.type_tag == TypeTerm::App(vec![
TypeTerm::TypeID(TYPEID_vec),
TypeTerm::TypeID(TYPEID_edittree),
]) {
leaf.detach_vec::<
Arc<RwLock< crate::edit_tree::EditTree >>
>();
}
else if self.type_tag == TypeTerm::App(vec![
TypeTerm::TypeID(TYPEID_vec),
TypeTerm::TypeID(TYPEID_char),
]) {
leaf.detach_vec::< char >(); leaf.detach_vec::< char >();
} }
if self.type_tag == Context::parse(&ctx, "<List Char>") { else if self.type_tag == TypeTerm::App(vec![
leaf.detach::<dyn ListView<char>>(); TypeTerm::TypeID(TYPEID_vec),
TypeTerm::TypeID(TYPEID_u64),
]) {
leaf.detach_vec::< u64 >();
}
else {
eprintln!("cant detach type");
} }
} }