iced_runtime/widget/
operation.rs1use crate::core::widget::Id;
3use crate::core::widget::operation;
4use crate::task;
5use crate::{Action, Task};
6
7pub use crate::core::widget::operation::focusable::FocusDirection;
8pub use crate::core::widget::operation::scrollable::{
9 AbsoluteOffset, EnsureVisibleConfig, RelativeOffset, ScrollAnimation,
10};
11
12pub fn snap_to<T>(id: impl Into<Id>, offset: impl Into<RelativeOffset<Option<f32>>>) -> Task<T> {
14 task::effect(Action::widget(operation::scrollable::snap_to(
15 id.into(),
16 offset.into(),
17 )))
18}
19
20pub fn snap_to_end<T>(id: impl Into<Id>) -> Task<T> {
22 task::effect(Action::widget(operation::scrollable::snap_to(
23 id.into(),
24 RelativeOffset::END.into(),
25 )))
26}
27
28pub fn scroll_to<T>(id: impl Into<Id>, offset: impl Into<AbsoluteOffset<Option<f32>>>) -> Task<T> {
30 task::effect(Action::widget(operation::scrollable::scroll_to(
31 id.into(),
32 offset.into(),
33 )))
34}
35
36pub fn scroll_by<T>(id: impl Into<Id>, offset: AbsoluteOffset) -> Task<T> {
38 task::effect(Action::widget(operation::scrollable::scroll_by(
39 id.into(),
40 offset,
41 )))
42}
43
44pub fn ensure_focused_visible<T: Send + 'static>(config: EnsureVisibleConfig) -> Task<T> {
65 task::effect(Action::widget(
66 operation::scrollable::ensure_focused_visible_op(config),
67 ))
68}
69
70pub fn focus_previous<T>() -> Task<T> {
72 task::effect(Action::widget(operation::focusable::focus_previous()))
73}
74
75pub fn focus_next<T>() -> Task<T> {
77 task::effect(Action::widget(operation::focusable::focus_next()))
78}
79
80pub fn focus_direction<T>(direction: FocusDirection) -> Task<T> {
86 task::effect(Action::widget(operation::focusable::focus_directional(
87 direction,
88 )))
89}
90
91pub fn focus_direction_no_wrap<T>(direction: FocusDirection) -> Task<T> {
95 task::effect(Action::widget(
96 operation::focusable::focus_directional_no_wrap(direction),
97 ))
98}
99
100pub fn focus_auto<T>() -> Task<T> {
106 task::effect(Action::widget(operation::auto_focusable::focus_auto()))
107}
108
109pub fn press_focused<T>() -> Task<T> {
116 task::effect(Action::widget(operation::focusable::press_focused()))
117}
118
119pub fn is_focused(id: impl Into<Id>) -> Task<bool> {
121 task::widget(operation::focusable::is_focused(id.into()))
122}
123
124pub fn focus<T>(id: impl Into<Id>) -> Task<T> {
126 task::effect(Action::widget(operation::focusable::focus(id.into())))
127}
128
129pub fn unfocus<T>() -> Task<T> {
131 task::effect(Action::widget(operation::focusable::unfocus()))
132}
133
134pub fn move_cursor_to_end<T>(id: impl Into<Id>) -> Task<T> {
136 task::effect(Action::widget(operation::text_input::move_cursor_to_end(
137 id.into(),
138 )))
139}
140
141pub fn move_cursor_to_front<T>(id: impl Into<Id>) -> Task<T> {
143 task::effect(Action::widget(operation::text_input::move_cursor_to_front(
144 id.into(),
145 )))
146}
147
148pub fn move_cursor_to<T>(id: impl Into<Id>, position: usize) -> Task<T> {
150 task::effect(Action::widget(operation::text_input::move_cursor_to(
151 id.into(),
152 position,
153 )))
154}
155
156pub fn select_all<T>(id: impl Into<Id>) -> Task<T> {
158 task::effect(Action::widget(operation::text_input::select_all(id.into())))
159}
160
161pub fn select_range<T>(id: impl Into<Id>, start: usize, end: usize) -> Task<T> {
163 task::effect(Action::widget(operation::text_input::select_range(
164 id.into(),
165 start,
166 end,
167 )))
168}