add clear method

This commit is contained in:
daa84 2016-03-29 12:22:16 +03:00
parent d52311cafa
commit ffed15e697
3 changed files with 30 additions and 5 deletions

View File

@ -15,6 +15,8 @@ pub trait RedrawEvents {
fn on_cursor_goto(&mut self, row: u64, col: u64);
fn on_put(&mut self, text: &str);
fn on_clear(&mut self);
}
macro_rules! try_str {
@ -84,26 +86,33 @@ fn nvim_cb(ui: &SharedUi, method: &str, params: Vec<Value>) {
fn call(ui: &SharedUi, method: &str, args: Vec<Value>) {
match method {
"cursor_goto" => {
safe_call(ui.clone(), move |ui| {
safe_call(ui, move |ui| {
ui.borrow_mut().on_cursor_goto(try_int!(args[0]), try_int!(args[1]));
Ok(())
})
},
}
"put" => {
safe_call(ui.clone(), move |ui| {
safe_call(ui, move |ui| {
ui.borrow_mut().on_put(try_str!(args[0]));
Ok(())
})
}
"clear" => {
safe_call(ui, move |ui| {
ui.borrow_mut().on_clear();
Ok(())
})
}
_ => println!("Event {}", method),
};
}
fn safe_call<F>(mutex: SharedUi, cb: F)
fn safe_call<F>(ui: &SharedUi, cb: F)
where F: Fn(&UiMutex<Ui>) -> result::Result<(), String> + 'static + Send
{
let sent_ui = ui.clone();
glib::idle_add(move || {
if let Err(msg) = cb(&*mutex) {
if let Err(msg) = cb(&*sent_ui) {
println!("Error call function: {}", msg);
}
glib::Continue(false)

View File

@ -86,5 +86,9 @@ impl RedrawEvents for Ui {
fn on_put(&mut self, text: &str) {
self.model.put(text);
}
fn on_clear(&mut self) {
self.model.clear();
}
}

View File

@ -6,6 +6,10 @@ impl Cell {
pub fn new(ch: char) -> Cell {
Cell { ch: ch }
}
fn clear(&mut self) {
self.ch = ' ';
}
}
pub struct UiModel {
@ -48,4 +52,12 @@ impl UiModel {
self.model[self.cur_row][self.cur_col].ch = text.chars().last().unwrap();
self.cur_col += 1;
}
pub fn clear(&mut self) {
for row in 0..self.rows {
for col in 0..self.columns {
self.model[row][col].clear();
}
}
}
}