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 }