select first item in listviews initially
This commit is contained in:
@@ -109,8 +109,6 @@ impl CommandManager {
|
|||||||
s.call_on_id("search", |v: &mut SearchView| {
|
s.call_on_id("search", |v: &mut SearchView| {
|
||||||
if args.len() >= 1 {
|
if args.len() >= 1 {
|
||||||
v.run_search(args.join(" "), spotify.clone());
|
v.run_search(args.join(" "), spotify.clone());
|
||||||
} else {
|
|
||||||
v.focus_search();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
Ok(None)
|
Ok(None)
|
||||||
@@ -241,7 +239,7 @@ impl CommandManager {
|
|||||||
{
|
{
|
||||||
let queue = queue.clone();
|
let queue = queue.clone();
|
||||||
s.call_on_id("queue_list", |v: &mut ListView<Track>| {
|
s.call_on_id("queue_list", |v: &mut ListView<Track>| {
|
||||||
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();
|
let queue = queue.clone();
|
||||||
s.call_on_id("queue_list", |v: &mut ListView<Track>| {
|
s.call_on_id("queue_list", |v: &mut ListView<Track>| {
|
||||||
v.get_selected_index().map(|i| queue.remove(i));
|
queue.remove(v.get_selected_index());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ use traits::ListItem;
|
|||||||
|
|
||||||
pub struct ListView<I: 'static + ListItem> {
|
pub struct ListView<I: 'static + ListItem> {
|
||||||
content: Arc<RwLock<Vec<I>>>,
|
content: Arc<RwLock<Vec<I>>>,
|
||||||
selected: Option<usize>,
|
selected: usize,
|
||||||
queue: Arc<Queue>,
|
queue: Arc<Queue>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -21,46 +21,33 @@ impl<I: ListItem> ListView<I> {
|
|||||||
pub fn new(content: Arc<RwLock<Vec<I>>>, queue: Arc<Queue>) -> Self {
|
pub fn new(content: Arc<RwLock<Vec<I>>>, queue: Arc<Queue>) -> Self {
|
||||||
Self {
|
Self {
|
||||||
content: content,
|
content: content,
|
||||||
selected: None,
|
selected: 0,
|
||||||
queue: queue,
|
queue: queue,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn with_selected(&self, cb: Box<Fn(&I) -> ()>) {
|
pub fn with_selected(&self, cb: Box<Fn(&I) -> ()>) {
|
||||||
if let Some(i) = self.selected {
|
match self.content.read().unwrap().get(self.selected) {
|
||||||
if let Some(x) = self.content.read().unwrap().get(i) {
|
Some(x) => cb(x),
|
||||||
cb(x);
|
None => error!("listview: invalid item index: {})", self.selected)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_selected_index(&self) -> Option<usize> {
|
pub fn get_selected_index(&self) -> usize {
|
||||||
self.selected
|
self.selected
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn move_focus(&mut self, delta: i32) {
|
pub fn move_focus(&mut self, delta: i32) {
|
||||||
let len = self.content.read().unwrap().len() as i32;
|
let len = self.content.read().unwrap().len() as i32;
|
||||||
|
let new = self.selected as i32 + delta;
|
||||||
let new = if let Some(i) = self.selected {
|
self.selected = min(max(new, 0), len - 1) as usize;
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<I: ListItem> View for ListView<I> {
|
impl<I: ListItem> View for ListView<I> {
|
||||||
fn draw(&self, printer: &Printer<'_, '_>) {
|
fn draw(&self, printer: &Printer<'_, '_>) {
|
||||||
for (i, item) in self.content.read().unwrap().iter().enumerate() {
|
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()
|
ColorStyle::highlight()
|
||||||
} else if item.is_playing(self.queue.clone()) {
|
} else if item.is_playing(self.queue.clone()) {
|
||||||
ColorStyle::secondary()
|
ColorStyle::secondary()
|
||||||
@@ -121,9 +108,11 @@ impl<I: ListItem> View for ListView<I> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn important_area(&self, view_size: Vec2) -> Rect {
|
fn important_area(&self, view_size: Vec2) -> Rect {
|
||||||
match self.selected {
|
if self.content.read().unwrap().len() > 0 {
|
||||||
Some(index) => Rect::from((view_size.x, index)),
|
Rect::from((view_size.x, self.selected))
|
||||||
None => Rect::from((0, 0)),
|
}
|
||||||
|
else {
|
||||||
|
Rect::from((0, 0))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ impl SearchView {
|
|||||||
results: results,
|
results: results,
|
||||||
edit: searchfield,
|
edit: searchfield,
|
||||||
list: scrollable,
|
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 {
|
fn pass_event_focused(&mut self, event: Event) -> EventResult {
|
||||||
match self.edit_focused {
|
match self.edit_focused {
|
||||||
true => self.edit.on_event(event),
|
true => self.edit.on_event(event),
|
||||||
|
|||||||
Reference in New Issue
Block a user