Warning, /sdk/rust-qt-binding-generator/examples/todos/rust/src/implementation.rs is written in an unsupported language. File is not indexed.

0001 use interface::*;
0002 
0003 #[derive(Default, Clone)]
0004 struct TodosItem {
0005     completed: bool,
0006     description: String,
0007 }
0008 
0009 pub struct Todos {
0010     emit: TodosEmitter,
0011     model: TodosList,
0012     list: Vec<TodosItem>,
0013     active_count: usize,
0014 }
0015 
0016 impl Todos {
0017     fn update_active_count(&mut self) {
0018         let ac = self.list.iter().filter(|i| !i.completed).count();
0019         if self.active_count != ac {
0020             self.active_count = ac;
0021             self.emit.active_count_changed();
0022         }
0023     }
0024 }
0025 
0026 impl TodosTrait for Todos {
0027     fn new(emit: TodosEmitter, model: TodosList) -> Todos {
0028         Todos {
0029             emit: emit,
0030             model: model,
0031             list: vec![TodosItem::default(); 0],
0032             active_count: 0,
0033         }
0034     }
0035     fn emit(&mut self) -> &mut TodosEmitter {
0036         &mut self.emit
0037     }
0038     fn active_count(&self) -> u64 {
0039         self.active_count as u64
0040     }
0041     fn count(&self) -> u64 {
0042         self.list.len() as u64
0043     }
0044     fn row_count(&self) -> usize {
0045         self.list.len()
0046     }
0047     fn completed(&self, index: usize) -> bool {
0048         if index >= self.list.len() {
0049             return false;
0050         }
0051         self.list[index].completed
0052     }
0053     fn set_completed(&mut self, index: usize, v: bool) -> bool {
0054         if index >= self.list.len() {
0055             return false;
0056         }
0057         self.list[index].completed = v;
0058         self.update_active_count();
0059         true
0060     }
0061     fn description(&self, index: usize) -> &str {
0062         if index < self.list.len() {
0063             &self.list[index].description
0064         } else {
0065             ""
0066         }
0067     }
0068     fn set_description(&mut self, index: usize, v: String) -> bool {
0069         if index >= self.list.len() {
0070             return false;
0071         }
0072         self.list[index].description = v;
0073         true
0074     }
0075     fn insert_rows(&mut self, row: usize, count: usize) -> bool {
0076         if count == 0 || row > self.list.len() {
0077             return false;
0078         }
0079         self.model.begin_insert_rows(row, row + count - 1);
0080         for i in 0..count {
0081             self.list.insert(row + i, TodosItem::default());
0082         }
0083         self.model.end_insert_rows();
0084         self.active_count += count;
0085         self.emit.active_count_changed();
0086         self.emit.count_changed();
0087         true
0088     }
0089     fn remove_rows(&mut self, row: usize, count: usize) -> bool {
0090         if count == 0 || row + count > self.list.len() {
0091             return false;
0092         }
0093         self.model.begin_remove_rows(row, row + count - 1);
0094         self.list.drain(row..row + count);
0095         self.model.end_remove_rows();
0096         self.emit.count_changed();
0097         self.update_active_count();
0098         true
0099     }
0100     fn clear_completed(&mut self) -> () {
0101         self.model.begin_reset_model();
0102         self.list.retain(|i| !i.completed);
0103         self.model.end_reset_model();
0104         self.emit.count_changed();
0105     }
0106     fn add(&mut self, description: String) {
0107         let end = self.list.len();
0108         self.model.begin_insert_rows(end, end);
0109         self.list.insert(end, TodosItem { completed: false, description });
0110         self.model.end_insert_rows();
0111         self.active_count += 1;
0112         self.emit.active_count_changed();
0113         self.emit.count_changed();
0114         self.model.begin_reset_model();
0115         self.model.end_reset_model();
0116     }
0117     fn remove(&mut self, index: u64) -> bool {
0118         self.remove_rows(index as usize, 1)
0119     }
0120     fn set_all(&mut self, completed: bool) {
0121         for i in &mut self.list {
0122             i.completed = completed;
0123         }
0124         self.model.data_changed(0, self.list.len() - 1);
0125         self.update_active_count();
0126     }
0127 }