edit tree: split node struct into sub structs
This commit is contained in:
parent
bee1b43ddc
commit
be3eefc3a5
8 changed files with 72 additions and 109 deletions
|
@ -28,7 +28,7 @@ use {
|
||||||
fn node_make_char_view(
|
fn node_make_char_view(
|
||||||
node: NestedNode
|
node: NestedNode
|
||||||
) -> NestedNode {
|
) -> NestedNode {
|
||||||
node.display
|
node.disp.view
|
||||||
.write().unwrap()
|
.write().unwrap()
|
||||||
.insert_branch(ReprTree::new_leaf(
|
.insert_branch(ReprTree::new_leaf(
|
||||||
Context::parse(&node.ctx, "TerminalView"),
|
Context::parse(&node.ctx, "TerminalView"),
|
||||||
|
@ -45,15 +45,13 @@ fn node_make_char_view(
|
||||||
node
|
node
|
||||||
}
|
}
|
||||||
|
|
||||||
fn node_make_list_view(
|
fn node_make_seq_view(
|
||||||
mut node: NestedNode
|
mut node: NestedNode
|
||||||
) -> NestedNode {
|
) -> NestedNode {
|
||||||
eprintln!("add list display type");
|
node.disp.view
|
||||||
node.display
|
|
||||||
.write().unwrap()
|
.write().unwrap()
|
||||||
.insert_branch(ReprTree::new_leaf(
|
.insert_branch(ReprTree::new_leaf(
|
||||||
Context::parse(&node.ctx, "TerminalView"),
|
Context::parse(&node.ctx, "TerminalView"),
|
||||||
|
|
||||||
node.data
|
node.data
|
||||||
.read()
|
.read()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
|
@ -65,8 +63,13 @@ fn node_make_list_view(
|
||||||
.flatten()
|
.flatten()
|
||||||
.into()
|
.into()
|
||||||
));
|
));
|
||||||
|
node
|
||||||
|
}
|
||||||
|
|
||||||
// nested_tty::editors::list::PTYListStyle::for_node( &mut node, ("(", ",", ")") );
|
fn node_make_list_edit(
|
||||||
|
mut node: NestedNode
|
||||||
|
) -> NestedNode {
|
||||||
|
nested_tty::editors::list::PTYListStyle::for_node( &mut node, ("(", ",", ")") );
|
||||||
nested_tty::editors::list::PTYListController::for_node( &mut node, None, None );
|
nested_tty::editors::list::PTYListController::for_node( &mut node, None, None );
|
||||||
|
|
||||||
node
|
node
|
||||||
|
@ -78,10 +81,9 @@ fn node_make_view(
|
||||||
if node.data.read().unwrap().get_type() == &Context::parse(&node.ctx, "Char") {
|
if node.data.read().unwrap().get_type() == &Context::parse(&node.ctx, "Char") {
|
||||||
node_make_char_view( node )
|
node_make_char_view( node )
|
||||||
} else if node.data.read().unwrap().get_type() == &Context::parse(&node.ctx, "<Seq Char>") {
|
} else if node.data.read().unwrap().get_type() == &Context::parse(&node.ctx, "<Seq Char>") {
|
||||||
node_make_list_view( node )
|
node_make_seq_view( node )
|
||||||
// node
|
|
||||||
} else if node.data.read().unwrap().get_type() == &Context::parse(&node.ctx, "<List Char>") {
|
} else if node.data.read().unwrap().get_type() == &Context::parse(&node.ctx, "<List Char>") {
|
||||||
node_make_list_view( node )
|
node_make_list_edit( node )
|
||||||
} else {
|
} else {
|
||||||
eprintln!("couldnt add view");
|
eprintln!("couldnt add view");
|
||||||
node
|
node
|
||||||
|
@ -151,7 +153,6 @@ async fn main() {
|
||||||
.offset(Vector2::new(5, 0)),
|
.offset(Vector2::new(5, 0)),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
let label = ctx.read().unwrap().type_term_to_str( &node1.get_type() );
|
let label = ctx.read().unwrap().type_term_to_str( &node1.get_type() );
|
||||||
compositor.write().unwrap()
|
compositor.write().unwrap()
|
||||||
.push(nested_tty::make_label( &label ).offset(Vector2::new(0, 2)));
|
.push(nested_tty::make_label( &label ).offset(Vector2::new(0, 2)));
|
||||||
|
|
|
@ -36,10 +36,6 @@ pub enum TreeNavCmd {
|
||||||
pxev_dn_qnexd
|
pxev_dn_qnexd
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TreeNavCmd {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
pub trait TreeNav {
|
pub trait TreeNav {
|
||||||
/* CORE
|
/* CORE
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -13,33 +13,31 @@ use {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
//* TODO: refactoring proposal
|
#[derive(Clone)]
|
||||||
/*
|
pub struct NestedNodeDisplay {
|
||||||
|
|
||||||
struct NestedNodeDisplay {
|
|
||||||
/// display view
|
/// display view
|
||||||
pub view: Option< Arc<RwLock<ReprTree>> >,
|
pub view: Arc<RwLock<ReprTree>>,
|
||||||
|
|
||||||
/// diagnostics
|
/// diagnostics
|
||||||
pub diag: Option< OuterViewPort<dyn SequenceView<Item = diagnostics::Message>> >,
|
pub diag: Option< OuterViewPort<dyn SequenceView<Item = Message>> >,
|
||||||
|
|
||||||
/// depth
|
/// depth
|
||||||
pub depth: SingletonBuffer< usize >,
|
pub depth: OuterViewPort<dyn SingletonView<Item = usize>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
struct NestedNodeEdit {
|
#[derive(Clone)]
|
||||||
|
pub struct NestedNodeEdit {
|
||||||
/// abstract editor
|
/// abstract editor
|
||||||
pub editor: SingletonBuffer<
|
pub editor: SingletonBuffer<
|
||||||
Option< Arc<dyn Any + Send + Sync> >
|
Option< Arc<dyn Any + Send + Sync> >
|
||||||
>,
|
>,
|
||||||
|
|
||||||
pub spillbuf: VecBuffer< NestedNode >,
|
pub spillbuf: Arc<RwLock< Vec< Arc<RwLock< NestedNode >> > >>,
|
||||||
|
|
||||||
/// commander & navigation
|
/// commander & navigation
|
||||||
pub cmd: SingletonBuffer<
|
pub cmd: SingletonBuffer<
|
||||||
Option< Arc<RwLock<dyn ObjCommander + Send + Sync>> >
|
Option< Arc<RwLock<dyn ObjCommander + Send + Sync>> >
|
||||||
>, /// abstract data view
|
>, /// abstract data view
|
||||||
pub data: Arc<RwLock<ReprTree>>,
|
|
||||||
|
|
||||||
pub close_char: SingletonBuffer< Option< char > >,
|
pub close_char: SingletonBuffer< Option< char > >,
|
||||||
|
|
||||||
|
@ -49,7 +47,8 @@ struct NestedNodeEdit {
|
||||||
>,
|
>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct NewNestedNode {
|
#[derive(Clone)]
|
||||||
|
pub struct NestedNode {
|
||||||
/// context
|
/// context
|
||||||
pub ctx: Arc<RwLock<Context>>,
|
pub ctx: Arc<RwLock<Context>>,
|
||||||
|
|
||||||
|
@ -62,57 +61,23 @@ pub struct NewNestedNode {
|
||||||
/// editor & commander objects
|
/// editor & commander objects
|
||||||
pub edit: NestedNodeEdit
|
pub edit: NestedNodeEdit
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
#[derive(Clone)]
|
|
||||||
pub struct NestedNode {
|
|
||||||
/// context
|
|
||||||
pub ctx: Arc<RwLock<Context>>,
|
|
||||||
|
|
||||||
/// abstract data view
|
|
||||||
pub data: Arc<RwLock<ReprTree>>,
|
|
||||||
|
|
||||||
/// display view
|
|
||||||
pub display: Arc<RwLock<ReprTree>>,
|
|
||||||
|
|
||||||
/// diagnostics
|
|
||||||
pub diag: Option< OuterViewPort<dyn SequenceView<Item = Message>> >,
|
|
||||||
|
|
||||||
/// depth
|
|
||||||
pub depth: OuterViewPort< dyn SingletonView<Item = usize> >,
|
|
||||||
|
|
||||||
/// abstract editor
|
|
||||||
pub editor: SingletonBuffer<
|
|
||||||
Option< Arc<dyn Any + Send + Sync> >
|
|
||||||
>,
|
|
||||||
|
|
||||||
pub spillbuf: Arc<RwLock<Vec<Arc<RwLock<NestedNode>>>>>,
|
|
||||||
|
|
||||||
/// commander & navigation
|
|
||||||
pub cmd: SingletonBuffer<
|
|
||||||
Option< Arc<RwLock<dyn ObjCommander + Send + Sync>> >
|
|
||||||
>,
|
|
||||||
pub close_char: SingletonBuffer<
|
|
||||||
Option< char >
|
|
||||||
>,
|
|
||||||
pub tree_nav: SingletonBuffer<
|
|
||||||
Option< Arc<RwLock<dyn TreeNav + Send + Sync>> >
|
|
||||||
>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl NestedNode {
|
impl NestedNode {
|
||||||
pub fn new(ctx: Arc<RwLock<Context>>, data: Arc<RwLock<ReprTree>>, depth: OuterViewPort<dyn SingletonView<Item = usize>>) -> Self {
|
pub fn new(ctx: Arc<RwLock<Context>>, data: Arc<RwLock<ReprTree>>, depth: OuterViewPort<dyn SingletonView<Item = usize>>) -> Self {
|
||||||
NestedNode {
|
NestedNode {
|
||||||
|
disp: NestedNodeDisplay {
|
||||||
|
view: ReprTree::new_arc(Context::parse(&ctx, "Display")),
|
||||||
|
diag: None,
|
||||||
|
depth,
|
||||||
|
},
|
||||||
|
edit: NestedNodeEdit {
|
||||||
|
editor: SingletonBuffer::new(None),
|
||||||
|
spillbuf: Arc::new(RwLock::new(Vec::new())),
|
||||||
|
cmd: SingletonBuffer::new(None),
|
||||||
|
close_char: SingletonBuffer::new(None),
|
||||||
|
tree_nav: SingletonBuffer::new(None),
|
||||||
|
},
|
||||||
data,
|
data,
|
||||||
display: Arc::new(RwLock::new(ReprTree::new(Context::parse(&ctx, "Display")))),
|
|
||||||
diag: None,
|
|
||||||
depth,
|
|
||||||
editor: SingletonBuffer::new(None),
|
|
||||||
spillbuf: Arc::new(RwLock::new(Vec::new())),
|
|
||||||
cmd: SingletonBuffer::new(None),
|
|
||||||
close_char: SingletonBuffer::new(None),
|
|
||||||
tree_nav: SingletonBuffer::new(None),
|
|
||||||
|
|
||||||
ctx
|
ctx
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -147,29 +112,29 @@ impl NestedNode {
|
||||||
//\\//\\
|
//\\//\\
|
||||||
|
|
||||||
pub fn set_editor(mut self, editor: Arc<dyn Any + Send + Sync>) -> Self {
|
pub fn set_editor(mut self, editor: Arc<dyn Any + Send + Sync>) -> Self {
|
||||||
self.editor.set(Some(editor));
|
self.edit.editor.set(Some(editor));
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_cmd(mut self, cmd: Arc<RwLock<dyn ObjCommander + Send + Sync>>) -> Self {
|
pub fn set_cmd(mut self, cmd: Arc<RwLock<dyn ObjCommander + Send + Sync>>) -> Self {
|
||||||
self.cmd.set(Some(cmd));
|
self.edit.cmd.set(Some(cmd));
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_nav(mut self, nav: Arc<RwLock<dyn TreeNav + Send + Sync>>) -> Self {
|
pub fn set_nav(mut self, nav: Arc<RwLock<dyn TreeNav + Send + Sync>>) -> Self {
|
||||||
self.tree_nav.set(Some(nav));
|
self.edit.tree_nav.set(Some(nav));
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_diag(mut self, diag: OuterViewPort<dyn SequenceView<Item = Message>>) -> Self {
|
pub fn set_diag(mut self, diag: OuterViewPort<dyn SequenceView<Item = Message>>) -> Self {
|
||||||
self.diag = Some(diag);
|
self.disp.diag = Some(diag);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
//\\//\\
|
//\\//\\
|
||||||
|
|
||||||
pub fn get_diag(&self) -> OuterViewPort<dyn SequenceView<Item = Message>> {
|
pub fn get_diag(&self) -> OuterViewPort<dyn SequenceView<Item = Message>> {
|
||||||
self.diag.clone().unwrap_or(ViewPort::new().into_outer())
|
self.disp.diag.clone().unwrap_or(ViewPort::new().into_outer())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_data_port<'a, V: View + ?Sized + 'static>(&'a self, type_str: impl Iterator<Item = &'a str>) -> Option<OuterViewPort<V>>
|
pub fn get_data_port<'a, V: View + ?Sized + 'static>(&'a self, type_str: impl Iterator<Item = &'a str>) -> Option<OuterViewPort<V>>
|
||||||
|
@ -200,7 +165,7 @@ impl NestedNode {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
pub fn get_edit<T: Send + Sync + 'static>(&self) -> Option<Arc<RwLock<T>>> {
|
pub fn get_edit<T: Send + Sync + 'static>(&self) -> Option<Arc<RwLock<T>>> {
|
||||||
if let Some(edit) = self.editor.get() {
|
if let Some(edit) = self.edit.editor.get() {
|
||||||
if let Ok(edit) = edit.downcast::<RwLock<T>>() {
|
if let Ok(edit) = edit.downcast::<RwLock<T>>() {
|
||||||
Some(edit)
|
Some(edit)
|
||||||
} else {
|
} else {
|
||||||
|
@ -226,7 +191,7 @@ impl TreeType for NestedNode {
|
||||||
|
|
||||||
impl TreeNav for NestedNode {
|
impl TreeNav for NestedNode {
|
||||||
fn get_cursor(&self) -> TreeCursor {
|
fn get_cursor(&self) -> TreeCursor {
|
||||||
if let Some(tn) = self.tree_nav.get() {
|
if let Some(tn) = self.edit.tree_nav.get() {
|
||||||
tn.read().unwrap().get_cursor()
|
tn.read().unwrap().get_cursor()
|
||||||
} else {
|
} else {
|
||||||
TreeCursor::default()
|
TreeCursor::default()
|
||||||
|
@ -234,7 +199,7 @@ impl TreeNav for NestedNode {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_addr_view(&self) -> OuterViewPort<dyn SequenceView<Item = isize>> {
|
fn get_addr_view(&self) -> OuterViewPort<dyn SequenceView<Item = isize>> {
|
||||||
if let Some(tn) = self.tree_nav.get() {
|
if let Some(tn) = self.edit.tree_nav.get() {
|
||||||
tn.read().unwrap().get_addr_view()
|
tn.read().unwrap().get_addr_view()
|
||||||
} else {
|
} else {
|
||||||
OuterViewPort::default()
|
OuterViewPort::default()
|
||||||
|
@ -242,7 +207,7 @@ impl TreeNav for NestedNode {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_mode_view(&self) -> OuterViewPort<dyn SingletonView<Item = ListCursorMode>> {
|
fn get_mode_view(&self) -> OuterViewPort<dyn SingletonView<Item = ListCursorMode>> {
|
||||||
if let Some(tn) = self.tree_nav.get() {
|
if let Some(tn) = self.edit.tree_nav.get() {
|
||||||
tn.read().unwrap().get_mode_view()
|
tn.read().unwrap().get_mode_view()
|
||||||
} else {
|
} else {
|
||||||
OuterViewPort::default()
|
OuterViewPort::default()
|
||||||
|
@ -250,7 +215,7 @@ impl TreeNav for NestedNode {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_cursor_warp(&self) -> TreeCursor {
|
fn get_cursor_warp(&self) -> TreeCursor {
|
||||||
if let Some(tn) = self.tree_nav.get() {
|
if let Some(tn) = self.edit.tree_nav.get() {
|
||||||
tn.read().unwrap().get_cursor_warp()
|
tn.read().unwrap().get_cursor_warp()
|
||||||
} else {
|
} else {
|
||||||
TreeCursor::default()
|
TreeCursor::default()
|
||||||
|
@ -258,7 +223,7 @@ impl TreeNav for NestedNode {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_height(&self, op: &TreeHeightOp) -> usize {
|
fn get_height(&self, op: &TreeHeightOp) -> usize {
|
||||||
if let Some(tn) = self.tree_nav.get() {
|
if let Some(tn) = self.edit.tree_nav.get() {
|
||||||
tn.read().unwrap().get_height( op )
|
tn.read().unwrap().get_height( op )
|
||||||
} else {
|
} else {
|
||||||
0
|
0
|
||||||
|
@ -266,7 +231,7 @@ impl TreeNav for NestedNode {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn goby(&mut self, direction: Vector2<isize>) -> TreeNavResult {
|
fn goby(&mut self, direction: Vector2<isize>) -> TreeNavResult {
|
||||||
if let Some(tn) = self.tree_nav.get() {
|
if let Some(tn) = self.edit.tree_nav.get() {
|
||||||
tn.write().unwrap().goby(direction)
|
tn.write().unwrap().goby(direction)
|
||||||
} else {
|
} else {
|
||||||
TreeNavResult::Exit
|
TreeNavResult::Exit
|
||||||
|
@ -274,7 +239,7 @@ impl TreeNav for NestedNode {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn goto(&mut self, new_cursor: TreeCursor) -> TreeNavResult {
|
fn goto(&mut self, new_cursor: TreeCursor) -> TreeNavResult {
|
||||||
if let Some(tn) = self.tree_nav.get() {
|
if let Some(tn) = self.edit.tree_nav.get() {
|
||||||
tn.write().unwrap().goto(new_cursor)
|
tn.write().unwrap().goto(new_cursor)
|
||||||
} else {
|
} else {
|
||||||
TreeNavResult::Exit
|
TreeNavResult::Exit
|
||||||
|
@ -303,7 +268,7 @@ impl ObjCommander for NestedNode {
|
||||||
} else {
|
} else {
|
||||||
TreeNavResult::Exit
|
TreeNavResult::Exit
|
||||||
}
|
}
|
||||||
} else if let Some(cmd) = self.cmd.get() {
|
} else if let Some(cmd) = self.edit.cmd.get() {
|
||||||
// todo: filter out tree-nav cmds and send them to tree_nav
|
// todo: filter out tree-nav cmds and send them to tree_nav
|
||||||
cmd.write().unwrap().send_cmd_obj(cmd_obj)
|
cmd.write().unwrap().send_cmd_obj(cmd_obj)
|
||||||
} else {
|
} else {
|
||||||
|
@ -312,6 +277,7 @@ impl ObjCommander for NestedNode {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
impl Diagnostics for NestedNode {
|
impl Diagnostics for NestedNode {
|
||||||
fn get_msg_port(&self) -> OuterViewPort<dyn SequenceView<Item = Message>> {
|
fn get_msg_port(&self) -> OuterViewPort<dyn SequenceView<Item = Message>> {
|
||||||
self.get_diag()
|
self.get_diag()
|
||||||
|
|
|
@ -131,7 +131,7 @@ impl ListEditor {
|
||||||
.flatten()
|
.flatten()
|
||||||
);
|
);
|
||||||
|
|
||||||
node.spillbuf = e.spillbuf.clone();
|
node.edit.spillbuf = e.spillbuf.clone();
|
||||||
node
|
node
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -229,7 +229,7 @@ impl ListEditor {
|
||||||
|
|
||||||
/// insert a new element
|
/// insert a new element
|
||||||
pub fn insert(&mut self, item: Arc<RwLock<NestedNode>>) {
|
pub fn insert(&mut self, item: Arc<RwLock<NestedNode>>) {
|
||||||
item.read().unwrap().depth.0.set_view(
|
item.read().unwrap().disp.depth.0.set_view(
|
||||||
self.depth.map(|d| d+1).get_view()
|
self.depth.map(|d| d+1).get_view()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -306,7 +306,7 @@ impl ListEditor {
|
||||||
self.set_leaf_mode(ListCursorMode::Insert);
|
self.set_leaf_mode(ListCursorMode::Insert);
|
||||||
self.nexd();
|
self.nexd();
|
||||||
|
|
||||||
let mut b = item.spillbuf.write().unwrap();
|
let mut b = item.edit.spillbuf.write().unwrap();
|
||||||
let mut tail_node = Context::make_node(&self.ctx, self.typ.clone(), self.depth.map(|d| d+1)).unwrap();
|
let mut tail_node = Context::make_node(&self.ctx, self.typ.clone(), self.depth.map(|d| d+1)).unwrap();
|
||||||
tail_node.goto(TreeCursor::home());
|
tail_node.goto(TreeCursor::home());
|
||||||
|
|
||||||
|
@ -364,7 +364,7 @@ impl ListEditor {
|
||||||
|
|
||||||
let old_cur = pxv_editor.get_cursor();
|
let old_cur = pxv_editor.get_cursor();
|
||||||
|
|
||||||
let data = cur_editor.spillbuf.read().unwrap();
|
let data = cur_editor.edit.spillbuf.read().unwrap();
|
||||||
for x in data.iter() {
|
for x in data.iter() {
|
||||||
pxv_editor.send_cmd_obj(
|
pxv_editor.send_cmd_obj(
|
||||||
ReprTree::new_leaf(
|
ReprTree::new_leaf(
|
||||||
|
@ -422,7 +422,7 @@ impl ListEditor {
|
||||||
leaf_mode: ListCursorMode::Insert
|
leaf_mode: ListCursorMode::Insert
|
||||||
});
|
});
|
||||||
|
|
||||||
let data = nxd_editor.spillbuf.read().unwrap();
|
let data = nxd_editor.edit.spillbuf.read().unwrap();
|
||||||
|
|
||||||
for x in data.iter() {
|
for x in data.iter() {
|
||||||
cur_editor.send_cmd_obj(
|
cur_editor.send_cmd_obj(
|
||||||
|
|
|
@ -168,8 +168,8 @@ impl TypeTermEditor {
|
||||||
|
|
||||||
node.goto(TreeCursor::home());
|
node.goto(TreeCursor::home());
|
||||||
|
|
||||||
let _editor = node.editor.get();
|
let _editor = node.edit.editor.get();
|
||||||
self.close_char.set(node.close_char.get());
|
self.close_char.set(node.edit.close_char.get());
|
||||||
self.cur_node.set(node);
|
self.cur_node.set(node);
|
||||||
self.state = new_state;
|
self.state = new_state;
|
||||||
}
|
}
|
||||||
|
@ -204,7 +204,7 @@ impl TypeTermEditor {
|
||||||
cur_node: SingletonBuffer::new(cur_node.clone()),
|
cur_node: SingletonBuffer::new(cur_node.clone()),
|
||||||
close_char: SingletonBuffer::new(None),
|
close_char: SingletonBuffer::new(None),
|
||||||
spillbuf: Arc::new(RwLock::new(Vec::new())),
|
spillbuf: Arc::new(RwLock::new(Vec::new())),
|
||||||
depth: cur_node.depth.clone()
|
depth: cur_node.disp.depth.clone()
|
||||||
};
|
};
|
||||||
/* FIXME
|
/* FIXME
|
||||||
let view = editor.cur_node
|
let view = editor.cur_node
|
||||||
|
@ -215,24 +215,24 @@ impl TypeTermEditor {
|
||||||
.to_grid()
|
.to_grid()
|
||||||
.flatten();
|
.flatten();
|
||||||
*/
|
*/
|
||||||
let _cc = editor.cur_node.get().close_char;
|
let _cc = editor.cur_node.get().edit.close_char;
|
||||||
let editor = Arc::new(RwLock::new(editor));
|
let editor = Arc::new(RwLock::new(editor));
|
||||||
|
|
||||||
let mut super_node = NestedNode::new(ctx, data, cur_node.depth)
|
let mut super_node = NestedNode::new(ctx, data, cur_node.disp.depth)
|
||||||
// .set_view(view)
|
// .set_view(view)
|
||||||
.set_nav(editor.clone())
|
.set_nav(editor.clone())
|
||||||
.set_cmd(editor.clone())
|
.set_cmd(editor.clone())
|
||||||
.set_editor(editor.clone());
|
.set_editor(editor.clone());
|
||||||
|
|
||||||
editor.write().unwrap().close_char = super_node.close_char.clone();
|
editor.write().unwrap().close_char = super_node.edit.close_char.clone();
|
||||||
super_node.spillbuf = editor.read().unwrap().spillbuf.clone();
|
super_node.edit.spillbuf = editor.read().unwrap().spillbuf.clone();
|
||||||
|
|
||||||
super_node
|
super_node
|
||||||
}
|
}
|
||||||
|
|
||||||
fn forward_spill(&mut self) {
|
fn forward_spill(&mut self) {
|
||||||
let node = self.cur_node.get();
|
let node = self.cur_node.get();
|
||||||
let mut buf = node.spillbuf.write().unwrap();
|
let mut buf = node.edit.spillbuf.write().unwrap();
|
||||||
for n in buf.iter() {
|
for n in buf.iter() {
|
||||||
self.spillbuf.write().unwrap().push(n.clone());
|
self.spillbuf.write().unwrap().push(n.clone());
|
||||||
}
|
}
|
||||||
|
@ -371,7 +371,7 @@ impl TypeTermEditor {
|
||||||
* that has same state & child-node as current node.
|
* that has same state & child-node as current node.
|
||||||
*/
|
*/
|
||||||
let old_edit_node = TypeTermEditor::new_node( self.ctx.clone(), SingletonBuffer::new(0).get_port() );
|
let old_edit_node = TypeTermEditor::new_node( self.ctx.clone(), SingletonBuffer::new(0).get_port() );
|
||||||
old_node.depth.0.set_view( old_edit_node.depth.map(|x|x).get_view() );
|
old_node.disp.depth.0.set_view( old_edit_node.disp.depth.map(|x|x).get_view() );
|
||||||
|
|
||||||
let old_edit_clone = old_edit_node.get_edit::<TypeTermEditor>().unwrap();
|
let old_edit_clone = old_edit_node.get_edit::<TypeTermEditor>().unwrap();
|
||||||
old_edit_clone.write().unwrap().set_state( self.state );
|
old_edit_clone.write().unwrap().set_state( self.state );
|
||||||
|
|
|
@ -260,7 +260,7 @@ impl Context {
|
||||||
drop(dict);
|
drop(dict);
|
||||||
|
|
||||||
self.add_morphism(morphism_pattern, Arc::new(move |node, dst_type| {
|
self.add_morphism(morphism_pattern, Arc::new(move |node, dst_type| {
|
||||||
mk_editor(node.ctx.clone(), dst_type, node.depth)
|
mk_editor(node.ctx.clone(), dst_type, node.disp.depth)
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,7 @@ impl DisplaySegment for ListSegment {
|
||||||
atom
|
atom
|
||||||
.add_style_back(bg_style_from_depth(select))
|
.add_style_back(bg_style_from_depth(select))
|
||||||
.add_style_back(TerminalStyle::bold(select==1))
|
.add_style_back(TerminalStyle::bold(select==1))
|
||||||
.add_style_back(fg_style_from_depth(e.depth.get_view().get()))
|
.add_style_back(fg_style_from_depth(e.disp.depth.get_view().get()))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -92,7 +92,7 @@ impl PTYListStyle {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn for_node(node: &mut NestedNode, style: (&str, &str, &str)) {
|
pub fn for_node(node: &mut NestedNode, style: (&str, &str, &str)) {
|
||||||
node.display
|
node.disp.view
|
||||||
.write().unwrap()
|
.write().unwrap()
|
||||||
.insert_branch(ReprTree::new_leaf(
|
.insert_branch(ReprTree::new_leaf(
|
||||||
Context::parse(&node.ctx, "TerminalView"),
|
Context::parse(&node.ctx, "TerminalView"),
|
||||||
|
@ -152,10 +152,10 @@ impl PTYListController {
|
||||||
}
|
}
|
||||||
|
|
||||||
let editor = node.get_edit::<ListEditor>().unwrap();
|
let editor = node.get_edit::<ListEditor>().unwrap();
|
||||||
let controller = Arc::new(RwLock::new(PTYListController::from_editor( editor, split_char, close_char, node.depth.clone() )));
|
let controller = Arc::new(RwLock::new(PTYListController::from_editor( editor, split_char, close_char, node.disp.depth.clone() )));
|
||||||
|
|
||||||
node.cmd.set(Some(controller.clone()));
|
node.edit.cmd.set(Some(controller.clone()));
|
||||||
node.close_char.set(close_char);
|
node.edit.close_char.set(close_char);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_data_port(&self) -> OuterViewPort<dyn SequenceView<Item = NestedNode>> {
|
pub fn get_data_port(&self) -> OuterViewPort<dyn SequenceView<Item = NestedNode>> {
|
||||||
|
@ -235,7 +235,7 @@ impl PTYListController {
|
||||||
ListCursorMode::Select => {
|
ListCursorMode::Select => {
|
||||||
if let Some(item) = e.get_item_mut() {
|
if let Some(item) = e.get_item_mut() {
|
||||||
let res = item.write().unwrap().send_cmd_obj(cmd_obj.clone());
|
let res = item.write().unwrap().send_cmd_obj(cmd_obj.clone());
|
||||||
let child_close_char = item.read().unwrap().close_char.get();
|
let child_close_char = item.read().unwrap().edit.close_char.get();
|
||||||
|
|
||||||
match res {
|
match res {
|
||||||
TreeNavResult::Continue => TreeNavResult::Continue,
|
TreeNavResult::Continue => TreeNavResult::Continue,
|
||||||
|
|
|
@ -44,7 +44,7 @@ use std::sync::{Arc, RwLock};
|
||||||
|
|
||||||
impl DisplaySegment for nested::edit_tree::NestedNode {
|
impl DisplaySegment for nested::edit_tree::NestedNode {
|
||||||
fn display_view(&self) -> OuterViewPort<dyn TerminalView> {
|
fn display_view(&self) -> OuterViewPort<dyn TerminalView> {
|
||||||
if let Some( tv_repr ) = self.display
|
if let Some( tv_repr ) = self.disp.view
|
||||||
.read().unwrap()
|
.read().unwrap()
|
||||||
.descend( Context::parse(&self.ctx, "TerminalView") )
|
.descend( Context::parse(&self.ctx, "TerminalView") )
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue