ListCmd
This commit is contained in:
parent
b97ba8dedb
commit
6532065928
3 changed files with 66 additions and 23 deletions
|
@ -1,41 +1,80 @@
|
|||
|
||||
use {
|
||||
r3vi::{
|
||||
view::{singleton::*},
|
||||
buffer::{singleton::*}
|
||||
},
|
||||
crate::{
|
||||
editors::list::ListEditor
|
||||
editors::list::ListEditor,
|
||||
type_system::{Context, ReprTree},
|
||||
tree::{NestedNode, TreeNav, TreeNavResult, TreeCursor},
|
||||
commander::{ObjCommander}
|
||||
},
|
||||
std::sync::{Arc, RwLock}
|
||||
};
|
||||
|
||||
pub enum ListEditorCmd {
|
||||
ItemCmd(Arc<RwLock<ReprTree>>)
|
||||
#[derive(Copy, Clone, PartialEq, Eq)]
|
||||
pub enum ListCmd {
|
||||
DeletePxev,
|
||||
DeleteNexd,
|
||||
JoinNexd,
|
||||
JoinPxev,
|
||||
Split,
|
||||
Join
|
||||
Clear,
|
||||
Close,
|
||||
}
|
||||
|
||||
impl ListCmd {
|
||||
fn into_repr_tree(self, ctx: &Arc<RwLock<Context>>) -> Arc<RwLock<ReprTree>> {
|
||||
let buf = r3vi::buffer::singleton::SingletonBuffer::new(self);
|
||||
ReprTree::new_leaf(
|
||||
(ctx, "( ListCmd )"),
|
||||
buf.get_port().into()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
impl ObjCommander for ListEditor {
|
||||
fn send_cmd_obj(&mut self, cmd_obj: Arc<RwLock<ReprTree>>) {
|
||||
let cmd_repr = cmd_obj.read().unrwap();
|
||||
|
||||
if let Some(cmd) = cmd_repr.get_view<dyn SingletonView<ListEditorCmd>>() {
|
||||
fn send_cmd_obj(&mut self, cmd_obj: Arc<RwLock<ReprTree>>) -> TreeNavResult {
|
||||
let cmd_repr = cmd_obj.read().unwrap();
|
||||
if let Some(cmd) = cmd_repr.get_view::<dyn SingletonView<Item = ListCmd>>() {
|
||||
match cmd.get() {
|
||||
ListEditorCmd::Split => {
|
||||
|
||||
ListCmd::DeletePxev => {
|
||||
self.delete_pxev();
|
||||
TreeNavResult::Continue
|
||||
}
|
||||
ListEditorCmd::Join => {
|
||||
|
||||
ListCmd::DeleteNexd => {
|
||||
self.delete_nexd();
|
||||
TreeNavResult::Continue
|
||||
}
|
||||
ListEditorCmd::ItemCmd => {
|
||||
if let Some(cur_item) = self.get_item_mut() {
|
||||
drop(cmd);
|
||||
drop(cmd_repr);
|
||||
cur_item.send_cmd_obj(cmd_obj);
|
||||
ListCmd::JoinPxev => {
|
||||
// TODO
|
||||
//self.listlist_join_pxev();
|
||||
TreeNavResult::Continue
|
||||
}
|
||||
ListCmd::JoinNexd => {
|
||||
// TODO
|
||||
//self.listlist_join_nexd();
|
||||
TreeNavResult::Continue
|
||||
}
|
||||
ListCmd::Split => {
|
||||
self.listlist_split();
|
||||
TreeNavResult::Continue
|
||||
}
|
||||
ListCmd::Clear => {
|
||||
self.clear();
|
||||
TreeNavResult::Continue
|
||||
}
|
||||
ListCmd::Close => {
|
||||
self.goto(TreeCursor::none());
|
||||
TreeNavResult::Exit
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if let Some(cur_item) = self.get_item_mut() {
|
||||
drop(cmd_repr);
|
||||
cur_item.send_cmd_obj(cmd_obj);
|
||||
cur_item.write().unwrap().send_cmd_obj(cmd_obj)
|
||||
} else {
|
||||
TreeNavResult::Continue
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ use {
|
|||
},
|
||||
crate::{
|
||||
type_system::{Context, TypeTerm, ReprTree},
|
||||
editors::list::{ListCursor, ListCursorMode, PTYListController, PTYListStyle},
|
||||
editors::list::{ListCursor, ListCursorMode, commander::ListCmd, PTYListController, PTYListStyle},
|
||||
tree::{NestedNode, TreeNav, TreeCursor},
|
||||
diagnostics::Diagnostics
|
||||
},
|
||||
|
@ -31,6 +31,8 @@ impl ListEditor {
|
|||
pub fn init_ctx(ctx: &Arc<RwLock<Context>>) {
|
||||
let mut ctx = ctx.write().unwrap();
|
||||
|
||||
ctx.add_list_typename("ListCmd".into());
|
||||
|
||||
ctx.add_list_typename("List".into());
|
||||
ctx.add_node_ctor(
|
||||
"List", Arc::new(
|
||||
|
@ -131,7 +133,7 @@ impl ListEditor {
|
|||
.set_data(data)
|
||||
.set_editor(editor.clone())
|
||||
.set_nav(editor.clone())
|
||||
//.set_cmd(editor.clone())
|
||||
.set_cmd(editor.clone())
|
||||
.set_diag(e
|
||||
.get_data_port()
|
||||
.enumerate()
|
||||
|
|
|
@ -5,11 +5,13 @@ pub mod editor;
|
|||
pub mod nav;
|
||||
pub mod segment;
|
||||
pub mod pty_editor;
|
||||
pub mod commander;
|
||||
|
||||
pub use {
|
||||
cursor::{ListCursor, ListCursorMode},
|
||||
editor::ListEditor,
|
||||
segment::{ListSegment, ListSegmentSequence},
|
||||
pty_editor::{PTYListStyle, PTYListController}
|
||||
pty_editor::{PTYListStyle, PTYListController},
|
||||
commander::ListCmd
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue