cosmic/widget/dropdown/
mod.rs

1// Copyright 2023 System76 <info@system76.com>
2// Copyright 2019 Héctor Ramón, Iced contributors
3// SPDX-License-Identifier: MPL-2.0 AND MIT
4
5//! Displays a list of options in a popover menu on select.
6
7use std::borrow::Cow;
8
9pub mod menu;
10use iced_core::window;
11pub use menu::Menu;
12
13pub mod multi;
14
15mod widget;
16pub use widget::*;
17
18use crate::surface;
19
20/// Displays a list of options in a popover menu on select.
21pub fn dropdown<
22    'a,
23    S: AsRef<str> + std::clone::Clone + Send + Sync + 'static,
24    Message: 'static + Clone,
25>(
26    selections: impl Into<Cow<'a, [S]>>,
27    selected: Option<usize>,
28    on_selected: impl Fn(usize) -> Message + Send + Sync + 'static,
29) -> Dropdown<'a, S, Message, Message> {
30    Dropdown::new(selections.into(), selected, on_selected)
31}
32
33/// Displays a list of options in a popover menu on select.
34/// AppMessage must be the App's toplevel message.
35pub fn popup_dropdown<
36    'a,
37    S: AsRef<str> + std::clone::Clone + Send + Sync + 'static,
38    Message: 'static + Clone,
39    AppMessage: 'static + Clone,
40>(
41    selections: impl Into<Cow<'a, [S]>>,
42    selected: Option<usize>,
43    on_selected: impl Fn(usize) -> Message + Send + Sync + 'static,
44    _parent_id: window::Id,
45    _on_surface_action: impl Fn(surface::Action) -> Message + Send + Sync + 'static,
46    _map_action: impl Fn(Message) -> AppMessage + Send + Sync + 'static,
47) -> Dropdown<'a, S, Message, AppMessage> {
48    let dropdown: Dropdown<'_, S, Message, AppMessage> =
49        Dropdown::new(selections.into(), selected, on_selected);
50
51    #[cfg(all(feature = "winit", feature = "wayland"))]
52    let dropdown = dropdown.with_popup(_parent_id, _on_surface_action, _map_action);
53
54    dropdown
55}