fn display(&self) -> ColouredString;
fn to_text(&self) -> String;
- fn from_text(text: &str) -> Self;
+ fn update(&mut self, text: &str);
}
impl EditableMenuLineData for String {
fn to_text(&self) -> String {
self.clone()
}
- fn from_text(text: &str) -> Self {
- text.to_owned()
+ fn update(&mut self, text: &str) {
+ *self = text.to_owned();
}
}
}
}
- fn from_text(text: &str) -> Self {
+ fn update(&mut self, text: &str) {
match text {
- "" => None,
- text => Some(text.to_owned()),
+ "" => *self = None,
+ text => *self = Some(text.to_owned()),
}
}
}
pub fn handle_keypress(&mut self, key: OurKey) -> bool {
let (consumed, done) = if let Some(ref mut editor) = self.editor {
if editor.handle_keypress(key) {
- self.data = Data::from_text(editor.borrow_text());
+ self.data.update(editor.borrow_text());
self.menuline = Self::make_menuline(
self.key,
&self.description,
pub fn is_editing(&self) -> bool {
self.editor.is_some()
}
- pub fn set_data(&mut self, data: Data) {
- self.data = data;
+ pub fn set_text(&mut self, text: &str) {
+ self.data.update(text);
self.menuline =
Self::make_menuline(self.key, &self.description, &self.data);
}
self.0.as_slice().join(",")
}
- fn from_text(text: &str) -> Self {
- Self(
+ fn update(&mut self, text: &str) {
+ *self = Self(
text.split(|c| c == ' ' || c == ',')
.filter(|s| !s.is_empty())
.map(|s| s.to_owned())