parent
d037f074dc
commit
5f39b99fe4
2 changed files with 48 additions and 0 deletions
|
|
@ -332,6 +332,8 @@ pub struct ListStory {
|
||||||
focus_handle: FocusHandle,
|
focus_handle: FocusHandle,
|
||||||
company_list: Entity<ListState<CompanyListDelegate>>,
|
company_list: Entity<ListState<CompanyListDelegate>>,
|
||||||
selected_company: Option<Rc<Company>>,
|
selected_company: Option<Rc<Company>>,
|
||||||
|
selectable: bool,
|
||||||
|
searchable: bool,
|
||||||
_subscriptions: Vec<Subscription>,
|
_subscriptions: Vec<Subscription>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -408,6 +410,8 @@ impl ListStory {
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
focus_handle: cx.focus_handle(),
|
focus_handle: cx.focus_handle(),
|
||||||
|
searchable: true,
|
||||||
|
selectable: true,
|
||||||
company_list,
|
company_list,
|
||||||
selected_company: None,
|
selected_company: None,
|
||||||
_subscriptions,
|
_subscriptions,
|
||||||
|
|
@ -420,6 +424,20 @@ impl ListStory {
|
||||||
self.selected_company = Some(company);
|
self.selected_company = Some(company);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn toggle_selectable(&mut self, selectable: bool, _: &mut Window, cx: &mut Context<Self>) {
|
||||||
|
self.selectable = selectable;
|
||||||
|
self.company_list.update(cx, |list, cx| {
|
||||||
|
list.set_selectable(self.selectable, cx);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
fn toggle_searchable(&mut self, searchable: bool, _: &mut Window, cx: &mut Context<Self>) {
|
||||||
|
self.searchable = searchable;
|
||||||
|
self.company_list.update(cx, |list, cx| {
|
||||||
|
list.set_searchable(self.searchable, cx);
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn random_company() -> Company {
|
fn random_company() -> Company {
|
||||||
|
|
@ -522,6 +540,22 @@ impl Render for ListStory {
|
||||||
})
|
})
|
||||||
})),
|
})),
|
||||||
)
|
)
|
||||||
|
.child(
|
||||||
|
Checkbox::new("selectable")
|
||||||
|
.label("Selectable")
|
||||||
|
.checked(self.selectable)
|
||||||
|
.on_click(cx.listener(|this, check: &bool, window, cx| {
|
||||||
|
this.toggle_selectable(*check, window, cx)
|
||||||
|
})),
|
||||||
|
)
|
||||||
|
.child(
|
||||||
|
Checkbox::new("searchable")
|
||||||
|
.label("Searchable")
|
||||||
|
.checked(self.searchable)
|
||||||
|
.on_click(cx.listener(|this, check: &bool, window, cx| {
|
||||||
|
this.toggle_searchable(*check, window, cx)
|
||||||
|
})),
|
||||||
|
)
|
||||||
.child(
|
.child(
|
||||||
Checkbox::new("loading")
|
Checkbox::new("loading")
|
||||||
.label("Loading")
|
.label("Loading")
|
||||||
|
|
|
||||||
|
|
@ -138,6 +138,12 @@ where
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Sets whether the list is selectable, default is true.
|
||||||
|
pub fn set_selectable(&mut self, selectable: bool, cx: &mut Context<Self>) {
|
||||||
|
self.selectable = selectable;
|
||||||
|
cx.notify();
|
||||||
|
}
|
||||||
|
|
||||||
pub fn delegate(&self) -> &D {
|
pub fn delegate(&self) -> &D {
|
||||||
&self.delegate
|
&self.delegate
|
||||||
}
|
}
|
||||||
|
|
@ -163,6 +169,10 @@ where
|
||||||
window: &mut Window,
|
window: &mut Window,
|
||||||
cx: &mut Context<Self>,
|
cx: &mut Context<Self>,
|
||||||
) {
|
) {
|
||||||
|
if !self.selectable {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
self.selected_index = ix;
|
self.selected_index = ix;
|
||||||
self.delegate.set_selected_index(ix, window, cx);
|
self.delegate.set_selected_index(ix, window, cx);
|
||||||
self.scroll_to_selected_item(window, cx);
|
self.scroll_to_selected_item(window, cx);
|
||||||
|
|
@ -347,6 +357,10 @@ where
|
||||||
}
|
}
|
||||||
|
|
||||||
fn select_item(&mut self, ix: IndexPath, window: &mut Window, cx: &mut Context<Self>) {
|
fn select_item(&mut self, ix: IndexPath, window: &mut Window, cx: &mut Context<Self>) {
|
||||||
|
if !self.selectable {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
self.selected_index = Some(ix);
|
self.selected_index = Some(ix);
|
||||||
self.delegate.set_selected_index(Some(ix), window, cx);
|
self.delegate.set_selected_index(Some(ix), window, cx);
|
||||||
self.scroll_to_selected_item(window, cx);
|
self.scroll_to_selected_item(window, cx);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue