lib-nested/lib-nested-core/src/editors/char/mod.rs

85 lines
2.2 KiB
Rust
Raw Normal View History

2022-06-19 23:13:21 +02:00
use {
2023-02-13 18:39:45 +01:00
r3vi::{
view::{
OuterViewPort,
singleton::*,
port::UpdateTask
2023-02-13 18:39:45 +01:00
},
buffer::singleton::*
},
laddertypes::{TypeTerm},
2022-06-19 23:13:21 +02:00
crate::{
repr_tree::{Context, ReprTree, ReprLeaf, ReprTreeExt, GenericReprTreeMorphism},
2024-01-07 20:04:23 +01:00
edit_tree::{EditTree, TreeNavResult},
2023-11-24 21:26:17 +01:00
editors::ObjCommander,
2022-06-19 23:13:21 +02:00
},
std::sync::Arc,
std::sync::RwLock
2022-06-19 23:13:21 +02:00
};
2024-11-16 22:21:41 +01:00
pub mod ctx;
pub use crate::editors::char::ctx::init_ctx;
2022-06-19 23:13:21 +02:00
pub struct CharEditor {
ctx: Arc<RwLock<Context>>,
data: SingletonBuffer<char>
2022-06-19 23:13:21 +02:00
}
impl ObjCommander for CharEditor {
2023-02-24 19:26:46 +01:00
fn send_cmd_obj(&mut self, cmd_obj: Arc<RwLock<ReprTree>>) -> TreeNavResult {
let cmd_obj = cmd_obj.read().unwrap();
let cmd_type = cmd_obj.get_type().clone();
2022-12-19 11:26:07 +01:00
if cmd_type == Context::parse(&self.ctx, "Char") {
if let Some(cmd_view) = cmd_obj.get_view::<dyn SingletonView<Item = char>>() {
let value = cmd_view.get();
2023-05-19 11:26:05 +02:00
if self.ctx.read().unwrap().meta_chars.contains(&value) {
TreeNavResult::Exit
} else {
self.data.set(value);
2023-05-19 11:26:05 +02:00
TreeNavResult::Continue
}
} else {
TreeNavResult::Exit
}
2023-05-19 11:26:05 +02:00
} else {
2023-11-24 21:26:17 +01:00
TreeNavResult::Exit
}
}
}
2022-06-19 23:13:21 +02:00
impl CharEditor {
pub fn new(ctx: Arc<RwLock<Context>>) -> Self {
2022-06-19 23:13:21 +02:00
CharEditor {
ctx,
data: SingletonBuffer::new('\0')
2022-06-19 23:13:21 +02:00
}
}
pub fn get_port(&self) -> OuterViewPort<dyn SingletonView<Item = char>> {
2022-06-19 23:13:21 +02:00
self.data.get_port()
}
2022-08-12 18:57:40 +02:00
pub fn get(&self) -> char {
self.get_port().get_view().unwrap().get()
2022-08-12 18:57:40 +02:00
}
2022-06-19 23:13:21 +02:00
2024-01-06 17:04:15 +01:00
pub fn new_edit_tree(
ctx0: Arc<RwLock<Context>>,
data: SingletonBuffer<char>,
2024-01-06 17:04:15 +01:00
depth: OuterViewPort<dyn SingletonView<Item = usize>>
2024-01-07 20:04:23 +01:00
) -> EditTree {
//let data = SingletonBuffer::new('\0');
let ctx = ctx0.clone();
let editor = Arc::new(RwLock::new(CharEditor{ ctx, data: data.clone() }));
2024-01-07 20:04:23 +01:00
EditTree::new(
ctx0.clone(),
depth
)
.set_cmd( editor.clone() )
.set_editor( editor.clone() )
2022-06-19 23:13:21 +02:00
}
}