diff --git a/src/commands.rs b/src/commands.rs index b04e893..c8e7408 100644 --- a/src/commands.rs +++ b/src/commands.rs @@ -109,8 +109,6 @@ impl CommandManager { s.call_on_id("search", |v: &mut SearchView| { if args.len() >= 1 { v.run_search(args.join(" "), spotify.clone()); - } else { - v.focus_search(); } }); Ok(None) @@ -241,7 +239,7 @@ impl CommandManager { { let queue = queue.clone(); s.call_on_id("queue_list", |v: &mut ListView| { - v.get_selected_index().map(|i| queue.play(i)); + queue.play(v.get_selected_index()); }); } @@ -290,7 +288,7 @@ impl CommandManager { { let queue = queue.clone(); s.call_on_id("queue_list", |v: &mut ListView| { - v.get_selected_index().map(|i| queue.remove(i)); + queue.remove(v.get_selected_index()); }); } diff --git a/src/ui/listview.rs b/src/ui/listview.rs index dae9424..de3d52b 100644 --- a/src/ui/listview.rs +++ b/src/ui/listview.rs @@ -13,7 +13,7 @@ use traits::ListItem; pub struct ListView { content: Arc>>, - selected: Option, + selected: usize, queue: Arc, } @@ -21,46 +21,33 @@ impl ListView { pub fn new(content: Arc>>, queue: Arc) -> Self { Self { content: content, - selected: None, + selected: 0, queue: queue, } } pub fn with_selected(&self, cb: Box ()>) { - if let Some(i) = self.selected { - if let Some(x) = self.content.read().unwrap().get(i) { - cb(x); - } + match self.content.read().unwrap().get(self.selected) { + Some(x) => cb(x), + None => error!("listview: invalid item index: {})", self.selected) } } - pub fn get_selected_index(&self) -> Option { + pub fn get_selected_index(&self) -> usize { self.selected } pub fn move_focus(&mut self, delta: i32) { let len = self.content.read().unwrap().len() as i32; - - let new = if let Some(i) = self.selected { - i as i32 - } else { - if delta < 0 { - len - } else { - -1 - } - }; - - let new = min(max(new + delta, 0), len - 1); - - self.selected = Some(new as usize); + let new = self.selected as i32 + delta; + self.selected = min(max(new, 0), len - 1) as usize; } } impl View for ListView { fn draw(&self, printer: &Printer<'_, '_>) { for (i, item) in self.content.read().unwrap().iter().enumerate() { - let style = if self.selected.is_some() && self.selected.unwrap_or(0) == i { + let style = if self.selected == i { ColorStyle::highlight() } else if item.is_playing(self.queue.clone()) { ColorStyle::secondary() @@ -121,9 +108,11 @@ impl View for ListView { } fn important_area(&self, view_size: Vec2) -> Rect { - match self.selected { - Some(index) => Rect::from((view_size.x, index)), - None => Rect::from((0, 0)), + if self.content.read().unwrap().len() > 0 { + Rect::from((view_size.x, self.selected)) + } + else { + Rect::from((0, 0)) } } } diff --git a/src/ui/search.rs b/src/ui/search.rs index 8ef29f3..147481d 100644 --- a/src/ui/search.rs +++ b/src/ui/search.rs @@ -42,7 +42,7 @@ impl SearchView { results: results, edit: searchfield, list: scrollable, - edit_focused: false, + edit_focused: true, } } @@ -67,14 +67,6 @@ impl SearchView { } } - pub fn focus_search(&mut self) { - self.edit - .call_on(&Selector::Id("search_edit"), |v: &mut EditView| { - v.set_content(""); - }); - self.edit_focused = true; - } - fn pass_event_focused(&mut self, event: Event) -> EventResult { match self.edit_focused { true => self.edit.on_event(event),