pub struct ListBox<D: Display + Default> {
pub handle: ControlHandle,
/* private fields */
}
Expand description
A list box is a control window that contains a simple list of items from which the user can choose.
Requires the list-box
feature.
Builder parameters:
parent
: Required. The listbox parent container.size
: The listbox size.position
: The listbox position.enabled
: If the listbox can be used by the user. It also has a grayed out look if disabled.focus
: The control receive focus after being createdflags
: A combination of the ListBoxFlags values.ex_flags
: A combination of win32 window extended flags. Unlikeflags
, ex_flags must be used straight from winapifont
: The font used for the listbox textcollection
: The default collections of the listboxselected_index
: The default selected index in the listbox collectionmulti_selection
: The collections of indices to set as selected in a multi selection listbox
Control events:
OnListBoxSelect
: When the current listbox selection is changedOnListBoxDoubleClick
: When a listbox item is clicked twice rapidlyMousePress(_)
: Generic mouse press events on the listboxOnMouseMove
: Generic mouse mouse eventOnMouseWheel
: Generic mouse wheel event
use native_windows_gui as nwg;
fn build_listbox(listb: &mut nwg::ListBox<&'static str>, window: &nwg::Window, font: &nwg::Font) {
nwg::ListBox::builder()
.flags(nwg::ListBoxFlags::VISIBLE | nwg::ListBoxFlags::MULTI_SELECT)
.collection(vec!["Hello", "World", "!!!!"])
.multi_selection(vec![0, 1, 2])
.font(Some(font))
.parent(window)
.build(listb);
}
Fields§
§handle: ControlHandle
Implementations§
Source§impl<D: Display + Default> ListBox<D>
impl<D: Display + Default> ListBox<D>
Sourcepub fn builder<'a>() -> ListBoxBuilder<'a, D>
pub fn builder<'a>() -> ListBoxBuilder<'a, D>
Examples found in repository?
132 fn build_ui(mut data: PartialDemo) -> Result<Rc<PartialDemoUi>, nwg::NwgError> {
133 use nwg::Event as E;
134
135 // Controls
136 nwg::Window::builder()
137 .size((500, 400))
138 .position((300, 300))
139 .title("Many UI")
140 .build(&mut data.window)?;
141
142 nwg::ListBox::builder()
143 .collection(vec!["People", "Animals", "Food"])
144 .focus(true)
145 .parent(&data.window)
146 .build(&mut data.menu)?;
147
148 nwg::Frame::builder()
149 .parent(&data.window)
150 .build(&mut data.frame1)?;
151
152 nwg::Frame::builder()
153 .flags(nwg::FrameFlags::BORDER)
154 .parent(&data.window)
155 .build(&mut data.frame2)?;
156
157 nwg::Frame::builder()
158 .flags(nwg::FrameFlags::BORDER)
159 .parent(&data.window)
160 .build(&mut data.frame3)?;
161
162 // Partials
163 PeopleUi::build_partial(&mut data.people_ui, Some(&data.frame1))?;
164 AnimalUi::build_partial(&mut data.animal_ui, Some(&data.frame2))?;
165 FoodUi::build_partial(&mut data.food_ui, Some(&data.frame3))?;
166
167 // Wrap-up
168 let ui = Rc::new(PartialDemoUi {
169 inner: data,
170 default_handler: Default::default()
171 });
172
173 // Events
174 let mut window_handles = vec![&ui.window.handle];
175 window_handles.append(&mut ui.people_ui.handles());
176 window_handles.append(&mut ui.animal_ui.handles());
177 window_handles.append(&mut ui.food_ui.handles());
178
179 for handle in window_handles.iter() {
180 let evt_ui = ui.clone();
181 let handle_events = move |evt, evt_data, handle| {
182 evt_ui.people_ui.process_event(evt, &evt_data, handle);
183 evt_ui.animal_ui.process_event(evt, &evt_data, handle);
184 evt_ui.food_ui.process_event(evt, &evt_data, handle);
185
186 match evt {
187 E::OnListBoxSelect =>
188 if &handle == &evt_ui.menu {
189 PartialDemo::change_interface(&evt_ui.inner);
190 },
191 E::OnWindowClose =>
192 if &handle == &evt_ui.window {
193 PartialDemo::exit(&evt_ui.inner);
194 },
195 E::OnButtonClick =>
196 if &handle == &evt_ui.people_ui.save_btn || &handle == &evt_ui.animal_ui.save_btn ||&handle == &evt_ui.food_ui.save_btn {
197 PartialDemo::save(&evt_ui.inner);
198 },
199 _ => {}
200 }
201 };
202
203 ui.default_handler.borrow_mut().push(
204 nwg::full_bind_event_handler(handle, handle_events)
205 );
206 }
207
208 // Layout
209 use nwg::stretch::{geometry::Size, style::Dimension as D};
210
211 nwg::FlexboxLayout::builder()
212 .parent(&ui.window)
213 .child(&ui.menu)
214 .child_size(Size { width: D::Percent(0.3), height: D::Auto })
215 .child(&ui.frame1)
216 .child_size(Size { width: D::Percent(1.0), height: D::Auto })
217 .build(&ui.layout)?;
218
219 return Ok(ui);
220 }
Sourcepub fn push(&self, item: D)
pub fn push(&self, item: D)
Add a new item to the listbox. Sort the collection if the listbox is sorted.
Sourcepub fn insert(&self, index: usize, item: D)
pub fn insert(&self, index: usize, item: D)
Insert an item in the collection and the control.
SPECIAL behaviour! If index is std::usize::MAX
, the item is added at the end of the collection.
The method will still panic if index > len
with every other values.
Sourcepub fn remove(&self, index: usize) -> D
pub fn remove(&self, index: usize) -> D
Remove the item at the selected index and returns it. Panic of the index is out of bounds
Sourcepub fn selection(&self) -> Option<usize>
pub fn selection(&self) -> Option<usize>
Return the index of the currencty selected item for single value list box.
Return None
if no item is selected.
Examples found in repository?
28 fn change_interface(&self) {
29 self.frame1.set_visible(false);
30 self.frame2.set_visible(false);
31 self.frame3.set_visible(false);
32
33 let layout = &self.layout;
34 if layout.has_child(&self.frame1) { layout.remove_child(&self.frame1); }
35 if layout.has_child(&self.frame2) { layout.remove_child(&self.frame2); }
36 if layout.has_child(&self.frame3) { layout.remove_child(&self.frame3); }
37
38 use nwg::stretch::{geometry::Size, style::{Style, Dimension as D}};
39 let mut style = Style::default();
40 style.size = Size { width: D::Percent(1.0), height: D::Auto };
41
42 match self.menu.selection() {
43 None | Some(0) => {
44 layout.add_child(&self.frame1, style).unwrap();
45 self.frame1.set_visible(true);
46 },
47 Some(1) => {
48 layout.add_child(&self.frame2, style).unwrap();
49 self.frame2.set_visible(true);
50 },
51 Some(2) => {
52 layout.add_child(&self.frame3, style).unwrap();
53 self.frame3.set_visible(true);
54 },
55 Some(_) => unreachable!()
56 }
57 }
Sourcepub fn multi_selection_len(&self) -> usize
pub fn multi_selection_len(&self) -> usize
Return the number of selected item in the list box Returns 0 for single select list box
Sourcepub fn multi_selection(&self) -> Vec<usize>
pub fn multi_selection(&self) -> Vec<usize>
Return a list index Returns an empty vector for single select list box.
Sourcepub fn selection_string(&self) -> Option<String>
pub fn selection_string(&self) -> Option<String>
Return the display value of the currenctly selected item for single value
Return None
if no item is selected. This reads the visual value.
Sourcepub fn set_selection(&self, index: Option<usize>)
pub fn set_selection(&self, index: Option<usize>)
Set the currently selected item in the list box for single value list box. Does nothing if the index is out of bound If the value is None, remove the selected value
Sourcepub fn multi_add_selection(&self, index: usize)
pub fn multi_add_selection(&self, index: usize)
Select the item as index index
in a multi item list box
Sourcepub fn multi_remove_selection(&self, index: usize)
pub fn multi_remove_selection(&self, index: usize)
Unselect the item as index index
in a multi item list box
Sourcepub fn unselect_all(&self)
pub fn unselect_all(&self)
Unselect every item in the list box
Sourcepub fn select_all(&self)
pub fn select_all(&self)
Select every item in the list box
Sourcepub fn multi_select_range(&self, range: Range<usize>)
pub fn multi_select_range(&self, range: Range<usize>)
Select a range of items in a multi list box
Sourcepub fn multi_unselect_range(&self, range: Range<usize>)
pub fn multi_unselect_range(&self, range: Range<usize>)
Unselect a range of items in a multi list box
Sourcepub fn set_selection_string(&self, value: &str) -> Option<usize>
pub fn set_selection_string(&self, value: &str) -> Option<usize>
Search an item that begins by the value and select the first one found. The search is not case sensitive, so this string can contain any combination of uppercase and lowercase letters. Return the index of the selected string or None if the search was not successful
Sourcepub fn selected(&self, index: usize) -> bool
pub fn selected(&self, index: usize) -> bool
Check if the item at index
is selected by the user
Return false
if the index is out of range.
Sourcepub fn sync(&self)
pub fn sync(&self)
Update the visual of the control with the inner collection. This rebuild every item in the list box and can take some time on big collections.
Sourcepub fn set_collection(&self, col: Vec<D>) -> Vec<D>
pub fn set_collection(&self, col: Vec<D>) -> Vec<D>
Set the item collection of the list box. Return the old collection
Sourcepub fn clear(&self)
pub fn clear(&self)
Clears the control and free the underlying collection. Same as set_collection(Vec::new())
Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Return the number of items in the control. NOT the inner rust collection
Sourcepub fn enabled(&self) -> bool
pub fn enabled(&self) -> bool
Return true if the control user can interact with the control, return false otherwise
Sourcepub fn set_enabled(&self, v: bool)
pub fn set_enabled(&self, v: bool)
Enable or disable the control
Sourcepub fn visible(&self) -> bool
pub fn visible(&self) -> bool
Return true if the control is visible to the user. Will return true even if the control is outside of the parent client view (ex: at the position (10000, 10000))
Sourcepub fn set_visible(&self, v: bool)
pub fn set_visible(&self, v: bool)
Show or hide the control to the user
Sourcepub fn set_position(&self, x: i32, y: i32)
pub fn set_position(&self, x: i32, y: i32)
Set the position of the button in the parent window
Sourcepub fn collection(&self) -> Ref<'_, Vec<D>>
pub fn collection(&self) -> Ref<'_, Vec<D>>
Get read-only access to the inner collection of the list box This call refcell.borrow under the hood. Be sure to drop the value before calling other list box methods
Sourcepub fn collection_mut(&self) -> RefMut<'_, Vec<D>>
pub fn collection_mut(&self) -> RefMut<'_, Vec<D>>
Get mutable access to the inner collection of the list box. Does not update the visual
control. Call sync
to update the view. This call refcell.borrow_mut under the hood.
Be sure to drop the value before calling other list box methods
Sourcepub fn class_name(&self) -> &'static str
pub fn class_name(&self) -> &'static str
Winapi class name used during control creation
Sourcepub fn forced_flags(&self) -> u32
pub fn forced_flags(&self) -> u32
Winapi flags required by the control